 This is tested with packet forwarding between two native netmap-mode
 NICs and it accelerates packet forwarding rates by approx. 3 times.
 ---
- INSTALL.NETMAP                       |  46 ++++++++
+ INSTALL.NETMAP                       |  46 +++++++++
  Makefile.am                          |   1 +
- acinclude.m4                         |  18 +++
+ acinclude.m4                         |  18 ++++
  configure.ac                         |   1 +
  datapath/Modules.mk                  |   3 +-
- datapath/dp-vale.c                   | 222 +++++++++++++++++++++++++++++++++++
- datapath/dp-vale.h                   |  67 +++++++++++
+ datapath/dp-vale.c                   | 193 +++++++++++++++++++++++++++++++++++
+ datapath/dp-vale.h                   |  67 ++++++++++++
  datapath/linux/Kbuild.in             |   7 ++
- datapath/vport-internal_dev.c        |  30 ++++-
- datapath/vport-internal_dev_netmap.h |  97 +++++++++++++++
+ datapath/vport-internal_dev.c        |  33 +++++-
+ datapath/vport-internal_dev_netmap.h |  66 ++++++++++++
  datapath/vport-netdev.c              |  21 ++++
  datapath/vport-vxlan.c               |   7 ++
- datapath/vport.c                     |  12 ++
+ datapath/vport.c                     |  12 +++
  utilities/ovs-dev.py                 |   5 +
- 14 files changed, 535 insertions(+), 2 deletions(-)
+ 14 files changed, 477 insertions(+), 3 deletions(-)
  create mode 100644 INSTALL.NETMAP
  create mode 100644 datapath/dp-vale.c
  create mode 100644 datapath/dp-vale.h

 	netif_start_queue(netdev_vport->dev);
 
 	return vport;
@@ -238,6 +259,9 @@ static void internal_dev_destroy(struct vport *vport)
 	netif_stop_queue(netdev_vport->dev);
 	rtnl_lock();
 	dev_set_promiscuity(netdev_vport->dev, -1);
+#ifdef DEV_NETMAP
+	ovs_vale_ctl(netdev_vport->dev->name, 1, 0);
+#endif
 
 	/* unregister_netdevice() waits for an RCU grace period. */
 	unregister_netdevice(netdev_vport->dev);
@@ -272,6 +296,10 @@ static int internal_dev_recv(struct vport *vport, struct sk_buff *skb)
 #endif
 
 	len = skb->len;

+int ovs_vale_send(struct net_device *dev, struct sk_buff *skb)
+{
+	struct ovs_vale_dst *dst = OVCB(skb)->dst;
+	struct netmap_vp_adapter *vpna;
+	u_int dport;
+
+	if (!skb_owned_by_vale(skb))
+		return 0;
+	if (netmap_ifp_to_vp(dev) == NULL) { /* Not a VALE port */
+		dst->port = NM_BDG_NOPORT;
+		goto consumed;
+	}
+	/* set the destination index of the bridge.
+	 * XXX If it is already set, we broadcast this packet
+	 */
+	vpna = ovs_is_internal_dev(dev) ? netmap_ifp_to_host_vp(dev) :
+		netmap_ifp_to_vp(dev);
+	if (unlikely(!vpna)) {
