summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2023-06-29 03:54:53 +0000
committersongyanchao <[email protected]>2023-06-29 03:54:53 +0000
commit812c14d0071f3acf2e6ac1fc44d0e889b53ac7c3 (patch)
tree19b1db84e2a7e0c86b70a56c527b8bb936df709d
parentf514b86717651ec14d1140aed18f913403f83283 (diff)
🐞 fix: 修复 mrpdump 工具在设置bpf参数时捕包异常问题v4.6.34-20230629
修复 mrpdump 工具在设置bpf参数时捕包异常问题
-rw-r--r--tools/tcpdump/pdump.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/tools/tcpdump/pdump.c b/tools/tcpdump/pdump.c
index 472a853..a3af2e2 100644
--- a/tools/tcpdump/pdump.c
+++ b/tools/tcpdump/pdump.c
@@ -120,6 +120,7 @@ struct pdump_stats
uint64_t rx_pkts;
uint64_t tx_pkts;
uint64_t freed_pkts;
+ uint64_t bpf_filter_pkts;
};
struct pdump_tuples
@@ -482,10 +483,11 @@ static void print_pdump_stats(void)
{
fprintf(stderr, "##### PDUMP DEBUG STATS #####\n");
pt = &pdump_t[i];
- fprintf(stderr, " -packets dequeued: %" PRIu64 "\n", pt->stats.dequeue_pkts);
+ fprintf(stderr, " -packets dequeued: %" PRIu64 "\n", pt->stats.dequeue_pkts);
// fprintf(stderr, " -packets rx: %" PRIu64 "\n", pt->stats.rx_pkts);
// fprintf(stderr, " -packets tx: %" PRIu64 "\n", pt->stats.tx_pkts);
- fprintf(stderr, " -packets freed: %" PRIu64 "\n", pt->stats.freed_pkts);
+ fprintf(stderr, " -packets freed: %" PRIu64 "\n", pt->stats.freed_pkts);
+ fprintf(stderr, " -packets for bpf filter: %" PRIu64 "\n", pt->stats.bpf_filter_pkts);
}
}
@@ -645,6 +647,7 @@ static inline void pdump_rxtx(uint16_t port_id, struct rte_ring * ring, struct p
unsigned int pkt_len = rte_pktmbuf_data_len(mbuf);
if (bpf_filter(bpf_prog.bf_insns, (const u_char *)pkt_ptr, pkt_len, pkt_len) == 0 || pkt_len > 65535)
continue;
+ stats->bpf_filter_pkts++;
}
int ret = mr_pcapng_set_opt(mbuf, port_id, flags);
@@ -662,8 +665,10 @@ static inline void pdump_rxtx(uint16_t port_id, struct rte_ring * ring, struct p
}
/* Write pkt */
- if (writev(pcapng_fd, iov, iovcnt) <= 0)
+ if (cnt > 0) {
+ if (writev(pcapng_fd, iov, cnt) <= 0)
perror("pcapng write error");
+ }
/* Pkt free */
for (int i = 0; i < nb_in_deq; i++)