diff options
| author | Qiuwen Lu <[email protected]> | 2017-06-01 13:23:26 +0800 |
|---|---|---|
| committer | Qiuwen Lu <[email protected]> | 2017-06-01 13:23:26 +0800 |
| commit | 5195a74d2074ab59f46520e9d9d83a0dd885dc7e (patch) | |
| tree | d7cb3148404d059f223707578b8df3df05ba5488 /tools/tcpdump | |
| parent | 672ab1f22e5b593fa53d1bbf65315cf019a5a79c (diff) | |
增加捕包工具运行结束时显示各线程收报文计数的功能。
Diffstat (limited to 'tools/tcpdump')
| -rw-r--r-- | tools/tcpdump/tcpdump.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/tools/tcpdump/tcpdump.c b/tools/tcpdump/tcpdump.c index ca903e5..9ad940b 100644 --- a/tools/tcpdump/tcpdump.c +++ b/tools/tcpdump/tcpdump.c @@ -22,6 +22,7 @@ #include <pthread.h> #include <time.h> #include <assert.h> +#include <inttypes.h> #include <libgen.h> #include <marsio.h> @@ -59,6 +60,8 @@ struct dump_thread_instance uint64_t nr_expect_packets; /* 本线程报文数统计 */ uint64_t nr_dump_packets; + /* 本线程到达报文数统计 */ + uint64_t nr_recv_packets; }; /* 全局句柄 */ @@ -149,7 +152,10 @@ void * dump_capture_thread(void *arg) /* 写DUMPFILE */ pcap_dump((u_char *)th_instance->pcap_dumper, &pcap_pkthdr[i], (const u_char *)pkt_ptr); } - + + th_instance->nr_recv_packets += nr_mbufs; + th_instance->nr_dump_packets += nr_mbufs_dump; + marsio_buff_free(instance->mr_instance, mbufs, nr_mbufs, MARSIO_SOCKET_ID_ANY, MARSIO_LCORE_ID_ANY); } @@ -167,6 +173,30 @@ void sig_interupt_handle(int signo) g_dump_instance->keep_running = 0; } +void dump_capture_result(struct dump_instance * instance) +{ + fprintf(stderr, "\nCapture statistics:\n"); + + uint64_t total_recv_packets = 0; + uint64_t total_dump_packets = 0; + + for (int i = 0; i < instance->nr_thread; i++) + { + fprintf(stderr, " Thread %d: dumpfile %s, %"PRIu64" packets recved, %"PRIu64" packets captured.\n", + i, instance->th_instances[i]->str_thread_dumpfile, + instance->th_instances[i]->nr_recv_packets, + instance->th_instances[i]->nr_dump_packets); + + total_recv_packets += instance->th_instances[i]->nr_recv_packets; + total_dump_packets += instance->th_instances[i]->nr_dump_packets; + } + + fprintf(stderr, " Summary : dumpfile %s, %"PRIu64" packets recved, %"PRIu64" packets captured.\n\n", + instance->str_dumpfile, total_recv_packets, total_dump_packets); + + return; +} + void __thread_dumpfile_generate(const char * filename, unsigned int thread_id, char * out_filename, size_t sz_max_out) { @@ -357,5 +387,6 @@ int main(int argc, char **argv) } pcap_close(g_dump_instance->pcap_handle_dead); + dump_capture_result(g_dump_instance); return 0; }
\ No newline at end of file |
