dpdk: remove rte_mbuf modifications at many places in the code

It is sole responsibility of dpdk tx function to fill/update
rte_mbuf prior to sending packet do PMD.

Change-Id: I8ca1dba3e7bef41034d36e3525831849f7ac4ac0
Signed-off-by: Damjan Marion <damarion@cisco.com>
diff --git a/vlib/vlib/buffer.c b/vlib/vlib/buffer.c
index e1be200..4b899a8 100644
--- a/vlib/vlib/buffer.c
+++ b/vlib/vlib/buffer.c
@@ -1277,15 +1277,6 @@
   return copied;
 }
 
-/*
- * Fills in the required rte_mbuf fields for chained buffers given a VLIB chain.
- */
-void
-vlib_buffer_chain_validate (vlib_main_t * vm, vlib_buffer_t * b_first)
-{
-  return;
-}
-
 static void
 vlib_serialize_tx (serialize_main_header_t * m, serialize_stream_t * s)
 {
diff --git a/vlib/vlib/buffer_funcs.h b/vlib/vlib/buffer_funcs.h
index 29635a3..60e0e28 100644
--- a/vlib/vlib/buffer_funcs.h
+++ b/vlib/vlib/buffer_funcs.h
@@ -42,18 +42,6 @@
 
 #include <vppinfra/hash.h>
 
-#if DPDK == 1
-#undef always_inline		// dpdk and clib use conflicting always_inline macros.
-#include <rte_config.h>
-#include <rte_mbuf.h>
-
-#if CLIB_DEBUG > 0
-#define always_inline static inline
-#else
-#define always_inline static inline __attribute__ ((__always_inline__))
-#endif
-#endif
-
 /** \file
     vlib buffer access methods.
 */
@@ -244,14 +232,6 @@
 u8 *vlib_validate_buffer (vlib_main_t * vm, u32 buffer_index,
 			  uword follow_chain);
 
-/* Validate an array of buffers.  As above. */
-u8 *vlib_validate_buffers (vlib_main_t * vm,
-			   u32 * buffers,
-			   uword next_buffer_stride,
-			   uword n_buffers,
-			   vlib_buffer_known_state_t known_state,
-			   uword follow_chain);
-
 #endif /* DPDK == 0 */
 
 clib_error_t *vlib_buffer_pool_create (vlib_main_t * vm, unsigned num_mbufs,
@@ -429,6 +409,7 @@
   vlib_buffer_t *s, *d, *fd;
   uword n_alloc, n_buffers = 1;
   u32 *new_buffers = 0;
+  u32 flag_mask = VLIB_BUFFER_NEXT_PRESENT | VLIB_BUFFER_TOTAL_LENGTH_VALID;
   int i;
 
   s = b;
@@ -449,20 +430,10 @@
 	       vlib_buffer_get_current (s), s->current_length);
   d->current_data = s->current_data;
   d->current_length = s->current_length;
-  d->flags = s->flags;
+  d->flags = s->flags & flag_mask;
   d->total_length_not_including_first_buffer =
     s->total_length_not_including_first_buffer;
   clib_memcpy (d->opaque, s->opaque, sizeof (s->opaque));
-#if DPDK > 0
-  struct rte_mbuf *ms, *md;
-  ms = rte_mbuf_from_vlib_buffer (s);
-  md = rte_mbuf_from_vlib_buffer (d);
-  rte_pktmbuf_reset (md);
-  md->nb_segs = ms->nb_segs;
-  md->data_len = ms->data_len;
-  md->pkt_len = ms->pkt_len;
-  md->data_off = ms->data_off;
-#endif
 
   /* next segments */
   for (i = 1; i < n_buffers; i++)
@@ -476,19 +447,7 @@
       d->current_length = s->current_length;
       clib_memcpy (vlib_buffer_get_current (d),
 		   vlib_buffer_get_current (s), s->current_length);
-      d->flags = s->flags;
-#if DPDK > 0
-      /* previous */
-      md->next = rte_mbuf_from_vlib_buffer (d);
-      /* current */
-      md = rte_mbuf_from_vlib_buffer (d);
-      ms = rte_mbuf_from_vlib_buffer (s);
-      rte_pktmbuf_reset (md);
-      md->data_len = ms->data_len;
-      md->pkt_len = ms->pkt_len;
-      md->data_off = ms->data_off;
-      md->next = 0;
-#endif
+      d->flags = s->flags & flag_mask;
     }
 
   return fd;
