Hi Zhike, I've tested the behavior before and after this patch and can verify that the packets are being correctly truncated.
Code looks good to me too. Reviewed-by: Cian Ferriter <cian.ferri...@intel.com> Thanks, Cian > -----Original Message----- > From: Zhike Wang <wangzk...@163.com> > Sent: Monday 9 December 2019 01:53 > To: dev@dpdk.org > Cc: wangzh...@jd.com; Yigit, Ferruh <ferruh.yi...@intel.com>; Ferriter, Cian > <cian.ferri...@intel.com>; Zhike Wang <wangzk...@163.com> > Subject: [PATCH v2] net/pcap: truncate packet if it is too large > > From: Zhike Wang <wangzh...@jd.com> > > Previously large packet would be dropped, instead now it is better to keep it > via truncating it. > > Signed-off-by: Zhike Wang <wangzk...@163.com> > --- > drivers/net/pcap/rte_eth_pcap.c | 16 ++++++---------- > 1 file changed, 6 insertions(+), 10 deletions(-) > > diff --git a/drivers/net/pcap/rte_eth_pcap.c > b/drivers/net/pcap/rte_eth_pcap.c index aa7ef6f..b4c79d1 100644 > --- a/drivers/net/pcap/rte_eth_pcap.c > +++ b/drivers/net/pcap/rte_eth_pcap.c > @@ -313,7 +313,7 @@ struct pmd_devargs_all { > struct pcap_pkthdr header; > pcap_dumper_t *dumper; > unsigned char temp_data[RTE_ETH_PCAP_SNAPLEN]; > - size_t len; > + size_t len, caplen; > > pp = rte_eth_devices[dumper_q->port_id].process_private; > dumper = pp->tx_dumper[dumper_q->queue_id]; > @@ -325,28 +325,24 @@ struct pmd_devargs_all { > * dumper */ > for (i = 0; i < nb_pkts; i++) { > mbuf = bufs[i]; > - len = rte_pktmbuf_pkt_len(mbuf); > + len = caplen = rte_pktmbuf_pkt_len(mbuf); > if (unlikely(!rte_pktmbuf_is_contiguous(mbuf) && > len > sizeof(temp_data))) { > - PMD_LOG(ERR, > - "Dropping multi segment PCAP packet. Size > (%zd) > max size (%zd).", > - len, sizeof(temp_data)); > - rte_pktmbuf_free(mbuf); > - continue; > + caplen = sizeof(temp_data); > } > > calculate_timestamp(&header.ts); > header.len = len; > - header.caplen = header.len; > + header.caplen = caplen; > /* rte_pktmbuf_read() returns a pointer to the data directly > * in the mbuf (when the mbuf is contiguous) or, otherwise, > * a pointer to temp_data after copying into it. > */ > pcap_dump((u_char *)dumper, &header, > - rte_pktmbuf_read(mbuf, 0, len, temp_data)); > + rte_pktmbuf_read(mbuf, 0, caplen, temp_data)); > > num_tx++; > - tx_bytes += len; > + tx_bytes += caplen; > rte_pktmbuf_free(mbuf); > } > > -- > 1.8.3.1 >