diff options
| author | lijia <[email protected]> | 2018-11-15 11:25:34 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2018-11-15 11:25:34 +0800 |
| commit | 42956e1602c569841f15f37ea83faf9af3bd1b25 (patch) | |
| tree | 423703ca4740ed1a30bbc96ce2cef6dff54565ae | |
| parent | ffef9008ed60102670127ae9ee024cbbd293abff (diff) | |
增加-g参数, 并通过控制连接传输给sapp.
| -rw-r--r-- | mesa_pkt_dump.h | 4 | ||||
| -rw-r--r-- | tcpdump.c | 30 |
2 files changed, 31 insertions, 3 deletions
diff --git a/mesa_pkt_dump.h b/mesa_pkt_dump.h index 5abc7ff..7dedb4b 100644 --- a/mesa_pkt_dump.h +++ b/mesa_pkt_dump.h @@ -1,6 +1,9 @@ #ifndef _MESA_PKT_DUMP_H_ #define _MESA_PKT_DUMP_H_ 1 +#define MESA_PKT_DUM_H_VER (20181115) + + /* ����DPDK-3.0, PFRINGģʽ��, ������ռ����ʱ, ͨ��ƽ̨ʵʱ����. */ @@ -14,6 +17,7 @@ enum pkt_dump_opt_t{ PKT_DUMP_OPT_THREAD_INDEX, PKT_DUMP_OPT_ACK, /* sapp���ظ�tcpdump_mesa��ack�� */ PKT_DUMP_OPT_PERCEPTIVE, /* �������ģʽ, ���Է��ֶ������� */ + PKT_DUMP_OPT_GREEDY_SEEK, /* ƫ�Ƶ����ڲ�IP, ��������ģʽ�²���BUG */ }; /* ������, �����Ժ�������ϵͳ��ARM, PowerPC, MIPS����ֲ */ @@ -959,7 +959,11 @@ static int pkt_dump_recv_ack(int connfd) } #include <pthread.h> -static void *detect_sapp_thread(void *arg) +/* + ���߳����ڼ��sapp�Ŀ��������Ƿ���, ���sapp�˳���, + tcpdump_mesaҲӦ���˳�. +*/ +static void *detect_sapp_alive_thread(void *arg) { int tcp_cmd_fd = (int)arg; int ret; @@ -1020,9 +1024,17 @@ static int MESA_dump_start(unsigned short udp_rcv_port, unsigned short sapp_cmd_ opt_num++; } + if(greedy_seek_flag != 0){ + if(tcpdump_data_offset != 0){ + printf("option -o and -g is exclusive, can't use at same time!\n"); + exit(1); + } + opt_num++; + } + /************** pkt handshake *************/ pkt_hdr.magic = htonl(PKT_DUMP_HDR_MAGIC); - pkt_hdr.version = htonl(tcpdump_mesa_version_VERSION_20181114); + pkt_hdr.version = htonl(20180119); /* ֮ǰsapp��20180119�汾�����ϸ�У��, �˴�������, �ȹ̶��ô�ֵ, �Ժ����sapp��, ����У��汾 */ pkt_hdr.opt_num = htonl(opt_num); ret = write(tcp_cmd_fd, &pkt_hdr, sizeof(pkt_hdr)); if(ret < 0){ @@ -1106,12 +1118,24 @@ static int MESA_dump_start(unsigned short udp_rcv_port, unsigned short sapp_cmd_ } } + /************** greedy seek *************/ + if(greedy_seek_flag != 0){ + opt.opt_type = htons(PKT_DUMP_OPT_GREEDY_SEEK); + opt.opt_len = 0; + ret = write(tcp_cmd_fd, &opt, sizeof(opt)); + if(ret < 0){ + printf("connection down!\n"); + exit(1); + } + } + + /********** after send opt, start recv sapp ACK *******/ if(pkt_dump_recv_ack(tcp_cmd_fd) < 0){ printf("connection down!\n"); exit(1); } - pthread_create(&pid, NULL, detect_sapp_thread, (void *)tcp_cmd_fd); + pthread_create(&pid, NULL, detect_sapp_alive_thread, (void *)tcp_cmd_fd); return tcp_cmd_fd; } |
