1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
|
#ifndef _APP_STREAM_INTERNAL_H_
#define _APP_STREAM_INTERNAL_H_
#include "public/stream.h"
#include "private/mesa_net.h"
#include "private/sysinfo.h"
#include "MESA_handle_logger.h"
#include "mesa_pkt_dump.h"
//#define STREAM_BASE_MD5_CHECK "dd09b3b11993cc835200db477dad7d4b"
//#define STREAM_CONTROL_MD5_CHECK "75aab0821e489b84355fa22ad02a2e78"
//#define STREAM_ENTRY_MD5_CHECK "7dab86d65114ebe5438e85e0d008645d"
//#define STREAM_INJECT_MD5_CHECK "1e25b7a8cd812db2ad261264b6783d64"
//#define STREAM_PROJECT_MD5_CHECK "fc2b981f7e2c99e73d8857e206cb4977"
//#define STREAM_PROXY_MD5_CHECK "25cec664c9b44a8cac29f6e3e117eaa6"
//#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 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 PCAP_CAP_FROM_IP (0) /* Ϊ��ģ��pag��������, ��pcapҲģ���IPv4ͷ����ʼ��ȡ */
//#define NON_PKT_THREAD_SEND_QUEUE (64) /* �����������߳�����Ͷ������� */
#define IKNOW_ENABLE (0)
#ifndef likely
#define likely(x) __builtin_expect(!!(x), 1)
#endif
#ifndef unlikely
#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
#ifndef offsetof
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#endif
#ifndef container_of
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#endif
#define sapp_get_struct_header(ptr, type, member) container_of(ptr, type, member)
#define RAW_PKT_MAGIC_NUM (0xF1E2D3C4) /* 1:���ڼ��ݾ���Ŀ, ��call_old��������ݽṹʱ,ʶ��ԭʼ������Դ; 2:��ȫ�Լ�� */
#ifdef __cplusplus
extern "C" {
#endif
/* ԭʼ���ṹ */
typedef struct {
unsigned int magic_num;
int offset_to_raw_pkt_hdr; /* ����ص���Ӧ��������raw_pkt_data��ƫ���� */
enum addr_type_t low_layer_type; /* ԭʼ����ײ�Э�������, ������MAC(pcap����), Ҳ������IPv4(pag����) */
int __lib_raw_pkt_len; /* �ײ㲶�����ṩ�İ���ʵԭʼ���� */
int raw_pkt_len; /* ���ϲ�Ӧ�ÿ���ԭʼ���ܳ���, �п��ܲ�����ʵ��, ����������Ethernet�� */
unsigned int hd_hash; /* ����Ӳ���������Ԫ��HASH, ����ƽ̨CPU�������� */
const void *__lib_raw_pkt_data; /* �ײ㲶�����ṩ����ʵԭʼ��ָ�� */
const void *raw_pkt_data; /* ���ϲ�Ӧ�ÿ���ԭʼ��ͷָ��, �п���������Ethernet��, ����low_layer_type�ж�Э������ */
struct timeval raw_pkt_ts; /* ԭʼ������ʱ���, ���ȫΪ0��֧�ִ˹���(��pagģʽ) */
const void *io_lib_pkt_reference; /* ���õײ�I/O���ԭʼ�������ṹ, ����:����marsio��˵, ���ײ��mbuf�ṹ */
int route_dir;
int device_index;/* �ж������ʱ, Ҫ��֤���ĸ������ʹ��ĸ����� */
int is_overlay_pkt; /* ��ʾ����ʵ��·�е����ݰ�, Ҫ��������ע, ��������������һ������; ����Ҫ���� */
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 char mac_flipping_enable;
char diagnose_error_to_dump; /* ��ij�ִ������ݰ�, ����pkt_dump�洢��udp socket����tcpdump_mesa */
unsigned char overlay_layer_bytes; /* ������װ�㳤��, ����vxlanģʽ����50�ֽ� */
}raw_pkt_t;
struct buf_unorder
{
struct buf_unorder *next;
struct buf_unorder *prev;
//void *data;
//UINT32 len;
void *this_ip_hdr; /* ������Դ����ʵԭʼ��, Ҳ������Դ�������IP��Ƭ��,��'ip_reassemble_pkt'���� */
struct mesa_tcp_hdr *this_tcp_hdr;
void *tcpdata; /* TCP�����ݲ���ָ��, ����TCPͷ */
UINT16 tcpdatalen; /* TCP�����ݲ��ֳ��� */
UINT16 urg_ptr;
char fin;
char urg;
char rst;
unsigned char ip_reassemble_pkt;
UINT32 seq;
UINT32 ack;
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 ack_seq; /*�����������ʹ�õ�Ӧ���, 2017-08-02 lijia modify , �ƶ���struct tcpdetail_private */
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; /*�����������β��ָ��*/
};
/* ����ÿ�������������һ����, ����polling entry����ʹ�� */
typedef struct {
const raw_pkt_t *raw_pkt_up;
const raw_pkt_t *raw_pkt_down;
}polling_inject_context_t;
struct streaminfo_private
{
/* ����ṹ�����ڽṹ����ǰ, ָ���ַ���Ի���ǿת */
struct streaminfo stream_public;
struct streaminfo_private *pfather_pr; /* ��ʵ�������ϲ���ָ��, ������vxlan�ȷ�װ��, stream_public.pfather�Ǹ�ҵ��������,������vxlan��� */
/* ���±���Ϊƽ̨�ڲ�˽��, ���ⲻ�ɼ� */
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 addr_skip_for_layer_cmp:1;/*��MPLS����Գ�, �����ǻ���һ����MPLS, ��һ��û��MPLS����, �˱���=1��ʾ������IJ�, ����ʱ����Ϊ��ַ�Ƚ�, ����ʱҲҪ���� */
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�ṹ�� */
/* ---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ͷ��ѹ��, ԭ���汾���������״̬, ����ʱҲ����֪��ַ������ */
char __pad:3;
char packet_io_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 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 syn_opt_num;
unsigned short synack_opt_num;
/* ===8 bytes=== */
struct tcp_option *syn_opt_array;
struct tcp_option *synack_opt_array;
polling_inject_context_t *polling_inject_context;
/* ȫ����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;
/* ===8 bytes=== */
unsigned char layer_index:4; /* ��ʾ��ǰ��ļ���, ����ײ㿪ʼ,һ����ethernet��ʼ, ��0��ʼ����, 4bit���֧��15��Ƕ��, Ҳ�ܷ�ֹ����Ƕ����(Ŀǰ��û��������) */
//char fake_layer_dir_for_asymmetric_cmp:2; /*��ijЩ������Գ�, �����ǻ���һ����, ��һ����ڵ���, �˱���ʹ��DIR_C2S, DIR_S2C��ʾ�ĸ�������������IJ�, ����ʱ����Ϊ��ַ�Ƚ�, ����ʱҲҪ���� */
char __pad2:4;
char has_duplicate_pkt; /* ��ǰ�������й��ظ����ݰ�, ����������Ӧ��ÿ������� */
char __pad3[6];
/* ===8 bytes=== */
};
struct tcpdetail_private
{
/* ����ṹ�����ڽṹ����ǰ, ָ���ַ���Ի���ǿת */
struct tcpdetail tcpdetail_public;
/* ---8 bytes-- */
UCHAR multisynflag:2; // multi syn
UCHAR ignore_rst_fin:1; //������rst, fin����, ֻ����ʱ��lru����
#if 0
UCHAR tcpall_valid_after_kill:1; //kill_tcp��, TCPALL�����Ȼ��Ч, ���������������ݰ�
#else
UCHAR drop_stream_flag:1; //2019-11-20 lijia add, ����ͬDROPPKT, ֻ����������������stream
#endif
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 creat_mod;
UINT16 tcpoverlen; // modify by lqy 20150225, ��¼��ǰ������һ�������ص�tcp���ȣ�
UINT16 pad;
/* ===8 bytes=== */
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����.
*/
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���; �Լ������������, �Զ�Ӧ���յ������� */
};
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
};
/* 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������һ�黺�� */
}addr_continuous_bin_t;
typedef struct{
enum addr_type_t addr_type_bin;
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:�Ͳ����ڻ������� */
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 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 */
};
/* 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�� */
unsigned char threadnum;
char insert_hash_flag; /* ���������ѽ�key����HASH�� */
char content_notify_biz_flag; /* �Ƿ��Ѿ����ù�ҵ����, ��֮content_type */
};
/* ˽��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 */
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 */
};
struct l2tp_info_pri{
struct MESA_tunnel_info tunnel_context;
struct l2tp_stream_key l2tp_key;
stSessionInfo ssinfo; /* ����ҵ��������� */
void *biz_pme;
const struct streaminfo *my_stream; /* l2tp�ײ�UDP�� */
unsigned char thread_seq;
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; /* ��Ԫ�����õ���С���ʱ�� */
//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_sip;
//int create_mpls_anyway;/*��������MAC��IP��֮�䴴��MPLS��*/
};
#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; /* ���һ��ʱ�������ʱ, ���ڼ���ƽ������������ʱ */
}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;
int l2tp_hash_max_search_times;
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% */
timestamp_record_region_t runtime_record;
timestamp_record_region_t runtime_record_driver; /* �����������õ���, ��ƽ̨�õ�������ʱ */
}__attribute__ ((aligned (64)));
extern struct sapp_global_single_t sapp_global_single;
extern struct sapp_global_mthread_t sapp_global_mthread[MAX_THREAD_NUM];
extern int g_overlay_layer_set[__ADDR_TYPE_MAX][SAPP_SUPPORT_LAYER_NUM_MAX];
int MESA_kill_tcp_remedy(struct streaminfo *stream, const void *ext_raw_pkt);
long long sapp_get_cpu_cycle(void);
int get_stream_carry_tunnel_type(const struct streaminfo *this_stream, const struct streaminfo *upper_stream, unsigned short *tunnel_type);
void cycle_pkt_dump(int thread_seq, const raw_pkt_t *p_raw_pkt);
void cycle_diagnose_pkt_dump(int thread_seq, const raw_pkt_t *p_raw_pkt);
void cycle_pkt_dump_by_classify(int thread_seq, const raw_pkt_t *p_raw_pkt, enum _pkt_classify class_val);
char biz_retval_to_platform(char biz_ret);
char plat_state_to_biz(char plat_state);
void idle_polling_call(int thread_seq);
int gdev_block_send_rule(const struct streaminfo *pstream);
int gdev_block_init(void);
int sapp_identify_broad_multicast_pkt(const void *this_layer_data, const raw_pkt_t *raw_pkt);
int sapp_identify_tunnel_inner_pkt(const raw_pkt_t *raw_pkt);
int sapp_assistant_init(void);
int save_polling_inject_context(struct streaminfo_private *pstream_pr, const raw_pkt_t *raw_pkt);
void free_polling_inject_context(struct streaminfo_private *pstream_pr);
int update_polling_inject_context(struct streaminfo_private *pstream_pr, const raw_pkt_t *raw_pkt);
unsigned long long get_global_stream_id(unsigned long long thread_seq);
enum sapp_state_t sapp_get_current_state(void);
extern struct streaminfo_private *copy_stream_info_to_heap(const struct streaminfo_private *stack_stream, int reverse);
enum addr_type_t addr_type_abbreviation_pton(const char *addr_type_abbreviation);
const char *addr_type_abbreviation_ntop(enum addr_type_t addrtype);
int sapp_identify_broad_multicast_init(void);
int plugin_manage_init(void);
void *plugin_get_plug_entry(const char *plug_name, const char *plug_entry_type);
#ifdef __cplusplus
}
#endif
#endif
|