On Wed, Jul 24, 2019 at 1:55 PM David Marchand <david.march...@redhat.com> wrote: > > Two cores can send multi segment packets on two different pcap ports. > Because of this, we can't have one single buffer to linearize packets. > > Use rte_pktmbuf_read() to copy the packet into a buffer on the stack > and remove eth_pcap_gather_data(). > > Fixes: 6db141c91e1f ("pcap: support jumbo frames") > Cc: sta...@dpdk.org > > Signed-off-by: David Marchand <david.march...@redhat.com> > --- > drivers/net/pcap/rte_eth_pcap.c | 90 > +++++++++++++++-------------------------- > 1 file changed, 32 insertions(+), 58 deletions(-) > > diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c > index 5e5aab7..7398b1b 100644 > --- a/drivers/net/pcap/rte_eth_pcap.c > +++ b/drivers/net/pcap/rte_eth_pcap.c
[snip] > @@ -336,31 +323,25 @@ struct pmd_devargs_all { > * dumper */ > for (i = 0; i < nb_pkts; i++) { > mbuf = bufs[i]; > - calculate_timestamp(&header.ts); > - header.len = mbuf->pkt_len; > - header.caplen = header.len; > - > - if (likely(mbuf->nb_segs == 1)) { > - pcap_dump((u_char *)dumper, &header, > - rte_pktmbuf_mtod(mbuf, void*)); > + len = rte_pktmbuf_pkt_len(mbuf); > + if (likely(rte_pktmbuf_is_contiguous(mbuf))) { > + data = rte_pktmbuf_mtod(mbuf, unsigned char *); > + } else if (len <= sizeof(_data)) { > + data = rte_pktmbuf_read(mbuf, 0, len, _data); We can actually skip the check on contiguous data, since rte_pktmbuf_read returns a pointer to the mbuf data without copying. WDYT ? -- David Marchand