odp-netlink.h: Autogenerate a version of odp-netlink for windows kernel.
authorAnkur Sharma <ankursharma@vmware.com>
Mon, 11 Aug 2014 18:43:22 +0000 (11:43 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 12 Aug 2014 00:15:20 +0000 (17:15 -0700)
Autogenerated odp-netlink.h will not compile with windows kernel, as
it refers to some userspace files like openvswitch/types.h and
packets.h which hyperv extension does not access. Due to this the
windows datapath compilation is broken on tip of tree. This patch
intends to fix that.

In this patch we add a new sed script "extract-odp-netlink-windows-dp-h"
to create OvsDpInterface.h. It works on similar lines as
extract-odp-netlink-h, but avoids including the header files
which are not available for driver.

After this fix, a userspace build will be needed before windows
kernel datapath can be built.

Tested that hyperv extension could be built after building
the userspace. Verified vxlan tunnel based ping across
hypervisors. Verified that odp-netlink-windows-dp.h is not
built for linux platform. Ran 'make distcheck' to verify that
nothing is broken on linux.

Signed-off-by: Ankur Sharma <ankursharma@vmware.com>
Co-authored-by: Saurabh Shah <ssaurabh@vmware.com>
Tested-by: Ankur Sharma <ankursharma@vmware.com>
Reported-by: Alin Serdean <aserdean@cloudbasesolutions.com>
Reported-by: Nithin Raju <nithin@vmware.com>
Reported-at: https://github.com/openvswitch/ovs-issues/issues/21
Signed-off-by: Ben Pfaff <blp@nicira.com>
.gitignore
Makefile.am
build-aux/extract-odp-netlink-windows-dp-h [new file with mode: 0755]
datapath-windows/include/automake.mk [new file with mode: 0644]
datapath-windows/ovsext/precomp.h

index 22ea3ec..800352c 100644 (file)
@@ -60,3 +60,5 @@ TAGS
 cscope.*
 tags
 _debian
+odp-netlink.h
+OvsDpInterface.h
index eddacaf..eb58101 100644 (file)
@@ -316,3 +316,4 @@ include python/compat/automake.mk
 include tutorial/automake.mk
 include vtep/automake.mk
 include datapath-windows/automake.mk
+include datapath-windows/include/automake.mk
diff --git a/build-aux/extract-odp-netlink-windows-dp-h b/build-aux/extract-odp-netlink-windows-dp-h
new file mode 100755 (executable)
index 0000000..041d103
--- /dev/null
@@ -0,0 +1,24 @@
+# This is a "sed" script that transforms <linux/openvswitch.h> into a
+# form that is suitable for inclusion within the Open vSwitch tree on
+# windows system. The transformed header file can be included by windows
+# driver modules.
+
+# Add a header warning that this is a generated file.
+1i\
+/* -*- mode: c; buffer-read-only: t -*- */\
+/* Generated automatically from <linux/openvswitch.h> -- do not modify! */\
+\
+\
+
+# Avoid using reserved names in header guards.
+s/_LINUX_OPENVSWITCH_H/__OVS_DP_INTERFACE_H_/
+
+# and use the appropriate userspace header.
+s,<linux/types\.h>,"OvsTypes.h",
+
+# Add ETH_ADDR_LEN macro to avoid including userspace packet.h
+s,#include <linux/if_ether\.h>,\n#ifndef ETH_ADDR_LEN \
+#define ETH_ADDR_LEN  6 \n#endif,
+
+# Use OVS's own ETH_ADDR_LEN instead of Linux-specific ETH_ALEN.
+s/ETH_ALEN/ETH_ADDR_LEN/
diff --git a/datapath-windows/include/automake.mk b/datapath-windows/include/automake.mk
new file mode 100644 (file)
index 0000000..ac945cb
--- /dev/null
@@ -0,0 +1,10 @@
+BUILT_SOURCES += $(srcdir)/datapath-windows/include/OvsDpInterface.h
+
+$(srcdir)/datapath-windows/include/OvsDpInterface.h: \
+         datapath/linux/compat/include/linux/openvswitch.h \
+         build-aux/extract-odp-netlink-windows-dp-h
+       sed -f $(srcdir)/build-aux/extract-odp-netlink-windows-dp-h < $< > $@
+
+EXTRA_DIST += $(srcdir)/build-aux/extract-odp-netlink-windows-dp-h
+
+CLEANFILES += $(srcdir)/datapath-windows/include/OvsDpInterface.h
index 45e72de..ec4a621 100644 (file)
@@ -28,4 +28,4 @@
  * Include openvswitch.h from userspace. Changing the location the file from
  * include/linux is pending discussion.
  */
-#include "include\linux\openvswitch.h"
+#include "..\include\OvsDpInterface.h"