virtio: add packet buffering on tx

Type: feature

This patch adds packet buffering on tx for
slow backend which have some jitter/delays
in freeing the vrings.

There are some limitations to the current design:
1) It only works in poll mode.
2) Atleast 1 rx queue of an interface (with buffering
   enabled) should be placed on each worker and main thread.

Signed-off-by: Mohsin Kazmi <sykazmi@cisco.com>
Change-Id: Ib93c350298b228e80426e58ac77f3bbc93b8be27
diff --git a/src/vnet/devices/virtio/virtio_api.c b/src/vnet/devices/virtio/virtio_api.c
index 9a145d9..d993104 100644
--- a/src/vnet/devices/virtio/virtio_api.c
+++ b/src/vnet/devices/virtio/virtio_api.c
@@ -126,15 +126,18 @@
   STATIC_ASSERT (((int) VIRTIO_API_FLAG_IN_ORDER ==
 		  (int) VIRTIO_FLAG_IN_ORDER),
 		 "virtio in-order api flag mismatch");
+  STATIC_ASSERT (((int) VIRTIO_API_FLAG_BUFFERING ==
+		  (int) VIRTIO_FLAG_BUFFERING),
+		 "virtio buffering api flag mismatch");
 
   ap->virtio_flags = clib_net_to_host_u32 (mp->virtio_flags);
   ap->features = clib_net_to_host_u64 (mp->features);
 
-  if (ap->virtio_flags & VIRTIO_FLAG_GSO)
+  if (ap->virtio_flags & VIRTIO_API_FLAG_GSO)
     ap->gso_enabled = 1;
   else
     ap->gso_enabled = 0;
-  if (ap->virtio_flags & VIRTIO_FLAG_CSUM_OFFLOAD)
+  if (ap->virtio_flags & VIRTIO_API_FLAG_CSUM_OFFLOAD)
     ap->checksum_offload_enabled = 1;
   else
     ap->checksum_offload_enabled = 0;