[ovs-dev] [PATCH v2] datapath-windows: netdev-windows fixes for vswitchd bringup.

Ankur Sharma ankursharma at vmware.com
Wed Oct 15 23:12:05 UTC 2014


Added the handlers for update_flags and set_etheraddr.
These handlers were needed for vswitchd bringup on windows
platform.

Signed-off-by: Ankur Sharma <ankursharma at vmware.com>
---
 lib/netdev-windows.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 82 insertions(+), 1 deletion(-)

diff --git a/lib/netdev-windows.c b/lib/netdev-windows.c
index 02d37a7..ac41856 100644
--- a/lib/netdev-windows.c
+++ b/lib/netdev-windows.c
@@ -32,6 +32,9 @@
 #include "netlink-socket.h"
 #include "netlink.h"
 
+#define IFF_RUNNING 0x20
+#define IFF_PROMISC 0x40
+
 VLOG_DEFINE_THIS_MODULE(netdev_windows);
 static struct vlog_rate_limit error_rl = VLOG_RATE_LIMIT_INIT(9999, 5);
 
@@ -326,7 +329,83 @@ netdev_windows_get_mtu(const struct netdev *netdev_, int *mtup)
     }
     return 0;
 }
-
+
+/* This functionality is not really required by the datapath.
+ * But vswitchd bringup expects this to be implemented. */
+static int
+netdev_windows_set_etheraddr(const struct netdev *netdev_, uint8_t mac[6])
+{
+    struct netdev_windows *netdev = netdev_windows_cast(netdev_);
+
+    if (netdev->cache_valid & VALID_ETHERADDR) {
+        memcpy(netdev->mac, mac, ETH_ADDR_LEN);
+    } else {
+        return EINVAL;
+    }
+    return 0;
+}
+
+static int
+nd_to_iff_flags(enum netdev_flags nd)
+{
+    int iff = 0;
+    if (nd & NETDEV_UP) {
+        iff |= IFF_UP;
+    }
+    if (nd & NETDEV_PROMISC) {
+        iff |= IFF_PROMISC;
+    }
+    return iff;
+}
+
+static int
+iff_to_nd_flags(int iff)
+{
+    enum netdev_flags nd = 0;
+    if (iff & IFF_UP) {
+        nd |= NETDEV_UP;
+    }
+
+    if (iff & IFF_PROMISC) {
+        nd |= NETDEV_PROMISC;
+    }
+
+    return nd;
+}
+
+/* We do not really have to update anything in kernel. */
+static int
+netdev_win_set_flag(const char *name, uint32_t flags)
+{
+    return 0;
+}
+
+/* This functionality is not really required by the datapath.
+ * But vswitchd bringup expects this to be implemented. */
+static int
+netdev_win_update_flags_system(struct netdev *netdev_,
+                               enum netdev_flags off,
+                               enum netdev_flags on,
+                               enum netdev_flags *old_flagsp)
+{
+    struct netdev_windows *netdev;
+    int old_flags, new_flags;
+    int error = 0;
+
+    netdev = netdev_windows_cast(netdev_);
+
+    old_flags = netdev->ifi_flags;
+    *old_flagsp = iff_to_nd_flags(old_flags);
+    new_flags = (old_flags & ~nd_to_iff_flags(off)) | nd_to_iff_flags(on);
+
+    /* Set netdev flags. */
+    if (new_flags != old_flags) {
+        const char *devname = netdev_get_name(&netdev->up);
+        error = netdev_win_set_flag(devname, new_flags);
+    }
+    return error;
+}
+
 
 static int
 netdev_windows_internal_construct(struct netdev *netdev_)
@@ -343,6 +422,8 @@ netdev_windows_internal_construct(struct netdev *netdev_)
     .destruct           = netdev_windows_destruct,                      \
     .dealloc            = netdev_windows_dealloc,                       \
     .get_etheraddr      = netdev_windows_get_etheraddr,                 \
+    .set_etheraddr      = netdev_windows_set_etheraddr,                 \
+    .update_flags       = netdev_win_update_flags_system,               \
 }
 
 const struct netdev_class netdev_windows_class =
-- 
1.9.1




More information about the dev mailing list