@@ -507,11 +466,6 @@
   first->current_length = 0;
   first->flags &= ~VLIB_BUFFER_NEXT_PRESENT;
   first->flags |= VLIB_BUFFER_TOTAL_LENGTH_VALID;
-#if DPDK == 1
-  struct rte_mbuf *mb = rte_mbuf_from_vlib_buffer (first);
-  rte_pktmbuf_reset (mb);
-  mb->data_off = VLIB_BUFFER_PRE_DATA_SIZE + first->current_data;
-#endif
 }
 
 /* The provided next_bi buffer index is appended to the end of the packet. */
@@ -525,19 +479,6 @@
   last->flags |= VLIB_BUFFER_NEXT_PRESENT;
   next_buffer->current_length = 0;
   next_buffer->flags &= ~VLIB_BUFFER_NEXT_PRESENT;
-#if DPDK == 1
-  struct rte_mbuf *mb;
-  mb = rte_mbuf_from_vlib_buffer (first);
-  mb->nb_segs++;
-
-  mb = rte_mbuf_from_vlib_buffer (last);
-  mb->next = rte_mbuf_from_vlib_buffer (next_buffer);
-
-  mb = rte_mbuf_from_vlib_buffer (next_buffer);
-  mb->data_len = 0;
-  mb->data_off = VLIB_BUFFER_PRE_DATA_SIZE + next_buffer->current_data;
-  mb->next = 0;
-#endif
   return next_buffer;
 }
 
@@ -552,12 +493,6 @@
   last->current_length += len;
   if (first != last)
     first->total_length_not_including_first_buffer += len;
-#if DPDK == 1
-  struct rte_mbuf *mb_first = rte_mbuf_from_vlib_buffer (first);
-  struct rte_mbuf *mb_last = rte_mbuf_from_vlib_buffer (last);
-  mb_first->pkt_len += len;
-  mb_last->data_len += len;
-#endif
 }
 
 /* Copy data to the end of the packet and increases its length.
diff --git a/vlib/vlib/dpdk_buffer.c b/vlib/vlib/dpdk_buffer.c
index 2f63543..feb2bc6 100644
--- a/vlib/vlib/dpdk_buffer.c
+++ b/vlib/vlib/dpdk_buffer.c
@@ -526,9 +526,6 @@
 
       ASSERT (rte_mbuf_refcnt_read (mb) == 0);
       rte_mbuf_refcnt_set (mb, 1);
-      mb->next = NULL;
-      mb->data_off = RTE_PKTMBUF_HEADROOM;
-      mb->nb_segs = 1;
 
       b = vlib_buffer_from_rte_mbuf (mb);
       bi = vlib_get_buffer_index (vm, b);
@@ -866,12 +863,6 @@
 	       t->packet_data, vec_len (t->packet_data));
   b->current_length = vec_len (t->packet_data);
 
-  /* Fix up mbuf header length fields */
-  struct rte_mbuf *mb;
-  mb = rte_mbuf_from_vlib_buffer (b);
-  mb->data_len = b->current_length;
-  mb->pkt_len = b->current_length;
-
   return b->data;
 }
 
@@ -968,31 +959,6 @@
   return copied;
 }
 
-/*
- * Fills in the required rte_mbuf fields for chained buffers given a VLIB chain.
- */
-void
-vlib_buffer_chain_validate (vlib_main_t * vm, vlib_buffer_t * b_first)
-{
-  vlib_buffer_t *b = b_first, *prev = b_first;
-  struct rte_mbuf *mb_prev, *mb, *mb_first;
-
-  mb_first = rte_mbuf_from_vlib_buffer (b_first);
-
-  mb_first->pkt_len = mb_first->data_len = b_first->current_length;
-  while (b->flags & VLIB_BUFFER_NEXT_PRESENT)
-    {
-      b = vlib_get_buffer (vm, b->next_buffer);
-      mb = rte_mbuf_from_vlib_buffer (b);
-      mb_prev = rte_mbuf_from_vlib_buffer (prev);
-      mb_first->nb_segs++;
-      mb_first->pkt_len += b->current_length;
-      mb_prev->next = mb;
-      mb->data_len = b->current_length;
-      prev = b;
-    }
-}
-
 clib_error_t *
 vlib_buffer_pool_create (vlib_main_t * vm, unsigned num_mbufs,
 			 unsigned socket_id)
