summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/private/sapp_mem.h23
-rw-r--r--include/private/stream_internal.h315
-rw-r--r--src/common/sapp_mem.c39
-rw-r--r--src/dealpkt/duplicate_pkt_distinguish.c44
-rw-r--r--src/sapp_dev/sapp_init.c2
5 files changed, 206 insertions, 217 deletions
diff --git a/include/private/sapp_mem.h b/include/private/sapp_mem.h
index 84f4107..30f8743 100644
--- a/include/private/sapp_mem.h
+++ b/include/private/sapp_mem.h
@@ -5,32 +5,32 @@
extern "C" {
#endif
-#define MEM_STAT_GLOBAL_THREAD_ID -1 /* ȫ�ֱ����ڴ��thread_id, ��ʵû����, ���ֽӿ�һ��, ���ڷ�IO�߳� */
+#define MEM_STAT_GLOBAL_THREAD_ID -1 /* ȫ�ֱ����ڴ��thread_id, ��ʵû����, ���ֽӿ�һ��, ���ڷ�IO�߳� */
typedef enum{
__SAPP_MEM_TYPE_INIT = 0,
- SAPP_MEM_STACK_LOCAL, /* ����ջ����ʱ������ڴ�, �������ؾͻᱻ�ͷ� */
+ SAPP_MEM_STACK_LOCAL, /* ����ջ����ʱ������ڴ�, �������ؾͻᱻ�ͷ� */
SAPP_MEM_FIX_GLOBAL_VAL,
SAPP_MEM_FIX_GLOBAL_STREAM,
- SAPP_MEM_FIX_PLUG_CTRL, /* ���������ʼ�������������ݽṹ, ��ÿ������̬���صIJ���޹� */
+ SAPP_MEM_FIX_PLUG_CTRL, /* ���������ʼ�������������ݽṹ, ��ÿ������̬���صIJ���޹� */
/*******************************************
- ������ȫ�ֱ���, ���ʼ���󲻱���ڴ�
+ ������ȫ�ֱ���, ���ʼ���󲻱���ڴ�
*******************************************/
__SAPP_FIX_DYN_SEPARATOR,
/*******************************************
- �����Ƕ��̶߳�̬�ڴ�
+ �����Ƕ��̶߳�̬�ڴ�
*******************************************/
- SAPP_MEM_DYN_MEM_HDR, /* Ϊ���������ͳ��, ���ӵ��ڴ�ͷ������ */
- SAPP_MEM_DYN_IP_FRAG_PKT, /* ��̫��������ipv4��ipv6, �˴�ͳһ���� */
+ SAPP_MEM_DYN_MEM_HDR, /* Ϊ���������ͳ��, ���ӵ��ڴ�ͷ������ */
+ SAPP_MEM_DYN_IP_FRAG_PKT, /* ��̫��������ipv4��ipv6, �˴�ͳһ���� */
SAPP_MEM_DYN_TCP_STREAM,
SAPP_MEM_DYN_UDP_STREAM,
- SAPP_MEM_DYN_TCP_HALF_STREAM, /* c2s, s2c�����ṹ */
+ SAPP_MEM_DYN_TCP_HALF_STREAM, /* c2s, s2c�����ṹ */
SAPP_MEM_DYN_UDP_HALF_STREAM,
- SAPP_MEM_DYN_PLUG_CTRL, /* ÿ����������������������ݽṹ, ��������ҵ����ʹ�õ��ڴ� */
+ SAPP_MEM_DYN_PLUG_CTRL, /* ÿ����������������������ݽṹ, ��������ҵ����ʹ�õ��ڴ� */
SAPP_MEM_DYN_TCP_UNORDER,
SAPP_MEM_DYN_TCP_SYN_OPT,
SAPP_MEM_DYN_TCP_POLLING_RAW_PKT,
@@ -39,11 +39,11 @@ typedef enum{
SAPP_MEM_DYN_UDP_DETAIL,
SAPP_MEM_DYN_TCP_FLOW_STAT,
SAPP_MEM_DYN_UDP_FLOW_STAT,
- SAPP_MEM_DYN_TCP_PROJECT, /* ������project����Ĺ����ṹ, �������������project_addʱ������ڴ� */
+ SAPP_MEM_DYN_TCP_PROJECT, /* ������project����Ĺ����ṹ, �������������project_addʱ������ڴ� */
SAPP_MEM_DYN_UDP_PROJECT,
SAPP_MEM_DYN_TCP_BRIDGE,
SAPP_MEM_DYN_UDP_BRIDGE,
- SAPP_MEM_DYN_PADDR, /* ÿ���ַ��ռ���ڴ�, �Ͳ��־���Э����, ̫�鷳��!! */
+ SAPP_MEM_DYN_PADDR, /* ÿ���ַ��ռ���ڴ�, �Ͳ��־���Э����, ̫�鷳��!! */
SAPP_MEM_DYN_DETAIN_PKT,
SAPP_MEM_DYN_SID_LIST,
SAPP_MEM_DYN_BLOOM_FILTER,
@@ -69,7 +69,6 @@ void sapp_mem_stat_output(void);
#define SAPP_GLOBAL_FREE(mem) do{if(mem){sapp_mem_free(SAPP_MEM_FIX_GLOBAL_VAL, MEM_STAT_GLOBAL_THREAD_ID, (void *)mem); mem = NULL;}}while(0)
#endif
-int bloomfilter_get_mem_stat(int tseq, long long *mem_blocks, long long *mem_bytes);
#ifdef __cplusplus
}
diff --git a/include/private/stream_internal.h b/include/private/stream_internal.h
index c57f5f0..e103920 100644
--- a/include/private/stream_internal.h
+++ b/include/private/stream_internal.h
@@ -20,19 +20,19 @@
//#define STREAM_RAWPKT_MD5_CHECK "48fdc3294bced1c74a853e197db8fd67"
//#define STREAM_TUNNEL_MD5_CHECK "d20aa6b4f5683b7b0040676547997be0"
-#define IP_PORT_UNION_VERSION (1) /* �Ƿ�IP-PORT�ϲ� */
-#define COMPAT_PAPP_FOR_BENCHMARK (0) /* 2015-01-07 lijia add, ͬpapp�ԱȽ��ʱ, ��ʱ�ر�Ƕ�ס���������Э��, ����һ�� */
-#define USE_RBTREE_INSTEAD_LIST (0) /* ��HASH��ͻʱ, ʹ�ú������������, ������������±��� */
-//#define USE_LINUX_KERNEL_HASH_ALGO (1) /* ʹ��LINUX�ں�HASH�㷨 */
+#define IP_PORT_UNION_VERSION (1) /* �Ƿ�IP-PORT�ϲ� */
+#define COMPAT_PAPP_FOR_BENCHMARK (0) /* 2015-01-07 lijia add, ͬpapp�ԱȽ��ʱ, ��ʱ�ر�Ƕ�ס���������Э��, ����һ�� */
+#define USE_RBTREE_INSTEAD_LIST (0) /* ��HASH��ͻʱ, ʹ�ú������������, ������������±��� */
+//#define USE_LINUX_KERNEL_HASH_ALGO (1) /* ʹ��LINUX�ں�HASH�㷨 */
-#define SAPP_INSECTICIDE (0) /* ɱ��(DEBUG)��ʱ����, ������Ī�������BUGʱ��ʱ����, ���緢������, �����糬�� */
+#define SAPP_INSECTICIDE (0) /* ɱ��(DEBUG)��ʱ����, ������Ī�������BUGʱ��ʱ����, ���緢������, �����糬�� */
-//#define CYCLE_PKT_DUMP (1 && DEBUG) /* 2015-04-16 lijia add, ������������޹�coredump, ���Ҳ���ԭ�� */
-#define CYCLE_PKT_DUMP (1) /* 2015-04-16 lijia add, ������������޹�coredump, ���Ҳ���ԭ�� */
+//#define CYCLE_PKT_DUMP (1 && DEBUG) /* 2015-04-16 lijia add, ������������޹�coredump, ���Ҳ���ԭ�� */
+#define CYCLE_PKT_DUMP (1) /* 2015-04-16 lijia add, ������������޹�coredump, ���Ҳ���ԭ�� */
-#define PCAP_CAP_FROM_IP (0) /* Ϊ��ģ��pag�����߻���, ��pcapҲģ���IPv4ͷ����ʼ��ȡ */
+#define PCAP_CAP_FROM_IP (0) /* Ϊ��ģ��pag�����߻���, ��pcapҲģ���IPv4ͷ����ʼ��ȡ */
-//#define NON_PKT_THREAD_SEND_QUEUE (64) /* �����������߳�����Ͷ������� */
+//#define NON_PKT_THREAD_SEND_QUEUE (64) /* �����������߳�����Ͷ������� */
#define IKNOW_ENABLE (0)
@@ -54,7 +54,7 @@
#define sapp_get_struct_header(ptr, type, member) container_of(ptr, type, member)
-#define RAW_PKT_MAGIC_NUM (0xF1E2D3C4) /* 1:���ڼ��ݾ���Ŀ, ��call_old��������ݽṹʱ,ʶ��ԭʼ������Դ; 2:��ȫ�Լ�� */
+#define RAW_PKT_MAGIC_NUM (0xF1E2D3C4) /* 1:���ڼ��ݾ���Ŀ, ��call_old��������ݽṹʱ,ʶ��ԭʼ������Դ; 2:��ȫ�Լ�� */
#define SAPP_DESTROY_DONE_FLAG (0x7FFFFFFF)
@@ -68,55 +68,55 @@ struct detain_pkt;
struct rawpkt_metadata;
-/* ԭʼ���ṹ */
+/* ԭʼ���ṹ */
typedef struct {
/* ---8 bytes-- */
unsigned int magic_num;
- int offset_to_raw_pkt_hdr; /* ����ص���Ӧ��������raw_pkt_data��ƫ���� */
+ int offset_to_raw_pkt_hdr; /* ����ص���Ӧ��������raw_pkt_data��ƫ���� */
/* ===8 bytes=== */
/* ---8 bytes-- */
- enum addr_type_t low_layer_type; /* ԭʼ����ײ�Э�������, ������MAC(pcap����), Ҳ������IPv4(pag����) */
- int __lib_raw_pkt_len; /* �ײ㲶�����ṩ�İ���ʵԭʼ���� */
+ enum addr_type_t low_layer_type; /* ԭʼ����ײ�Э�������, ������MAC(pcap����), Ҳ������IPv4(pag����) */
+ int __lib_raw_pkt_len; /* �ײ㲶�����ṩ�İ���ʵԭʼ���� */
/* ===8 bytes=== */
/* ---8 bytes-- */
- int raw_pkt_len; /* ���ϲ�Ӧ�ÿ���ԭʼ���ܳ���, �п��ܲ�����ʵ��, ����������Ethernet�� */
- unsigned int hd_hash; /* ����Ӳ���������Ԫ��HASH, ����ƽ̨CPU�������� */
+ int raw_pkt_len; /* ���ϲ�Ӧ�ÿ���ԭʼ���ܳ���, �п��ܲ�����ʵ��, ����������Ethernet�� */
+ unsigned int hd_hash; /* ����Ӳ���������Ԫ��HASH, ����ƽ̨CPU�������� */
/* ===8 bytes=== */
- const void *__lib_raw_pkt_data; /* �ײ㲶�����ṩ����ʵԭʼ��ָ�� */
- const void *raw_pkt_data; /* ���ϲ�Ӧ�ÿ���ԭʼ��ͷָ��, �п���������Ethernet��, ����low_layer_type�ж�Э������ */
+ const void *__lib_raw_pkt_data; /* �ײ㲶�����ṩ����ʵԭʼ��ָ�� */
+ const void *raw_pkt_data; /* ���ϲ�Ӧ�ÿ���ԭʼ��ͷָ��, �п���������Ethernet��, ����low_layer_type�ж�Э������ */
- struct timeval raw_pkt_ts; /* ԭʼ������ʱ���, ���ȫΪ0��֧�ִ˹���(��pagģʽ) */
+ struct timeval raw_pkt_ts; /* ԭʼ������ʱ���, ���ȫΪ0��֧�ִ˹���(��pagģʽ) */
//2*8 Bytes
- const void *io_lib_pkt_reference; /* ���õײ�I/O���ԭʼ�������ṹ, ����:����marsio��˵, ���ײ��mbuf�ṹ */
+ const void *io_lib_pkt_reference; /* ���õײ�I/O���ԭʼ�������ṹ, ����:����marsio��˵, ���ײ��mbuf�ṹ */
/* ---8 bytes-- */
- int payload_len; /* ���س��� */
- int device_index;/* �ж������ʱ, Ҫ��֤���ĸ������ʹ��ĸ����� */
+ int payload_len; /* ���س��� */
+ int device_index;/* �ж������ʱ, Ҫ��֤���ĸ������ʹ��ĸ����� */
/* ===8 bytes=== */
/* ---8 bytes-- */
unsigned char route_dir:1;
- unsigned char is_overlay_pkt:1; /* ��ʾ����ʵ��·�е����ݰ�, Ҫ��������ע, ��������������һ������; ����Ҫ���� */
+ unsigned char is_overlay_pkt:1; /* ��ʾ����ʵ��·�е����ݰ�, Ҫ��������ע, ��������������һ������; ����Ҫ���� */
unsigned char is_ctrl_pkt:1;
- unsigned char diagnose_error_to_dump:1; /* ��ij�ִ������ݰ�, ����pkt_dump�洢��udp socket���͸�tcpdump_mesa */
- unsigned char drop_current_pkt_flag:1; /* �������MSO_DROP_CURRENT_PKT���ö�����ǰ��, ÿ�δ�����Ҫ��� */
+ unsigned char diagnose_error_to_dump:1; /* ��ij�ִ������ݰ�, ����pkt_dump�洢��udp socket���͸�tcpdump_mesa */
+ unsigned char drop_current_pkt_flag:1; /* �������MSO_DROP_CURRENT_PKT���ö�����ǰ��, ÿ�δ�����Ҫ��� */
unsigned char mac_flipping_enable:1;
unsigned char padding_flags:2;
//1 Bytes
unsigned char padding[2];
- unsigned char overlay_layer_bytes; /* ������װ�㳤��, ����vxlanģʽ����50�ֽ� */
+ unsigned char overlay_layer_bytes; /* ������װ�㳤��, ����vxlanģʽ����50�ֽ� */
//3 Bytes
//4 Bytes
- unsigned short vlan_flipping_couple[2]; /*2020-09-28 lijia add, in host order, vlan flipping for adev, index0��ʾ�յ���ǰ����vlan_id, index1��ʾԭ��ת����vlan_id */
+ unsigned short vlan_flipping_couple[2]; /*2020-09-28 lijia add, in host order, vlan flipping for adev, index0��ʾ�յ���ǰ����vlan_id, index1��ʾԭ��ת����vlan_id */
//4Bytes
/* ===8 bytes=== */
struct detain_pkt *d_pkt;
- struct rawpkt_metadata *meta_route_dir[2];// ���������metadata, �����ڵ���low_level_sendʱ, ���marsio 4.6����Ҫ����Ϣ.
+ struct rawpkt_metadata *meta_route_dir[2];// ���������metadata, �����ڵ���low_level_sendʱ, ���marsio 4.6����Ҫ����Ϣ.
struct segment_id_list *append_list;
struct segment_id_list *prepend_list;
unsigned long long stream_trace_id;
@@ -144,10 +144,10 @@ struct buf_unorder
struct buf_unorder *prev;
//void *data;
//UINT32 len;
- void *this_ip_hdr; /* ������Դ����ʵԭʼ��, Ҳ������Դ�������IP��Ƭ��,��'ip_reassemble_pkt'���� */
+ void *this_ip_hdr; /* ������Դ����ʵԭʼ��, Ҳ������Դ�������IP��Ƭ��,��'ip_reassemble_pkt'���� */
struct mesa_tcp_hdr *this_tcp_hdr;
- void *tcpdata; /* TCP�����ݲ���ָ��, ����TCPͷ */
- UINT16 tcpdatalen; /* TCP�����ݲ��ֳ��� */
+ void *tcpdata; /* TCP�����ݲ���ָ��, ����TCPͷ */
+ UINT16 tcpdatalen; /* TCP�����ݲ��ֳ��� */
UINT16 urg_ptr;
char fin;
char urg;
@@ -155,80 +155,80 @@ struct buf_unorder
unsigned char ip_reassemble_pkt;
UINT32 seq;
UINT32 ack;
- raw_ipfrag_list_t *ipfrag_list; /* �����ǰ����IP��Ƭ����İ�, ��Ҫ�洢����IP��Ƭ������ */
- raw_pkt_t raw_pkt; /* ������洢ԭʼ�� */
+ raw_ipfrag_list_t *ipfrag_list; /* �����ǰ����IP��Ƭ����İ�, ��Ҫ�洢����IP��Ƭ������ */
+ raw_pkt_t raw_pkt; /* ������洢ԭʼ�� */
};
-/*�����ṹ�嶨�壺*/
+/*�����ṹ�嶨�壺*/
struct half_tcpstream
{
UCHAR *data;
- UINT32 offset; /*data�е�һ���ֽ���TCP�������е�ƫ����*/
- UINT32 count; /*�����ӽ���������Ϊֹ������������ܳ����ֽ���*/
- UINT32 count_new; /*�����µ��������ֽ���*/
- UINT32 count_ideal; /*�����ӽ���������Ϊֹ��������Ӧ�õ���������ܳ���*/
- UINT32 pktcout; /*�����ۼƵ���İ�����, �����ش���, ACK, ������SYN */
- UINT32 totallost; /*�����ۼƶ�������*/
- UINT32 seq; /*���������ڴ���seq���*/
- UINT32 first_data_seq; /*����������ʼ�ĵ�seq���*/
+ UINT32 offset; /*data�е�һ���ֽ���TCP�������е�ƫ����*/
+ UINT32 count; /*�����ӽ���������Ϊֹ������������ܳ����ֽ���*/
+ UINT32 count_new; /*�����µ��������ֽ���*/
+ UINT32 count_ideal; /*�����ӽ���������Ϊֹ��������Ӧ�õ���������ܳ���*/
+ UINT32 pktcout; /*�����ۼƵ���İ�����, �����ش���, ACK, ������SYN */
+ UINT32 totallost; /*�����ۼƶ�������*/
+ UINT32 seq; /*���������ڴ���seq���*/
+ UINT32 first_data_seq; /*����������ʼ�ĵ�seq���*/
- //UINT32 ack_seq; /*�����������ʹ�õ�Ӧ���, 2017-08-02 lijia modify , �ƶ���struct tcpdetail_private */
+ //UINT32 ack_seq; /*�����������ʹ�õ�Ӧ���, 2017-08-02 lijia modify , �ƶ���struct tcpdetail_private */
- UINT16 window; /*�������ݻ������ڴ�С*/
+ UINT16 window; /*�������ݻ������ڴ�С*/
UCHAR __pad__;
UCHAR finstate; /*fin״̬*/
- UINT16 unorder_cnt;/* 2014-11-27 lijia modify, ijЩ���������޴�, UCHAR�Ͳ���, ��չΪUINT16 */
- UINT16 maxunorder; /* 2014-11-27 lijia modify, ijЩ���������޴�, UCHAR�Ͳ���, ��չΪUINT16 */
- struct buf_unorder *unorderlist; /*�����������*/
- struct buf_unorder *unorderlisttail; /*�����������β��ָ��*/
+ UINT16 unorder_cnt;/* 2014-11-27 lijia modify, ijЩ���������޴�, UCHAR�Ͳ���, ��չΪUINT16 */
+ UINT16 maxunorder; /* 2014-11-27 lijia modify, ijЩ���������޴�, UCHAR�Ͳ���, ��չΪUINT16 */
+ struct buf_unorder *unorderlist; /*�����������*/
+ struct buf_unorder *unorderlisttail; /*�����������β��ָ��*/
};
-/* ����ÿ�������������һ����, ����polling entry����ʹ�� */
+/* ����ÿ�������������һ����, ����polling entry����ʹ�� */
typedef struct {
const raw_pkt_t *raw_pkt_stream_dir[2];
- struct rawpkt_metadata* meta_stream_dir[2];// ÿ������metadata��[0:c2s, 1:s2c]����洢��polling_inject_context��, update_raw_pkt��������ʱ����������䵽���ص�rawpkt��
+ struct rawpkt_metadata* meta_stream_dir[2];// ÿ������metadata��[0:c2s, 1:s2c]����洢��polling_inject_context��, update_raw_pkt��������ʱ����������䵽���ص�rawpkt��
}polling_inject_context_t;
struct streaminfo_private
{
- /* ����ṹ�����ڽṹ����ǰ, ָ���ַ���Ի���ǿת */
+ /* ����ṹ�����ڽṹ����ǰ, ָ���ַ���Ի���ǿת */
struct streaminfo stream_public;
- struct streaminfo_private *pfather_pr; /* ��ʵ�������ϲ���ָ��, ������vxlan�ȷ�װ��, stream_public.pfather�Ǹ�ҵ��������,������vxlan��� */
- /* ���±���Ϊƽ̨�ڲ�˽��, ���ⲻ�ɼ� */
+ struct streaminfo_private *pfather_pr; /* ��ʵ�������ϲ���ָ��, ������vxlan�ȷ�װ��, stream_public.pfather�Ǹ�ҵ��������,������vxlan��� */
+ /* ���±���Ϊƽ̨�ڲ�˽��, ���ⲻ�ɼ� */
void *cur_plugin_cb_func;
- void *pproject; //ÿ�����̿����Զ���ʹ�ã�
+ void *pproject; //ÿ�����̿����Զ���ʹ�ã�
/* ---8 bytes-- */
- UCHAR layer_dir:2; /* ������Ч, ��ǰ��ĵ�ַ�Ƿ��Ĭ�Ϲ���"��˿��ǿͻ���"��ͬ */
- UCHAR stream_dir:1; /* ��������������Ч, ���Ĵ洢�ĵ�ַ�Ƿ��Ĭ�Ϲ���"��˿��ǿͻ���"��ͬ */
- UCHAR stream_c2s_route_dir:1; /* c2s����İ�, ��Ӧ����·route dir����, ���ڻ�ȡinbound, outbound���� */
- UCHAR addr_use_as_hash:1; /* �����addr�Ƿ���ΪHASH����ͱȽϵIJ���, ��:MAC��ַ��������� */
+ UCHAR layer_dir:2; /* ������Ч, ��ǰ��ĵ�ַ�Ƿ��Ĭ�Ϲ���"��˿��ǿͻ���"��ͬ */
+ UCHAR stream_dir:1; /* ��������������Ч, ���Ĵ洢�ĵ�ַ�Ƿ��Ĭ�Ϲ���"��˿��ǿͻ���"��ͬ */
+ UCHAR stream_c2s_route_dir:1; /* c2s����İ�, ��Ӧ����·route dir����, ���ڻ�ȡinbound, outbound���� */
+ UCHAR addr_use_as_hash:1; /* �����addr�Ƿ���ΪHASH����ͱȽϵIJ���, ��:MAC��ַ��������� */
UCHAR set_special_timeout:1;
- UCHAR need_update_opposite_addr:1;/*�����addr�Ƿ��ڶԲ�����ʱ���£��磺MPLS��ǩ�ǶԳ�ʱ��Ҫ��S2C���һ������¼�����ǩ,��ֵĬ��Ϊ0��������Ҫ����*/
- UCHAR stream_killed_flag:1; /* 2014-08-22 lijia add, ����ģʽ��, �Ѿ������Kill, ֮�������ֱ��Drop��Kill, �����ٸ��ϲ��� */
- UCHAR dirreverse; /* ��������ʱ�Ƿ������ip��ַ��ת, ����"��˿��ǿͻ���"�����෴ */
- UINT16 timeout;/* ÿ�����ӵĶ��г�ʱʱ��, ��ֵ��������;, 1:���ھ�����̭��ʱ���ް��������, �Խ�Լ�ڴ�; 2:���ڱ�����ʱ���ް�����, ����IM�೤ʱ���ް������Ӳ�δ����, �����ýϴ��timeout */
- unsigned short offset_to_raw_pkt_hdr; /* ����ͷ�����ԭʼ������ʼ��ַ��ƫ���� */
- unsigned short offset_to_ip_hdr; /* 2015-12-07 lijia add, UDP/TCP ��ͷ����ڳ��ص�IP��ͷƫ���� */
+ UCHAR need_update_opposite_addr:1;/*�����addr�Ƿ��ڶԲ�����ʱ���£��磺MPLS��ǩ�ǶԳ�ʱ��Ҫ��S2C���һ������¼�����ǩ,��ֵĬ��Ϊ0��������Ҫ����*/
+ UCHAR stream_killed_flag:1; /* 2014-08-22 lijia add, ����ģʽ��, �Ѿ������Kill, ֮�������ֱ��Drop��Kill, �����ٸ��ϲ��� */
+ UCHAR dirreverse; /* ��������ʱ�Ƿ������ip��ַ��ת, ����"��˿��ǿͻ���"�����෴ */
+ UINT16 timeout;/* ÿ�����ӵĶ��г�ʱʱ��, ��ֵ��������;, 1:���ھ�����̭��ʱ���ް��������, �Խ�Լ�ڴ�; 2:���ڱ�����ʱ���ް�����, ����IM�೤ʱ���ް������Ӳ�δ����, �����ýϴ��timeout */
+ unsigned short offset_to_raw_pkt_hdr; /* ����ͷ�����ԭʼ������ʼ��ַ��ƫ���� */
+ unsigned short offset_to_ip_hdr; /* 2015-12-07 lijia add, UDP/TCP ��ͷ����ڳ��ص�IP��ͷƫ���� */
/* ===8 bytes=== */
- const raw_pkt_t *raw_pkt; /* 2014-12-30 lijia add, ��Щ�ص�������֧��ԭʼ��, ����������Ҫ, �洢��private�ṹ�� */
+ const raw_pkt_t *raw_pkt; /* 2014-12-30 lijia add, ��Щ�ص�������֧��ԭʼ��, ����������Ҫ, �洢��private�ṹ�� */
/* ---8 bytes-- */
- unsigned int hash_slave; /* 2015-12-14 lijia add, ʹ��linux_jhash����ʱ, ����ͬʱ�õ��������ϵ�HASHֵ, ��HASH����ȷ����HASH����SLOTλ��, slave_HASH���ڿ��ٱȽϵ�ַ�Ƿ���� */
- unsigned char hash_not_head_times;/* 2015-12-15 lijia add, ��ǰindex����HASH SLOT�ĵ�һλ�Ĵ��� */
- unsigned char cur_layer_raw_hdr_len; /* 2017-10-31 lijia add, ��ǰ���ԭʼ����ַ����, ��pppͷ��ѹ��, ԭ���汾�޷��������״̬, ����ʱҲ�޷���֪��ַ������ */
+ unsigned int hash_slave; /* 2015-12-14 lijia add, ʹ��linux_jhash����ʱ, ����ͬʱ�õ��������ϵ�HASHֵ, ��HASH����ȷ����HASH����SLOTλ��, slave_HASH���ڿ��ٱȽϵ�ַ�Ƿ���� */
+ unsigned char hash_not_head_times;/* 2015-12-15 lijia add, ��ǰindex����HASH SLOT�ĵ�һλ�Ĵ��� */
+ unsigned char cur_layer_raw_hdr_len; /* 2017-10-31 lijia add, ��ǰ���ԭʼ����ַ����, ��pppͷ��ѹ��, ԭ���汾�޷��������״̬, ����ʱҲ�޷���֪��ַ������ */
unsigned char __pad:1;
unsigned char packet_process_context:1;
unsigned char is_ctrl_pkt:1;
unsigned char plugin_process_context:1; /* 2019-09-07 lijia add, for polling entry send packet */
- unsigned char stream_close_reason:4; /* 2019-02-14 lijia add, ����TCPʹ��tcpdetail_private��link_state����, ����UDP֮ǰû��, ���pad�����˱��� */
+ unsigned char stream_close_reason:4; /* 2019-02-14 lijia add, ����TCPʹ��tcpdetail_private��link_state����, ����UDP֮ǰû��, ���pad�����˱��� */
unsigned char gdev_block_timer;
/* ===8 bytes=== */
/* ---8 bytes-- */
- unsigned short stream_low_layer_tunnel_type; /* 2016-07-25 lijia add, ��¼�����ײ���������, 0Ϊ������, �������:enum stream_carry_tunnel_t */
- unsigned short stream_carry_up_layer_tunnel_type; /* ��ǰ���ϲ����������, ���統ǰ��ΪUDP, ���صĿ�����teredo������L2TP���� */
- /* 2016-07-08 lijia add, for janus hijack, ��Ӧ�ô洢��half_stream, �����յ�SYNʱ, ��û�д���half_streamʵ��, �����ݴ���streaminfo_private */
+ unsigned short stream_low_layer_tunnel_type; /* 2016-07-25 lijia add, ��¼�����ײ���������, 0Ϊ������, �������:enum stream_carry_tunnel_t */
+ unsigned short stream_carry_up_layer_tunnel_type; /* ��ǰ���ϲ����������, ���統ǰ��ΪUDP, ���صĿ�����teredo������L2TP���� */
+ /* 2016-07-08 lijia add, for janus hijack, ��Ӧ�ô洢��half_stream, �����յ�SYNʱ, ��û�д���half_streamʵ��, �����ݴ���streaminfo_private */
unsigned short syn_opt_num;
unsigned short synack_opt_num;
/* ===8 bytes=== */
@@ -243,67 +243,67 @@ struct streaminfo_private
struct segment_id_list *sid_append_list;
struct segment_id_list *sid_prepend_list;
- /* ȫ����id, stream_index��ʷ���Ѿ���ʾ������Ψһid, �˴�Ҫ��֤��Ⱥ���л������ظ�, �����½�����;
- ��λ --- ��λ
+ /* ȫ����id, stream_index��ʷ���Ѿ���ʾ������Ψһid, �˴�Ҫ��֤��Ⱥ���л������ظ�, �����½�����;
+ ��λ --- ��λ
1 | 12bit device_id | 8bit thread_id | 28bit timestamp in sec | 15bit sequence per thread
*/
unsigned long long global_stream_id;
unsigned long long stream_create_timestamp_ms;
unsigned long long stream_lastupdate_timestamp_ms;
/* ---8 bytes-- */
- unsigned char layer_index:4; /* ��ʾ��ǰ��ļ���, ����ײ㿪ʼ,һ����ethernet��ʼ, ��0��ʼ����, 4bit���֧��15��Ƕ��, Ҳ�ܷ�ֹ����Ƕ�׹���(Ŀǰ��û��������) */
- unsigned char create_dir_by_well_known_port:1; /* UDP��TCP��data������, ����well_known_port����, �����ǰ���˿��ǿͻ���ԭ�򴴽��� */
+ unsigned char layer_index:4; /* ��ʾ��ǰ��ļ���, ����ײ㿪ʼ,һ����ethernet��ʼ, ��0��ʼ����, 4bit���֧��15��Ƕ��, Ҳ�ܷ�ֹ����Ƕ�׹���(Ŀǰ��û��������) */
+ unsigned char create_dir_by_well_known_port:1; /* UDP��TCP��data������, ����well_known_port����, �����ǰ���˿��ǿͻ���ԭ�򴴽��� */
char __pad2:3;
- char has_duplicate_pkt; /* ��ǰ�������й��ظ����ݰ�, ����������Ӧ��ÿ������� */
+ char has_duplicate_pkt; /* ��ǰ�������й��ظ����ݰ�, ����������Ӧ��ÿ������� */
char under_ddos_bypass;
char __pad3[3];
/* ===8 bytes=== */
unsigned char ip_ttl_c2s;
unsigned char ip_ttl_s2c;
- void *stream_bridge; /* 20210425 lijia add, ����project����, ֧��ͬ�����첽����ģʽ, ԭ��project�����첽ģʽ */
+ void *stream_bridge; /* 20210425 lijia add, ����project����, ֧��ͬ�����첽����ģʽ, ԭ��project�����첽ģʽ */
};
struct tcpdetail_private
{
- /* ����ṹ�����ڽṹ����ǰ, ָ���ַ���Ի���ǿת */
+ /* ����ṹ�����ڽṹ����ǰ, ָ���ַ���Ի���ǿת */
struct tcpdetail tcpdetail_public;
/* ---8 bytes-- */
UCHAR multisynflag:2; // multi syn
- UCHAR ignore_rst_fin:1; //������rst, fin����, ֻ����ʱ��lru����
- UCHAR drop_stream_flag:1; //2019-11-20 lijia add, ����ͬDROPPKT, ֻ����������������stream
- UCHAR auto_remedy_flag:1; //�Ƿ�����FD����
- UCHAR needackflag:1; //��Ҫ�ϴ�ack����
+ UCHAR ignore_rst_fin:1; //������rst, fin����, ֻ����ʱ��lru����
+ UCHAR drop_stream_flag:1; //2019-11-20 lijia add, ����ͬDROPPKT, ֻ����������������stream
+ UCHAR auto_remedy_flag:1; //�Ƿ�����FD����
+ UCHAR needackflag:1; //��Ҫ�ϴ�ack����
UCHAR takeoverflag:1;
- UCHAR has_lost_pkt_flag:1; //2020-08-23 lijia add, ����������������־λ
- UCHAR tcpstateflag; // ���ڼ�¼tcp�ĻỰSYN���״̬
- UCHAR link_state; // ���ӵ�״̬
+ UCHAR has_lost_pkt_flag:1; //2020-08-23 lijia add, ����������������־λ
+ UCHAR tcpstateflag; // ���ڼ�¼tcp�ĻỰSYN���״̬
+ UCHAR link_state; // ���ӵ�״̬
UCHAR creat_mod;
- UINT16 tcpoverlen; // modify by lqy 20150225, ��¼��ǰ������һ�������ص�tcp���ȣ�
- UCHAR offload_stream_flag; //2022-04-13 liuxueli add, ������������stream
+ UINT16 tcpoverlen; // modify by lqy 20150225, ��¼��ǰ������һ�������ص�tcp���ȣ�
+ UCHAR offload_stream_flag; //2022-04-13 liuxueli add, ������������stream
UCHAR pad;
/* ===8 bytes=== */
time_t offload_stream_timestamp_s;
- struct half_tcpstream *pclient; //��client��TCP������Ϣ
- struct half_tcpstream *pserver; //�� server��TCP������Ϣ
- UINT32 iserverseq; //���ӽ���ʱ��ʱ�洢seq, ��ֵ��C2S->SYN+1
- UINT32 iclientseq; //���ӽ���ʱ��ʱ�洢seq, ��ֵ��S2C->SYN+1
+ struct half_tcpstream *pclient; //��client��TCP������Ϣ
+ struct half_tcpstream *pserver; //�� server��TCP������Ϣ
+ UINT32 iserverseq; //���ӽ���ʱ��ʱ�洢seq, ��ֵ��C2S->SYN+1
+ UINT32 iclientseq; //���ӽ���ʱ��ʱ�洢seq, ��ֵ��S2C->SYN+1
/* NOTE:
- ��first_ack_seq������half_tcpstream��?
- ��half_tcpstream�����յ���һ�����и��صİ��ŷ����,
- �����tcp_deal_ack()����������, �����S2C����, ��ô��һ��S2C���ݰ�����ʱ, �Ѿ�����first_ack_seq��.
- �����Է�ֹDDOS����.
+ ��first_ack_seq������half_tcpstream��?
+ ��half_tcpstream�����յ���һ�����и��صİ��ŷ����,
+ �����tcp_deal_ack()����������, �����S2C����, ��ô��һ��S2C���ݰ�����ʱ, �Ѿ�����first_ack_seq��.
+ �����Է�ֹDDOS����.
*/
- UINT32 C2S_first_ack_seq; /* 2017-08-02 lijia modify, C2S���һ��ACK��, ��half_tcpstream->ack_seqһ����Լ�����������Բ���������� */
- UINT32 C2S_ack_seq; /* 2017-08-02 lijia add, C2S�൱ǰ��ACK�� */
- UINT32 S2C_first_ack_seq; /* 2017-08-02 lijia modify, C2S���һ��ACK��, ��half_tcpstream->ack_seqһ����Լ�����������Բ���������� */
- UINT32 S2C_ack_seq; /* 2017-08-02 lijia add, S2C�൱ǰ��ACK�� */
- void *apme; //Ӧ�ò�������
- void *pAllpktpme; //��״̬��tcp����������
- struct tcp_flow_stat *flow_stat; /* 2016-07-14 lijia add, ���ڼ�¼TCP��data���ļ���, ʵ���ڴ������ͷ���projectģ�����, ����ΪNULL, */
- struct tcp_flow_stat *deduce_flow_stat; /* 2018-10-30 lijia add, ���ڼ�¼������ƶϳ������ϴ��������, ���������ij���; �Լ������������, �Զ�Ӧ���յ������� */
+ UINT32 C2S_first_ack_seq; /* 2017-08-02 lijia modify, C2S���һ��ACK��, ��half_tcpstream->ack_seqһ����Լ�����������Բ���������� */
+ UINT32 C2S_ack_seq; /* 2017-08-02 lijia add, C2S�൱ǰ��ACK�� */
+ UINT32 S2C_first_ack_seq; /* 2017-08-02 lijia modify, C2S���һ��ACK��, ��half_tcpstream->ack_seqһ����Լ�����������Բ���������� */
+ UINT32 S2C_ack_seq; /* 2017-08-02 lijia add, S2C�൱ǰ��ACK�� */
+ void *apme; //Ӧ�ò�������
+ void *pAllpktpme; //��״̬��tcp����������
+ struct tcp_flow_stat *flow_stat; /* 2016-07-14 lijia add, ���ڼ�¼TCP��data���ļ���, ʵ���ڴ������ͷ���projectģ�����, ����ΪNULL, */
+ struct tcp_flow_stat *deduce_flow_stat; /* 2018-10-30 lijia add, ���ڼ�¼������ƶϳ������ϴ��������, ���������ij���; �Լ������������, �Զ�Ӧ���յ������� */
unsigned short rtt_csc;
unsigned short rtt_scs;
long long last_c2s_pkt_rcv_time;
@@ -312,12 +312,12 @@ struct tcpdetail_private
struct udpdetail_private
{
- /* ����ṹ�����ڽṹ����ǰ, ָ���ַ���Ի���ǿת */
+ /* ����ṹ�����ڽṹ����ǰ, ָ���ַ���Ի���ǿת */
struct udpdetail udpdetail_public;
- void *apme; //Ӧ�ò�������
- struct udp_flow_stat *flow_stat; /* 2015-12-28 lijia add, udpdetail�е���ϸ����(64bit), ʵ���ڴ������ͷ���projectģ�����, ����ΪNULL */
- UCHAR drop_stream_flag; //2020-06-02 lijia add, ����ͬDROPPKT, ֻ����������������stream
- UCHAR offload_stream_flag; //2022-04-13 liuxueli add, ������������stream
+ void *apme; //Ӧ�ò�������
+ struct udp_flow_stat *flow_stat; /* 2015-12-28 lijia add, udpdetail�е���ϸ����(64bit), ʵ���ڴ������ͷ���projectģ�����, ����ΪNULL */
+ UCHAR drop_stream_flag; //2020-06-02 lijia add, ����ͬDROPPKT, ֻ����������������stream
+ UCHAR offload_stream_flag; //2022-04-13 liuxueli add, ������������stream
UCHAR pad[6];
time_t offload_stream_timestamp_s;
};
@@ -325,98 +325,98 @@ struct udpdetail_private
/* 2015-02-26 lijia add, for stream-addr-list ntop, pton */
typedef struct{
struct streaminfo stream;
- char addr_value[MAX_ADDR_BIN_VALUE_LEN]; /* Ϊ��paddr������malloc, �������, ��stream����׷��һ�黺�� */
+ char addr_value[MAX_ADDR_BIN_VALUE_LEN]; /* Ϊ��paddr������malloc, �������, ��stream����׷��һ�黺�� */
}addr_continuous_bin_t;
typedef struct{
enum addr_type_t addr_type_bin;
- UCHAR stream_type;/* ����ʶ��ADDR_TYPE_IPV4��TCP����UDP */
+ UCHAR stream_type;/* ����ʶ��ADDR_TYPE_IPV4��TCP����UDP */
const char *addr_type_str;
const char *addr_type_prefix;
- const char *addr_type_prefix_with_delim; /* ���ָ�����ǰ׺, ���ڱȽ��ַ���, ��ֹIPv4��IPv4_TCP�ַ����Ƚ�ʱ����, �����IPv4:, IPv4_TCP:�Ͳ����ڻ������� */
+ const char *addr_type_prefix_with_delim; /* ���ָ�����ǰ׺, ���ڱȽ��ַ���, ��ֹIPv4��IPv4_TCP�ַ����Ƚ�ʱ����, �����IPv4:, IPv4_TCP:�Ͳ����ڻ������� */
int (*addr_n2p_fun)(const struct layer_addr *paddr, char *buf, int buf_len);
int (*addr_p2n_fun)(char *addr_str, addr_continuous_bin_t *addr_bin_val);
const char *addr_type_string_abbreviation;
}addr_convert_t;
struct pptp_stream_key{
- UINT32 sip; /* TCP-SYN����ԴIP, ����ǰ�data������, ����pptp->message_type�ж�, REQ���������ԴIP��Ϊ��sip */
+ UINT32 sip; /* TCP-SYN����ԴIP, ����ǰ�data������, ����pptp->message_type�ж�, REQ���������ԴIP��Ϊ��sip */
UINT32 dip; /* sip,dip are network order */
- UINT16 sip_side_call_id; /* �������ݰ�����sip������GRE����callid, ʵ�������ʾpeer call id, network order */
- UINT16 dip_side_call_id; /* �������ݰ�����dip������GRE����callid, ʵ�������ʾpeer call id, network order */
- //struct streaminfo_private *stream_pr; /* TODO 1, ���ڱ����ַ����, Ŀǰ��������ײ��IP��call_id */
+ UINT16 sip_side_call_id; /* �������ݰ�����sip������GRE����callid, ʵ�������ʾpeer call id, network order */
+ UINT16 dip_side_call_id; /* �������ݰ�����dip������GRE����callid, ʵ�������ʾpeer call id, network order */
+ //struct streaminfo_private *stream_pr; /* TODO 1, ���ڱ����ַ����, Ŀǰ��������ײ��IP��call_id */
};
-/* PPTPЭ�����������ṹ, sapp�ڲ�ʹ�� */
+/* PPTPЭ�����������ṹ, sapp�ڲ�ʹ�� */
struct pptp_info_pri{
struct MESA_tunnel_info tunnel_context;
struct pptp_stream_key pptp_key;
- stSessionInfo ssinfo; /* ����ҵ�����������Ϣ */
- void *biz_pme; /* ҵ����Զ������� */
- struct streaminfo *my_stream; /* pptp�ײ�UDP�� */
+ stSessionInfo ssinfo; /* ����ҵ�����������Ϣ */
+ void *biz_pme; /* ҵ����Զ������� */
+ struct streaminfo *my_stream; /* pptp�ײ�UDP�� */
unsigned char threadnum;
- char insert_hash_flag; /* ���������ѽ�key����HASH�� */
- char content_notify_biz_flag; /* �Ƿ��Ѿ����ù�ҵ����, ��֮content_type */
+ char insert_hash_flag; /* ���������ѽ�key����HASH�� */
+ char content_notify_biz_flag; /* �Ƿ��Ѿ����ù�ҵ����, ��֮content_type */
};
-/* ˽��pptp��ַ, pptp_addr�ṩ��ҵ����, ����gre_layer_len����FDʱ����ʶ�𱾲�ͷ������ */
+/* ˽��pptp��ַ, pptp_addr�ṩ��ҵ����, ����gre_layer_len����FDʱ����ʶ�𱾲�ͷ������ */
struct layer_addr_pptp_pri{
struct layer_addr_pptp pptp_addr;
int gre_layer_len;
};
struct l2tp_stream_key{
- UINT32 sip; /* L2TP�����������𷽵�IP, ����������SCCRQ, ICRQ, SCCCN�Ȱ���ԴIP, network order */
- UINT32 dip; /* L2TP�����������˵�IP, network order */
+ UINT32 sip; /* L2TP�����������𷽵�IP, ����������SCCRQ, ICRQ, SCCCN�Ȱ���ԴIP, network order */
+ UINT32 dip; /* L2TP�����������˵�IP, network order */
UINT16 sport; /* network order */
UINT16 dport; /* network order */
- UINT16 sip_side_tunnel_id; /* sip�ⷢ������tunnelid, network order */
- UINT16 sip_side_session_id; /* sip�ⷢ������tunnelid, network order */
- UINT16 dip_side_tunnel_id; /* dip�ⷢ������tunnelid, network order */
- UINT16 dip_side_session_id; /* dip�ⷢ������tunnelid, network order */
- //struct streaminfo_private *stream_pr; /* TODO 1, ���ڱ����ַ����, Ŀǰ��������ײ��IP��call_id */
+ UINT16 sip_side_tunnel_id; /* sip�ⷢ������tunnelid, network order */
+ UINT16 sip_side_session_id; /* sip�ⷢ������tunnelid, network order */
+ UINT16 dip_side_tunnel_id; /* dip�ⷢ������tunnelid, network order */
+ UINT16 dip_side_session_id; /* dip�ⷢ������tunnelid, network order */
+ //struct streaminfo_private *stream_pr; /* TODO 1, ���ڱ����ַ����, Ŀǰ��������ײ��IP��call_id */
};
struct l2tp_info_pri{
struct MESA_tunnel_info tunnel_context;
struct l2tp_stream_key l2tp_key;
- stSessionInfo ssinfo; /* ����ҵ��������� */
+ stSessionInfo ssinfo; /* ����ҵ��������� */
void *biz_pme;
- const struct streaminfo *my_stream; /* l2tp�ײ�UDP�� */
+ const struct streaminfo *my_stream; /* l2tp�ײ�UDP�� */
unsigned char thread_seq;
- char content_notify_biz_flag; /* �Ƿ��Ѿ����ù�ҵ����, ��֮content_type */
+ char content_notify_biz_flag; /* �Ƿ��Ѿ����ù�ҵ����, ��֮content_type */
};
#define STATSD_SEND_MSS (1472)
-/* ȫ��Ψһ��ȫ�ֱ���, ͨ���ǿ�����������, �򲻳��仯��ȫ�ֱ���, ����������, ������ֻ�� */
+/* ȫ��Ψһ��ȫ�ֱ���, ͨ���ǿ�����������, �򲻳��仯��ȫ�ֱ���, ����������, ������ֻ�� */
struct sapp_global_single_t{
- int signal_take_over_sw; /* �Ƿ�ӹܳ���ϵͳ�ź�, ��SIGSEGV, SIGABRT�ȵ� */
- int ipentry_priority_over_ipfrag; /* IP_entry���ȼ�����IP_frag_entry, Ĭ��Ϊ0, ��ӦWY�����ض����� */
- //int kill_tcp_with_gdev; /* FDδ��Чʱ, ����gdev�������� */
- int cfg_send_tcp_offload_sw; /* ��������MTUʱ, ������Ƭ�ɶ��С��MTU�İ����� */
- //int cfg_kill_tcp_rst_num; /* kill_tcp����rst������ */
- //int cfg_kill_tcp_rst_signature; /* kill_tcp���͵�rst�Ƿ���Ҫָ����Ϣ, ����ʶ�� */
- //int tuple4_reuse_time_interval; /* ��Ԫ�����õ���С���ʱ�� */
+ int signal_take_over_sw; /* �Ƿ�ӹܳ���ϵͳ�ź�, ��SIGSEGV, SIGABRT�ȵ� */
+ int ipentry_priority_over_ipfrag; /* IP_entry���ȼ�����IP_frag_entry, Ĭ��Ϊ0, ��ӦWY�����ض����� */
+ //int kill_tcp_with_gdev; /* FDδ��Чʱ, ����gdev�������� */
+ int cfg_send_tcp_offload_sw; /* ��������MTUʱ, ������Ƭ�ɶ��С��MTU�İ����� */
+ //int cfg_kill_tcp_rst_num; /* kill_tcp����rst������ */
+ //int cfg_kill_tcp_rst_signature; /* kill_tcp���͵�rst�Ƿ���Ҫָ����Ϣ, ����ʶ�� */
+ //int tuple4_reuse_time_interval; /* ��Ԫ�����õ���С���ʱ�� */
//void *fs2_handle;
const char *fs2_server_ip;
unsigned short fs2_server_port_host;
short __pad1;
- //int send_fake_pkt_mode; /* 2018-10-26 lijia add, for PanGu, ����ȱ��FD·��, ����ô���GDEV����rst��, DNS-fake����,mode 0�� Э��ջ���㷢���� 1��Э��ջ���㷢����3��gdevע�뷢������ģʽ��send_fake_pkt_gdev_sport��Ч */
- //int send_fake_pkt_gdev_sport; /* 2018-10-26 lijia add, for PanGu, ����ѡ��vxlanԴ�˿� */
+ //int send_fake_pkt_mode; /* 2018-10-26 lijia add, for PanGu, ����ȱ��FD·��, ����ô���GDEV����rst��, DNS-fake����,mode 0�� Э��ջ���㷢���� 1��Э��ջ���㷢����3��gdevע�뷢������ģʽ��send_fake_pkt_gdev_sport��Ч */
+ //int send_fake_pkt_gdev_sport; /* 2018-10-26 lijia add, for PanGu, ����ѡ��vxlanԴ�˿� */
int send_fake_pkt_sip;
};
-#define TIMESTAMP_SINGLE_PKT_REGION (4) /* ������ʱͳ������ */
-#define TIMESTAMP_SINGLE_PKT_REGION_MAX (5) /* ��������ͳ�������ֵ */
+#define TIMESTAMP_SINGLE_PKT_REGION (4) /* ������ʱͳ������ */
+#define TIMESTAMP_SINGLE_PKT_REGION_MAX (5) /* ��������ͳ�������ֵ */
typedef struct{
- unsigned int runtime_pkt_max_delay; /* �����������ʱ */
- unsigned long long pkt_total_num[TIMESTAMP_SINGLE_PKT_REGION_MAX]; /* ��¼��������ʱ���ܰ���, ������ͳ�� */
- unsigned long long pkt_total_time; /* ���һ��ʱ�������ʱ, ���ڼ���ƽ������������ʱ */
+ unsigned int runtime_pkt_max_delay; /* �����������ʱ */
+ unsigned long long pkt_total_num[TIMESTAMP_SINGLE_PKT_REGION_MAX]; /* ��¼��������ʱ���ܰ���, ������ͳ�� */
+ unsigned long long pkt_total_time; /* ���һ��ʱ�������ʱ, ���ڼ���ƽ������������ʱ */
}timestamp_record_region_t;
-/* ���߳�ȫ�ֱ���, �������ݰ�ͳ����Ϣ, ͨ��ֵ��ʵʱ�仯 */
+/* ���߳�ȫ�ֱ���, �������ݰ�ͳ����Ϣ, ͨ��ֵ��ʵʱ�仯 */
struct sapp_global_mthread_t{
int ipv6_pkt_type_flag; /* ipv6 packet type, normal, or rebuild */
int pptp_hash_max_search_times;
@@ -424,28 +424,28 @@ struct sapp_global_mthread_t{
char __pad1[4];
double pptp_hash_avg_search_times;
double l2tp_hash_avg_search_times;
- int tcp_stream_special_timeout_num; /* ���õ�����ʱʱ�����, Ĭ�ϲ�����������������10% */
- int udp_stream_special_timeout_num;/* ���õ�����ʱʱ�����, Ĭ�ϲ�����������������10% */
+ int tcp_stream_special_timeout_num; /* ���õ�����ʱʱ�����, Ĭ�ϲ�����������������10% */
+ int udp_stream_special_timeout_num;/* ���õ�����ʱʱ�����, Ĭ�ϲ�����������������10% */
timestamp_record_region_t runtime_record;
- timestamp_record_region_t runtime_record_driver; /* �����������õ���, ��ƽ̨�õ�������ʱ */
+ timestamp_record_region_t runtime_record_driver; /* �����������õ���, ��ƽ̨�õ�������ʱ */
}__attribute__ ((aligned (64)));
typedef struct{
#ifdef DEBUG
- unsigned int magic; /* malloc�����0x4D4D4D4D, ��MMMM ��16����; free�����0xFEFEFEFE */
+ unsigned int magic; /* malloc�����0x4D4D4D4D, ��MMMM ��16����; free�����0xFEFEFEFE */
#endif
unsigned int user_buf_size;
}sapp_private_mem_t;
/*
- vxlan ppp��hdlc�ֶλ�������, ����ethernet, �漰�����򷢰�, Ҫ��mac��ַ�ߵ�����.
- ���Բ��ٴ���һ���µ�streaminfo�ṹ, �˷��ڴ�Ҳ�ķ�CPU, ���岻��,
- ��hdlc, ppp���ֶκ�vxlan�ϲ�, ����ip���tcp/udp�Ĺ�ϵһ��.
+ vxlan ppp��hdlc�ֶλ�������, ����ethernet, �漰�����򷢰�, Ҫ��mac��ַ�ߵ�����.
+ ���Բ��ٴ���һ���µ�streaminfo�ṹ, �˷��ڴ�Ҳ�ķ�CPU, ���岻��,
+ ��hdlc, ppp���ֶκ�vxlan�ϲ�, ����ip���tcp/udp�Ĺ�ϵһ��.
*/
struct layer_addr_vxlan_private{
struct layer_addr_vxlan addr_public;
- unsigned char actual_total_len; /* ���������紫���е�vxlanͷ����ַ����, ��������׷�ӵ�hdlc, ppp�ֶ� */
+ unsigned char actual_total_len; /* ���������紫���е�vxlanͷ����ַ����, ��������׷�ӵ�hdlc, ppp�ֶ� */
union{
struct hdlc_net_hdr inner_hdlc;
struct layer_ppp_hdr inner_ppp;
@@ -523,7 +523,6 @@ void packet_io_device_alias_destroy(void);
void sapp_dup_pkt_destroy(void);
const char *stream_bridge_id_to_name(int bridge_id);
void sapp_printf(const char *fmt, ...);
-int sapp_mem_init(void);
#ifdef __cplusplus
}
diff --git a/src/common/sapp_mem.c b/src/common/sapp_mem.c
index 0b1395b..09f33a5 100644
--- a/src/common/sapp_mem.c
+++ b/src/common/sapp_mem.c
@@ -190,9 +190,9 @@ void sapp_mem_stat_output(void)
char time_string[128];
/*
- ��ֹ����������һ������, �����˼ӵ� mem_stat_name_tuple[] ������, ����˳�򲻶�, �˴�ҪУ��һ��.
+ ��ֹ����������һ������, �����˼ӵ� mem_stat_name_tuple[] ������, ����˳�򲻶�, �˴�ҪУ��һ��.
- TODO: ��ʵ��ʼ����֤һ�ξ���, û��Ҫÿ�������־ʱ�����!!
+ TODO: ��ʵ��ʼ����֤һ�ξ���, û��Ҫÿ�������־ʱ�����!!
*/
int stat_name_tuple_num = sizeof(mem_stat_name_tuple)/sizeof(mem_stat_name_tuple_t);
assert(stat_name_tuple_num == __SAPP_MEM_TYPE_MAX);
@@ -231,7 +231,7 @@ void sapp_mem_stat_output(void)
fix_realtime_stat.mem_used_block[stat_index] += mem_used_stat->mem_used_block[stat_index];
fix_realtime_stat.mem_used_bytes[stat_index] += mem_used_stat->mem_used_bytes[stat_index];
}
- /* �̶��ڴ�ʹ�����, SAPP_MEM_FIX_GLOBAL_VAL �Ƚ�����, ֱ�Ӵ�ȫ�ֱ����л�ȡ */
+ /* �̶��ڴ�ʹ�����, SAPP_MEM_FIX_GLOBAL_VAL �Ƚ�����, ֱ�Ӵ�ȫ�ֱ����л�ȡ */
fix_realtime_stat.mem_used_block[SAPP_MEM_FIX_GLOBAL_VAL] = g_sapp_global_mem_used_block;
fix_realtime_stat.mem_used_bytes[SAPP_MEM_FIX_GLOBAL_VAL] = g_sapp_global_mem_used_bytes;
@@ -249,7 +249,7 @@ void sapp_mem_stat_output(void)
fprintf(fp, "\n%7s\n", "Dynamic");
- /* �ȰѶ���̵߳���ֵ��� */
+ /* �ȰѶ���̵߳���ֵ��� */
for(tseq=0;tseq<g_packet_io_thread_num;tseq++){
mem_used_stat = &sapp_global_val->mthread_volatile[tseq]->mem_used_stat;
for(stat_index = __SAPP_MEM_TYPE_INIT+1; stat_index < __SAPP_MEM_TYPE_MAX; stat_index++){
@@ -288,37 +288,6 @@ void sapp_mem_stat_output(void)
fclose(fp);
}
-char bloomfilter_stat_polling_entry(struct streaminfo *nouse1, void **nouse2, int thread_seq, void *nouse3)
-{
- static time_t last_get_time[SAPP_MAX_THREADS] = {};
-
- if(ABBR_CURRENT_TIME <= last_get_time[thread_seq])
- {
- return POLLING_STATE_IDLE;
- }
-
- long long blocks = 0, bytes = 0;
- bloomfilter_get_mem_stat(thread_seq, &blocks, &bytes);
-
- sapp_global_val->mthread_volatile[thread_seq]->mem_used_stat.mem_used_block[SAPP_MEM_DYN_BLOOM_FILTER] = blocks;
- sapp_global_val->mthread_volatile[thread_seq]->mem_used_stat.mem_used_bytes[SAPP_MEM_DYN_BLOOM_FILTER] = bytes;
-
- last_get_time[thread_seq] = ABBR_CURRENT_TIME;
- return POLLING_STATE_WORK;
-}
-
-int sapp_mem_init(void)
-{
- if(sapp_global_val->config.packet_io.dup_pkt_para.kickout_udp_stream_enabled
- || sapp_global_val->config.packet_io.dup_pkt_para.dup_pkt_distinguish_ipv4_tcp
- || sapp_global_val->config.packet_io.dup_pkt_para.dup_pkt_distinguish_ipv4_udp
- || sapp_global_val->config.packet_io.dup_pkt_para.dup_pkt_distinguish_all_inject)
- {
- stream_register_fun(FUN_TYPE_POLLING, (char (*)(void))bloomfilter_stat_polling_entry, 0);
- }
- return 0;
-}
-
#ifdef __cplusplus
}
#endif
diff --git a/src/dealpkt/duplicate_pkt_distinguish.c b/src/dealpkt/duplicate_pkt_distinguish.c
index 54a1593..9b0fea0 100644
--- a/src/dealpkt/duplicate_pkt_distinguish.c
+++ b/src/dealpkt/duplicate_pkt_distinguish.c
@@ -8,22 +8,25 @@ extern "C" {
#include "ap_bloom.h"
#include "dablooms.h"
+
+
+
/*
识别因路由策略导致的重复流量, 首次收到数据包加入bloom filter,
每个流的前N个包扫描bloom filter, 重复的数据包直接转发即可.
- ip层的ttl, hop不能算为key, 因为经过了几跳路由器又回绕了, ttl肯定会变�??, 而上层的数据包确实是重复�??.
+ ip层的ttl, hop不能算为key, 因为经过了几跳路由器又回绕了, ttl肯定会变�??, 而上层的数据包确实是重复�??.
*/
/*
2021-05-18 lijia close ipv6 protocol:
重复流量识别bloom filter句柄, 根据流量方向和协议的不同, 功能分为三类,
- IPv6因为没有Ipid字段, 无法区别真正的应用层重传和重复流�??, 开启了会导致断网或者CT, 所以不支持!!!
+ IPv6因为没有Ipid字段, 无法区别真正的应用层重传和重复流�??, 开启了会导致断网或者CT, 所以不支持!!!
- 对于IPv6的两种情�??:
- 1)如果开启了代理策略, 重传包被识别成了重复包的�??, sapp就直接PASS�??, 实际那个包是真实通信双方发的, 没有经过tfe处理, 可能就断网了.
- 2)如果开启了firewall的drop策略, 第一次drop成功�??, 但应用层会重�??, 重传包被识别成了重复包的�??, sapp就直接PASS�??, 导致CT.
+ 对于IPv6的两种情�??:
+ 1)如果开启了代理策略, 重传包被识别成了重复包的�??, sapp就直接PASS�??, 实际那个包是真实通信双方发的, 没有经过tfe处理, 可能就断网了.
+ 2)如果开启了firewall的drop策略, 第一次drop成功�??, 但应用层会重�??, 重传包被识别成了重复包的�??, sapp就直接PASS�??, 导致CT.
*/
void *bloom_new(const sapp_dup_pkt_t *dup_conf, struct timeval now, long now_ms)
@@ -221,6 +224,24 @@ int bloomfilter_get_mem_stat(int tseq, long long *mem_blocks, long long *mem_byt
return 0;
}
+__thread time_t t_last_get_time = 0;
+void bloom_mem_stat_update(int thread_seq, time_t now)
+{
+ if(now <= t_last_get_time)
+ {
+ return;
+ }
+
+ long long blocks = 0, bytes = 0;
+ bloomfilter_get_mem_stat(thread_seq, &blocks, &bytes);
+
+ sapp_global_val->mthread_volatile[thread_seq]->mem_used_stat.mem_used_block[SAPP_MEM_DYN_BLOOM_FILTER] = blocks;
+ sapp_global_val->mthread_volatile[thread_seq]->mem_used_stat.mem_used_bytes[SAPP_MEM_DYN_BLOOM_FILTER] = bytes;
+
+ t_last_get_time = now;
+ return;
+}
+
int sapp_dup_stream_search(struct streaminfo *a_stream)
{
void *key=NULL;
@@ -237,6 +258,7 @@ int sapp_dup_stream_search(struct streaminfo *a_stream)
}
struct timeval now={g_CurrentTime, 0};
+ bloom_mem_stat_update(a_stream->threadnum, g_CurrentTime);
return bloom_check(sapp_global_val->mthread_volatile[a_stream->threadnum]->dup_pkt_distinguish_handle, key, key_len, &sapp_global_val->config.packet_io.dup_pkt_para, now, g_current_time_ms);
}
@@ -256,6 +278,7 @@ void sapp_dup_stream_add(struct streaminfo *a_stream)
key_len=sizeof(struct stream_tuple4_v6);
}
struct timeval now={g_CurrentTime, 0};
+ bloom_mem_stat_update(a_stream->threadnum, g_CurrentTime);
bloom_add(sapp_global_val->mthread_volatile[a_stream->threadnum]->dup_pkt_distinguish_handle, key, key_len, &sapp_global_val->config.packet_io.dup_pkt_para, now, g_current_time_ms);
}
@@ -276,8 +299,8 @@ static inline int sapp_set_dup_pkt_key(enum addr_type_t addr_type, enum stream_t
if (stream_type == STREAM_TYPE_UDP)
{
const struct mesa_udp_hdr *uhdr = (const struct mesa_udp_hdr *)l4_hdr;
- l4->tcp_seq = 0x5A5A5A5A; /* udp没有, 但设�??0可能对某些hash函数不友�??, 此处设个固定�?? */
- l4->tcp_ack = 0xA5A5A5A5; /* udp没有, 但设�??0可能对某些hash函数不友�??, 此处设个固定�?? */
+ l4->tcp_seq = 0x5A5A5A5A; /* udp没有, 但设�??0可能对某些hash函数不友�??, 此处设个固定�?? */
+ l4->tcp_ack = 0xA5A5A5A5; /* udp没有, 但设�??0可能对某些hash函数不友�??, 此处设个固定�?? */
l4->sport = uhdr->uh_sport;
l4->dport = uhdr->uh_dport;
l4->checksum = uhdr->uh_sum;
@@ -315,7 +338,7 @@ int sapp_dup_pkt_identify(int tid, struct streaminfo_private *pstream_pr,
int is_dup_pkt = 0;
union sapp_dup_pkt_key dup_bloom_key;
struct timeval now={g_CurrentTime, 0};
-
+ bloom_mem_stat_update(tid, g_CurrentTime);
size_t key_len = sapp_set_dup_pkt_key((enum addr_type_t)pstream_pr->stream_public.addr.addrtype, (enum stream_type_t)pstream_pr->stream_public.type, ip_hdr, (void *)l4_hdr, &dup_bloom_key);
is_dup_pkt= bloom_check(sapp_global_val->mthread_volatile[tid]->dup_pkt_distinguish_handle, (const char*)&dup_bloom_key, key_len, &sapp_global_val->config.packet_io.dup_pkt_para, now, g_current_time_ms);
if(is_dup_pkt != 0){
@@ -333,6 +356,7 @@ void sapp_dup_pkt_mark_l4(struct streaminfo *a_stream, const void *ip_hdr, const
union sapp_dup_pkt_key dup_bloom_key;
size_t key_len = 0;
int ret = 0;
+ bloom_mem_stat_update(tid, g_CurrentTime);
struct timeval now={g_CurrentTime, 0};
key_len = sapp_set_dup_pkt_key((enum addr_type_t)a_stream->addr.addrtype, (enum stream_type_t)a_stream->type, ip_hdr, l4_hdr, &dup_bloom_key);
bloom_add(sapp_global_val->mthread_volatile[tid]->dup_pkt_distinguish_handle, (const char*)&dup_bloom_key, key_len, &sapp_global_val->config.packet_io.dup_pkt_para, now, g_current_time_ms);
@@ -351,8 +375,8 @@ int sapp_dup_pkt_init(void)
return 0;
}
- /* 流量入口有三个开�??, 识别句柄只有一�??,
- 拆分句柄多耗费内存, 且判断时每个包需要扫描多个句�??,
+ /* 流量入口有三个开�??, 识别句柄只有一�??,
+ 拆分句柄多耗费内存, 且判断时每个包需要扫描多个句�??,
可能好处只是准确率高了一点点而已 */
struct timeval now={time(NULL), 0};
for(i = 0; i < sapp_global_val->config.cpu.worker_threads; i++){
diff --git a/src/sapp_dev/sapp_init.c b/src/sapp_dev/sapp_init.c
index ddac21e..007ba02 100644
--- a/src/sapp_dev/sapp_init.c
+++ b/src/sapp_dev/sapp_init.c
@@ -303,8 +303,6 @@ int MESA_platform_init(int argc, char *argv[])
sapp_set_current_state(SAPP_STATE_PKT_IO_INITED);
- sapp_mem_init();
-
sapp_runtime_log(RLOG_LV_DEBUG, "sapp platform init success");
return 0;