  struct vport *ovs_internal_dev_get_vport(struct net_device *netdev)
 diff --git a/datapath/vport-internal_dev_netmap.h b/datapath/vport-internal_dev_netmap.h
 new file mode 100644
-index 0000000..2f26d90
+index 000000000..2f26d906b
 --- /dev/null
 +++ b/datapath/vport-internal_dev_netmap.h
 @@ -0,0 +1,66 @@

+				D("error on BDG_DETACH after BDG_REGOPS failure");
+		} else {
+			vale_dp_initialized = 1;
+			D("datapath is registered to %s", OVS_VALE_PREFIX);
+		}
+
+	} else if (!onoff && vale_dp_initialized) { /* last interface? */

 
 openvswitch_extras = \
 	README.md
diff --git a/datapath/datapath.c b/datapath/datapath.c
index db8a18a13..0352e3d83 100644
--- a/datapath/datapath.c
+++ b/datapath/datapath.c
@@ -2378,7 +2378,11 @@ static int __init dp_init(void)
 
 	BUILD_BUG_ON(sizeof(struct ovs_skb_cb) > FIELD_SIZEOF(struct sk_buff, cb));
 
-	pr_info("Open vSwitch switching datapath %s\n", VERSION);
+	pr_info("Open vSwitch switching datapath %s"
+#ifdef DEV_NETMAP
+		" [patched for NETMAP]"
+#endif
+		"\n", VERSION);
 
 	err = compat_init();
 	if (err)
diff --git a/datapath/dp-vale.c b/datapath/dp-vale.c
new file mode 100644
index 000000000..c53fe34f4
--- /dev/null
+++ b/datapath/dp-vale.c
@@ -0,0 +1,195 @@
+/*
+ * Copyright (c) 2014 NEC Europe Ltd.
+ *