diff --git a/vlib/vlib/threads_cli.c b/vlib/vlib/threads_cli.c
index 6651a4d..ee63227 100644
--- a/vlib/vlib/threads_cli.c
+++ b/vlib/vlib/threads_cli.c
@@ -20,6 +20,14 @@
 #include <vlib/threads.h>
 #include <vlib/unix/unix.h>
 
+#if DPDK==1
+#include <rte_config.h>
+#include <rte_common.h>
+#include <rte_eal.h>
+#include <rte_launch.h>
+#include <rte_lcore.h>
+#endif
+
 static u8 *
 format_sched_policy_and_priority (u8 * s, va_list * args)
 {
diff --git a/vnet/vnet/buffer.h b/vnet/vnet/buffer.h
index d3ad864..2ae4f1c 100644
--- a/vnet/vnet/buffer.h
+++ b/vnet/vnet/buffer.h
@@ -67,6 +67,9 @@
 #define LOG2_BUFFER_HANDOFF_NEXT_VALID LOG2_VLIB_BUFFER_FLAG_USER(6)
 #define BUFFER_HANDOFF_NEXT_VALID (1 << LOG2_BUFFER_HANDOFF_NEXT_VALID)
 
+#define LOG2_VNET_BUFFER_RTE_MBUF_IS_VALID LOG2_VLIB_BUFFER_FLAG_USER(7)
+#define VNET_BUFFER_RTE_MBUF_IS_VALID (1 << LOG2_VNET_BUFFER_RTE_MBUF_IS_VALID)
+
 #define foreach_buffer_opaque_union_subtype     \
 _(ethernet)                                     \
 _(ip)                                           \
diff --git a/vnet/vnet/devices/af_packet/node.c b/vnet/vnet/devices/af_packet/node.c
index 083c558..7200432 100644
--- a/vnet/vnet/devices/af_packet/node.c
+++ b/vnet/vnet/devices/af_packet/node.c
@@ -104,17 +104,6 @@
 
   /* update current buffer */
   b->next_buffer = 0;
-
-#if DPDK > 0
-  struct rte_mbuf *mbuf = rte_mbuf_from_vlib_buffer (b);
-  struct rte_mbuf *first_mbuf = rte_mbuf_from_vlib_buffer (first_b);
-  struct rte_mbuf *prev_mbuf = rte_mbuf_from_vlib_buffer (prev_b);
-  first_mbuf->nb_segs++;
-  prev_mbuf->next = mbuf;
-  mbuf->data_len = b->current_length;
-  mbuf->data_off = RTE_PKTMBUF_HEADROOM + b->current_data;
-  mbuf->next = 0;
-#endif
 }
 
 always_inline uword
@@ -194,11 +183,6 @@
 
 	      if (offset == 0)
 		{
-#if DPDK > 0
-		  struct rte_mbuf *mb = rte_mbuf_from_vlib_buffer (b0);
-		  rte_pktmbuf_data_len (mb) = b0->current_length;
-		  rte_pktmbuf_pkt_len (mb) = b0->current_length;
-#endif
 		  b0->total_length_not_including_first_buffer = 0;
 		  b0->flags = VLIB_BUFFER_TOTAL_LENGTH_VALID;
 		  vnet_buffer (b0)->sw_if_index[VLIB_RX] = apif->sw_if_index;
diff --git a/vnet/vnet/devices/netmap/node.c b/vnet/vnet/devices/netmap/node.c
index b96bada..19895e4 100644
--- a/vnet/vnet/devices/netmap/node.c
+++ b/vnet/vnet/devices/netmap/node.c
@@ -83,17 +83,6 @@
 
   /* update current buffer */
   b->next_buffer = 0;
-
-#if DPDK > 0
-  struct rte_mbuf *mbuf = rte_mbuf_from_vlib_buffer (b);
-  struct rte_mbuf *first_mbuf = rte_mbuf_from_vlib_buffer (first_b);
-  struct rte_mbuf *prev_mbuf = rte_mbuf_from_vlib_buffer (prev_b);
-  first_mbuf->nb_segs++;
-  prev_mbuf->next = mbuf;
-  mbuf->data_len = b->current_length;
-  mbuf->data_off = RTE_PKTMBUF_HEADROOM + b->current_data;
-  mbuf->next = 0;
-#endif
 }
 
 always_inline uword
