summaryrefslogtreecommitdiff
path: root/tools/tcpdump
diff options
context:
space:
mode:
authorQiuwen Lu <[email protected]>2017-06-01 13:23:26 +0800
committerQiuwen Lu <[email protected]>2017-06-01 13:23:26 +0800
commit5195a74d2074ab59f46520e9d9d83a0dd885dc7e (patch)
treed7cb3148404d059f223707578b8df3df05ba5488 /tools/tcpdump
parent672ab1f22e5b593fa53d1bbf65315cf019a5a79c (diff)
增加捕包工具运行结束时显示各线程收报文计数的功能。
Diffstat (limited to 'tools/tcpdump')
-rw-r--r--tools/tcpdump/tcpdump.c33
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