tap: Set the MTU on the TUN deivce

Type: fix

For a TAP device the MTU is set via the ethernet_register for TUN we
need to do it explicitly (like we do for other tunnel types).

Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
Signed-off-by: Neale Ranns <neale@graphiant.com>
Change-Id: Ie6a13c795acb35b53f8d99b05c70c3e73a7b428e
diff --git a/src/vnet/devices/tap/tap.c b/src/vnet/devices/tap/tap.c
index 5b15f92..dfd3258 100644
--- a/src/vnet/devices/tap/tap.c
+++ b/src/vnet/devices/tap/tap.c
@@ -66,6 +66,10 @@
 };
   /* *INDENT-ON* */
 
+#define TUN_MAX_PACKET_BYTES	 65355
+#define TUN_MIN_PACKET_BYTES	 64
+#define TUN_DEFAULT_PACKET_BYTES 1500
+
 static u32
 virtio_eth_flag_change (vnet_main_t * vnm, vnet_hw_interface_t * hi,
 			u32 flags)
@@ -741,6 +745,15 @@
     {
       virtio_set_packet_coalesce (vif);
     }
+  if (vif->type == VIRTIO_IF_TYPE_TUN)
+    {
+      hw->max_supported_packet_bytes = TUN_MAX_PACKET_BYTES;
+      hw->min_packet_bytes = hw->min_supported_packet_bytes =
+	TUN_MIN_PACKET_BYTES;
+      hw->max_packet_bytes =
+	args->host_mtu_size ? args->host_mtu_size : TUN_DEFAULT_PACKET_BYTES;
+      vnet_sw_interface_set_mtu (vnm, hw->sw_if_index, hw->max_packet_bytes);
+    }
 
   virtio_vring_set_rx_queues (vm, vif);