@@ -195,11 +184,6 @@
 
 		  if (offset == 0)
 		    {
-#if DPDK > 0
-		      struct rte_mbuf *mb = rte_mbuf_from_vlib_buffer (b0);
-		      rte_pktmbuf_data_len (mb) = b0->current_length;
-		      rte_pktmbuf_pkt_len (mb) = b0->current_length;
-#endif
 		      b0->total_length_not_including_first_buffer = 0;
 		      b0->flags = VLIB_BUFFER_TOTAL_LENGTH_VALID;
 		      vnet_buffer (b0)->sw_if_index[VLIB_RX] =
diff --git a/vnet/vnet/devices/ssvm/node.c b/vnet/vnet/devices/ssvm/node.c
index 5ecccd3..3a695b1 100644
--- a/vnet/vnet/devices/ssvm/node.c
+++ b/vnet/vnet/devices/ssvm/node.c
@@ -77,11 +77,7 @@
   int rx_queue_index;
   u32 n_to_alloc = VLIB_FRAME_SIZE * 2;
   u32 n_allocated, n_present_in_cache;
-#if DPDK > 0
   u32 next_index = VNET_DEVICE_INPUT_NEXT_ETHERNET_INPUT;
-#else
-  u32 next_index = 0;
-#endif
   vlib_buffer_free_list_t *fl;
   u32 n_left_to_next, *to_next;
   u32 next0;
diff --git a/vnet/vnet/devices/ssvm/ssvm_eth.h b/vnet/vnet/devices/ssvm/ssvm_eth.h
index f4156e3..ac611f4 100644
--- a/vnet/vnet/devices/ssvm/ssvm_eth.h
+++ b/vnet/vnet/devices/ssvm/ssvm_eth.h
@@ -25,6 +25,7 @@
 #include <vppinfra/elog.h>
 #include <vlib/vlib.h>
 #include <vnet/ethernet/ethernet.h>
+#include <vnet/devices/devices.h>
 #include <vnet/ip/ip.h>
 #include <vnet/pg/pg.h>
 #include <vlibmemory/unix_shared_memory_queue.h>
diff --git a/vnet/vnet/devices/virtio/vhost-user.h b/vnet/vnet/devices/virtio/vhost-user.h
index 0495991..4ce0830 100644
--- a/vnet/vnet/devices/virtio/vhost-user.h
+++ b/vnet/vnet/devices/virtio/vhost-user.h
@@ -32,10 +32,6 @@
 #define VHOST_VRING_F_LOG 0
 
 #define VHOST_USER_F_PROTOCOL_FEATURES  30
-#if DPDK == 0
-#define RTE_VERSION_NUM(a,b,c,d) 1
-#define RTE_VERSION 0
-#endif
 #define VHOST_USER_PROTOCOL_FEATURES   ((1ULL << VHOST_USER_PROTOCOL_F_MQ) |	\
 					(1ULL << VHOST_USER_PROTOCOL_F_LOG_SHMFD))
 
diff --git a/vnet/vnet/ip/ip.h b/vnet/vnet/ip/ip.h
index c9a8293..f50662b 100644
--- a/vnet/vnet/ip/ip.h
+++ b/vnet/vnet/ip/ip.h
@@ -63,11 +63,6 @@
 #include <vnet/ip/ip6_packet.h>
 #include <vnet/ip/ip6_error.h>
 #include <vnet/ip/icmp6.h>
-
-#if DPDK > 0
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
-
 #include <vnet/classify/vnet_classify.h>
 
 /* Per protocol info. */
@@ -155,35 +150,6 @@
 				u32 first_buffer_offset,
 				u32 n_bytes_to_checksum,
 				ip_csum_t sum)
