summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesa_pkt_dump.h4
-rw-r--r--tcpdump.c30
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����ֲ */
diff --git a/tcpdump.c b/tcpdump.c
index 246805a..a890e07 100644
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -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;
}