@@ -92,16 +92,18 @@ dp_packet_use_const(struct dp_packet *b, const void *data, size_t size)
dp_packet_set_size(b, size);
}
-/* Initializes 'b' as an empty dp_packet that contains the 'allocated' bytes of
- * memory starting at 'base'. DPDK allocated dp_packet and *data is allocated
- * from one continous memory region, so in memory data start right after
- * dp_packet. Therefore there is special method to free this type of
- * buffer. dp_packet base, data and size are initialized by dpdk rcv() so no
- * need to initialize those fields. */
+/* Initializes 'b' as an empty dp_packet that contains the 'allocated' bytes.
+ * DPDK allocated dp_packet and *data is allocated from one continous memory
+ * region as part of memory pool, so in memory data start right after
+ * dp_packet. Therefore, there is a special method to free this type of
+ * buffer. Here, non-transient ovs dp-packet fields are initialized for
+ * packets that are part of a DPDK memory pool. */
void
dp_packet_init_dpdk(struct dp_packet *b, size_t allocated)
{
- dp_packet_init__(b, allocated, DPBUF_DPDK);
+ dp_packet_set_allocated(b, allocated);
+ b->source = DPBUF_DPDK;
+ b->packet_type = htonl(PT_ETH);
}
/* Initializes 'b' as an empty dp_packet with an initial capacity of 'size'
@@ -801,6 +801,16 @@ dp_packet_delete_batch(struct dp_packet_batch *batch, bool may_steal)
}
static inline void
+dp_packet_batch_init_cutlen(struct dp_packet_batch *batch)
+{
+ struct dp_packet *packet;
+
+ DP_PACKET_BATCH_FOR_EACH (packet, batch) {
+ dp_packet_reset_cutlen(packet);
+ }
+}
+
+static inline void
dp_packet_batch_apply_cutlen(struct dp_packet_batch *batch)
{
if (batch->trunc) {
@@ -1644,6 +1644,7 @@ netdev_dpdk_vhost_rxq_recv(struct netdev_rxq *rxq,
nb_rx, dropped);
rte_spinlock_unlock(&dev->stats_lock);
+ dp_packet_batch_init_cutlen(batch);
batch->count = (int) nb_rx;
return 0;
}
@@ -1683,6 +1684,7 @@ netdev_dpdk_rxq_recv(struct netdev_rxq *rxq, struct dp_packet_batch *batch)
rte_spinlock_unlock(&dev->stats_lock);
}
+ dp_packet_batch_init_cutlen(batch);
batch->count = nb_rx;
return 0;