-#if DPDK > 0
-{
-  u32 n_bytes_left = n_bytes_to_checksum;
-  struct rte_mbuf * mb = rte_mbuf_from_vlib_buffer(first_buffer);
-  u8 nb_segs = mb->nb_segs;
-  ASSERT(mb->data_len >= first_buffer_offset);
-  void * h;
-  u32 n;
-  
-  n = clib_min (n_bytes_left, mb->data_len);
-  h = vlib_buffer_get_current (first_buffer) + first_buffer_offset;
-  while (n_bytes_left)
-    {
-      sum = ip_incremental_checksum (sum, h, n);
-      n_bytes_left -= n;
-      nb_segs--;
-      mb = mb->next;
-      if ((nb_segs == 0) || (mb == 0))
-	break;
-
-      n = clib_min (n_bytes_left, mb->data_len);
-      h = rte_ctrlmbuf_data(mb);
-    }
- 
-  ASSERT(n_bytes_left == 0);
-  ASSERT(nb_segs == 0);
-  return sum;
-}
-#else
 {
   vlib_buffer_t * b = first_buffer;
   u32 n_bytes_left = n_bytes_to_checksum;
@@ -210,7 +176,6 @@
 
   return sum;
 }
-#endif /* DPDK */
 
 void ip_del_all_interface_addresses (vlib_main_t *vm, u32 sw_if_index);
 
diff --git a/vnet/vnet/ip/ip6_forward.c b/vnet/vnet/ip/ip6_forward.c
index 14dd9df..f3cd640 100644
--- a/vnet/vnet/ip/ip6_forward.c
+++ b/vnet/vnet/ip/ip6_forward.c
@@ -1177,35 +1177,6 @@
    }
 
   n_bytes_left = n_this_buffer = payload_length_host_byte_order;
-#if DPDK > 0
-  if (p0 && n_this_buffer + headers_size  > p0->current_length)
-  {
-    struct rte_mbuf *mb = rte_mbuf_from_vlib_buffer(p0);
-    u8 nb_segs = mb->nb_segs;
-
-    n_this_buffer = (p0->current_length > headers_size ?
-		     p0->current_length - headers_size : 0);
-    while (n_bytes_left)
-      {
-	sum0 = ip_incremental_checksum (sum0, data_this_buffer, n_this_buffer);
-	n_bytes_left -= n_this_buffer;
-
-	mb = mb->next;
-	nb_segs--;
-	if ((nb_segs == 0) || (mb == 0))
-	  break;
-
-	data_this_buffer = rte_ctrlmbuf_data(mb);
-	n_this_buffer = mb->data_len;
-      }
-    if (n_bytes_left || nb_segs)
-      {
-	*bogus_lengthp = 1;
-	return 0xfefe;
-      }
-  }
-  else sum0 = ip_incremental_checksum (sum0, data_this_buffer, n_this_buffer);
-#else
   if (p0 && n_this_buffer + headers_size  > p0->current_length)
     n_this_buffer = p0->current_length > headers_size  ? p0->current_length - headers_size  : 0;
   while (1)
@@ -1224,7 +1195,6 @@
       data_this_buffer = vlib_buffer_get_current (p0);
       n_this_buffer = p0->current_length;
     }
-#endif /* DPDK */
 
   sum16 = ~ ip_csum_fold (sum0);
 
diff --git a/vnet/vnet/ip/ip6_neighbor.c b/vnet/vnet/ip/ip6_neighbor.c
index af852a2..cc17630 100644
--- a/vnet/vnet/ip/ip6_neighbor.c
+++ b/vnet/vnet/ip/ip6_neighbor.c
@@ -23,10 +23,6 @@
 #include <vnet/fib/fib_table.h>
 #include <vnet/fib/ip6_fib.h>
 
-#if DPDK==1
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
-
 /**
  * @file
  * @brief IPv6 Neighbor Adjacency and Neighbor Discovery.
@@ -317,7 +313,6 @@
   ip6_address_t addr;
 } ip6_neighbor_set_unset_rpc_args_t;
 
-#if DPDK > 0
 static void ip6_neighbor_set_unset_rpc_callback 
 ( ip6_neighbor_set_unset_rpc_args_t * a);
 
@@ -340,7 +335,6 @@
   vl_api_rpc_call_main_thread (ip6_neighbor_set_unset_rpc_callback,
                                (u8 *) &args, sizeof (args));
 }
-#endif
 
 static void
 ip6_nbr_probe (ip_adjacency_t *adj)
@@ -538,14 +532,12 @@
   u32 next_index;
   pending_resolution_t * pr, * mc;
 
-#if DPDK > 0
   if (os_get_cpu_number())
     {
       set_unset_ip6_neighbor_rpc (vm, sw_if_index, a, link_layer_address,
                                   1 /* set new neighbor */, is_static);
       return 0;
     }
