diff options
Diffstat (limited to 'lib/netdev-linux.c')
-rw-r--r-- | lib/netdev-linux.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index fb46561b7..8329f2264 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -366,6 +366,7 @@ struct netdev_dev_linux { struct in6_addr in6; int mtu; bool carrier; + long long int carrier_resets; uint32_t kbits_rate; /* Policing data. */ uint32_t kbits_burst; bool have_vport_stats; @@ -505,6 +506,7 @@ netdev_linux_cache_cb(const struct rtnetlink_link_change *change, if (dev->carrier != change->running) { dev->carrier = change->running; + dev->carrier_resets++; } netdev_dev_linux_changed(dev); @@ -524,6 +526,7 @@ netdev_linux_cache_cb(const struct rtnetlink_link_change *change, get_carrier_via_sysfs(node->name, &carrier); if (dev->carrier != carrier) { dev->carrier = carrier; + dev->carrier_resets++; } netdev_dev_linux_changed(dev); @@ -1041,6 +1044,12 @@ netdev_linux_get_carrier(const struct netdev *netdev_, bool *carrier) return 0; } +static long long int +netdev_linux_get_carrier_resets(const struct netdev *netdev) +{ + return netdev_dev_linux_cast(netdev_get_dev(netdev))->carrier_resets; +} + static int netdev_linux_do_miimon(const char *name, int cmd, const char *cmd_name, struct mii_ioctl_data *data) @@ -2315,6 +2324,7 @@ netdev_linux_change_seq(const struct netdev *netdev) netdev_linux_set_mtu, \ netdev_linux_get_ifindex, \ netdev_linux_get_carrier, \ + netdev_linux_get_carrier_resets, \ netdev_linux_set_miimon_interval, \ GET_STATS, \ SET_STATS, \ |