X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fnetdev.c;h=b2c4d6637429dc912c412e77a74be59f06c93ec9;hb=782e6111668f5f4bccec2dc9328dc3a83f548fce;hp=0f22327172f8f50d30db676441ed834b509ec5c2;hpb=ea763e0e2828c35660310f8b7791781b17b30cbd;p=openvswitch diff --git a/lib/netdev.c b/lib/netdev.c index 0f223271..b2c4d663 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -935,6 +935,34 @@ netdev_get_carrier(const struct netdev *netdev) return carrier; } +/* Returns true if 'netdev' is up according to its MII. */ +bool +netdev_get_miimon(const struct netdev *netdev) +{ + int error; + enum netdev_flags flags; + bool miimon; + + netdev_get_flags(netdev, &flags); + if (!(flags & NETDEV_UP)) { + return false; + } + + if (!netdev_get_dev(netdev)->netdev_class->get_miimon) { + return true; + } + + error = netdev_get_dev(netdev)->netdev_class->get_miimon(netdev, &miimon); + + if (error) { + VLOG_DBG("%s: failed to get network device MII status, assuming " + "down: %s", netdev_get_name(netdev), strerror(error)); + miimon = false; + } + + return miimon; +} + /* Retrieves current device stats for 'netdev'. */ int netdev_get_stats(const struct netdev *netdev, struct netdev_stats *stats)