-#endif
 
   k.sw_if_index = sw_if_index;
   k.ip6_address = a[0];
@@ -687,14 +679,12 @@
   uword * p;
   int rv = 0;
 
-#if DPDK > 0
   if (os_get_cpu_number())
     {
       set_unset_ip6_neighbor_rpc (vm, sw_if_index, a, link_layer_address,
                                   0 /* unset */, 0);
       return 0;
     }
-#endif
 
   k.sw_if_index = sw_if_index;
   k.ip6_address = a[0];
@@ -722,7 +712,6 @@
   return rv;
 }
 
-#if DPDK > 0
 static void ip6_neighbor_set_unset_rpc_callback 
 ( ip6_neighbor_set_unset_rpc_args_t * a)
 {
@@ -734,7 +723,6 @@
     vnet_unset_ip6_ethernet_neighbor (vm, a->sw_if_index, &a->addr, 
                                       a->link_layer_address, 6);
 }
-#endif
 
 static int
 ip6_neighbor_sort (void *a1, void *a2)
diff --git a/vnet/vnet/ipsec/esp.h b/vnet/vnet/ipsec/esp.h
index 505d34a..b9feacb 100644
--- a/vnet/vnet/ipsec/esp.h
+++ b/vnet/vnet/ipsec/esp.h
@@ -12,9 +12,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#if DPDK==1
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
 
 #include <openssl/hmac.h>
 #include <openssl/rand.h>
diff --git a/vnet/vnet/ipsec/ipsec.h b/vnet/vnet/ipsec/ipsec.h
index dbbb928..d33df38 100644
--- a/vnet/vnet/ipsec/ipsec.h
+++ b/vnet/vnet/ipsec/ipsec.h
@@ -12,10 +12,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#if DPDK==1
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
-
 #define IPSEC_FLAG_IPSEC_GRE_TUNNEL (1 << 0)
 
 #define foreach_ipsec_policy_action \
@@ -280,12 +276,6 @@
 always_inline void
 ipsec_alloc_empty_buffers (vlib_main_t * vm, ipsec_main_t * im)
 {
-#if DPDK==1
-  dpdk_main_t *dm = &dpdk_main;
-  u32 free_list_index = dm->vlib_buffer_free_list_index;
-#else
-  u32 free_list_index = VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX;
-#endif
   u32 cpu_index = os_get_cpu_number ();
   uword l = vec_len (im->empty_buffers[cpu_index]);
   uword n_alloc = 0;
@@ -297,11 +287,8 @@
 	  vec_alloc (im->empty_buffers[cpu_index], 2 * VLIB_FRAME_SIZE);
 	}
 
-      n_alloc = vlib_buffer_alloc_from_free_list (vm,
-						  im->empty_buffers[cpu_index]
-						  + l,
-						  2 * VLIB_FRAME_SIZE - l,
-						  free_list_index);
+      n_alloc = vlib_buffer_alloc (vm, im->empty_buffers[cpu_index] + l,
+				   2 * VLIB_FRAME_SIZE - l);
 
       _vec_len (im->empty_buffers[cpu_index]) = l + n_alloc;
     }
diff --git a/vnet/vnet/l2/l2_output.c b/vnet/vnet/l2/l2_output.c
index f8ebe14..22ce663 100644
--- a/vnet/vnet/l2/l2_output.c
+++ b/vnet/vnet/l2/l2_output.c
@@ -614,7 +614,6 @@
   u32 sw_if_index;
 } output_node_mapping_rpc_args_t;
 
-#if DPDK > 0
 static void output_node_rpc_callback (output_node_mapping_rpc_args_t * a);
 
 static void
@@ -629,7 +628,6 @@
   vl_api_rpc_call_main_thread (output_node_rpc_callback,
 			       (u8 *) & args, sizeof (args));
 }
-#endif
 
 
 /** Create a mapping in the next node mapping table for the given sw_if_index. */
@@ -645,7 +643,6 @@
 
   hw0 = vnet_get_sup_hw_interface (vnet_main, sw_if_index);
 
-#if DPDK > 0
   uword cpu_number;
 
   cpu_number = os_get_cpu_number ();
@@ -663,7 +660,6 @@
       output_node_mapping_send_rpc (node_index, sw_if_index);
       return L2OUTPUT_NEXT_DROP;
     }
