diff options
| author | songyanchao <[email protected]> | 2023-06-29 03:54:53 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2023-06-29 03:54:53 +0000 |
| commit | 812c14d0071f3acf2e6ac1fc44d0e889b53ac7c3 (patch) | |
| tree | 19b1db84e2a7e0c86b70a56c527b8bb936df709d | |
| parent | f514b86717651ec14d1140aed18f913403f83283 (diff) | |
🐞 fix: 修复 mrpdump 工具在设置bpf参数时捕包异常问题v4.6.34-20230629
修复 mrpdump 工具在设置bpf参数时捕包异常问题
| -rw-r--r-- | tools/tcpdump/pdump.c | 11 |
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++) |
