net/pcap: truncate packet if it is too large
Previously large packet would be dropped, instead now it is better to keep it via truncating it. Signed-off-by: Zhike Wang <wangzhike@jd.com> Reviewed-by: Cian Ferriter <cian.ferriter@intel.com> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
c11562a121
commit
a09f61159a
@ -313,7 +313,7 @@ eth_pcap_tx_dumper(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
|
|||||||
struct pcap_pkthdr header;
|
struct pcap_pkthdr header;
|
||||||
pcap_dumper_t *dumper;
|
pcap_dumper_t *dumper;
|
||||||
unsigned char temp_data[RTE_ETH_PCAP_SNAPLEN];
|
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;
|
pp = rte_eth_devices[dumper_q->port_id].process_private;
|
||||||
dumper = pp->tx_dumper[dumper_q->queue_id];
|
dumper = pp->tx_dumper[dumper_q->queue_id];
|
||||||
@ -325,28 +325,24 @@ eth_pcap_tx_dumper(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts)
|
|||||||
* dumper */
|
* dumper */
|
||||||
for (i = 0; i < nb_pkts; i++) {
|
for (i = 0; i < nb_pkts; i++) {
|
||||||
mbuf = bufs[i];
|
mbuf = bufs[i];
|
||||||
len = rte_pktmbuf_pkt_len(mbuf);
|
len = caplen = rte_pktmbuf_pkt_len(mbuf);
|
||||||
if (unlikely(!rte_pktmbuf_is_contiguous(mbuf) &&
|
if (unlikely(!rte_pktmbuf_is_contiguous(mbuf) &&
|
||||||
len > sizeof(temp_data))) {
|
len > sizeof(temp_data))) {
|
||||||
PMD_LOG(ERR,
|
caplen = sizeof(temp_data);
|
||||||
"Dropping multi segment PCAP packet. Size (%zd) > max size (%zd).",
|
|
||||||
len, sizeof(temp_data));
|
|
||||||
rte_pktmbuf_free(mbuf);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
calculate_timestamp(&header.ts);
|
calculate_timestamp(&header.ts);
|
||||||
header.len = len;
|
header.len = len;
|
||||||
header.caplen = header.len;
|
header.caplen = caplen;
|
||||||
/* rte_pktmbuf_read() returns a pointer to the data directly
|
/* rte_pktmbuf_read() returns a pointer to the data directly
|
||||||
* in the mbuf (when the mbuf is contiguous) or, otherwise,
|
* in the mbuf (when the mbuf is contiguous) or, otherwise,
|
||||||
* a pointer to temp_data after copying into it.
|
* a pointer to temp_data after copying into it.
|
||||||
*/
|
*/
|
||||||
pcap_dump((u_char *)dumper, &header,
|
pcap_dump((u_char *)dumper, &header,
|
||||||
rte_pktmbuf_read(mbuf, 0, len, temp_data));
|
rte_pktmbuf_read(mbuf, 0, caplen, temp_data));
|
||||||
|
|
||||||
num_tx++;
|
num_tx++;
|
||||||
tx_bytes += len;
|
tx_bytes += caplen;
|
||||||
rte_pktmbuf_free(mbuf);
|
rte_pktmbuf_free(mbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user