-#endif
 
   /* dynamically create graph node arc  */
   next = vlib_node_add_next (vlib_main, node_index, hw0->output_node_index);
@@ -679,7 +675,6 @@
   return next;
 }
 
-#if DPDK > 0
 void
 output_node_rpc_callback (output_node_mapping_rpc_args_t * a)
 {
@@ -691,7 +686,6 @@
     (vm, vnm, a->node_index, mp->next_nodes.output_node_index_vec,
      a->sw_if_index);
 }
-#endif
 
 /* Get a pointer to the config for the given interface */
 l2_output_config_t *
diff --git a/vnet/vnet/pg/input.c b/vnet/vnet/pg/input.c
index 54687d5..77b56f5 100644
--- a/vnet/vnet/pg/input.c
+++ b/vnet/vnet/pg/input.c
@@ -43,39 +43,6 @@
 #include <vnet/feature/feature.h>
 #include <vnet/devices/devices.h>
 
-#if DPDK==1
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
-
-static inline void
-pg_set_mbuf_metadata (pg_main_t * pg, u32 * buffers, u32 n_alloc)
-{
-#if DPDK == 1
-  vlib_main_t *vm = vlib_get_main ();
-  vlib_buffer_t *b;
-  struct rte_mbuf *mb;
-  i16 delta;
-  u16 new_data_len;
-  u16 new_pkt_len;
-
-  int i;
-
-  for (i = 0; i < n_alloc; i++)
-    {
-      b = vlib_get_buffer (vm, buffers[i]);
-      mb = rte_mbuf_from_vlib_buffer (b);
-
-      delta = vlib_buffer_length_in_chain (vm, b) - (i16) mb->pkt_len;
-      new_data_len = (u16) ((i16) mb->data_len + delta);
-      new_pkt_len = (u16) ((i16) mb->pkt_len + delta);
-
-      mb->data_len = new_data_len;
-      mb->pkt_len = new_pkt_len;
-      mb->data_off = (u16) ((RTE_PKTMBUF_HEADROOM) + b->current_data);
-    }
-#endif
-}
-
 static int
 validate_buffer_data2 (vlib_buffer_t * b, pg_stream_t * s,
 		       u32 data_offset, u32 n_bytes)
@@ -930,7 +897,6 @@
 				     si->sw_if_index, n_buffers, length_sum);
   }
 
-  pg_set_mbuf_metadata (pg, buffers, n_buffers);
 }
 
 static void
@@ -1398,24 +1364,6 @@
       last_start = start;
 
       /* Verify that pkts in the fifo are properly allocated */
-#if DPDK == 1
-      if (CLIB_DEBUG > 0)
-	{
-	  u32 *bi0;
-	  vlib_main_t *vm = vlib_get_main ();
-	  /* *INDENT-OFF* */
-          clib_fifo_foreach (bi0, bi->buffer_fifo,
-          ({
-            vlib_buffer_t * b;
-            struct rte_mbuf *mb;
-
-            b = vlib_get_buffer(vm, bi0[0]);
-            mb = rte_mbuf_from_vlib_buffer(b);
-            ASSERT(rte_mbuf_refcnt_read(mb) == 1);
-          }));
-	  /* *INDENT-ON* */
-	}
-#endif
     }
 
   return n_in_fifo + n_added;
diff --git a/vnet/vnet/unix/tapcli.c b/vnet/vnet/unix/tapcli.c
index d23e6fe..db634f7 100644
--- a/vnet/vnet/unix/tapcli.c
+++ b/vnet/vnet/unix/tapcli.c
@@ -39,10 +39,6 @@
 
 #include <vnet/ethernet/ethernet.h>
 
-#if DPDK == 1
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
-
 #include <vnet/feature/feature.h>
 #include <vnet/devices/devices.h>
 #include <vnet/unix/tapcli.h>
@@ -343,9 +339,6 @@
         (n_bytes_in_packet > buffer_size) ? n_bytes_in_packet - buffer_size : 0;
     b_first->flags |= VLIB_BUFFER_TOTAL_LENGTH_VALID;
 
-    /* Ensure mbufs are updated */
-    vlib_buffer_chain_validate(vm, b_first);
-
     VLIB_BUFFER_TRACE_TRAJECTORY_INIT(b_first);
 
     vnet_buffer (b_first)->sw_if_index[VLIB_RX] = ti->sw_if_index;
diff --git a/vnet/vnet/unix/tuntap.c b/vnet/vnet/unix/tuntap.c
index dbb6f30..4a5dd67 100644
--- a/vnet/vnet/unix/tuntap.c
+++ b/vnet/vnet/unix/tuntap.c
@@ -50,10 +50,6 @@
 #include <vnet/devices/devices.h>
 #include <vnet/feature/feature.h>
 
-#if DPDK == 1
-#include <vnet/devices/dpdk/dpdk.h>
-#endif
-
 static vnet_device_class_t tuntap_dev_class;
 static vnet_hw_interface_class_t tuntap_interface_class;
 
@@ -233,13 +229,6 @@
   vlib_buffer_t * b;
   u32 bi;
   const uword buffer_size = VLIB_BUFFER_DATA_SIZE;
-#if DPDK == 0
-  u32 free_list_index = VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX;
-#else
-  dpdk_main_t * dm = &dpdk_main;
-  u32 free_list_index = dm->vlib_buffer_free_list_index;
-  struct rte_mbuf *first_mb = NULL, *prev_mb = NULL;
-#endif
 
   /** Make sure we have some RX buffers. */
   {
@@ -251,9 +240,7 @@
 	if (! tm->rx_buffers)
 	  vec_alloc (tm->rx_buffers, VLIB_FRAME_SIZE);
 
-	n_alloc = vlib_buffer_alloc_from_free_list 
-            (vm, tm->rx_buffers + n_left, VLIB_FRAME_SIZE - n_left, 
-             free_list_index);
+	n_alloc = vlib_buffer_alloc (vm, tm->rx_buffers + n_left, VLIB_FRAME_SIZE - n_left);
 	_vec_len (tm->rx_buffers) = n_left + n_alloc;
       }
   }
@@ -289,46 +276,21 @@
 
     while (1)
       {
-#if DPDK == 1
-        struct rte_mbuf * mb;
-#endif
 	b = vlib_get_buffer (vm, tm->rx_buffers[i_rx]);
-#if DPDK == 1
-	mb = rte_mbuf_from_vlib_buffer(b);
-
-        if (first_mb == NULL)
-            first_mb = mb;
-
-        if (prev_mb != NULL)
-          {
-            prev_mb->next = mb;
-            first_mb->nb_segs++;
-          }
-#endif
 	b->flags = 0;
 	b->current_data = 0;
 	b->current_length = n_bytes_left < buffer_size ? n_bytes_left : buffer_size;
 
 	n_bytes_left -= buffer_size;
-#if DPDK == 1
-        rte_pktmbuf_data_len (mb) = b->current_length;
-        mb->data_off = RTE_PKTMBUF_HEADROOM + b->current_data;
-#endif
 
 	if (n_bytes_left <= 0)
           {
-#if DPDK == 1
-            rte_pktmbuf_pkt_len (first_mb) = n_bytes_in_packet;
-#endif
             break;
           }
 
 	i_rx--;
 	b->flags |= VLIB_BUFFER_NEXT_PRESENT;
 	b->next_buffer = tm->rx_buffers[i_rx];
-#if DPDK == 1
-        prev_mb = mb;
-#endif
       }
 
     /** Interface counters for tuntap interface. */
diff --git a/vpp-api-test/vat/api_format.c b/vpp-api-test/vat/api_format.c
index 549bd03..67280df 100644
--- a/vpp-api-test/vat/api_format.c
+++ b/vpp-api-test/vat/api_format.c
@@ -54,6 +54,7 @@
 
 #include "vat/json_format.h"
 
+#include <inttypes.h>
 #include <sys/stat.h>
 
 #define vl_typedefs		/* define message structures */
diff --git a/vpp/vpp-api/api.c b/vpp/vpp-api/api.c
index 676b0c4..73e3c0d 100644
--- a/vpp/vpp-api/api.c
+++ b/vpp/vpp-api/api.c
@@ -95,6 +95,10 @@
 #undef __included_bihash_template_h__
 #include <vnet/l2/l2_fib.h>
 
+#if DPDK > 0
+#include <vnet/devices/dpdk/dpdk.h>
+#endif
+
 #if IPSEC > 0
 #include <vnet/ipsec/ipsec.h>
 #include <vnet/ipsec/ikev2.h>