summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dealpkt/deal_ipv4.c132
-rw-r--r--src/dealpkt/deal_ipv6.c6
-rw-r--r--src/dealpkt/deal_tcp.c763
-rw-r--r--src/dealpkt/deal_udp.c34
-rw-r--r--src/dealpkt/stream_manage.c23
5 files changed, 536 insertions, 422 deletions
diff --git a/src/dealpkt/deal_ipv4.c b/src/dealpkt/deal_ipv4.c
index f42613c..720ec37 100644
--- a/src/dealpkt/deal_ipv4.c
+++ b/src/dealpkt/deal_ipv4.c
@@ -5,8 +5,8 @@
update log:
2012-06-28, by LiJia<[email protected]>
- ʹ��IP��Ƭ������������汾��ز��ֶ�������, ����ʹ��thread_node�ṹ��
- �������̼��ܹ�δ�仯.
+ ʹ��IP��Ƭ������������汾��ز��ֶ�������, ����ʹ��thread_node�ṹ��
+ �������̼��ܹ�δ�仯.
*/
@@ -29,7 +29,7 @@
extern "C" {
#endif
-static struct frag_manage *g_ipv4_frag_manage;
+struct frag_manage *g_ipv4_frag_manage;
static unsigned int FRAG_IP4_RANDOM;
extern int g_overlay_layer_set[__ADDR_TYPE_MAX][SAPP_SUPPORT_LAYER_NUM_MAX];
extern int dealipv4udppkt(struct streamindex *pindex, const struct mesa_ip4_hdr * this_iphdr,
@@ -54,8 +54,8 @@ static void ipv4_frag_key_free(uchar *key, uint key_size);
#endif
#if IPV4_DEBUG
/* 2012-04-10 LiJia add,
- ��׼ICMPͷ��������ڸ��ӣ�
- ��ICMPЭ��ͷ���������������ECHO_REQUEST��ECHO_REPLAY.
+ ��׼ICMPͷ��������ڸ��ӣ�
+ ��ICMPЭ��ͷ���������������ECHO_REQUEST��ECHO_REPLAY.
*/
void test_print_icmp(const struct mesa_ip4_hdr *a_packet)
{
@@ -80,12 +80,12 @@ static inline int ipv4_buff_size(int tot_len)
#if (0 == USE_MESA_STREAM_HASH )
/*
return value:
- 0: keyֵ��ͬ
- ����:keyֵ��ͬ
+ 0: keyֵ��ͬ
+ ����:keyֵ��ͬ
*/
static int ipv4_frag_hash_cmp(void *hash_key1, void *hash_key2)
{
-#if 0 /* ipv4_frag_key�ṹ����pad�ֶ�, �辫ȷ�Ƚ�ÿ������ */
+#if 0 /* ipv4_frag_key�ṹ����pad�ֶ�, �辫ȷ�Ƚ�ÿ������ */
return memcmp(hash_key1, hash_key2, sizeof(struct ipv4_frag_key));
#else
const struct ipv4_frag_key *ipv4_fkey1 = (const struct ipv4_frag_key *)hash_key1;
@@ -129,7 +129,7 @@ static unsigned int ipv4_frag_hash_index(void *hash_key)
static int ipv4_attack_detect(struct frag_ipq *ipv4_qp)
{
- /* ����Ѿ������й�����Ϊ */
+ /* ����Ѿ������й�����Ϊ */
if(ipv4_qp->attack_flag != 0)
{
return ipv4_qp->attack_flag;
@@ -141,13 +141,13 @@ static int ipv4_attack_detect(struct frag_ipq *ipv4_qp)
return IP_FRAG_IGNORE;
}
- // to do: ��������������
+ // to do: ��������������
return IP_FRAG_OK;
}
#if (0 == USE_MESA_STREAM_HASH)
-/* ���ݳ�ʱ���������ڴ� */
+/* ���ݳ�ʱ���������ڴ� */
static void ipv4_frag_mem_clean_by_time(struct frag_manage *handle)
{
struct frag_ipq *tmp, *next;
@@ -160,7 +160,7 @@ static void ipv4_frag_mem_clean_by_time(struct frag_manage *handle)
frag_ipq_kill(handle, tmp);
- /* ÿ��ֻ�ͷ�һ���������ڴ棬���ⳤʱ���ڴ˺������У���������������� */
+ /* ÿ��ֻ�ͷ�һ���������ڴ棬���ⳤʱ���ڴ˺������У���������������� */
if(raw_mem_size-handle->total_mem >= IPV4_FRAG_MEM_FREE_ONCE)
{
break;
@@ -171,7 +171,7 @@ static void ipv4_frag_mem_clean_by_time(struct frag_manage *handle)
}
-/* ����ռ���ڴ����������ڴ� */
+/* ����ռ���ڴ����������ڴ� */
static void ipv4_frag_mem_clean_by_size(struct frag_manage *handle)
{
struct frag_ipq *tmp, *next;
@@ -184,7 +184,7 @@ static void ipv4_frag_mem_clean_by_size(struct frag_manage *handle)
frag_ipq_kill(handle, tmp);
- /* ÿ��ֻ�ͷ�һ���������ڴ棬���ⳤʱ���ڴ˺������У���������������� */
+ /* ÿ��ֻ�ͷ�һ���������ڴ棬���ⳤʱ���ڴ˺������У���������������� */
if(raw_mem_size-handle->total_mem >= IPV4_FRAG_MEM_FREE_ONCE)
{
break;
@@ -195,7 +195,7 @@ static void ipv4_frag_mem_clean_by_size(struct frag_manage *handle)
}
-/* �����ڴ棬��ʱ���ռ���ڴ����� */
+/* �����ڴ棬��ʱ���ռ���ڴ����� */
static inline void ipv4_frag_mem_clean(struct frag_manage *handle)
{
ipv4_frag_mem_clean_by_time(handle);
@@ -221,10 +221,10 @@ static struct frag_ipq *ipv4_frag_queue_find(struct streaminfo *pstream,
#endif
-/* IP��Ƭ���麯�����
+/* IP��Ƭ���麯�����
return value:
- NULL: ��Ƭ������δ��ɣ����Ǵ���ķ�Ƭ��;
- ��NULL: ������ɺ������IP��ͷ��ָ�룬ʹ�������Ҫfree().
+ NULL: ��Ƭ������δ��ɣ����Ǵ���ķ�Ƭ��;
+ ��NULL: ������ɺ������IP��ͷ��ָ�룬ʹ�������Ҫfree().
*/
static /*@null@*/ struct mesa_ip4_hdr *process_ipv4_frag(struct streaminfo_private *pfstream_pr,
const struct mesa_ip4_hdr *a_packet, int thread_num,const raw_pkt_t *raw_pkt)
@@ -249,10 +249,10 @@ static /*@null@*/ struct mesa_ip4_hdr *process_ipv4_frag(struct streaminfo_priva
#endif
-#if (USE_MESA_STREAM_HASH==0) /* ����MESA_htable�Զ���ʱ��̭ */
+#if (USE_MESA_STREAM_HASH==0) /* ����MESA_htable�Զ���ʱ��̭ */
ipv4_frag_mem_clean(ip4_frag_handle);
#else
- /* ʹ��MESA_htable��, �Զ�����ʱ��̭ */
+ /* ʹ��MESA_htable��, �Զ�����ʱ��̭ */
#endif
@@ -270,7 +270,7 @@ static /*@null@*/ struct mesa_ip4_hdr *process_ipv4_frag(struct streaminfo_priva
IPV4_PRINT("##### ipv4_qp: %p\n", ipv4_qp);
- /* ������� */
+ /* ������� */
attack_flag = ipv4_attack_detect(ipv4_qp);
switch(attack_flag)
{
@@ -301,6 +301,7 @@ static /*@null@*/ struct mesa_ip4_hdr *process_ipv4_frag(struct streaminfo_priva
#endif
ipv4_qp->frags_num++;
+ ipv4_qp->frags_len+=raw_pkt->raw_pkt_len;
offset = ntohs(a_packet->ip_off);
flags = offset & ~IPv4_FRAG_OFFSET;
@@ -310,7 +311,7 @@ static /*@null@*/ struct mesa_ip4_hdr *process_ipv4_frag(struct streaminfo_priva
ip_hl = a_packet->ip_hl * 4;
end = offset + ntohs(a_packet->ip_len) - ip_hl;
- if(NULL == ipv4_qp->private_info) /* �յ��ĵ�һ����Ƭ�� */
+ if(NULL == ipv4_qp->private_info) /* �յ��ĵ�һ����Ƭ�� */
{
IPV4_PRINT("##### ipv4 frag first pkt!\n");
ipv4_qp->private_info = frag_malloc(ip4_frag_handle, sizeof(struct ipv4_frag_private));
@@ -335,7 +336,7 @@ static /*@null@*/ struct mesa_ip4_hdr *process_ipv4_frag(struct streaminfo_priva
return NULL;
}
- /* �����ж� */
+ /* �����ж� */
if((flags & IPv4_FRAG_MF) == 0)
{
/* If we already have some bits beyond end
@@ -352,7 +353,7 @@ static /*@null@*/ struct mesa_ip4_hdr *process_ipv4_frag(struct streaminfo_priva
}
else
{
- if(end & 7) /* ��8�������� */
+ if(end & 7) /* ��8�������� */
{
goto err;
}
@@ -369,11 +370,11 @@ static /*@null@*/ struct mesa_ip4_hdr *process_ipv4_frag(struct streaminfo_priva
{
ipv4_qp->last_in |= IP_FRAG_FIRST_IN;
IPV4_PRINT("### ipv4 frag first flag!\n");
- if(ip_hl > private_info->raw_ip_hdr_len){ /* ʵ��ͷ�����ȳ���Ԥ��ͷ������ */
- if (end + ip_hl > ipv4_qp->buf_size){ /* �Ƿ���Ҫ���仺��ռ� */
+ if(ip_hl > private_info->raw_ip_hdr_len){ /* ʵ��ͷ�����ȳ���Ԥ��ͷ������ */
+ if (end + ip_hl > ipv4_qp->buf_size){ /* �Ƿ���Ҫ���仺��ռ� */
new_buf_size = ipv4_buff_size(end + ip_hl);
new_ip4h = (struct mesa_ip4_hdr *)frag_malloc(ip4_frag_handle, new_buf_size);
- if(ipv4_qp->meat > 0){ /* meat>0, ֮ǰ�Ѿ��洢������, ͨ�������Ƿ�Ƭ����, �����յ������ķ�Ƭ�� */
+ if(ipv4_qp->meat > 0){ /* meat>0, ֮ǰ�Ѿ��洢������, ͨ�������Ƿ�Ƭ����, �����յ������ķ�Ƭ�� */
memcpy((char *)new_ip4h + ip_hl, (char *)ipv4_qp->new_iph + private_info->raw_ip_hdr_len, ipv4_qp->buf_size);
}
frag_free(ip4_frag_handle, ipv4_qp->new_iph, ipv4_qp->buf_size);
@@ -381,8 +382,8 @@ static /*@null@*/ struct mesa_ip4_hdr *process_ipv4_frag(struct streaminfo_priva
ipv4_qp->buf_size = new_buf_size;
}
}
- private_info->raw_ip_hdr_len = ip_hl; /* ���µ�һ������ʵ��ͷ������ */
- memcpy(ipv4_qp->new_iph, a_packet, ip_hl); /* ������һ��IP��Ƭ��ͷ�� */
+ private_info->raw_ip_hdr_len = ip_hl; /* ���µ�һ������ʵ��ͷ������ */
+ memcpy(ipv4_qp->new_iph, a_packet, ip_hl); /* ������һ��IP��Ƭ��ͷ�� */
}
}
if(end <= offset)
@@ -551,10 +552,13 @@ found:
ipv4_qp->ipfrag_list = NULL;
#endif
- /* Warning, ����frag_reassemble()��ipv4_qp����free��
- ���ԣ�Ҫ�Ƚ��������õ���Ϣ��ȡ����������ԭʼIP������.
- */
+ /* Warning, ����frag_reassemble()��ipv4_qp����free��
+ ���ԣ�Ҫ�Ƚ��������õ���Ϣ��ȡ����������ԭʼIP������.
+ */
raw_ip_len = ntohs(ipv4_qp->meat + private_info->raw_ip_hdr_len);
+ //set scratch before frag_reassemble, cause frag_reassemble will free ipq
+ ip4_frag_handle->scratch_frag_cnt=ipv4_qp->frags_num;
+ ip4_frag_handle->scratch_frag_len=ipv4_qp->frags_len;
#if USE_MESA_STREAM_HASH
new_ip4h = (struct mesa_ip4_hdr*)frag_reassemble_v4(ip4_frag_handle, ipv4_qp, &ip4_frag_key);
#else
@@ -584,20 +588,20 @@ static inline void set_ipv4_addr(struct stream_tuple4_v4 *addr, struct mesa_ip4_
{
addr->saddr = iphdr->ip_src.s_addr;
addr->daddr = iphdr->ip_dst.s_addr;
- addr->source = 0; /* �˿���Ϣ��tcp/udp������ */
- addr->dest = 0;/* �˿���Ϣ��tcp/udp������ */
+ addr->source = 0; /* �˿���Ϣ��tcp/udp������ */
+ addr->dest = 0;/* �˿���Ϣ��tcp/udp������ */
}
extern int sapp_is_overlay_layer(const struct streaminfo_private *stream_pr, const raw_pkt_t *rawpkt);
extern int stream_process_overlay_ipv4(struct streaminfo *pfstream, const struct ip* this_layer_hdr,
int thread_num,unsigned char routedir, const raw_pkt_t *raw_pkt);
-/* IPv4���ݰ���ں���, ������Ƭ�� */
+/* IPv4���ݰ���ں���, ������Ƭ�� */
int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_data, int thread_num,
unsigned char routedir, const raw_pkt_t *raw_pkt, int offset_to_raw_pkt_hdr)
{
const struct mesa_ip4_hdr *a_packet = (const struct mesa_ip4_hdr *)this_layer_data;
- struct mesa_ip4_hdr *new_iph = NULL; /* ���ԭʼ������Ƭ����ָ��ָ��������ɺ����IP�� */
+ struct mesa_ip4_hdr *new_iph = NULL; /* ���ԭʼ������Ƭ����ָ��ָ��������ɺ����IP�� */
unsigned short offset, flags;
int ret = PASS;
char need_free = 0;
@@ -608,7 +612,7 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
struct streaminfo_private *pstream_pr;
struct streaminfo *pstream;
sapp_gval_mthread_sys_stat_t *local_sys_stat = &sapp_global_val->mthread_volatile[thread_num]->sys_stat;
- /* ע��, �˴���ȡ��ǰ�㳤����ipͷ���ֶμ���ó�, ������this_layer_data- raw_pkt->raw_pkt_data, ��ΪijЩ����64�ֽڵ�С���������triler, �������߼��㲻һ�� */
+ /* ע��, �˴���ȡ��ǰ�㳤����ipͷ���ֶμ���ó�, ������this_layer_data- raw_pkt->raw_pkt_data, ��ΪijЩ����64�ֽڵ�С���������triler, �������߼��㲻һ�� */
int this_layer_len = ntohs(a_packet->ip_len);
int this_layer_is_overlay = 0;
@@ -620,9 +624,9 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
}
- /* NOTE, ע��, �м�:
- ���߻�����������Ī�������IPv4��, ͷ���ֶβ��Ϸ�,
- �����ƽ̨coredump, ��������ѭ��, һ��Ҫ��ͷ���Ϸ��Լ��!!
+ /* NOTE, ע��, �м�:
+ ���߻�����������Ī�������IPv4��, ͷ���ֶβ��Ϸ�,
+ �����ƽ̨coredump, ��������ѭ��, һ��Ҫ��ͷ���Ϸ��Լ��!!
*/
if(unlikely(checkipv4pkt(a_packet, raw_pkt) < 0)){
local_sys_stat->count[SAPP_STAT_DROP_IPV4]++;
@@ -647,9 +651,9 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
}
set_ipv4_addr(&addr, (struct mesa_ip4_hdr *)a_packet);
pstream->addr.paddr = &addr;
- /* ��IP��������Ϊ__ADDR_TYPE_IP_PAIR_V4, ����ϲ���TCP/UDP, ����������ΪADDR_TYPE_IPV4, �����Ipv6_over_ipv4����, ������IP���ַ���� */
+ /* ��IP��������Ϊ__ADDR_TYPE_IP_PAIR_V4, ����ϲ���TCP/UDP, ����������ΪADDR_TYPE_IPV4, �����Ipv6_over_ipv4����, ������IP���ַ���� */
pstream->addr.addrtype = __ADDR_TYPE_IP_PAIR_V4;
- pstream->addr.addrlen = sizeof(struct stream_tuple4_v4); /* ��ַ���ȹ̶�ʹ����Ԫ���ʽ��, ���������, ���˷������˿�,4�ֽڿռ� */
+ pstream->addr.addrlen = sizeof(struct stream_tuple4_v4); /* ��ַ���ȹ̶�ʹ����Ԫ���ʽ��, ���������, ���˷������˿�,4�ֽڿռ� */
pstream->addr.pkttype = PKT_TYPE_NORMAL;
pstream->addr.pktipfragtype = PKT_TYPE_NORMAL; /* 2014-12-25 lijia add */
this_layer_is_overlay = sapp_is_overlay_layer(pstream_pr, raw_pkt);
@@ -660,7 +664,7 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
pstream_pr->addr_use_as_hash = 1;
}
- /* 2012-11-01 add, ��inlineģʽ�£����overlay�㲻�����鲥��ַ */
+ /* 2012-11-01 add, ��inlineģʽ�£����overlay�㲻�����鲥��ַ */
if((g_topology_mode & __NET_CONN_GDEV) && (this_layer_is_overlay != 0)){
if(is_multicast_addr_v4(ntohl(a_packet->ip_dst.s_addr))){
local_sys_stat->count[SAPP_STAT_DROP_IPV4]++;
@@ -674,8 +678,8 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
pstream_pr->offset_to_raw_pkt_hdr = offset_to_raw_pkt_hdr;
pstream_pr->raw_pkt = raw_pkt; /* 2014-12-30 lijia add */
- /* LiJia add, ��Ϊ��ij���㷨���ⶨ��һ�������ַ�ķ���, �����ж�memcmp�Ľ�� */
-// if(memcmp(&(a_packet->ip_src.s_addr), &(a_packet->ip_dst.s_addr), sizeof(int)) >= 0){ /* ֱ���ж�, ���ٵ���memcmp���� */
+ /* LiJia add, ��Ϊ��ij���㷨���ⶨ��һ�������ַ�ķ���, �����ж�memcmp�Ľ�� */
+// if(memcmp(&(a_packet->ip_src.s_addr), &(a_packet->ip_dst.s_addr), sizeof(int)) >= 0){ /* ֱ���ж�, ���ٵ���memcmp���� */
if(a_packet->ip_src.s_addr >= a_packet->ip_dst.s_addr){
pstream_pr->layer_dir = 1;
pstream->curdir = DIR_C2S;
@@ -685,7 +689,7 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
}
if((pfstream_pr != NULL)
- && (g_overlay_layer_set[pfstream_pr->stream_public.addr.addrtype][pfstream_pr->layer_index] != 0)){ /* 2021-01-11 lijia add, overlay���pfather��ΪNULL, ������ɼ� */
+ && (g_overlay_layer_set[pfstream_pr->stream_public.addr.addrtype][pfstream_pr->layer_index] != 0)){ /* 2021-01-11 lijia add, overlay���pfather��ΪNULL, ������ɼ� */
pstream->pfather = NULL;
}else{
pstream->pfather=pfstream;
@@ -695,14 +699,14 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
pstream->routedir=routedir;
pstream->threadnum=thread_num;
- /* 2020-12-23 lijia add, ��mrtunnatģʽ, �����overlay��, ��������ͨ��� */
+ /* 2020-12-23 lijia add, ��mrtunnatģʽ, �����overlay��, ��������ͨ��� */
if(this_layer_is_overlay != 0){
ret = stream_process_overlay_ipv4(pstream, (const struct ip *)this_layer_data, thread_num, routedir, raw_pkt);
if(DROP == ret){
return DROP;
}
int next_layer_offest = offset_to_raw_pkt_hdr + (a_packet->ip_hl << 2);
- /* �����VXLANģʽ��overlay��, ����ip��Ƭ��ԭ,ֱ����ת��udp_entry */
+ /* �����VXLANģʽ��overlay��, ����ip��Ƭ��ԭ,ֱ����ת��udp_entry */
ret=dealipv4udppkt(ptmp,a_packet,thread_num,routedir,raw_pkt, next_layer_offest);
return ret;
}
@@ -722,7 +726,7 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
}
pstream->addr.pktipfragtype = PKT_TYPE_IP_FRAG;
#if USE_MESA_STREAM_HASH
- /* ��������Ƕ��ģʽ, ʹ�ñ������ṹ, ����father->stream */
+ /* ��������Ƕ��ģʽ, ʹ�ñ������ṹ, ����father->stream */
new_iph = (struct mesa_ip4_hdr *)process_ipv4_frag(&ptmp->stream, a_packet, thread_num, raw_pkt);
#else
new_iph = (struct mesa_ip4_hdr *)process_ipv4_frag(pfstream_pr, a_packet, thread_num, raw_pkt);
@@ -731,10 +735,10 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
{
local_sys_stat->count[SAPP_STAT_RCV_IPV4_FRAG]++;
local_sys_stat->length[SAPP_STAT_RCV_IPV4_FRAG]++;
- /* ��IP��Ƭ, ��δ�������, �˴�ֻ����IPFRAG,
- ���ؿ�sapp_global_single.ipentry_priority_over_ipfrag,
- ��������һ����Ƭ����, ��ȫ��IP���������, ��Ҫ�ж�sapp_global_single.ipentry_priority_over_ipfrag,
- �����ȵ���ip_entry, ����ip_frag_entry.
+ /* ��IP��Ƭ, ��δ�������, �˴�ֻ����IPFRAG,
+ ���ؿ�sapp_global_single.ipentry_priority_over_ipfrag,
+ ��������һ����Ƭ����, ��ȫ��IP���������, ��Ҫ�ж�sapp_global_single.ipentry_priority_over_ipfrag,
+ �����ȵ���ip_entry, ����ip_frag_entry.
*/
stream_process_ipv4_frag(pstream, (const struct ip *)a_packet, thread_num, routedir, raw_pkt);
return PASS;
@@ -749,7 +753,7 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
local_sys_stat->length[SAPP_STAT_RCV_IPV4_FRAG] += this_layer_len;
}else{
//if(0 == this_layer_is_overlay)
- { /* ��overlay����ۼ���ز���� */
+ { /* ��overlay����ۼ���ز���� */
local_sys_stat->count[SAPP_STAT_RCV_IPV4]++;
local_sys_stat->length[SAPP_STAT_RCV_IPV4] += this_layer_len;
if (routedir == sapp_global_val->config.packet_io.inbound_route_dir)
@@ -766,17 +770,17 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
}
/* 2017-05-11 lijia add,
- �ж�IP��IPFRAG��˭�����ȵ���,
- ������ģʽ��, "����"���һ��IP��Ƭ��, �ﵽ��������ԭʼIP����Ŀ��!
+ �ж�IP��IPFRAG��˭�����ȵ���,
+ ������ģʽ��, "����"���һ��IP��Ƭ��, �ﵽ��������ԭʼIP����Ŀ��!
*/
if(unlikely(sapp_global_single.ipentry_priority_over_ipfrag != 0)){
ret = process_ipv4_pkt(ptmp, a_packet, thread_num, routedir, raw_pkt, offset_to_raw_pkt_hdr);
if((PASS == ret) && (pstream->addr.pktipfragtype & (PKT_TYPE_IP_FRAG | PKT_TYPE_IP_FRAG_LAST))){
- /* NOTE: �˴�ʹ��this_layer_data, ����������ʵ��ԭʼIP��Ƭ�� */
+ /* NOTE: �˴�ʹ��this_layer_data, ����������ʵ��ԭʼIP��Ƭ�� */
ret = stream_process_ipv4_frag(pstream, (const struct ip *)this_layer_data, thread_num, routedir, raw_pkt);
}
}else{
- /* NOTE: �˴�ʹ��this_layer_data, ����������ʵ��ԭʼIP��Ƭ�� */
+ /* NOTE: �˴�ʹ��this_layer_data, ����������ʵ��ԭʼIP��Ƭ�� */
if(pstream->addr.pktipfragtype & (PKT_TYPE_IP_FRAG | PKT_TYPE_IP_FRAG_LAST)){
ret = stream_process_ipv4_frag(pstream, (const struct ip *)this_layer_data, thread_num, routedir, raw_pkt);
}
@@ -859,15 +863,15 @@ MESA_htable_handle ipv4_frag_htable_create(void)
hargs.thread_safe = 0;
hargs.recursive = 0;
hargs.hash_slot_size = 1048576;
- hargs.max_elem_num = 50000; /* TODO 1: ���Ĭ��ֵ, ���������ļ�,��ָ������Ƭ�������� !! */
+ hargs.max_elem_num = 50000; /* TODO 1: ���Ĭ��ֵ, ���������ļ�,��ָ������Ƭ�������� !! */
hargs.eliminate_type = HASH_ELIMINATE_ALGO_LRU;
hargs.expire_time = IPV4_FRAG_TIMEOUT;
hargs.key_comp = ipv4_frag_key_cmp_cb;
hargs.key2index = ipv4_frag_hash_index;
hargs.data_free = ipv4_frag_ipq_free_all;
hargs.data_expire_with_condition = NULL;
- hargs.complex_key_dup = ipv4_frag_key_dup; /* ���ڸ��ӽṹ��key����, ��copyһ����ַ���� */
- hargs.complex_key_free = ipv4_frag_key_free; /* ɾ��ʱ�ͷ�key���ڴ���Դ */
+ hargs.complex_key_dup = ipv4_frag_key_dup; /* ���ڸ��ӽṹ��key����, ��copyһ����ַ���� */
+ hargs.complex_key_free = ipv4_frag_key_free; /* ɾ��ʱ�ͷ�key���ڴ���Դ */
return MESA_htable_create(&hargs, sizeof(MESA_htable_create_args_t));
}
@@ -960,7 +964,7 @@ static inline int checkipv4pkt(const struct mesa_ip4_hdr * iph, const raw_pkt_t
#if 0
switch(iph->ip_p){
- /* Ŀǰƽֻ̨�������¼���Э��, �����ݲ�֧�ֻ����쳣���ݰ� */
+ /* Ŀǰƽֻ̨�������¼���Э��, �����ݲ�֧�ֻ����쳣���ݰ� */
case IPPROTO_TCP:
case IPPROTO_UDP:
case IPPROTO_IPV6:
@@ -980,7 +984,7 @@ static inline int checkipv4pkt(const struct mesa_ip4_hdr * iph, const raw_pkt_t
}
#else
ip_proto = iph->ip_p;
- if(ip_proto >= 0x8F){ /* IPЭ���ֶδ���0x8f��Ŀǰ���Ϸ� */
+ if(ip_proto >= 0x8F){ /* IPЭ���ֶδ���0x8f��Ŀǰ���Ϸ� */
sapp_runtime_log(RLOG_LV_DEBUG, "ipv4 packet check error: unknow proto: %u", ip_proto);
return -1;
}
@@ -1093,7 +1097,7 @@ static void ipv4_frag_ipq_free_all(void *data)
{
struct frag_ipq *ipq = (struct frag_ipq *)data;
- /* ���������ɾ��ʱ, Ҫ�ͷ�new_iph�ڴ� */
+ /* ���������ɾ��ʱ, Ҫ�ͷ�new_iph�ڴ� */
if(ipq->new_iph){
sapp_mem_free(SAPP_MEM_DYN_IP_FRAG_PKT,ipq->thread_num, ipq->new_iph);
}
diff --git a/src/dealpkt/deal_ipv6.c b/src/dealpkt/deal_ipv6.c
index c948cac..f5847e6 100644
--- a/src/dealpkt/deal_ipv6.c
+++ b/src/dealpkt/deal_ipv6.c
@@ -6,7 +6,7 @@
extern "C" {
#endif
-static struct frag_manage *g_ipv6_frag_manage = NULL;
+struct frag_manage *g_ipv6_frag_manage = NULL;
static unsigned int FRAG_IP6_RANDOM;
//extern int g_packet_io_thread_num;
extern void raw_frags_list_free_one(int thread_seq, void *project_req_value);
@@ -443,6 +443,7 @@ static struct mesa_ip6_hdr *ipv6_defrag(struct streaminfo_private *pstream_pr,
#endif
ipv6_qp->frags_num++;
+ ipv6_qp->frags_len+=raw_pkt->raw_pkt_len;
if(NULL == ipv6_qp->private_info)
{
@@ -616,6 +617,9 @@ copy_data:
int ip6_payload_len = htons(ipv6_qp->meat);
char raw_next_hdr = private_info->raw_next_hdr;
+ //set scratch before frag_reassemble, cause frag_reassemble will free ipq
+ ip6_frag_handle->scratch_frag_cnt=ipv6_qp->frags_num;
+ ip6_frag_handle->scratch_frag_len=ipv6_qp->frags_len;
#if USE_MESA_STREAM_HASH
new_ip6h = (struct mesa_ip6_hdr *)frag_reassemble_v6(ip6_frag_handle, ipv6_qp, &ip6_frag_key);
#else
diff --git a/src/dealpkt/deal_tcp.c b/src/dealpkt/deal_tcp.c
index e636d30..bc6d928 100644
--- a/src/dealpkt/deal_tcp.c
+++ b/src/dealpkt/deal_tcp.c
@@ -1,38 +1,38 @@
/*
-20120603 : 1)�޸Ľ������ӵIJ��� ��datalen>0�İ�ֱ�ӽ�������
- 2)Ӧ�ò㲻��Ҫ�����ӣ�ת��nouse״̬��������ֱ���ͷ�
+20120603 : 1)�޸Ľ������ӵIJ��� ��datalen>0�İ�ֱ�ӽ�������
+ 2)Ӧ�ò㲻��Ҫ�����ӣ�ת��nouse״̬��������ֱ���ͷ�
-20140322 : 1)ԭ�����ֻ�е�����data״̬�󣬲ŷ���pdetail�Ŀռ䣻�����޸�Ϊ
- ��һ�����ͷ���pdetail�Ŀռ䣬������data��ŷ���half�Ŀռ�
- 2)ԭ��������ص�һЩ������ȫ������pdetail
- 3) �����Ĺ������������ĵ�ַ��hash���ö���ַ���бȽ�
+20140322 : 1)ԭ�����ֻ�е�����data״̬�󣬲ŷ���pdetail�Ŀռ䣻�����޸�Ϊ
+ ��һ�����ͷ���pdetail�Ŀռ䣬������data��ŷ���half�Ŀռ�
+ 2)ԭ��������ص�һЩ������ȫ������pdetail
+ 3) �����Ĺ������������ĵ�ַ��hash���ö���ַ���бȽ�
-20140329 1)�ָ���tcpdetail��¼���ζ����ֽ���pdetail->lostlen
- 2)������tcpallpktģʽ�����ڲ������������飬����ȷ��fin��rst�ȵĵ���shunx
- ˳����˲���������close״̬��ֻ�ܵ���̭��
- 3)�������м�¼ÿ��İ����ֽ�����λ�õ�����Ϊʵ�ʵ����˳��
- ��¼����¼�а����˲������صİ���Ŀ����ͳϵͳ�м�¼�˴����صİ���
-
-20141210 1)ȫ�����streaminfo����ؽṹ�壬ʹ�÷���ṹ��IJ�ͬ����
-20141213 1)����tcp_add_new_stream_bydata���水tcplen=0�İ������ӣ�����nouse����
- nouse���������������һ����data��������opstate=close�����
- �ڶ����Ǵ�һ�����ͽ�����nouse����ʱopsate=pending,
- 2) �������ڶ������nouse���������ݰ�ʱ���ָ���data������
-
-20141217 1)����c2s�������ĵڶ�������ack���Ƿ������ڣ�һֱ�������飬
- Ŀǰ�汾�в����ϸ���
-
-
-20150114 ���ں����ĵ���˳�����ȵ���tcpall�ӿڣ������ȵ���tcp�ӿڽ����˷�������
- ԭ���ȵ���tcpall�������tcp�����ֶ�syn�ش��޷��ж��Ƿ���Ч���Ƿ�����
- ���Ϊ�ȵ���tcp���ٵ���tcpall������ ����ijˮ䰹��̣�tcp�ӿڣ�����tcpall�ı�ǩ
- ���ڵ���Ϊ���½���������data�����ӣ������ȵ���all���ڵ���tcp��
-20150126 ������
- ����tcp_free_stream,tcp_reset_stream�IJ�������Ϊ�ȵ���tcp���ٵ���tcpall
+20140329 1)�ָ���tcpdetail��¼���ζ����ֽ���pdetail->lostlen
+ 2)������tcpallpktģʽ�����ڲ������������飬����ȷ��fin��rst�ȵĵ���shunx
+ ˳����˲���������close״̬��ֻ�ܵ���̭��
+ 3)�������м�¼ÿ��İ����ֽ�����λ�õ�����Ϊʵ�ʵ����˳��
+ ��¼����¼�а����˲������صİ���Ŀ����ͳϵͳ�м�¼�˴����صİ���
+
+20141210 1)ȫ�����streaminfo����ؽṹ�壬ʹ�÷���ṹ��IJ�ͬ����
+20141213 1)����tcp_add_new_stream_bydata���水tcplen=0�İ������ӣ�����nouse����
+ nouse���������������һ����data��������opstate=close�����
+ �ڶ����Ǵ�һ�����ͽ�����nouse����ʱopsate=pending,
+ 2) �������ڶ������nouse���������ݰ�ʱ���ָ���data������
+
+20141217 1)����c2s�������ĵڶ�������ack���Ƿ������ڣ�һֱ�������飬
+ Ŀǰ�汾�в����ϸ���
+
+
+20150114 ���ں����ĵ���˳�����ȵ���tcpall�ӿڣ������ȵ���tcp�ӿڽ����˷�������
+ ԭ���ȵ���tcpall�������tcp�����ֶ�syn�ش��޷��ж��Ƿ���Ч���Ƿ�����
+ ���Ϊ�ȵ���tcp���ٵ���tcpall������ ����ijˮ䰹��̣�tcp�ӿڣ�����tcpall�ı�ǩ
+ ���ڵ���Ϊ���½���������data�����ӣ������ȵ���all���ڵ���tcp��
+20150126 ������
+ ����tcp_free_stream,tcp_reset_stream�IJ�������Ϊ�ȵ���tcp���ٵ���tcpall
20150210 lqy
- ����syn+ack����syn�����ݵ���������±�������seqʱҪ�ж��Ƿ��syn
- nouse�����ĵ��������
- ���Ӹ��� ,syn״̬��Ҫ����tcp��״̬
+ ����syn+ack����syn�����ݵ���������±�������seqʱҪ�ж��Ƿ��syn
+ nouse�����ĵ��������
+ ���Ӹ��� ,syn״̬��Ҫ����tcp��״̬
*/
#include "sapp_api.h"
#include "sapp_private_api.h"
@@ -56,10 +56,10 @@ int copy_ipport_union_addr(struct streaminfo *pstream_heap, struct streaminfo *p
void iterate_stream_list(const struct streaminfo *stream);
int del_stream_by_time(struct stream_list *plist, const struct streamindex *current_drive_index, int thread_id, enum stream_type_t type);
-//int g_kill_tcp_remedy_sw = 0; /* 2016-06-21 lijia add, �Ƿ����FD���� */
+//int g_kill_tcp_remedy_sw = 0; /* 2016-06-21 lijia add, �Ƿ����FD���� */
int G_TCP_FLOW_STAT_PROJECT_ID = -1; /* 2016-07-14 lijia copy from sapp */
-int G_TCP_DEDUCE_FLOW_STAT_PROJECT_ID = -1; /* ������, ����ACK����ƶϳ��ĶԶ����۽��յ����ݳ��� */
+int G_TCP_DEDUCE_FLOW_STAT_PROJECT_ID = -1; /* ������, ����ACK����ƶϳ��ĶԶ����۽��յ����ݳ��� */
#if DEBUG
static void packet_io_status_tcp_pkt_update(int tid, unsigned char tcp_flags, int payload_len);
@@ -104,9 +104,9 @@ static int checkcreatlinkseq(struct streaminfo_private*pstream_pr,int this_seq)
curseq=pdetail_pr->iclientseq;
}
//adjust by lqy 20120923
- //��һ�γ������ݣ���Ϊ������
+ //��һ�γ������ݣ���Ϊ������
if(curseq==0) return 1;
- //��γ���syn����һ�����ݰ����Ϊ׼
+ //��γ���syn����һ�����ݰ����Ϊ׼
if(pdetail_pr->multisynflag==1)
{
if(pstream->curdir == DIR_C2S)
@@ -137,7 +137,7 @@ int MESA_get_tcp_pkt_opts(const struct tcphdr *tcphdr, struct tcp_option *raw_re
const unsigned char *opt;
int opt_num = 0, opt_len;
struct tcp_option *out_raw_result = raw_result;
- int parsed_opt; /* ��ȷ������OPT��׼λ */
+ int parsed_opt; /* ��ȷ������OPT��׼λ */
if((NULL == raw_result) || (res_num <= 0)){
return -1;
@@ -158,10 +158,10 @@ int MESA_get_tcp_pkt_opts(const struct tcphdr *tcphdr, struct tcp_option *raw_re
switch (*opt)
{
- case TCP_OPT_EOL: /* ��ʵ������, ����¼��ѡ�������� */
+ case TCP_OPT_EOL: /* ��ʵ������, ����¼��ѡ�������� */
return opt_num;
- case TCP_OPT_NOP: /* ��ʵ������, ����¼��ѡ�������� */
+ case TCP_OPT_NOP: /* ��ʵ������, ����¼��ѡ�������� */
opt++;
opt_len--; /* Ref: RFC 793 section 3.1 */
continue;
@@ -239,7 +239,7 @@ int MESA_get_tcp_pkt_opts(const struct tcphdr *tcphdr, struct tcp_option *raw_re
goto err;
}
out_raw_result->len -= 2;
- out_raw_result->char_value = 1; /* SACKʵ��û��ֵ, �˴���ֵ��Ϊ�˱����ⲿ���ʹ�� */
+ out_raw_result->char_value = 1; /* SACKʵ��û��ֵ, �˴���ֵ��Ϊ�˱����ⲿ���ʹ�� */
opt_len -= 2;
parsed_opt = 1;
break;
@@ -267,7 +267,7 @@ int MESA_get_tcp_pkt_opts(const struct tcphdr *tcphdr, struct tcp_option *raw_re
parsed_opt = 1;
break;
- /* ����ʶ���ݲ�������ѡ��, ���� */
+ /* ����ʶ���ݲ�������ѡ��, ���� */
case TCP_OPT_SACK_EDGE:
case TCP_OPT_MD5:
case TCP_OPT_MULTI_PATH_TCP:
@@ -277,7 +277,7 @@ int MESA_get_tcp_pkt_opts(const struct tcphdr *tcphdr, struct tcp_option *raw_re
int this_opt_len;
if (opt_len <= 1)
- { /* ��ǰѡ���Ϊ0, ��ʣ��ѡ���ֻ��һ���ֽ�, ��ѡ�����ͷ�0��1, �����! */
+ { /* ��ǰѡ���Ϊ0, ��ʣ��ѡ���ֻ��һ���ֽ�, ��ѡ�����ͷ�0��1, �����! */
goto err;
}
this_opt_len = opt[1];
@@ -296,7 +296,7 @@ int MESA_get_tcp_pkt_opts(const struct tcphdr *tcphdr, struct tcp_option *raw_re
int this_opt_len;
if (opt_len <= 1)
- { /* ��ǰѡ���Ϊ0, ��ʣ��ѡ���ֻ��һ���ֽ�, ��ѡ�����ͷ�0��1, �����! */
+ { /* ��ǰѡ���Ϊ0, ��ʣ��ѡ���ֻ��һ���ֽ�, ��ѡ�����ͷ�0��1, �����! */
goto err;
}
this_opt_len = opt[1];
@@ -336,7 +336,7 @@ int MESA_get_tcp_pkt_opts_ext(const struct tcphdr *tcphdr, struct tcp_option_ext
const unsigned char *opt;
int opt_num = 0, opt_len;
struct tcp_option_ext *out_raw_result = raw_result;
- int parsed_opt; /* ��ȷ������OPT��׼λ */
+ int parsed_opt; /* ��ȷ������OPT��׼λ */
if((NULL == raw_result) || (res_num <= 0)){
return -1;
@@ -357,10 +357,10 @@ int MESA_get_tcp_pkt_opts_ext(const struct tcphdr *tcphdr, struct tcp_option_ext
switch (*opt)
{
- case TCP_OPT_EOL: /* ��ʵ������, ����¼��ѡ�������� */
+ case TCP_OPT_EOL: /* ��ʵ������, ����¼��ѡ�������� */
return opt_num;
- case TCP_OPT_NOP: /* ��ʵ������, ����¼��ѡ�������� */
+ case TCP_OPT_NOP: /* ��ʵ������, ����¼��ѡ�������� */
opt++;
opt_len--; /* Ref: RFC 793 section 3.1 */
continue;
@@ -438,7 +438,7 @@ int MESA_get_tcp_pkt_opts_ext(const struct tcphdr *tcphdr, struct tcp_option_ext
goto err;
}
out_raw_result->len -= 2;
- out_raw_result->char_value = 1; /* SACKʵ��û��ֵ, �˴���ֵ��Ϊ�˱����ⲿ���ʹ�� */
+ out_raw_result->char_value = 1; /* SACKʵ��û��ֵ, �˴���ֵ��Ϊ�˱����ⲿ���ʹ�� */
opt_len -= 2;
parsed_opt = 1;
break;
@@ -485,7 +485,7 @@ int MESA_get_tcp_pkt_opts_ext(const struct tcphdr *tcphdr, struct tcp_option_ext
}
break;
- /* ����ʶ���ݲ�������ѡ��, ���� */
+ /* ����ʶ���ݲ�������ѡ��, ���� */
case TCP_OPT_SACK_EDGE:
case TCP_OPT_MD5:
case TCP_OPT_RIVER_PROBE:
@@ -494,7 +494,7 @@ int MESA_get_tcp_pkt_opts_ext(const struct tcphdr *tcphdr, struct tcp_option_ext
int this_opt_len;
if (opt_len <= 1)
- { /* ��ǰѡ���Ϊ0, ��ʣ��ѡ���ֻ��һ���ֽ�, ��ѡ�����ͷ�0��1, �����! */
+ { /* ��ǰѡ���Ϊ0, ��ʣ��ѡ���ֻ��һ���ֽ�, ��ѡ�����ͷ�0��1, �����! */
goto err;
}
this_opt_len = opt[1];
@@ -513,7 +513,7 @@ int MESA_get_tcp_pkt_opts_ext(const struct tcphdr *tcphdr, struct tcp_option_ext
int this_opt_len;
if (opt_len <= 1)
- { /* ��ǰѡ���Ϊ0, ��ʣ��ѡ���ֻ��һ���ֽ�, ��ѡ�����ͷ�0��1, �����! */
+ { /* ��ǰѡ���Ϊ0, ��ʣ��ѡ���ֻ��һ���ֽ�, ��ѡ�����ͷ�0��1, �����! */
goto err;
}
this_opt_len = opt[1];
@@ -600,8 +600,8 @@ static char tcp_processallpkt( struct streaminfo *pstream, const void *this_iphd
}
-/* LiJia comment: ������½�����, ��resetflag=0, ����pindexָ��ջ����ڴ�;
- �������Ԫ������, ����pindexָ�������ڴ�;
+/* LiJia comment: ������½�����, ��resetflag=0, ����pindexָ��ջ����ڴ�;
+ �������Ԫ������, ����pindexָ�������ڴ�;
*/
static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
const void *this_iphdr, struct mesa_tcp_hdr *this_tcphdr,int datalen,int resetflag, const raw_pkt_t *raw_pkt)
@@ -613,7 +613,7 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
struct streaminfo *pstream;
struct tcpdetail *pdetail=NULL;
struct tcpdetail_private *pdetail_pr=NULL;
- int need_reverse = 0; /* copy��ַʱ, �Ƿ���Ҫ��src, dst�ߵ� */
+ int need_reverse = 0; /* copy��ַʱ, �Ƿ���Ҫ��src, dst�ߵ� */
if ((this_tcphdr->th_flags & TH_SYN)
&& !(this_tcphdr->th_flags & TH_ACK)
@@ -631,12 +631,12 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
{
//runtime_log(RLOG_LV_FATAL, "[tcp_add_new_stream_bysyn]:","tcpflags=:%0x\n",this_tcphdr->th_flags);
//adjust by lqy 20130530
- //ֻ�е����ν���ʱֱ�ӷ���
+ //ֻ�е����ν���ʱֱ�ӷ���
if(resetflag==0)
return NULL;
}
if(likely(0 == resetflag)){
- /* �˺���copy������pindex�ṹ, ��addr��ַ��������һ���ڴ�, ���Բ�û��copy, ʵ�ʻ�����pindexָ����ڴ���� */
+ /* �˺���copy������pindex�ṹ, ��addr��ַ��������һ���ڴ�, ���Բ�û��copy, ʵ�ʻ�����pindexָ����ڴ���� */
pindex_tcp=malloc_and_copy_streamindex(threadnum, pindex);
//memcpy(pindex_tcp,pindex,sizeof(struct streamindex));
@@ -644,18 +644,18 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
pstream = &pstream_pr->stream_public;
/* 2014-11-13 lijia modify */
- if(DIR_C2S == createdir){ /* ��ǰ��ַ��TCP�߼������Ϸ���C->S���䷽�� */
+ if(DIR_C2S == createdir){ /* ��ǰ��ַ��TCP�߼������Ϸ���C->S���䷽�� */
if(1 == pstream_pr->layer_dir){
- pstream_pr->stream_dir = 1; /* �ڵ�ַ�������, ��"���ַ�ǿͻ���"�����෴ */
+ pstream_pr->stream_dir = 1; /* �ڵ�ַ�������, ��"���ַ�ǿͻ���"�����෴ */
}else{
pstream_pr->stream_dir = 0;
}
need_reverse = 0;
pstream_pr->stream_c2s_route_dir = raw_pkt->route_dir;
}else{
- need_reverse = 1; /* ���뽫��ַ����ߵ�, �����ȡ��ַ�ṹʱ, src�̶�ָ���߼��ϵ�Դ��ַ */
+ need_reverse = 1; /* ���뽫��ַ����ߵ�, �����ȡ��ַ�ṹʱ, src�̶�ָ���߼��ϵ�Դ��ַ */
if(1 == pstream_pr->layer_dir){
- /* ��Ϊ��copy_stream_info_to_heap()�л�����ַ�ߵ�, ���Դ˴��ͺ�"���ַ�ǿͻ���"������ͬ�� */
+ /* ��Ϊ��copy_stream_info_to_heap()�л�����ַ�ߵ�, ���Դ˴��ͺ�"���ַ�ǿͻ���"������ͬ�� */
pstream_pr->stream_dir = 0;
}else{
pstream_pr->stream_dir = 1;
@@ -665,9 +665,9 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
#if USE_RBTREE_INSTEAD_LIST
/* note:
- ��Ϊ����rbtreeʱ��Ҫ���������������Ƚ�, ����ȷ������left����right��֧,
- ���ڱ�����˵, layer_dir����û��������, ��Ҫ���ں��������Ƚϵ�ַ��С,
- ���Խ�layer_dir = stream_dir;
+ ��Ϊ����rbtreeʱ��Ҫ���������������Ƚ�, ����ȷ������left����right��֧,
+ ���ڱ�����˵, layer_dir����û��������, ��Ҫ���ں��������Ƚϵ�ַ��С,
+ ���Խ�layer_dir = stream_dir;
*/
pstream_pr->layer_dir = pstream_pr->stream_dir;
#endif
@@ -682,11 +682,11 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
#if SAPP_INSECTICIDE
iterate_stream_list(pstream);
#endif
- /* 2016-07-25 lijia add, ��¼��ǰ����ײ���������, ÿ����ֻ�ڴ���ʱ��һ�μ��� */
+ /* 2016-07-25 lijia add, ��¼��ǰ����ײ���������, ÿ����ֻ�ڴ���ʱ��һ�μ��� */
get_stream_carry_tunnel_type(pstream, NULL, &pstream_pr->stream_low_layer_tunnel_type);
#if 0
- /* TCP��洢����ָ��, ��ʵ��ַ���ݴ洢��IP��, ����� */
+ /* TCP��洢����ָ��, ��ʵ��ַ���ݴ洢��IP��, ����� */
//set_stream_addr(pindex_tcp->stream.pfather, this_tcphdr->th_sport, this_tcphdr->th_dport, &pindex_tcp->stream.addr);
//set_stream_addr(pindex_tcp->stream.pfather, this_tcphdr->th_sport, this_tcphdr->th_dport, &pindex_tcp->stream);
@@ -702,7 +702,7 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
memset(pdetail_pr,0,sizeof(struct tcpdetail_private));
pdetail->createtime=g_CurrentTime;
pstream_pr->stream_create_timestamp_ms=g_CurrentTime_ms;
- //adjust by lqy 20140515 ֻ���½�ʱ����
+ //adjust by lqy 20140515 ֻ���½�ʱ����
if(createdir==DIR_S2C){
pdetail->clientpktnum++;
pdetail->clientbytes+= datalen; /* 2014-12-19 lijia add, for SYN pkt append data */
@@ -720,15 +720,15 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
else
{
/* TODO 1:
- �����������, ��ò�ʹ��ԭ����streamindex�ṹ, free��������һ���µ�,
- ����ʹstreamindex��ַ��ԭ����һ��, ��Ҫ����DEBUG.
+ �����������, ��ò�ʹ��ԭ����streamindex�ṹ, free��������һ���µ�,
+ ����ʹstreamindex��ַ��ԭ����һ��, ��Ҫ����DEBUG.
*/
pindex_tcp = pindex;
pstream_pr = &pindex_tcp->stream;
pstream = &pstream_pr->stream_public;
pdetail_pr = (struct tcpdetail_private *)pstream->pdetail;
pdetail = (struct tcpdetail *)pdetail_pr;
- // add by lqy 20150107, ���ü���
+ // add by lqy 20150107, ���ü���
if (createdir == DIR_S2C)
{
pdetail->clientpktnum = 1;
@@ -747,13 +747,13 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
pstream_pr->has_duplicate_pkt = 0;
pdetail_pr->drop_stream_flag = 0;
- /* ���Ӹ���, ��������һ���µ�streamid */
+ /* ���Ӹ���, ��������һ���µ�streamid */
pindex_tcp->stream.global_stream_id = get_global_stream_id(threadnum);
pindex_tcp->stream.stream_trace_id=0;
pdetail->createtime=g_CurrentTime;
pstream_pr->stream_create_timestamp_ms=g_CurrentTime_ms;
- /* ��������, �����ж�һ��ddos ״̬ */
+ /* ��������, �����ж�һ��ddos ״̬ */
if(pstream_pr->create_dir_by_well_known_port != 1)
{
pstream_pr->under_ddos_bypass = packet_io_under_ddos_should_bypass(threadnum);
@@ -783,7 +783,7 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
pstream->dir=createdir;
pstream->curdir=createdir;
- //δ����ȫ���ӿ�ģʽ�£�ֱ�ӹر�, add by lqy 20141213
+ //δ����ȫ���ӿ�ģʽ�£�ֱ�ӹر�, add by lqy 20141213
if(tcp_support_all==TCP_SUPPORT_ENTRYALL_OFF)
{
pstream->pktstate=OP_STATE_CLOSE;
@@ -797,17 +797,17 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
if(createdir==DIR_S2C)
{
- //��ʱ������ʼ��seq
+ //��ʱ������ʼ��seq
pdetail_pr->iclientseq =ntohl (this_tcphdr->th_seq) + 1;
pdetail_pr->iserverseq=ntohl (this_tcphdr->th_ack);
- //pdetail->clientpkt++; //adjust by lqy 20140515 ֻ���½�ʱ����
+ //pdetail->clientpkt++; //adjust by lqy 20140515 ֻ���½�ʱ����
pdetail_pr->S2C_first_ack_seq = pdetail_pr->iserverseq;
}
else if(createdir==DIR_C2S)
{
- pdetail_pr->iclientseq = 0; /* 2017-12-06 lijia add, ��ʱS2C�����ISN��δ��ȡ�� */
+ pdetail_pr->iclientseq = 0; /* 2017-12-06 lijia add, ��ʱS2C�����ISN��δ��ȡ�� */
pdetail_pr->iserverseq=ntohl (this_tcphdr->th_seq)+1;
- //pdetail->serverpkt++; //adjust by lqy 20140515 ֻ���½�ʱ����
+ //pdetail->serverpkt++; //adjust by lqy 20140515 ֻ���½�ʱ����
pdetail_pr->C2S_first_ack_seq = ntohl (this_tcphdr->th_ack);
}
pdetail->lastmtime=g_CurrentTime;
@@ -816,14 +816,14 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
pstream->stream_state=TCP_SYN_STATE;
if(pstream_pr->under_ddos_bypass){
- /* bypass״̬�������κβ��, ������project, parse_tcp_option�Ȳ��������Ժ�����,�Խ�Լcpu��Դ */
+ /* bypass״̬�������κβ��, ������project, parse_tcp_option�Ȳ��������Ժ�����,�Խ�Լcpu��Դ */
pstream->stream_state=TCP_NOUSE_STATE;
streamaddlist(pindex_tcp,&(G_MESA_GLOBAL_STREAM[threadnum]->tcpList[pstream->stream_state]));
return pindex_tcp;
}
streamaddlist(pindex_tcp,&(G_MESA_GLOBAL_STREAM[threadnum]->tcpList[pstream->stream_state]));
- /* LiJia add, ijЩ��Ŀ����Ӧ�ó�ʼ��, ���ǩ��ԭʼIP��Ƭ�б��� */
+ /* LiJia add, ijЩ��Ŀ����Ӧ�ó�ʼ��, ���ǩ��ԭʼIP��Ƭ�б��� */
pstream_pr->pproject = project_requirement_create(SAPP_MEM_DYN_TCP_PROJECT, pstream->threadnum);
pstream_pr->stream_bridge = stream_bridge_create_per_stream(SAPP_MEM_DYN_TCP_BRIDGE, pstream->threadnum);
@@ -833,51 +833,75 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
memset(pdetail_pr->flow_stat, 0, sizeof(struct tcp_flow_stat));
project_req_add_struct(pstream, G_TCP_FLOW_STAT_PROJECT_ID, pdetail_pr->flow_stat);
+ int frag_cnt = 0;
+ int frag_len = 0;
+ stream_get_scratch_frag_stat(pstream, &frag_cnt, &frag_len);
+
if(0 == resetflag){
if(DIR_C2S == pstream->curdir){
pdetail_pr->flow_stat->C2S_syn_pkt++;
- pdetail_pr->flow_stat->C2S_all_pkt++;
- pdetail_pr->flow_stat->C2S_all_byte += datalen;
- pdetail_pr->flow_stat->C2S_all_byte_raw += MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->C2S_ip_fragment_pkt++;
+ pdetail_pr->flow_stat->C2S_ip_fragment_pkt+=MAX(1,frag_cnt);
+ pdetail_pr->flow_stat->C2S_all_pkt+= MAX(1,frag_cnt);
+ pdetail_pr->flow_stat->C2S_all_byte += MAX(datalen, frag_len);
+ pdetail_pr->flow_stat->C2S_all_byte_raw += MAX(raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes, frag_len);
}
+ else
+ {
+ pdetail_pr->flow_stat->C2S_all_pkt++;
+ pdetail_pr->flow_stat->C2S_all_byte += datalen;
+ pdetail_pr->flow_stat->C2S_all_byte_raw +=
+ MAX(raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes, 0);
+ }
}else{
pdetail_pr->flow_stat->S2C_syn_pkt++;
- pdetail_pr->flow_stat->S2C_all_pkt++;
- pdetail_pr->flow_stat->S2C_all_byte += datalen;
- pdetail_pr->flow_stat->S2C_all_byte_raw += MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->S2C_ip_fragment_pkt++;
+ pdetail_pr->flow_stat->S2C_ip_fragment_pkt+=MAX(1,frag_cnt);
+ pdetail_pr->flow_stat->S2C_all_pkt+=MAX(1,frag_cnt);
+ pdetail_pr->flow_stat->S2C_all_byte += MAX(datalen, frag_len);
+ pdetail_pr->flow_stat->S2C_all_byte_raw += MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,frag_len);
+ }
+ else
+ {
+ pdetail_pr->flow_stat->S2C_all_pkt++;
+ pdetail_pr->flow_stat->S2C_all_byte += datalen;
+ pdetail_pr->flow_stat->S2C_all_byte_raw += MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
}
}
}else{
if(DIR_C2S == pstream->curdir){
pdetail_pr->flow_stat->C2S_syn_pkt = 1;
- pdetail_pr->flow_stat->C2S_all_pkt = 1;
- pdetail_pr->flow_stat->C2S_all_byte = datalen;
- pdetail_pr->flow_stat->C2S_all_byte_raw = MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->C2S_ip_fragment_pkt=1;
+ pdetail_pr->flow_stat->C2S_all_pkt += MAX(1,frag_cnt);
+ pdetail_pr->flow_stat->C2S_all_byte = MAX(datalen, frag_len);
+ pdetail_pr->flow_stat->C2S_all_byte_raw = MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes, frag_len);
+ pdetail_pr->flow_stat->C2S_ip_fragment_pkt+= MAX(1,frag_cnt);
}
else
{
+ pdetail_pr->flow_stat->C2S_all_pkt = 1;
+ pdetail_pr->flow_stat->C2S_all_byte = datalen;
+ pdetail_pr->flow_stat->C2S_all_byte_raw = MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
pdetail_pr->flow_stat->C2S_ip_fragment_pkt=0;
}
}else{
pdetail_pr->flow_stat->S2C_syn_pkt = 1;
- pdetail_pr->flow_stat->S2C_all_pkt = 1;
- pdetail_pr->flow_stat->S2C_all_byte = datalen;
- pdetail_pr->flow_stat->S2C_all_byte_raw = MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
+
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->S2C_ip_fragment_pkt=1;
+ pdetail_pr->flow_stat->S2C_all_pkt += MAX(1,frag_cnt);
+ pdetail_pr->flow_stat->S2C_all_byte = MAX(datalen, frag_len);
+ pdetail_pr->flow_stat->S2C_all_byte_raw = MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,frag_len);
+ pdetail_pr->flow_stat->S2C_ip_fragment_pkt+= MAX(1,frag_cnt);
}
else
{
+ pdetail_pr->flow_stat->S2C_all_pkt = 1;
+ pdetail_pr->flow_stat->S2C_all_byte = datalen;
+ pdetail_pr->flow_stat->S2C_all_byte_raw = MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
pdetail_pr->flow_stat->S2C_ip_fragment_pkt=0;
}
}
@@ -892,7 +916,7 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
if(DIR_S2C == createdir){
pdetail_pr->S2C_first_ack_seq = ntohl(this_tcphdr->th_ack);
}else{
- ; /* SYN��ľ��ACK, ���� */
+ ; /* SYN��ľ��ACK, ���� */
}
}
@@ -911,10 +935,10 @@ static struct streamindex *tcp_add_new_stream_bysyn(struct streamindex *pindex,
}
/*
- 1)ԭ�����Ϊû��syn������£�ֱ�ӿ���һ�����ݰ���������
- 2) Ϊ�˼���ȫ���ӿڣ�����û�����ݵİ�Ҳ���������ӽ���NOUSE ״̬
+ 1)ԭ�����Ϊû��syn������£�ֱ�ӿ���һ�����ݰ���������
+ 2) Ϊ�˼���ȫ���ӿڣ�����û�����ݵİ�Ҳ���������ӽ���NOUSE ״̬
- 2015-06-10 lijia add "resetflag", ��������ʱ��̭�½�����.
+ 2015-06-10 lijia add "resetflag", ��������ʱ��̭�½�����.
*/
static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
struct mesa_tcp_hdr *this_tcphdr, int datalen, int resetflag, const raw_pkt_t * raw_pkt)
@@ -950,7 +974,7 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
iterate_stream_list(pstream);
#endif
- /* 2016-07-25 lijia add, ��¼��ǰ����ײ���������, ÿ����ֻ�ڴ���ʱ��һ�μ��� */
+ /* 2016-07-25 lijia add, ��¼��ǰ����ײ���������, ÿ����ֻ�ڴ���ʱ��һ�μ��� */
get_stream_carry_tunnel_type(pstream, NULL, &pstream_pr->stream_low_layer_tunnel_type);
pstream->dir=createdir;
@@ -962,24 +986,24 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
#if USE_RBTREE_INSTEAD_LIST
if(1 == pstream_pr->layer_dir){
- pstream_pr->stream_dir = 1; /* ��Ϊ�ǰ�DATA������, ����stream_dir�϶���Ĭ�Ϲ�����ͬ */
+ pstream_pr->stream_dir = 1; /* ��Ϊ�ǰ�DATA������, ����stream_dir�϶���Ĭ�Ϲ�����ͬ */
//((struct streaminfo_private *)pstream->pfather)->stream_dir = ((struct streaminfo_private *)pstream->pfather)->layer_dir;
//set_stream_addr(pstream->pfather, this_tcphdr->th_sport, this_tcphdr->th_dport, pstream);
}else{
- pstream_pr->stream_dir = 1; /* ��Ϊ�ǰ�DATA������, ����stream_dir�϶���Ĭ�Ϲ�����ͬ */
- //((struct streaminfo_private *)pstream->pfather)->stream_dir = ((struct streaminfo_private *)pstream->pfather)->layer_dir ^ 1; /* IP�㴴�����ķ����뵱ǰ�����䷽���෴ */
+ pstream_pr->stream_dir = 1; /* ��Ϊ�ǰ�DATA������, ����stream_dir�϶���Ĭ�Ϲ�����ͬ */
+ //((struct streaminfo_private *)pstream->pfather)->stream_dir = ((struct streaminfo_private *)pstream->pfather)->layer_dir ^ 1; /* IP�㴴�����ķ����뵱ǰ�����䷽���෴ */
//set_stream_addr(pstream->pfather, this_tcphdr->th_dport, this_tcphdr->th_sport, pstream);
}
/* note:
- ��Ϊ����rbtreeʱ��Ҫ���������������Ƚ�, ����ȷ������left����right��֧,
- ���ڱ�����˵, layer_dir����û��������, ��Ҫ���ں��������Ƚϵ�ַ��С,
- ��data��������, layer_dir = 1;
+ ��Ϊ����rbtreeʱ��Ҫ���������������Ƚ�, ����ȷ������left����right��֧,
+ ���ڱ�����˵, layer_dir����û��������, ��Ҫ���ں��������Ƚϵ�ַ��С,
+ ��data��������, layer_dir = 1;
*/
pstream_pr->layer_dir = 1;
#endif
- hash_add_stream(pindex_tcp); /* ���resetflag=1, ˵�������Ӹ���, tcp_reset_stream()û�д�hash����ɾ��, Ҳ�Ͳ����ظ������� */
+ hash_add_stream(pindex_tcp); /* ���resetflag=1, ˵�������Ӹ���, tcp_reset_stream()û�д�hash����ɾ��, Ҳ�Ͳ����ظ������� */
}else{
pindex_tcp=pindex;
pstream_pr=&(pindex_tcp->stream);
@@ -1007,11 +1031,11 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
pstream_pr->stream_c2s_route_dir = raw_pkt->route_dir;
}
pstream_pr->stream_killed_flag = 0;
- /* ���Ӹ���, ��������һ���µ�streamid */
+ /* ���Ӹ���, ��������һ���µ�streamid */
pindex_tcp->stream.global_stream_id = get_global_stream_id(threadnum);
pindex_tcp->stream.stream_trace_id=0;
- /* ���Ӹ���, �����ж�һ��ddos ״̬ */
+ /* ���Ӹ���, �����ж�һ��ddos ״̬ */
if(pstream_pr->create_dir_by_well_known_port != 1)
{
pstream_pr->under_ddos_bypass = packet_io_under_ddos_should_bypass(threadnum);
@@ -1022,9 +1046,9 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
pstream->curdir=createdir;
//pindex_tcp->stream.stream_dir=pindex_tcp->stream.layer_dir;
- //�����ݱ���ֱ�ӽ���data״̬, by lqy 20141213
+ //�����ݱ���ֱ�ӽ���data״̬, by lqy 20141213
//if(datalen>0)
- //�����ĵ��Dz���������־�ı���adjust by lqy 20150215
+ //�����ĵ��Dz���������־�ı���adjust by lqy 20150215
if((datalen>0) && (!(this_tcphdr->th_flags & TH_FIN)) && (!(this_tcphdr->th_flags & TH_RST)))
{
pstream->stream_state=TCP_DATA_STATE;
@@ -1034,7 +1058,7 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
pstream->stream_state=TCP_NOUSE_STATE;
}
- /* TCP��洢����ָ��, ��ʵ��ַ���ݴ洢��IP��, ����� */
+ /* TCP��洢����ָ��, ��ʵ��ַ���ݴ洢��IP��, ����� */
//set_stream_addr(pindex_tcp->stream.pfather, this_tcphdr->th_sport, this_tcphdr->th_dport, &pindex_tcp->stream.addr);
//set_stream_addr(pindex_tcp->stream.pfather, this_tcphdr->th_sport, this_tcphdr->th_dport, &pindex_tcp->stream);
@@ -1042,12 +1066,12 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
set_stream_addr(pindex_tcp->stream.pfather, this_tcphdr->th_sport, this_tcphdr->th_dport, &pindex_tcp->stream);
#else /* 2014-12-16 lijia modify */
if(1 == pstream_pr->layer_dir){
- pstream_pr->stream_dir = 1; /* ��Ϊ�ǰ�DATA������, ����stream_dir�϶���Ĭ�Ϲ�����ͬ */
+ pstream_pr->stream_dir = 1; /* ��Ϊ�ǰ�DATA������, ����stream_dir�϶���Ĭ�Ϲ�����ͬ */
//((struct streaminfo_private *)pstream->pfather)->stream_dir = ((struct streaminfo_private *)pstream->pfather)->layer_dir;
//set_stream_addr(pstream->pfather, this_tcphdr->th_sport, this_tcphdr->th_dport, pstream);
}else{
- pstream_pr->stream_dir = 1; /* ��Ϊ�ǰ�DATA������, ����stream_dir�϶���Ĭ�Ϲ�����ͬ */
- //((struct streaminfo_private *)pstream->pfather)->stream_dir = ((struct streaminfo_private *)pstream->pfather)->layer_dir ^ 1; /* IP�㴴�����ķ����뵱ǰ�����䷽���෴ */
+ pstream_pr->stream_dir = 1; /* ��Ϊ�ǰ�DATA������, ����stream_dir�϶���Ĭ�Ϲ�����ͬ */
+ //((struct streaminfo_private *)pstream->pfather)->stream_dir = ((struct streaminfo_private *)pstream->pfather)->layer_dir ^ 1; /* IP�㴴�����ķ����뵱ǰ�����䷽���෴ */
//set_stream_addr(pstream->pfather, this_tcphdr->th_dport, this_tcphdr->th_sport, pstream);
}
#endif
@@ -1070,7 +1094,7 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
pdetail_pr->link_state=STREAM_LINK_DATA;
if(pstream_pr->under_ddos_bypass){
- /* bypass״̬�������κβ��, ������project, bridge,parse_opt,��ʼ��half_stream�Ȳ��������Ժ����� */
+ /* bypass״̬�������κβ��, ������project, bridge,parse_opt,��ʼ��half_stream�Ȳ��������Ժ����� */
pstream->stream_state=TCP_NOUSE_STATE;
streamaddlist(pindex_tcp,&(G_MESA_GLOBAL_STREAM[threadnum]->tcpList[pstream->stream_state]));
return pindex_tcp;
@@ -1079,14 +1103,14 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
streamaddlist(pindex_tcp,&(G_MESA_GLOBAL_STREAM[threadnum]->tcpList[pstream->stream_state]));
//if(datalen>0)
- //�����ĵ��Dz���������־�ı���adjust by lqy 20150325
+ //�����ĵ��Dz���������־�ı���adjust by lqy 20150325
if((datalen>0) && (!(this_tcphdr->th_flags & TH_FIN)) && (!(this_tcphdr->th_flags & TH_RST)))
{
if(pstream->dir==DIR_C2S)
{
pdetail_pr->pserver=(struct half_tcpstream *)sapp_mem_malloc(SAPP_MEM_DYN_TCP_HALF_STREAM, threadnum,sizeof(struct half_tcpstream));
memset(pdetail_pr->pserver,0,sizeof(struct half_tcpstream));
- //������
+ //������
pdetail_pr->pserver->first_data_seq=(ntohl (this_tcphdr->th_seq) );
/* 2014-07-31 LiJia add, for set one stream unorder number */
pdetail_pr->pserver->maxunorder = tcp_default_unorder;
@@ -1095,17 +1119,17 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
{
pdetail_pr->pclient=(struct half_tcpstream *)sapp_mem_malloc(SAPP_MEM_DYN_TCP_HALF_STREAM,threadnum,sizeof(struct half_tcpstream));
memset(pdetail_pr->pclient,0,sizeof(struct half_tcpstream));
- //������
+ //������
pdetail_pr->pclient->first_data_seq=(ntohl (this_tcphdr->th_seq) );
/* 2014-07-31 LiJia add, for set one stream unorder number */
pdetail_pr->pclient->maxunorder = tcp_default_unorder;
}
}
- else //�����ݵ������¼��ʱseqֵ
+ else //�����ݵ������¼��ʱseqֵ
{
if(createdir==DIR_S2C)
{
- //��ʱ������ʼ��seq
+ //��ʱ������ʼ��seq
pdetail_pr->iclientseq =ntohl (this_tcphdr->th_seq) ;
pdetail_pr->iserverseq=ntohl (this_tcphdr->th_ack);
@@ -1118,7 +1142,7 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
}
pstream->pdetail=(void *)pdetail_pr;
- /* 2014-03-26 LiJia add, ijЩ��Ŀ����Ӧ�ó�ʼ��, ���ǩ��ԭʼIP��Ƭ�б��� */
+ /* 2014-03-26 LiJia add, ijЩ��Ŀ����Ӧ�ó�ʼ��, ���ǩ��ԭʼIP��Ƭ�б��� */
pstream_pr->pproject = project_requirement_create(SAPP_MEM_DYN_TCP_PROJECT,threadnum);
pstream_pr->stream_bridge = stream_bridge_create_per_stream(SAPP_MEM_DYN_TCP_BRIDGE,pstream->threadnum);
@@ -1128,34 +1152,45 @@ static struct streamindex *tcp_add_new_stream_bydata(struct streamindex *pindex,
memset(pdetail_pr->flow_stat, 0, sizeof(struct tcp_flow_stat));
project_req_add_struct(pstream, G_TCP_FLOW_STAT_PROJECT_ID, pdetail_pr->flow_stat);
+ int frag_cnt = 0, frag_len = 0;
+ stream_get_scratch_frag_stat(pstream, &frag_cnt, &frag_len);
+
if(resetflag != 0){
if(pstream->curdir == DIR_C2S){
- pdetail_pr->flow_stat->C2S_all_pkt = 1;
- pdetail_pr->flow_stat->C2S_all_byte = datalen;
- pdetail_pr->flow_stat->C2S_all_byte_raw =MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
+
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->C2S_ip_fragment_pkt=1;
+ pdetail_pr->flow_stat->C2S_all_pkt = MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->C2S_all_byte = MAX(datalen, frag_len);
+ pdetail_pr->flow_stat->C2S_all_byte_raw =MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,frag_len);
+ pdetail_pr->flow_stat->C2S_ip_fragment_pkt=MAX(1, frag_cnt);
}
else
{
+ pdetail_pr->flow_stat->C2S_all_pkt = 1;
+ pdetail_pr->flow_stat->C2S_all_byte = datalen;
+ pdetail_pr->flow_stat->C2S_all_byte_raw =MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
pdetail_pr->flow_stat->C2S_ip_fragment_pkt=0;
}
}else{
- pdetail_pr->flow_stat->S2C_all_pkt = 1;
- pdetail_pr->flow_stat->S2C_all_byte = datalen;
- pdetail_pr->flow_stat->S2C_all_byte_raw = MAX(raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes,0);
+
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->S2C_ip_fragment_pkt=1;
+ pdetail_pr->flow_stat->S2C_all_pkt = MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->S2C_all_byte = MAX(datalen, frag_len);
+ pdetail_pr->flow_stat->S2C_all_byte_raw = MAX(raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes,frag_len);
+ pdetail_pr->flow_stat->S2C_ip_fragment_pkt=MAX(1, frag_cnt);
}
else
{
+ pdetail_pr->flow_stat->S2C_all_pkt = 1;
+ pdetail_pr->flow_stat->S2C_all_byte = datalen;
+ pdetail_pr->flow_stat->S2C_all_byte_raw = MAX(raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes,0);
pdetail_pr->flow_stat->S2C_ip_fragment_pkt=0;
}
}
}
- /* NOTE, tcp_data������stream_process_tcp()���ۼ� */
+ /* NOTE, tcp_data������stream_process_tcp()���ۼ� */
}
if(G_TCP_DEDUCE_FLOW_STAT_PROJECT_ID != -1){
@@ -1213,9 +1248,9 @@ static void tcp_change_stream_todata(struct streamindex *pindex,struct mesa_tcp_
if(NULL == pdetail_pr->pserver){
pdetail_pr->pserver=(struct half_tcpstream *)sapp_mem_malloc(SAPP_MEM_DYN_TCP_HALF_STREAM,threadnum,sizeof(struct half_tcpstream));
memset(pdetail_pr->pserver,0,sizeof(struct half_tcpstream));
- //������
+ //������
pdetail_pr->pserver->first_data_seq=pdetail_pr->iserverseq;
- /* pdetail_pr->iserverseq=0; */ /* 2016-04-27 lijia modify, ���ڻ�ȡ��ǰ����ISN */
+ /* pdetail_pr->iserverseq=0; */ /* 2016-04-27 lijia modify, ���ڻ�ȡ��ǰ����ISN */
/* 2014-10-20 LiJia add, for set one stream unorder number */
pdetail_pr->pserver->maxunorder = tcp_default_unorder;
@@ -1226,9 +1261,9 @@ static void tcp_change_stream_todata(struct streamindex *pindex,struct mesa_tcp_
if(NULL == pdetail_pr->pclient){
pdetail_pr->pclient=(struct half_tcpstream *)sapp_mem_malloc(SAPP_MEM_DYN_TCP_HALF_STREAM,threadnum,sizeof(struct half_tcpstream));
memset(pdetail_pr->pclient,0,sizeof(struct half_tcpstream));
- //������
+ //������
pdetail_pr->pclient->first_data_seq=pdetail_pr->iclientseq;
- /* pdetail_pr->iclientseq=0; */ /* 2016-04-27 lijia modify, ���ڻ�ȡ��ǰ����ISN */
+ /* pdetail_pr->iclientseq=0; */ /* 2016-04-27 lijia modify, ���ڻ�ȡ��ǰ����ISN */
/* 2014-10-20 LiJia add, for set one stream unorder number */
pdetail_pr->pclient->maxunorder = tcp_default_unorder;
@@ -1252,7 +1287,7 @@ static void tcp_free_half(struct half_tcpstream *phalf,int threadnum)
//phalf = NULL;
}
-/* ������֤pindex�Ƿ���plist�� */
+/* ������֤pindex�Ƿ���plist�� */
static int inline stream_in_timeout_list(const struct streamindex *pindex, const struct stream_list *plist)
{
if(timeout_pending((struct timeout *)&(pindex->timeout)))
@@ -1274,8 +1309,8 @@ static void tcp_change_stream_tonouse(struct streamindex *pindex)
plist=&(G_MESA_GLOBAL_STREAM[threadnum]->tcpList[pstream->stream_state]);
/* 2017-01-03 lijia add,
- �����tcp_reset_stream()����ջ��, ������tcp_change_stream_tonouse,
- pindex�Ѿ����Ƴ���ǰ����list, �����ټ���ִ��streamleavlist��streamaddlist��.
+ �����tcp_reset_stream()����ջ��, ������tcp_change_stream_tonouse,
+ pindex�Ѿ����Ƴ���ǰ����list, �����ټ���ִ��streamleavlist��streamaddlist��.
*/
if(stream_in_timeout_list(pindex, plist) == 0){
return;
@@ -1300,16 +1335,16 @@ static void tcp_change_stream_tonouse(struct streamindex *pindex)
pdetail_pr->pserver = NULL;
}
/* 2017-12-20 lijia add,
- ��FIN������������NOUSE״̬,
- deal_tcp_stream()ÿ�ζ���TCP_SYN_STATE��TCP_DATA_STATE״̬,
- �޷���TCP_NOUSE_STATE״̬�µ�����̭��ȥ,
- ���Դ˴���ɨ��һ��TCP_NOUSE_STATE�ij�ʱ��.
+ ��FIN������������NOUSE״̬,
+ deal_tcp_stream()ÿ�ζ���TCP_SYN_STATE��TCP_DATA_STATE״̬,
+ �޷���TCP_NOUSE_STATE״̬�µ�����̭��ȥ,
+ ���Դ˴���ɨ��һ��TCP_NOUSE_STATE�ij�ʱ��.
*/
del_stream_by_time(plist, pindex, threadnum, STREAM_TYPE_TCP);
}
-/* ���������tcp�����Ѿ�������, ����Ϊ��TCP_ALL���, ����ʵ�ʻ�����free, ���������ջ���TIMEOUT��KICKOUT���� */
+/* ���������tcp�����Ѿ�������, ����Ϊ��TCP_ALL���, ����ʵ�ʻ�����free, ���������ջ���TIMEOUT��KICKOUT���� */
static inline void tcp_update_should_close_reason_stat(int tid)
{
sapp_gval_mthread_sys_stat_t *local_sys_stat;
@@ -1377,56 +1412,56 @@ int tcp_free_stream(struct streamindex *pindex, const void *this_ip_hdr, const v
plist=&(G_MESA_GLOBAL_STREAM[threadnum]->tcpList[pstream->stream_state]);
/* TODO 1,
- free��ƽ̨��time, list_lruԭ��, ��ʱ����������free,
- ����Dz������CLOSEME, ��ֻ�ͷ����pdetail�ڴ�, ���Խ�tcp���ṹ����, Ϊ��FD���ȹ���.
+ free��ƽ̨��time, list_lruԭ��, ��ʱ����������free,
+ ����Dz������CLOSEME, ��ֻ�ͷ����pdetail�ڴ�, ���Խ�tcp���ṹ����, Ϊ��FD���ȹ���.
- �����������:
- tcp_lite_free(); //ֻfree data, ���������ṹ
+ �����������:
+ tcp_lite_free(); //ֻfree data, ���������ṹ
- tcp_struct_free(); //free Ӧ�ò�����
+ tcp_struct_free(); //free Ӧ�ò�����
- tcp_thorough_free(); // del_stream_by_time(), streamaddlist()ʱ������������Ⱥ���Ҫ����, ������free
- // ����tcp_light_free(); tcp_struct_free();��������
+ tcp_thorough_free(); // del_stream_by_time(), streamaddlist()ʱ������������Ⱥ���Ҫ����, ������free
+ // ����tcp_light_free(); tcp_struct_free();��������
TODO 1:
- ����ڵ���tcp_deal_unorder()��, �������������kill_tcp, Ӧ���ж�stream_killed_flag���,
- ���stream_killed_flag=1, ������İ����ٴ���, ֱ��tcp_free_half()�ͷ�.
+ ����ڵ���tcp_deal_unorder()��, �������������kill_tcp, Ӧ���ж�stream_killed_flag���,
+ ���stream_killed_flag=1, ������İ����ٴ���, ֱ��tcp_free_half()�ͷ�.
*/
- /* 2014-07-24 lijia add, ������ǰ��������� */
- saved_curdir = pstream->curdir; /* 2015-11-16 LiJia add, ���浱ǰ������, �����������Ҫ�ָ���ǰֵ */
+ /* 2014-07-24 lijia add, ������ǰ��������� */
+ saved_curdir = pstream->curdir; /* 2015-11-16 LiJia add, ���浱ǰ������, �����������Ҫ�ָ���ǰֵ */
if(pclient && (pclient->unorderlist != NULL)){
- pstream->curdir = DIR_S2C; /* ��ʱ�޸� */
+ pstream->curdir = DIR_S2C; /* ��ʱ�޸� */
tcp_deal_unorder(pindex, pstream, pclient, pserver, !CHECK_ORDER_DATA);
}
if(pserver && (pserver->unorderlist != NULL)){
- pstream->curdir = DIR_C2S; /* ��ʱ�޸� */
+ pstream->curdir = DIR_C2S; /* ��ʱ�޸� */
tcp_deal_unorder(pindex, pstream, pserver, pclient, !CHECK_ORDER_DATA);
}
pstream->curdir = saved_curdir;
- pstream_pr->raw_pkt = raw_pkt; /* �������ʱ��̭, ��ֵΪNULL; �����RST������̭, Ϊ��ʵԭʼ�� */
+ pstream_pr->raw_pkt = raw_pkt; /* �������ʱ��̭, ��ֵΪNULL; �����RST������̭, Ϊ��ʵԭʼ�� */
if(pstream->stream_state==TCP_DATA_STATE)
{
if(pdetail_pr->apme!=NULL)
{
pstream->opstate=OP_STATE_CLOSE;
- //tcp stream �ص�
+ //tcp stream �ص�
pkt_ret = stream_process_tcp(pstream, this_ip_hdr, transport_hdr, raw_pkt,&(pdetail_pr->apme),&(pstream->opstate));
pdetail_pr->apme=NULL;
}
}
- //�����κ�״̬�ص�ȫ��������������
+ //�����κ�״̬�ص�ȫ��������������
if(pdetail_pr->pAllpktpme!=NULL)
{
pstream->pktstate=OP_STATE_CLOSE;
- //tcp stream �ص�
+ //tcp stream �ص�
#if 0
pkt_ret = stream_process_tcp_allpkt(pstream, this_ip_hdr, transport_hdr, raw_pkt,&(pdetail_pr->pAllpktpme),&(pstream->pktstate));
#else
- /* 2017-12-13 lijia modify, TCPALL��Ϊ�ȵ���, ������tcp_free_stream��, ���ֻ��TCPALL���������CLOSE״̬, ���ٸ�ԭʼ��, ָ��̶�ΪNULL, ������ظ��� */
+ /* 2017-12-13 lijia modify, TCPALL��Ϊ�ȵ���, ������tcp_free_stream��, ���ֻ��TCPALL���������CLOSE״̬, ���ٸ�ԭʼ��, ָ��̶�ΪNULL, ������ظ��� */
pkt_ret = stream_process_tcp_allpkt(pstream, this_ip_hdr, transport_hdr, raw_pkt, &(pdetail_pr->pAllpktpme),&(pstream->pktstate));
#endif
pdetail_pr->pAllpktpme=NULL;
@@ -1446,7 +1481,7 @@ int tcp_free_stream(struct streamindex *pindex, const void *this_ip_hdr, const v
tcp_free_half(pserver, threadnum);
pserver = NULL;
}
- /* �����������ٴӽṹ���Ƴ�, ��Ϊ���ò��ʱ, ���ܻ����stream_set_single_stream_timeout(), �������ǰ����LRU�����е�λ�� */
+ /* �����������ٴӽṹ���Ƴ�, ��Ϊ���ò��ʱ, ���ܻ����stream_set_single_stream_timeout(), �������ǰ����LRU�����е�λ�� */
streamleavlist(pindex, plist);
hash_del_stream(pindex);
@@ -1458,7 +1493,7 @@ int tcp_free_stream(struct streamindex *pindex, const void *this_ip_hdr, const v
- if(pstream_pr->set_special_timeout != 0){ /* ���Ӷ��г�ʱʱ��, ���ټ��� */
+ if(pstream_pr->set_special_timeout != 0){ /* ���Ӷ��г�ʱʱ��, ���ټ��� */
sapp_global_mthread[threadnum].tcp_stream_special_timeout_num--;
}
@@ -1516,7 +1551,7 @@ static int tcp_reset_stream(struct streamindex *pindex,const void *this_iphdr,
int ret = 0;
sapp_gval_mthread_sys_stat_t *local_sys_stat = &sapp_global_val->mthread_volatile[threadnum]->sys_stat;
- //add by lqy 20150107 ���˼���
+ //add by lqy 20150107 ���˼���
if(pstream->curdir==DIR_S2C)
{
pdetail->clientpktnum--;
@@ -1552,8 +1587,8 @@ static int tcp_reset_stream(struct streamindex *pindex,const void *this_iphdr,
plist=&(G_MESA_GLOBAL_STREAM[threadnum]->tcpList[pstream->stream_state]);
- /* 2014-07-24 lijia add, ������ǰ��������� */
- saved_curdir = pstream->curdir; /* 2015-11-16 LiJia add, ���浱ǰ������, �����������Ҫ�ָ���ǰֵ */
+ /* 2014-07-24 lijia add, ������ǰ��������� */
+ saved_curdir = pstream->curdir; /* 2015-11-16 LiJia add, ���浱ǰ������, �����������Ҫ�ָ���ǰֵ */
if(pdetail_pr->pclient && pdetail_pr->pclient->unorderlist != NULL){
pstream->curdir = DIR_S2C;
tcp_deal_unorder(pindex, pstream, pdetail_pr->pclient, pdetail_pr->pserver, !CHECK_ORDER_DATA);
@@ -1562,13 +1597,13 @@ static int tcp_reset_stream(struct streamindex *pindex,const void *this_iphdr,
pstream->curdir = DIR_C2S;
tcp_deal_unorder(pindex, pstream, pdetail_pr->pserver, pdetail_pr->pclient, !CHECK_ORDER_DATA);
}
- /* tcp_deal_unorder()�������ܻ��޸�pstream_pr->raw_pkt, �˴��ָ�raw_pkt */
+ /* tcp_deal_unorder()�������ܻ��޸�pstream_pr->raw_pkt, �˴��ָ�raw_pkt */
pstream_pr->raw_pkt = raw_pkt;
pstream->curdir = saved_curdir;
/* 2015-02-04 lijia add,
- �Ƚ�������ʱ������Ԫ��������̭, ��ǰ��������Ϊ������ԭʼ��,
- ������˵��ò���������MESA_kill_xxx, ������pstream_pr->raw_pkt = NULL.
+ �Ƚ�������ʱ������Ԫ��������̭, ��ǰ��������Ϊ������ԭʼ��,
+ ������˵��ò���������MESA_kill_xxx, ������pstream_pr->raw_pkt = NULL.
*/
const raw_pkt_t *saved_raw_pkt = pstream_pr->raw_pkt;
pstream_pr->raw_pkt = NULL;
@@ -1597,7 +1632,7 @@ static int tcp_reset_stream(struct streamindex *pindex,const void *this_iphdr,
if(pdetail_pr->pAllpktpme!=NULL)
{
pstream->pktstate=OP_STATE_CLOSE;
- //tcp stream �ص�
+ //tcp stream �ص�
stream_process_tcp_allpkt(pstream,NULL,NULL,NULL,&(pdetail_pr->pAllpktpme),&(pstream->pktstate));
pdetail_pr->pAllpktpme=NULL;
}
@@ -1609,16 +1644,16 @@ static int tcp_reset_stream(struct streamindex *pindex,const void *this_iphdr,
- /* �����������ٴӽṹ���Ƴ�, ��Ϊ���ò��ʱ, ���ܻ����stream_set_single_stream_timeout(), �������ǰ����LRU�����е�λ�� */
+ /* �����������ٴӽṹ���Ƴ�, ��Ϊ���ò��ʱ, ���ܻ����stream_set_single_stream_timeout(), �������ǰ����LRU�����е�λ�� */
streamleavlist(pindex, plist);
- /* �ָ�֮ǰ�洢��raw_pkt */
+ /* �ָ�֮ǰ�洢��raw_pkt */
pstream_pr->raw_pkt = saved_raw_pkt;
- pstream_pr->syn_opt_num = 0; /* ���ѡ����� */
- pstream_pr->synack_opt_num = 0; /* ���ѡ����� */
+ pstream_pr->syn_opt_num = 0; /* ���ѡ����� */
+ pstream_pr->synack_opt_num = 0; /* ���ѡ����� */
if(pstream_pr->syn_opt_array){
sapp_mem_free(SAPP_MEM_DYN_TCP_SYN_OPT, threadnum, pstream_pr->syn_opt_array);
pstream_pr->syn_opt_array = NULL;
@@ -1648,7 +1683,7 @@ static int tcp_reset_stream(struct streamindex *pindex,const void *this_iphdr,
}
if (pstream_pr->set_special_timeout != 0)
- { /* ���Ӷ��г�ʱʱ��, ���ټ��� */
+ { /* ���Ӷ��г�ʱʱ��, ���ټ��� */
sapp_global_mthread[threadnum].tcp_stream_special_timeout_num--;
}
if(this_tcphdr->th_flags & TH_SYN){
@@ -1659,7 +1694,7 @@ static int tcp_reset_stream(struct streamindex *pindex,const void *this_iphdr,
tcp_add_new_stream_bydata(pindex,this_tcphdr,datalen,REUSE_OLD_LINK, raw_pkt);
ret = 1;
}else{
- /* 20190506 lijia add, reset֮�������������, ֱ��free�� */
+ /* 20190506 lijia add, reset֮�������������, ֱ��free�� */
hash_del_stream(pindex);
if(pstream->pdetail != NULL)
{
@@ -1732,14 +1767,14 @@ static int tcp_deal_syn_stream(struct streamindex *pindex,const raw_pkt_t *raw_p
{
if (thisack == curseq)
{
- pstream->dir = DIR_DOUBLE; /* ����dir */
+ pstream->dir = DIR_DOUBLE; /* ����dir */
pdetail_pr->link_state = STREAM_LINK_RESET;
tcp_free_stream(pindex, this_iphdr, this_tcphdr, raw_pkt);
return PASS;
}
}
else
- //������������������
+ //������������������
if (thisack == curseq)
{
pstream->dir = DIR_DOUBLE;
@@ -1756,11 +1791,11 @@ static int tcp_deal_syn_stream(struct streamindex *pindex,const raw_pkt_t *raw_p
return PASS;
}
}
- else //ͬ������
+ else //ͬ������
{
pdetail_pr->C2S_ack_seq = thisack;
pdetail_pr->last_c2s_pkt_rcv_time = ABBR_CURRENT_TIME_MS;
- //������
+ //������
if (thisseq == curseq)
{
if ((this_tcphdr->th_flags & TH_RST) && (datalen == 0))
@@ -1769,8 +1804,8 @@ static int tcp_deal_syn_stream(struct streamindex *pindex,const raw_pkt_t *raw_p
tcp_free_stream(pindex, this_iphdr, this_tcphdr, raw_pkt);
return PASS;
}
- // add by lqy 20130802 �����������������������
- //�������ڶ���ack
+ // add by lqy 20130802 �����������������������
+ //�������ڶ���ack
else if ((this_tcphdr->th_flags == TH_ACK) && (datalen == 0))
{
pdetail_pr->tcpstateflag = TCP_SYN_RECV;
@@ -1796,7 +1831,7 @@ static int tcp_deal_syn_stream(struct streamindex *pindex,const raw_pkt_t *raw_p
pdetail_pr->last_c2s_pkt_rcv_time = ABBR_CURRENT_TIME_MS;
if ((this_tcphdr->th_flags & TH_RST) && (datalen == 0))
{
- pstream->dir = DIR_DOUBLE; /* ����dir */
+ pstream->dir = DIR_DOUBLE; /* ����dir */
pdetail_pr->link_state = STREAM_LINK_RESET;
tcp_free_stream(pindex, this_iphdr, this_tcphdr, raw_pkt);
return PASS;
@@ -1811,10 +1846,10 @@ static int tcp_deal_syn_stream(struct streamindex *pindex,const raw_pkt_t *raw_p
return PASS;
}
}
- else //ͬ������
+ else //ͬ������
{
pdetail_pr->last_s2c_pkt_rcv_time = ABBR_CURRENT_TIME_MS;
- //����rst
+ //����rst
if ((thisseq == curseq) && (this_tcphdr->th_flags & TH_RST) && (datalen == 0))
{
@@ -1824,7 +1859,7 @@ static int tcp_deal_syn_stream(struct streamindex *pindex,const raw_pkt_t *raw_p
}
}
}
- // add by lqy 20130805 ˫�����������������������data��
+ // add by lqy 20130805 ˫�����������������������data��
else if (pstream->dir == DIR_DOUBLE)
{
if ((pdetail_pr->tcpstateflag == TCP_SYN_RECV) && (curdir == DIR_C2S))
@@ -1836,11 +1871,11 @@ static int tcp_deal_syn_stream(struct streamindex *pindex,const raw_pkt_t *raw_p
}
}
}
- //syn�ش�
+ //syn�ش�
/*
TODO,
- ��Ԫ����ͬ������SYN��, ��Ҫ��һ���ж�SEQ�Ƿ�һ�²������ش�, ��������Ԫ������,
- ��Ҫreset.
+ ��Ԫ����ͬ������SYN��, ��Ҫ��һ���ж�SEQ�Ƿ�һ�²������ش�, ��������Ԫ������,
+ ��Ҫreset.
*/
if(this_tcphdr->th_flags == TH_SYN)
{
@@ -1868,32 +1903,32 @@ static void tcp_half_handle_ack_and_seq(struct half_tcpstream *phalf, struct mes
rcv = phalf;
- //���տ�ʼ��ack_seq��Ϊ0����ʱֱ�ӽ���ͷ��ack_seq��ֵ��rcv->ack_seq
+ //���տ�ʼ��ack_seq��Ϊ0����ʱֱ�ӽ���ͷ��ack_seq��ֵ��rcv->ack_seq
if (0 == *cur_half_stream_ack)
*cur_half_stream_ack = ntohl(this_tcphdr->th_ack);
else
{
ackdiff = (int)(ntohl (this_tcphdr->th_ack) - *cur_half_stream_ack);
-#if 0 /* 20160930 lijia modify, �������뾯�� */
- if (ackdiff > 0 || ackdiff < -(2 << 30)) //��ֹ�ش�����Խ�������
+#if 0 /* 20160930 lijia modify, �������뾯�� */
+ if (ackdiff > 0 || ackdiff < -(2 << 30)) //��ֹ�ش�����Խ�������
#else
- if (ackdiff > 0 || ackdiff < (int)0x80000000) //��ֹ�ش�����Խ�������
+ if (ackdiff > 0 || ackdiff < (int)0x80000000) //��ֹ�ش�����Խ�������
#endif
{
*cur_half_stream_ack = ntohl (this_tcphdr->th_ack);
}
}
- //ͬ��
+ //ͬ��
if (0 == rcv->seq)
rcv->seq = ntohl(this_tcphdr->th_seq);
else
{
seqdiff = (int)(ntohl(this_tcphdr->th_seq) - rcv->seq);
-#if 0 /* 20160930 lijia modify, �������뾯��, ʹ��������0x80000000 */
+#if 0 /* 20160930 lijia modify, �������뾯��, ʹ��������0x80000000 */
if (seqdiff > 0 || seqdiff < -(2 << 30))
#else
- if (seqdiff > 0 || seqdiff < (int)0x80000000) //��ֹ�ش�����Խ�������
+ if (seqdiff > 0 || seqdiff < (int)0x80000000) //��ֹ�ش�����Խ�������
#endif
{
rcv->seq = ntohl(this_tcphdr->th_seq);
@@ -1948,7 +1983,7 @@ static int tcp_deal_ack(struct streaminfo *a_tcp,struct mesa_tcp_hdr *this_tcphd
{
phalf=pdetail_pr->pclient;
phother=pdetail_pr->pserver;
- /* 2017-08-02 lijia modify, ��¼�����һ��ACK��, ��ack_seqһ����Լ�����������Բ���������� */
+ /* 2017-08-02 lijia modify, ��¼�����һ��ACK��, ��ack_seqһ����Լ�����������Բ���������� */
if(0 == pdetail_pr->S2C_first_ack_seq){
pdetail_pr->S2C_first_ack_seq = ntohl (this_tcphdr->th_ack);
}
@@ -1959,12 +1994,12 @@ static int tcp_deal_ack(struct streaminfo *a_tcp,struct mesa_tcp_hdr *this_tcphd
{
phalf=pdetail_pr->pserver;
phother=pdetail_pr->pclient;
- /* 2017-08-02 lijia add, C2S��������ȡ�Զ�ISN */
+ /* 2017-08-02 lijia add, C2S��������ȡ�Զ�ISN */
if((0 == pdetail_pr->iclientseq)
- &&(ntohl(this_tcphdr->th_seq) == pdetail_pr->iserverseq)){ /* C2S����SYN����ĵ�һ��ACK�� */
+ &&(ntohl(this_tcphdr->th_seq) == pdetail_pr->iserverseq)){ /* C2S����SYN����ĵ�һ��ACK�� */
pdetail_pr->iclientseq = ntohl (this_tcphdr->th_ack);
}
- /* 2017-08-02 lijia modify, ��¼�����һ��ACK��, ��ack_seqһ����Լ�����������Բ���������� */
+ /* 2017-08-02 lijia modify, ��¼�����һ��ACK��, ��ack_seqһ����Լ�����������Բ���������� */
if(0 == pdetail_pr->C2S_first_ack_seq){
pdetail_pr->C2S_first_ack_seq = ntohl (this_tcphdr->th_ack);
}
@@ -1972,23 +2007,23 @@ static int tcp_deal_ack(struct streaminfo *a_tcp,struct mesa_tcp_hdr *this_tcphd
cur_half_stream_ack = &pdetail_pr->C2S_ack_seq;
}
- /* 2017-08-03 lijia add, ������, ������ack�ƶϳ��Բ�������Ӧ���յ������� */
+ /* 2017-08-03 lijia add, ������, ������ack�ƶϳ��Բ�������Ӧ���յ������� */
if(DIR_C2S == a_tcp->dir){
pdetail = a_tcp->ptcpdetail;
//pdetail->clientbytes = pdetail_pr->C2S_ack_seq - pdetail_pr->C2S_first_ack_seq;
if(G_TCP_DEDUCE_FLOW_STAT_PROJECT_ID != -1){
- pdetail_pr->deduce_flow_stat->C2S_data_byte = pdetail->serverbytes; /* ���������˸������ṹ���еı��� */
- pdetail_pr->deduce_flow_stat->C2S_data_pkt = pdetail->serverpktnum;/* ���������˸������ṹ���еı��� */
+ pdetail_pr->deduce_flow_stat->C2S_data_byte = pdetail->serverbytes; /* ���������˸������ṹ���еı��� */
+ pdetail_pr->deduce_flow_stat->C2S_data_pkt = pdetail->serverpktnum;/* ���������˸������ṹ���еı��� */
- pdetail_pr->deduce_flow_stat->S2C_all_byte = pdetail_pr->C2S_ack_seq - pdetail_pr->C2S_first_ack_seq; /* �ƶϳ��Ľ��, all��data��һ����, ��û��pkt */
- pdetail_pr->deduce_flow_stat->S2C_data_byte = pdetail_pr->C2S_ack_seq - pdetail_pr->C2S_first_ack_seq; /* �ƶϳ��Ľ��, all��data��һ����, ��û��pkt */
+ pdetail_pr->deduce_flow_stat->S2C_all_byte = pdetail_pr->C2S_ack_seq - pdetail_pr->C2S_first_ack_seq; /* �ƶϳ��Ľ��, all��data��һ����, ��û��pkt */
+ pdetail_pr->deduce_flow_stat->S2C_data_byte = pdetail_pr->C2S_ack_seq - pdetail_pr->C2S_first_ack_seq; /* �ƶϳ��Ľ��, all��data��һ����, ��û��pkt */
}
}else if(DIR_S2C == a_tcp->dir){
pdetail = a_tcp->ptcpdetail;
//pdetail->serverbytes = pdetail_pr->C2S_ack_seq - pdetail_pr->C2S_first_ack_seq;
if(G_TCP_DEDUCE_FLOW_STAT_PROJECT_ID != -1){
- pdetail_pr->deduce_flow_stat->S2C_data_byte = pdetail->clientbytes; /* ���������˸������ṹ���еı��� */
- pdetail_pr->deduce_flow_stat->S2C_data_pkt = pdetail->clientpktnum;/* ���������˸������ṹ���еı��� */
+ pdetail_pr->deduce_flow_stat->S2C_data_byte = pdetail->clientbytes; /* ���������˸������ṹ���еı��� */
+ pdetail_pr->deduce_flow_stat->S2C_data_pkt = pdetail->clientpktnum;/* ���������˸������ṹ���еı��� */
pdetail_pr->deduce_flow_stat->C2S_all_byte = pdetail_pr->S2C_ack_seq - pdetail_pr->S2C_first_ack_seq;
pdetail_pr->deduce_flow_stat->C2S_data_byte = pdetail_pr->S2C_ack_seq - pdetail_pr->S2C_first_ack_seq;
@@ -2033,19 +2068,19 @@ static void tcp_set_new_data(struct streaminfo *a_tcp,struct half_tcpstream *
if(is_ctrl_pkt==0)
{
- //��һ��������Ŀ������ش������dz��ȱ�ԭ����
+ //��һ��������Ŀ������ش������dz��ȱ�ԭ����
if(this_seq< EXP_SEQ)
{
havelen = EXP_SEQ - this_seq;
if (datalen - havelen > 0)
{
- //20150225 ��¼�ص��ij���
+ //20150225 ��¼�ص��ij���
pdetail_pr->tcpoverlen=havelen;
len_new= datalen - havelen;
pdata_new=data+havelen;
}
}
- else //����ı���
+ else //����ı���
{
len_new=datalen;
pdata_new=data;
@@ -2104,12 +2139,12 @@ static void tcp_set_new_data(struct streaminfo *a_tcp,struct half_tcpstream *
/*
LiJia add, to do:
- �������������, 1,2,3,4,x,6, ��5��������, ��6����������,
- �����6��������������Ϣ, ��Ҫkill_tcp,
- ����5��������ʱ, streaminfo��洢�Ķ��ǵ�5��������Ϣ,
- Ȼ���ٴ��������е�6����������, ��ʱ����kill_tcp, ��ز����Dz��Ե�,
- ʵ�ʵ�seq��ackʹ�õ��ǵ�5������!
- Ӧ��ʹ��buf_unorder�е�seq��ack, �����ǵ�ǰ����ԭʼ��.
+ �������������, 1,2,3,4,x,6, ��5��������, ��6����������,
+ �����6��������������Ϣ, ��Ҫkill_tcp,
+ ����5��������ʱ, streaminfo��洢�Ķ��ǵ�5��������Ϣ,
+ Ȼ���ٴ��������е�6����������, ��ʱ����kill_tcp, ��ز����Dz��Ե�,
+ ʵ�ʵ�seq��ackʹ�õ��ǵ�5������!
+ Ӧ��ʹ��buf_unorder�е�seq��ack, �����ǵ�ǰ����ԭʼ��.
*/
#if 0
int tcp_save_unorder(struct streaminfo *a_tcp,struct half_tcpstream *rcv,char *rawdata,int rawlen,struct mesa_tcp_hdr *this_tcphdr,int tcpdatalen)
@@ -2229,7 +2264,7 @@ static int tcp_deal_unorder(struct streamindex *pindex,struct streaminfo *a_tcp,
if (after (unorder_packet->seq + unorder_packet->tcpdatalen+unorder_packet->fin+unorder_packet->rst, EXP_SEQ))
{
- /* 2015-01-13 lijia add, ��������������kill_tcp��inject��غ���, ��Ҫ����ԭʼ����Ϣ */
+ /* 2015-01-13 lijia add, ��������������kill_tcp��inject��غ���, ��Ҫ����ԭʼ����Ϣ */
update_stream_list_raw_pkt_pointer(a_tcp_pr, &unorder_packet->raw_pkt);
if(unorder_packet->rst )//add by lqy 20100805)
@@ -2252,14 +2287,14 @@ static int tcp_deal_unorder(struct streamindex *pindex,struct streaminfo *a_tcp,
stream_process_tcp(a_tcp,unorder_packet->this_ip_hdr, unorder_packet->this_tcp_hdr, &(unorder_packet->raw_pkt),&(pdetail_pr->apme),&(a_tcp->opstate));
}
a_tcp->addr.pkttype=tmpktype;
- /* 2016-05-12 lijia add, ��������������unorder_list����BUG, �˴�Ӧ��������nouse״̬ */
+ /* 2016-05-12 lijia add, ��������������unorder_list����BUG, �˴�Ӧ��������nouse״̬ */
if(STREAM_LINK_DATA == last_link_state){
tcp_update_should_close_reason_stat(a_tcp->threadnum);
tcp_change_stream_tonouse(pindex);
ret = DROP;
goto done;
}
- /* ��Ϊ������update_stream_list_raw_pkt_pointer, �˴����ܷ���, �Ȼָ�ԭʼ��ָ�� */
+ /* ��Ϊ������update_stream_list_raw_pkt_pointer, �˴����ܷ���, �Ȼָ�ԭʼ��ָ�� */
ret = PASS;
goto done;
}
@@ -2277,13 +2312,13 @@ static int tcp_deal_unorder(struct streamindex *pindex,struct streaminfo *a_tcp,
orderflag = CHECK_ORDER_DATA;
}
- //get tcp��data��len
+ //get tcp��data��len
tcp_set_new_data(a_tcp,rcv,snd,(u_char *)(unorder_packet->tcpdata),
unorder_packet->tcpdatalen,unorder_packet->seq,unorder_packet->fin, 0);
if(unorder_packet->tcpdatalen >0)
{
- /* 2021-04-29 lijia add, ���������Kill_tcp,����������MSO_DROP_STREAM, �������ݴ�������, Ҳ���ٵ��ò�� */
+ /* 2021-04-29 lijia add, ���������Kill_tcp,����������MSO_DROP_STREAM, �������ݴ�������, Ҳ���ٵ��ò�� */
if((0 == a_tcp_pr->stream_killed_flag) && (0 == pdetail_pr->drop_stream_flag)){
tmpktype=a_tcp->addr.pkttype;
a_tcp->addr.pkttype = PKT_TYPE_TCPREORDER;
@@ -2303,13 +2338,13 @@ static int tcp_deal_unorder(struct streamindex *pindex,struct streaminfo *a_tcp,
tcp_clear_newdata(a_tcp,rcv);
}
- //���ֵ���Ϣ����������
+ //���ֵ���Ϣ����������
//if(ret!=PASS)
- /* 2015-01-16 lijia modify, ����ģʽ��, ���������Kill_tcp(), �����᷵��DROP, Ϊ������������Կ��Կ����˰� */
+ /* 2015-01-16 lijia modify, ����ģʽ��, ���������Kill_tcp(), �����᷵��DROP, Ϊ������������Կ��Կ����˰� */
//if((ret!=PASS) || (a_tcp_pr->stream_killed_flag != 0))
- if((a_tcp_pr->stream_killed_flag != 0) || (pdetail_pr->drop_stream_flag != 0)) /* 2015-11-02 lqy modify, ������������жϷ���ֵ */
+ if((a_tcp_pr->stream_killed_flag != 0) || (pdetail_pr->drop_stream_flag != 0)) /* 2015-11-02 lqy modify, ������������жϷ���ֵ */
{
- /* ��Ϊ������update_stream_list_raw_pkt_pointer, �˴����ܷ���, �Ȼָ�ԭʼ��ָ�� */
+ /* ��Ϊ������update_stream_list_raw_pkt_pointer, �˴����ܷ���, �Ȼָ�ԭʼ��ָ�� */
goto done;
}
}
@@ -2380,7 +2415,7 @@ static int tcp_deal_data(struct streamindex *pindex,const void *this_iphdr,const
if (!after (this_seq, EXP_SEQ))
{
- //�������ݰ�
+ //�������ݰ�
if (after(this_seq + datalen +
(this_tcphdr->th_flags & TH_FIN), EXP_SEQ))
{
@@ -2390,16 +2425,16 @@ static int tcp_deal_data(struct streamindex *pindex,const void *this_iphdr,const
ret=stream_process_tcp(pstream,this_iphdr,(const void *)this_tcphdr, raw_pkt,&(pdetail_pr->apme),&(pstream->opstate));
//tcp_clear_newdata(pstream,rcv); /* 2016-09-12 lijia move to outside if(datalen > 0) */
}
- tcp_clear_newdata(pstream,rcv); /* 2016-09-12 lijia move to here, ����datalen�Ƿ�>0, ��Ϊ������tcp_set_new_data, ����Ҫ����clear */
+ tcp_clear_newdata(pstream,rcv); /* 2016-09-12 lijia move to here, ����datalen�Ƿ�>0, ��Ϊ������tcp_set_new_data, ����Ҫ����clear */
-#if 0 /* lqy 2015-11-02 modify, ��������Ĵ������, ��Ӱ�쵱ǰ���ķ���ֵ */
+#if 0 /* lqy 2015-11-02 modify, ��������Ĵ������, ��Ӱ�쵱ǰ���ķ���ֵ */
if(ret==PASS)
{
ret = tcp_deal_unorder(pindex,pstream,rcv,snd,CHECK_ORDER_DATA);
}
#else
- /* 2020-04-24 lijia modify, ���ret=stream_process_tcp����ֵ��DROP, tcp_deal_unorder()����ֵ��PASS, ��ǰ������PASS, �����CT��! */
+ /* 2020-04-24 lijia modify, ���ret=stream_process_tcp����ֵ��DROP, tcp_deal_unorder()����ֵ��PASS, ��ǰ������PASS, �����CT��! */
ret_unorder = tcp_deal_unorder(pindex,pstream,rcv,snd,CHECK_ORDER_DATA);
#endif
if((DROP == ret_unorder) || (DROP == ret)){
@@ -2407,11 +2442,11 @@ static int tcp_deal_data(struct streamindex *pindex,const void *this_iphdr,const
}
return ret;
}
- //����ԭ����������ݰ��Ƿ��Ѿ����򣬽��д���
+ //����ԭ����������ݰ��Ƿ��Ѿ����򣬽��д���
}
else
{
- //�������ݰ�����
+ //�������ݰ�����
tcp_save_unorder(pstream,rcv,this_iphdr,raw_pkt,this_tcphdr,tcpdata, datalen);
if(rcv->unorder_cnt > rcv->maxunorder)
{
@@ -2424,9 +2459,9 @@ static int tcp_deal_data(struct streamindex *pindex,const void *this_iphdr,const
/*
2017-10-16 lijia add,
- �ж�NOUSE״̬��, �յ�SYN, SYN/ACK�������Ԫ������, ���������ش�, �������۵��µ�ʱ�����.
+ �ж�NOUSE״̬��, �յ�SYN, SYN/ACK�������Ԫ������, ���������ش�, �������۵��µ�ʱ�����.
TODO:
- ���ӳ�ʱ�ж�, ����ͳ�Ʒ���, ��������Ԫ������ͨ������30������.
+ ���ӳ�ʱ�ж�, ����ͳ�Ʒ���, ��������Ԫ������ͨ������30������.
*/
static inline int tcp_tuple4_reuse(const struct streaminfo *pstream, const struct tcpdetail_private *pdetail_pr, const struct mesa_tcp_hdr *this_tcphdr)
{
@@ -2450,7 +2485,7 @@ static inline int tcp_tuple4_reuse(const struct streaminfo *pstream, const struc
/* lijia 2017-12-06 add */
if((1 == is_reuse) && (sapp_global_val->config.stream.tcp.tuple4_reuse_time_interval > 0)){
if(pdetail_pr->tcpdetail_public.createtime + sapp_global_val->config.stream.tcp.tuple4_reuse_time_interval >= (UINT64)g_CurrentTime){
- is_reuse = 0; /* ��Ԫ����ͬ, ����Ų�ͬ�����������ʱ��̫��, һ��30������, ���ƹ��������� */
+ is_reuse = 0; /* ��Ԫ����ͬ, ����Ų�ͬ�����������ʱ��̫��, һ��30������, ���ƹ��������� */
}
}
@@ -2502,7 +2537,7 @@ static int tcp_deal_data_stream(struct streamindex *pindex,const void *this_iphd
pcurhalf->pktcout++;
curseq=pcurhalf->first_data_seq + pcurhalf->count_ideal ;
thisseq=ntohl (this_tcphdr->th_seq);
- //�ش�������
+ //�ش�������
//if((thisseq<curseq)&&(thisseq+datalen<=curseq)&&(!(this_tcphdr->th_flags & TH_SYN))){ // modify by lqy 20150325
if(before(thisseq,curseq)&&before(thisseq+datalen,curseq+1)&&(!(th_flags & TH_SYN))){
pstream->addr.pkttype = PKT_TYPE_TCPRETRANS;
@@ -2532,7 +2567,7 @@ static int tcp_deal_data_stream(struct streamindex *pindex,const void *this_iphd
//syn+rst drop packet
if(th_flags & TH_SYN)
return PASS;
- //�����rst����
+ //�����rst����
//if((thisseq-curseq<=1)&&(datalen==0))
if(before(thisseq, curseq+2)&&(datalen==0))//modify by lqy 20150325
{
@@ -2556,13 +2591,13 @@ static int tcp_deal_data_stream(struct streamindex *pindex,const void *this_iphd
return PASS;
}
- //�����rst���ģ��������δ�������ᶪ���������Ѿ����������������
+ //�����rst���ģ��������δ�������ᶪ���������Ѿ����������������
}
- //���Ӹ���
+ //���Ӹ���
if (th_flags & TH_SYN)
{
- //syn�ش� add by lqy 20100808
+ //syn�ش� add by lqy 20100808
if((datalen>0) || ((UINT32)thisseq+1 == rcv->first_data_seq) || ((UINT32)thisseq==rcv->first_data_seq))
{
pstream->addr.pkttype = PKT_TYPE_TCPRETRANS;
@@ -2579,11 +2614,11 @@ static int tcp_deal_data_stream(struct streamindex *pindex,const void *this_iphd
return PASS;
}else{
/* 2017-12-19 lijia add,
- ��SYN�ش�, Ҫ�жϳ�ʱʱ��, �پ����Ƿ���Ԫ���������õ�ǰ���� ,
- ������һ���յ���, ��������3��, ������̫��������Ԫ������,
- ��Ϊ�Ƕ�������.
+ ��SYN�ش�, Ҫ�жϳ�ʱʱ��, �پ����Ƿ���Ԫ���������õ�ǰ���� ,
+ ������һ���յ���, ��������3��, ������̫��������Ԫ������,
+ ��Ϊ�Ƕ�������.
- ��������ͳ��ֵ, ��Ԫ�������������ӵ�ʱ����һ���ڷ��Ӽ�.
+ ��������ͳ��ֵ, ��Ԫ�������������ӵ�ʱ����һ���ڷ��Ӽ�.
*/
if(tcp_tuple4_reuse(pstream, pdetail_pr, this_tcphdr) == 0){
return PASS;
@@ -2591,7 +2626,7 @@ static int tcp_deal_data_stream(struct streamindex *pindex,const void *this_iphd
}
//adjust by lqy 20150107
//if(thisseq==rcv->first_data_seq) return PASS;
- //add by lqy 20110507 syn�����ݵ���Ϊ�ǹ�������
+ //add by lqy 20110507 syn�����ݵ���Ϊ�ǹ�������
//if(datalen>0) return PASS;
//return PASS;
if(th_flags & TH_RST)
@@ -2602,21 +2637,21 @@ static int tcp_deal_data_stream(struct streamindex *pindex,const void *this_iphd
pdetail_pr->link_state=STREAM_LINK_REUSE_BYSYN;
pstream->opstate= OP_STATE_CLOSE;
-#if 0 //del by lqy 20150107 tcp_reset_stream�����������������
+#if 0 //del by lqy 20150107 tcp_reset_stream�����������������
ret=stream_process_tcp(pstream,raw_pkt,&(pdetail_pr->apme),&(pstream->opstate));
#endif
tcp_reset_stream(pindex,this_iphdr,this_tcphdr,datalen,raw_pkt);
return PASS;
}
- if(datalen + (th_flags & TH_FIN) +(th_flags & TH_RST)> 0)//����TCP����
+ if(datalen + (th_flags & TH_FIN) +(th_flags & TH_RST)> 0)//����TCP����
{
tcpdata=(unsigned char*)(this_tcphdr) + 4 * this_tcphdr->th_off;
ret=tcp_deal_data(pindex,this_iphdr,raw_pkt,this_tcphdr,tcpdata,datalen);
-/* 2016-05-12 lijia modify, ��������������unorder_list����BUG, ��ǰ������Ѿ���CLOSE״̬, �˴�Ӧ������return, ���ü���ִ�� */
+/* 2016-05-12 lijia modify, ��������������unorder_list����BUG, ��ǰ������Ѿ���CLOSE״̬, �˴�Ӧ������return, ���ü���ִ�� */
- //���ϲ�ر����ӣ����ߴ������������rst����
+ //���ϲ�ر����ӣ����ߴ������������rst����
if((pstream->opstate==OP_STATE_CLOSE)&&(pdetail_pr->link_state!=STREAM_LINK_RESET))
{
tcp_change_stream_tonouse(pindex);
@@ -2626,12 +2661,12 @@ static int tcp_deal_data_stream(struct streamindex *pindex,const void *this_iphd
if(ret==DROP)
return DROP;
}
- //add by lqy 20120922 �ϲ���Ҫack����Ϣʱ�ϴ��������ݵı���
+ //add by lqy 20120922 �ϲ���Ҫack����Ϣʱ�ϴ��������ݵı���
else if(pdetail_pr->needackflag!=0)
{
ret=stream_process_tcp(pstream,this_iphdr,this_tcphdr, raw_pkt,&(pdetail_pr->apme),&(pstream->opstate));
- //���ϲ�ر����ӣ����ߴ������������rst����
- /* 2017-08-01 lijia modify, ��Ҫ�ж�TCPALL���״̬, ����ֻ����TCPALL���ʱ, opstate�Ѿ���CLOSE��, ��������NOUSE̬ */
+ //���ϲ�ر����ӣ����ߴ������������rst����
+ /* 2017-08-01 lijia modify, ��Ҫ�ж�TCPALL���״̬, ����ֻ����TCPALL���ʱ, opstate�Ѿ���CLOSE��, ��������NOUSE̬ */
if((pstream->opstate==OP_STATE_CLOSE)
&& (OP_STATE_CLOSE == pstream->pktstate)
&&(pdetail_pr->link_state!=STREAM_LINK_RESET))
@@ -2662,13 +2697,13 @@ static int tcp_deal_data_stream(struct streamindex *pindex,const void *this_iphd
pdetail_pr->link_state=STREAM_LINK_CLOSE;
finclose=1;
}
- //��������ݵ�rst����Ҫ�ر�
+ //��������ݵ�rst����Ҫ�ر�
if ((th_flags & TH_RST)&&(thisseq==curseq) &&(datalen!=0))
{
pdetail_pr->link_state=STREAM_LINK_RESET;
finclose=1;
}
- /* 2015-11-12 lijia add, ������RST, FIN���������� */
+ /* 2015-11-12 lijia add, ������RST, FIN���������� */
if(pdetail_pr->ignore_rst_fin != 0){
finclose = 0;
}
@@ -2677,7 +2712,7 @@ static int tcp_deal_data_stream(struct streamindex *pindex,const void *this_iphd
pstream->opstate = OP_STATE_CLOSE;
ret=stream_process_tcp(pstream,this_iphdr,this_tcphdr, raw_pkt,&(pdetail_pr->apme),&(pstream->opstate));
- //adjust by lqy �����ȫ�����յĺ�������ʱ
+ //adjust by lqy �����ȫ�����յĺ�������ʱ
if(pstream->pktstate!=OP_STATE_CLOSE)
{
tcp_update_should_close_reason_stat(pstream->threadnum);
@@ -2700,7 +2735,7 @@ static int tcp_deal_nouse_stream(struct streamindex *pindex,const void *this_iph
struct tcpdetail_private *pdetail_pr=(struct tcpdetail_private *)pstream->pdetail;
//add by lqy 20141213
- //����ǿ�ack���������ӣ�Ӧ�ò�δ������,��ָ������������з���
+ //����ǿ�ack���������ӣ�Ӧ�ò�δ������,��ָ������������з���
//if((pstream->opstate == OP_STATE_PENDING) && (datalen>0)) //modify by lqy 20150325
if((pstream->opstate == OP_STATE_PENDING)
&& (datalen>0)
@@ -2713,10 +2748,10 @@ static int tcp_deal_nouse_stream(struct streamindex *pindex,const void *this_iph
}
- //fin��rst���п����������ģ�����ڴ˴���̭�����������п��ܻ����ȥ�������ݽ������ӣ���˲���̭
+ //fin��rst���п����������ģ�����ڴ˴���̭�����������п��ܻ����ȥ�������ݽ������ӣ���˲���̭
- //���Ӹ��� add by lqy 20150210 �������Ӻ��������ʱ�ָܻ���data������
- //add by lqy 20130822 �������а������յĺ�������ʱ������������̭
+ //���Ӹ��� add by lqy 20150210 �������Ӻ��������ʱ�ָܻ���data������
+ //add by lqy 20130822 �������а������յĺ�������ʱ������������̭
if (this_tcphdr->th_flags & TH_SYN)
{
if(1 == tcp_tuple4_reuse(pstream, pdetail_pr, this_tcphdr)){
@@ -2773,33 +2808,48 @@ static char tcp_process_newstreambydata(struct streamindex *pindex_tcp,const voi
pdetail->serverbytes+=tcplen;
pdetail->serverpktnum++;
}
+ int frag_cnt = 0, frag_len = 0;
+ stream_get_scratch_frag_stat(pstream, &frag_cnt, &frag_len);
if(G_TCP_FLOW_STAT_PROJECT_ID != -1){
if(DIR_S2C == pstream->curdir){
- pdetail_pr->flow_stat->S2C_all_pkt++;
- pdetail_pr->flow_stat->S2C_all_byte += tcplen;
- pdetail_pr->flow_stat->S2C_all_byte_raw += raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes;
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->C2S_ip_fragment_pkt++;
+ pdetail_pr->flow_stat->S2C_all_pkt+=MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->S2C_all_byte += MAX(tcplen, frag_len);
+ pdetail_pr->flow_stat->S2C_all_byte_raw += MAX(raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes, frag_len);
+ pdetail_pr->flow_stat->S2C_ip_fragment_pkt+=MAX(1, frag_cnt);
+ }
+ else
+ {
+ pdetail_pr->flow_stat->S2C_all_pkt++;
+ pdetail_pr->flow_stat->S2C_all_byte += tcplen;
+ pdetail_pr->flow_stat->S2C_all_byte_raw += raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes;
}
}else{
- pdetail_pr->flow_stat->C2S_all_pkt++;
- pdetail_pr->flow_stat->C2S_all_byte += tcplen;
- pdetail_pr->flow_stat->C2S_all_byte_raw += raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes;
+
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->S2C_ip_fragment_pkt++;
+ pdetail_pr->flow_stat->C2S_all_pkt+=MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->C2S_all_byte += MAX(tcplen, frag_len);
+ pdetail_pr->flow_stat->C2S_all_byte_raw += MAX(raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes, frag_len);
+ pdetail_pr->flow_stat->C2S_ip_fragment_pkt+=MAX(1, frag_cnt);
+ }
+ else
+ {
+ pdetail_pr->flow_stat->C2S_all_pkt++;
+ pdetail_pr->flow_stat->C2S_all_byte += tcplen;
+ pdetail_pr->flow_stat->C2S_all_byte_raw += raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes;
}
}
}
- //�½����ӱ����ȵ���all����
+ //�½����ӱ����ȵ���all����
ret=tcp_processallpkt(pstream,this_iphdr,this_tcphdr,tcplen,raw_pkt);
if(DROP == ret){
/* 2016-06-08 lijia add,
- for HMD, ������й���ǰ����kill, �������ٵ��ú������.
+ for HMD, ������й���ǰ����kill, �������ٵ��ú������.
*/
return DROP;
}
@@ -2829,7 +2879,7 @@ static int deal_tcp_stream_dup_pkt_check(int tid, struct streaminfo_private *pst
if ((ADDR_TYPE_IPV4 == pstream_pr->stream_public.addr.addrtype)
&& (dup_pkt_para->dup_pkt_distinguish_ipv4_tcp || dup_pkt_para->dup_pkt_distinguish_all_inject))
{
- // ����ԭʼ�����, ֻ�ж�ǰN����, ���û�����ظ�����, ����Ϊ�Ժ�Ķ������ظ���!
+ // ����ԭʼ�����, ֻ�ж�ǰN����, ���û�����ظ�����, ����Ϊ�Ժ�Ķ������ظ���!
if((0 == pstream_pr->has_duplicate_pkt)
&& (ptcpdetail_pr->tcpdetail_public.clientpktnum+ptcpdetail_pr->tcpdetail_public.serverpktnum >= dup_pkt_para->first_packets)){
dup_check_enabled = 0;
@@ -2838,7 +2888,7 @@ static int deal_tcp_stream_dup_pkt_check(int tid, struct streaminfo_private *pst
}
}
- /* 24.04: ����IPv6��˵, ��Ϊ��֧��ԭʼ�����ظ����, ����ע���ʶ��Ҳ��֧�ֿ���·��. */
+ /* 24.04: ����IPv6��˵, ��Ϊ��֧��ԭʼ�����ظ����, ����ע���ʶ��Ҳ��֧�ֿ���·��. */
if ((ADDR_TYPE_IPV6 == pstream_pr->stream_public.addr.addrtype)
&& (dup_pkt_para->dup_pkt_distinguish_all_inject != 0))
{
@@ -2864,9 +2914,9 @@ static int deal_tcp_tfo(struct streaminfo *pstream, const void *this_iphdr, stru
if(NULL == pdetail_pr->pserver){
pdetail_pr->pserver=(struct half_tcpstream *)sapp_mem_malloc(SAPP_MEM_DYN_TCP_HALF_STREAM,pstream->threadnum,sizeof(struct half_tcpstream));
memset(pdetail_pr->pserver,0,sizeof(struct half_tcpstream));
- //������
+ //������
pdetail_pr->pserver->first_data_seq=pdetail_pr->iserverseq;
- /* pdetail_pr->iserverseq=0; */ /* 2016-04-27 lijia modify, ���ڻ�ȡ��ǰ����ISN */
+ /* pdetail_pr->iserverseq=0; */ /* 2016-04-27 lijia modify, ���ڻ�ȡ��ǰ����ISN */
/* 2014-10-20 LiJia add, for set one stream unorder number */
pdetail_pr->pserver->maxunorder = tcp_default_unorder;
@@ -2879,9 +2929,9 @@ static int deal_tcp_tfo(struct streaminfo *pstream, const void *this_iphdr, stru
if(NULL == pdetail_pr->pclient){
pdetail_pr->pclient=(struct half_tcpstream *)sapp_mem_malloc(SAPP_MEM_DYN_TCP_HALF_STREAM,pstream->threadnum,sizeof(struct half_tcpstream));
memset(pdetail_pr->pclient,0,sizeof(struct half_tcpstream));
- //������
+ //������
pdetail_pr->pclient->first_data_seq=pdetail_pr->iclientseq;
- /* pdetail_pr->iclientseq=0; */ /* 2016-04-27 lijia modify, ���ڻ�ȡ��ǰ����ISN */
+ /* pdetail_pr->iclientseq=0; */ /* 2016-04-27 lijia modify, ���ڻ�ȡ��ǰ����ISN */
/* 2014-10-20 LiJia add, for set one stream unorder number */
pdetail_pr->pclient->maxunorder = tcp_default_unorder;
@@ -2895,7 +2945,7 @@ static int deal_tcp_tfo(struct streaminfo *pstream, const void *this_iphdr, stru
return ret;
}
-/* LiJia comment: pstreamָ��ջ����ڴ� */
+/* LiJia comment: pstreamָ��ջ����ڴ� */
//int deal_tcp_stream(struct streamindex *pstream,struct mesa_tcp_hdr *this_tcphdr,int tcplen,const void *rawippkt,int iplen)
static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, struct mesa_tcp_hdr *this_tcphdr,
int tcplen,const raw_pkt_t *raw_pkt, int offset_to_raw_pkt_hdr)
@@ -2908,12 +2958,12 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
struct streaminfo_private *pstream_pr = &pindex->stream;
struct streaminfo *pstream = &pstream_pr->stream_public;
int try_to_update_addr_info = 0;
- int call_tcpall_after_reset = 0; /* 2019-10-18 lijia modify, ��ǰ����reset֮��,��֤�ȵ���tcpall,�ٵ���tcp */
+ int call_tcpall_after_reset = 0; /* 2019-10-18 lijia modify, ��ǰ����reset֮��,��֤�ȵ���tcpall,�ٵ���tcp */
sapp_gval_mthread_sys_stat_t *local_sys_stat = &sapp_global_val->mthread_volatile[pstream->threadnum]->sys_stat;
pindex_tcp = findstreamindex (pindex, raw_pkt);
if(unlikely(!pindex_tcp)){
- /* ÿ�������װ�������, Ҳ�޷���֪�Ƿ��ظ�, ��Ҫ����bloom filter */
+ /* ÿ�������װ�������, Ҳ�޷���֪�Ƿ��ظ�, ��Ҫ����bloom filter */
if((ADDR_TYPE_IPV4 == pstream->addr.addrtype)
&& sapp_global_val->config.packet_io.dup_pkt_para.dup_pkt_distinguish_ipv4_tcp){
sapp_dup_pkt_mark_l4(pstream, this_iphdr, (const void *)this_tcphdr);
@@ -2956,13 +3006,13 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
else
{
/* 2017-12-07 lijia add,
- TCPRFC�涨, �����ӻ�δ�����������, �յ��Զ˵����ݰ�, ��Ӧ��RST�����Ϊ0,
- ���һ�����ĵ�һ����, ���Ǹ�seq=0��RST��, ��ʱ����������, ������.
+ TCPRFC�涨, �����ӻ�δ�����������, �յ��Զ˵����ݰ�, ��Ӧ��RST�����Ϊ0,
+ ���һ�����ĵ�һ����, ���Ǹ�seq=0��RST��, ��ʱ����������, ������.
*/
if((this_tcphdr->th_flags & TH_RST) && (0 == this_tcphdr->th_seq)){
return PASS;
}
- //add by lqy 20141213ȫ���ӿ��²���tcplen=0�İ�������
+ //add by lqy 20141213ȫ���ӿ��²���tcplen=0�İ�������
if((tcplen==0)&&(tcp_support_all==TCP_SUPPORT_ENTRYALL_OFF))
return PASS;
if(TCP_CTEAT_LINK_BYDATA & tcp_creatlink_model )
@@ -2974,7 +3024,7 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
pstream_pr = &pindex_tcp->stream;
pstream = &pstream_pr->stream_public;
pstream_pr->raw_pkt = raw_pkt; //add by lijia 20171206
- //add by lqy 20150114 �½��������ӱ����ȵ���all����
+ //add by lqy 20150114 �½��������ӱ����ȵ���all����
if(pstream_pr->under_ddos_bypass)
{
local_sys_stat->count[SAPP_STAT_TCP_BYPASS_STREAM]++;
@@ -3012,7 +3062,7 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
// pindex_tcp->stream.offset_to_raw_pkt_hdr = (char *)this_tcphdr - (char *)raw_pkt->raw_pkt_data;
//pstream_pr->offset_to_raw_pkt_hdr = offset_to_raw_pkt_hdr;
pstream_pr->raw_pkt = raw_pkt; /* 2014-12-30 lijia add */
- /* 2015-11-04 lijia add, IP��Ƭ���͸���, pstreamָ�������еĽṹ, pindexΪջ�ﵱǰ���ṹ */
+ /* 2015-11-04 lijia add, IP��Ƭ���͸���, pstreamָ�������еĽṹ, pindexΪջ�ﵱǰ���ṹ */
pstream->addr.pktipfragtype = pindex->stream.stream_public.addr.pktipfragtype;
}
@@ -3020,11 +3070,11 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
pdetail =(struct tcpdetail *)(&pdetail_pr->tcpdetail_public);
- /* ddos bypass���ȼ���� */
+ /* ddos bypass���ȼ���� */
if(pstream_pr->under_ddos_bypass){
local_sys_stat->count[SAPP_STAT_TCP_BYPASS_PKTS]++;
local_sys_stat->length[SAPP_STAT_TCP_BYPASS_BYTES]+= tcplen;
- /* ����ddos����ʱֻ�DZ�������, �����ò����ԼCPU, ���԰����ж�������, �����Ƿ���PASS */
+ /* ����ddos����ʱֻ�DZ�������, �����ò����ԼCPU, ���԰����ж�������, �����Ƿ���PASS */
cycle_pkt_dump_by_classify(pstream->threadnum, raw_pkt, PKT_CLASSIFY_BYPASS);
return PASS;
}
@@ -3032,9 +3082,9 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
- /* 2014-10-11 lijia add, Fd������ƽ̨ʵ�� */
+ /* 2014-10-11 lijia add, Fd������ƽ̨ʵ�� */
if(unlikely(pstream_pr->stream_killed_flag != 0) && raw_pkt->is_ctrl_pkt==0){
- if((pdetail_pr->auto_remedy_flag != 0) && (tcplen > 0)){ /* ��ֹflood����, ֻ�д����ݵİ��ŷ�RST */
+ if((pdetail_pr->auto_remedy_flag != 0) && (tcplen > 0)){ /* ��ֹflood����, ֻ�д����ݵİ��ŷ�RST */
sapp_runtime_log(RLOG_LV_DEBUG, "TCP stream: %s, kill_tcp remedy, curdir:%d, send RST pkt.",
printaddr(&pstream->addr, pstream->threadnum), pstream->curdir);
pstream_pr->plugin_process_context=1;
@@ -3048,16 +3098,16 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
tcp_processallpkt(pstream,this_iphdr,this_tcphdr,tcplen,raw_pkt);
}
#endif
- //return DROP; /* 2019-11-20 lijia modify, kill_tcp��Ĭ����Ϊ����DROP, ֻ����rst��, �Ƿ񶪰�ȡ����drop_stream_flag */
+ //return DROP; /* 2019-11-20 lijia modify, kill_tcp��Ĭ����Ϊ����DROP, ֻ����rst��, �Ƿ񶪰�ȡ����drop_stream_flag */
}
/*
2021-05-18 lijia close ipv6 dup pkt check:
- 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.
*/
if(raw_pkt->is_ctrl_pkt==0 &&
deal_tcp_stream_dup_pkt_check(pstream->threadnum, pstream_pr, pdetail_pr, (const struct mesa_ip4_hdr *)this_iphdr, this_tcphdr) != 0){
@@ -3083,7 +3133,7 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
}
}
-// ����kill remedy��drop stream���ظ�������sappֱ�Ӵ���������׷�����ϵ�sid,����ת����service chain����������SF������
+// ����kill remedy��drop stream���ظ�������sappֱ�Ӵ���������׷�����ϵ�sid,����ת����service chain����������SF������
if(pstream_pr->sid_append_list != NULL)
{
((raw_pkt_t *)raw_pkt)->append_list=pstream_pr->sid_append_list;
@@ -3100,7 +3150,7 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
if(pstream->curdir==DIR_S2C)
{
- if(pdetail->clientpktnum == 0) /* ��ǰ����ĵ�һ����, ���Ը��µײ������ĵ����ַ��Ϣ(��MPLS, GTP) */
+ if(pdetail->clientpktnum == 0) /* ��ǰ����ĵ�һ����, ���Ը��µײ������ĵ����ַ��Ϣ(��MPLS, GTP) */
{
try_to_update_addr_info = 1;
}
@@ -3109,7 +3159,7 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
}
else
{
- if(pdetail->serverpktnum == 0) /* ��ǰ����ĵ�һ����, ���Ը��µײ������ĵ����ַ��Ϣ(��MPLS, GTP) */
+ if(pdetail->serverpktnum == 0) /* ��ǰ����ĵ�һ����, ���Ը��µײ������ĵ����ַ��Ϣ(��MPLS, GTP) */
{
try_to_update_addr_info = 1;
}
@@ -3123,25 +3173,40 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
(struct streaminfo_private *)(pindex->stream.pfather_pr), pstream->curdir);
}
- /* flow_stat��ȫ����״̬��¼, �������ش����������� */
+ int frag_cnt = 0, frag_len = 0;
+ stream_get_scratch_frag_stat(pstream, &frag_cnt, &frag_len);
+
+ /* flow_stat��ȫ����״̬��¼, �������ش����������� */
if(G_TCP_FLOW_STAT_PROJECT_ID != -1 && raw_pkt->is_ctrl_pkt == 0){
if(DIR_C2S == pstream->curdir){
pdetail_pr->flow_stat->C2S_syn_pkt+=((this_tcphdr->th_flags & TH_SYN) ? 1 : 0);
- pdetail_pr->flow_stat->C2S_all_pkt++;
- pdetail_pr->flow_stat->C2S_all_byte += tcplen;
- pdetail_pr->flow_stat->C2S_all_byte_raw += raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes;
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->C2S_ip_fragment_pkt++;
+ pdetail_pr->flow_stat->C2S_all_pkt+=MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->C2S_all_byte +=MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->C2S_all_byte_raw += MAX(raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes, frag_len);
+ pdetail_pr->flow_stat->C2S_ip_fragment_pkt+=MAX(1, frag_cnt);
+ }
+ else
+ {
+ pdetail_pr->flow_stat->C2S_all_pkt++;
+ pdetail_pr->flow_stat->C2S_all_byte += tcplen;
+ pdetail_pr->flow_stat->C2S_all_byte_raw += raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes;
}
}else{
pdetail_pr->flow_stat->S2C_syn_pkt+=((this_tcphdr->th_flags & TH_SYN) ? 1 : 0);
- pdetail_pr->flow_stat->S2C_all_pkt++;
- pdetail_pr->flow_stat->S2C_all_byte += tcplen;
- pdetail_pr->flow_stat->S2C_all_byte_raw += raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes;
if(pstream->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->S2C_ip_fragment_pkt++;
+ pdetail_pr->flow_stat->S2C_all_pkt+=MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->S2C_all_byte +=MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->S2C_all_byte_raw +=MAX(raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes, frag_len);
+ pdetail_pr->flow_stat->S2C_ip_fragment_pkt+=MAX(1, frag_cnt);
+ }
+ else
+ {
+ pdetail_pr->flow_stat->S2C_all_pkt++;
+ pdetail_pr->flow_stat->S2C_all_byte += tcplen;
+ pdetail_pr->flow_stat->S2C_all_byte_raw += raw_pkt->raw_pkt_len - raw_pkt->overlay_layer_bytes;
}
}
}
@@ -3166,13 +3231,13 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
pstream_pr->ip_ttl_s2c = pindex->stream.ip_ttl_c2s; /* Not a mistake, that's it! */
}
- /* note: reset�����ü���, ����clientbytes+=, clientpktnum++����֮�� */
+ /* note: reset�����ü���, ����clientbytes+=, clientpktnum++����֮�� */
if(1 == lrustream(pindex_tcp)){
ret = tcp_reset_stream(pindex_tcp, this_iphdr,this_tcphdr, tcplen,raw_pkt);
if(0 == ret){
return PASS;
}
- /* �����tcp_reset_stream()�½���ʱ, ��������bypass��־, �˴�ֱ�ӷ���, �����ٵ���tcp_processallpkt */
+ /* �����tcp_reset_stream()�½���ʱ, ��������bypass��־, �˴�ֱ�ӷ���, �����ٵ���tcp_processallpkt */
if(pstream_pr->under_ddos_bypass){
return PASS;
}
@@ -3215,10 +3280,10 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
else if (pstream->stream_state == TCP_SYN_STATE)
{
ret = tcp_deal_syn_stream(pindex_tcp, raw_pkt, this_iphdr, this_tcphdr, tcplen);
- // �������ı��ģ����������к�̴���
+ // �������ı��ģ����������к�̴���
if (DROP == ret)
{
- // return PASS;//�����к�̴��������DZ��뷵��PASS�������߼�����
+ // return PASS;//�����к�̴��������DZ��뷵��PASS�������߼�����
ret = PASS;
goto fun_exit;
}
@@ -3228,7 +3293,7 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
// ret=tcp_deal_data_stream(pindex_tcp,rawippkt,iplen,this_tcphdr,tcplen);
ret = tcp_deal_data_stream(pindex_tcp, this_iphdr, raw_pkt, this_tcphdr, tcplen);
}
- // add by lqy 20150215 �½����Ӹտ�ʼ��������
+ // add by lqy 20150215 �½����Ӹտ�ʼ��������
else
{
pindex_tcp->stream.stream_public.addr.pkttype = PKT_TYPE_TCPUNORDER;
@@ -3241,18 +3306,18 @@ static int deal_tcp_stream(struct streamindex *pindex, const void *this_iphdr, s
}
}
- /* �����tcp_deal_nouse_stream(),tcp_deal_data_stream()������, ���ù�tcp_reset_stream()���õ�ǰ��ʱ,
- ���ɱ�������bypass��־, �˴�Ҫֱ�ӷ���, �����ٵ���stream_process_tcp_allpkt()
+ /* �����tcp_deal_nouse_stream(),tcp_deal_data_stream()������, ���ù�tcp_reset_stream()���õ�ǰ��ʱ,
+ ���ɱ�������bypass��־, �˴�Ҫֱ�ӷ���, �����ٵ���stream_process_tcp_allpkt()
*/
if(pstream_pr->under_ddos_bypass){
return ret;
}
pdetail_pr =(struct tcpdetail_private*)(pstream->pdetail);
- //adjust by lqy 20150107 Ϊ�˷�ֹSYN�ؽ�����ʱSYN�ڵ�һ��������
+ //adjust by lqy 20150107 Ϊ�˷�ֹSYN�ؽ�����ʱSYN�ڵ�һ��������
if((pdetail_pr != NULL) && (0 == call_tcpall_after_reset) && pindex_tcp && (pstream->pktstate!=OP_STATE_CLOSE))
{
- //ȫ���ӿ��õ�������ָ��ǰ����ԭʼ����
+ //ȫ���ӿ��õ�������ָ��ǰ����ԭʼ����
if(tcplen == 0)
{
pdetail->pdata = NULL;
@@ -3295,7 +3360,7 @@ fun_exit:
/*
lijia 2015-01-12 add this_iphdr,
- �����IP��Ƭ����İ�, ������ʽ�Ĵ���IP��ͷ, ����ֻ��tcp_hdr��raw_hdr, �޷���ȡ������IP��ͷ.
+ �����IP��Ƭ����İ�, ������ʽ�Ĵ���IP��ͷ, ����ֻ��tcp_hdr��raw_hdr, �޷���ȡ������IP��ͷ.
*/
static int dealtcppkt(struct streamindex *pfindex, const void *this_iphdr, struct mesa_tcp_hdr *this_tcphdr,
int thread_num,unsigned char routedir, int tcpdatalen, const raw_pkt_t *raw_packet, int offset_to_raw_pkt_hdr)
@@ -3306,7 +3371,7 @@ static int dealtcppkt(struct streamindex *pfindex, const void *this_iphdr, struc
//struct layer_addr *tcp_stream_addr;
#endif
- /* IPPORT-union�汾, IP��TCP��ʹ��ͬһ��index�ṹ, ��ֱ��ͨ��IP�㴫�ݵ�pfindex */
+ /* IPPORT-union�汾, IP��TCP��ʹ��ͬһ��index�ṹ, ��ֱ��ͨ��IP�㴫�ݵ�pfindex */
//struct streamindex tmp_tcp_stream;
//struct streamindex *ptmp=&tmp_tcp_stream;
struct streaminfo_private *pstream_pr = (struct streaminfo_private *)(&pfindex->stream);
@@ -3332,7 +3397,7 @@ static int dealtcppkt(struct streamindex *pfindex, const void *this_iphdr, struc
pstream->addr.pkttype = PKT_TYPE_NORMAL;//add by lqy 20151222, init pkttype
- pstream_pr->addr_use_as_hash = 1; /* ��Ԫ����Ϣ����IP�� */
+ pstream_pr->addr_use_as_hash = 1; /* ��Ԫ����Ϣ����IP�� */
// ptmp->stream.p_layer_header = this_tcphdr;
//ptmp->stream.offset_to_raw_pkt_hdr = (char *)this_tcphdr - (char *)raw_packet->raw_pkt_data;
pstream_pr->offset_to_ip_hdr = (char *)this_tcphdr - (char *)this_iphdr;
@@ -3341,14 +3406,14 @@ static int dealtcppkt(struct streamindex *pfindex, const void *this_iphdr, struc
pstream->routedir=routedir;
pstream->threadnum=thread_num;
- local_sys_stat->count_per_layer[ADDR_TYPE_TCP][pstream_pr->layer_index]++; /* tcp��ip����һ�� */
- local_sys_stat->length_per_layer[ADDR_TYPE_TCP][pstream_pr->layer_index] += tcpdatalen + this_tcphdr->th_off*4; /* tcp��ip����һ�� */
+ local_sys_stat->count_per_layer[ADDR_TYPE_TCP][pstream_pr->layer_index]++; /* tcp��ip����һ�� */
+ local_sys_stat->length_per_layer[ADDR_TYPE_TCP][pstream_pr->layer_index] += tcpdatalen + this_tcphdr->th_off*4; /* tcp��ip����һ�� */
//return deal_tcp_stream(ptmp,this_tcphdr,tcpdatalen,raw_packet,raw_len);
return deal_tcp_stream(pfindex,this_iphdr, this_tcphdr,tcpdatalen, raw_packet, offset_to_raw_pkt_hdr);
}
-/* lijia comment: this_iphdr��������ʵԭʼ��, Ҳ������malloc��IP�����, ��addr.pkttype���� */
+/* lijia comment: this_iphdr��������ʵԭʼ��, Ҳ������malloc��IP�����, ��addr.pkttype���� */
int dealipv4tcppkt(struct streamindex *pfindex, const struct mesa_ip4_hdr *this_iphdr,int thread_num,
unsigned char routedir, const raw_pkt_t *raw_pkt, int offset_to_raw_pkt_hdr)
{
@@ -3376,8 +3441,8 @@ int dealipv4tcppkt(struct streamindex *pfindex, const struct mesa_ip4_hdr *this_
}
- /* lijia 2016-06-15 add, ������, ������ACK�� */
-#if HIGH_PERF /* ������ģʽ���Զ�����ACK */
+ /* lijia 2016-06-15 add, ������, ������ACK�� */
+#if HIGH_PERF /* ������ģʽ���Զ�����ACK */
if((0 == datalen) && (TH_ACK == this_tcphdr->th_flags)){
return PASS;
}
@@ -3489,7 +3554,7 @@ void set_tcp_takeoverflag(struct streaminfo *pstream,int flag)
/*
- ԭʼ��������: etc/well_known_port.conf
+ ԭʼ��������: etc/well_known_port.conf
return value:
0 : not found in well known port array;
1: in well known port array;
@@ -3525,8 +3590,8 @@ static int is_well_known_port(int stream_type, unsigned short port_host_order)
/*
- 2021-06-08֮ǰ, ����udp��tcp��SYN�������, ���ǰ�"��˿��ǿͻ���"����ȷ�����ķ���,
- 2021-06-08֮��, �����жϹ�֪�˿�, ����80, 8088, 53�ȶ˿ڵ�, ��Ϊ�Ƿ����.
+ 2021-06-08֮ǰ, ����udp��tcp��SYN�������, ���ǰ�"��˿��ǿͻ���"����ȷ�����ķ���,
+ 2021-06-08֮��, �����жϹ�֪�˿�, ����80, 8088, 53�ȶ˿ڵ�, ��Ϊ�Ƿ����.
return value:
0 : not found in well known port array;
@@ -3539,15 +3604,15 @@ static int adjust_stream_dir_by_well_known_ports(unsigned char stream_type,UINT1
ret = is_well_known_port(stream_type,dport_host);
if(ret != 0){
- return DIR_C2S; /* dport�����, ��C2S���� */
+ return DIR_C2S; /* dport�����, ��C2S���� */
}
ret = is_well_known_port(stream_type,sport_host);
if(ret != 0){
- return DIR_S2C; /* sport�����, ��S2C���� */
+ return DIR_S2C; /* sport�����, ��S2C���� */
}
- /* �����˿ڶ�û������well known port, ��֮ǰ���ж��߼�, "��˿��ǿͻ���"���� */
+ /* �����˿ڶ�û������well known port, ��֮ǰ���ж��߼�, "��˿��ǿͻ���"���� */
return 0;
}
@@ -3561,8 +3626,8 @@ int set_transport_addr(struct streaminfo *this_stream, int enable_well_known_por
if(__ADDR_TYPE_IP_PAIR_V4 == this_addr->addrtype){
struct stream_tuple4_v4 *ip4_addr = this_addr->tuple4_v4;
- /* ���ö˿�, ��IP-PORT-union�汾��port˳����Ϊlayer_dir�IJ���,
- ͬʱ����layer_dir, ���ڼ���HASHʱ, ��ַ����˳�� */
+ /* ���ö˿�, ��IP-PORT-union�汾��port˳����Ϊlayer_dir�IJ���,
+ ͬʱ����layer_dir, ���ڼ���HASHʱ, ��ַ����˳�� */
if(enable_well_known_port){
dir_by_well_known_port = adjust_stream_dir_by_well_known_ports(this_stream->type, ntohs(sport), ntohs(dport));
}
@@ -3577,7 +3642,7 @@ int set_transport_addr(struct streaminfo *this_stream, int enable_well_known_por
this_stream_pr->create_dir_by_well_known_port = 1;
}else{
if(ntohs(sport) > ntohs(dport)){
- this_stream_pr->layer_dir = 1; /* ���˿�˳�������Ԫ��layer_dir */
+ this_stream_pr->layer_dir = 1; /* ���˿�˳�������Ԫ��layer_dir */
this_stream->curdir = DIR_C2S;
}else{
if(unlikely(sport == dport)){
@@ -3596,7 +3661,7 @@ int set_transport_addr(struct streaminfo *this_stream, int enable_well_known_por
}
ip4_addr->source = sport;
ip4_addr->dest = dport;
- this_addr->addrtype = ADDR_TYPE_IPV4; /* ����pappƽ̨, ��������Ԫ��ʹ��'ADDR_TYPE_IPV4��ʾ' */
+ this_addr->addrtype = ADDR_TYPE_IPV4; /* ����pappƽ̨, ��������Ԫ��ʹ��'ADDR_TYPE_IPV4��ʾ' */
this_addr->addrlen = sizeof(struct stream_tuple4_v4);
}else if(__ADDR_TYPE_IP_PAIR_V6 == this_addr->addrtype){
struct stream_tuple4_v6 *ip6_addr = this_addr->tuple4_v6;
@@ -3634,7 +3699,7 @@ int set_transport_addr(struct streaminfo *this_stream, int enable_well_known_por
ip6_addr->source = sport;
ip6_addr->dest = dport;
- this_addr->addrtype = ADDR_TYPE_IPV6; /* ����pappƽ̨, ��������Ԫ��ʹ��'ADDR_TYPE_IPV6��ʾ' */
+ this_addr->addrtype = ADDR_TYPE_IPV6; /* ����pappƽ̨, ��������Ԫ��ʹ��'ADDR_TYPE_IPV6��ʾ' */
this_addr->addrlen = sizeof(struct stream_tuple4_v6);
}else{
assert(0);
@@ -3646,7 +3711,7 @@ int set_transport_addr(struct streaminfo *this_stream, int enable_well_known_por
-/* 2014-12-30 lijia add, ��������Ϊһ������ṹ, ����Ϊ��ȡ��ַ��ʵ�ʽṹ, ����֮ */
+/* 2014-12-30 lijia add, ��������Ϊһ������ṹ, ����Ϊ��ȡ��ַ��ʵ�ʽṹ, ����֮ */
struct streaminfo *skip_proxy_phony_stream(struct streaminfo *a_tcp)
{
int proxy_layer_num = 0;
@@ -3684,26 +3749,26 @@ static struct buf_unorder *tcp_save_unorder_pkt(struct streaminfo *a_tcp,const v
//carry_ip_stream = skip_proxy_phony_stream(a_tcp->pfather);
carry_ip_stream = skip_proxy_phony_stream(a_tcp);
- /* �洢ԭʼ�� */
+ /* �洢ԭʼ�� */
memcpy(&(uo_packet->raw_pkt), stack_raw_pkt, sizeof(raw_pkt_t));
uo_packet->raw_pkt.raw_pkt_data = sapp_mem_malloc(SAPP_MEM_DYN_TCP_UNORDER,a_tcp->threadnum, stack_raw_pkt->raw_pkt_len);
memcpy((void *)uo_packet->raw_pkt.raw_pkt_data, stack_raw_pkt->raw_pkt_data, stack_raw_pkt->raw_pkt_len);
- /* iphdr���������:
- 1)��IP��Ƭ��:
- ֻ��洢������ԭʼ��, �����Ķ���ָ������, ֻ��freeһ��;
- 2)IP�����:
- �洢������ԭʼ��(���һ����Ƭ), �������malloc��IP��, ����ʹ��ָ������;
+ /* iphdr���������:
+ 1)��IP��Ƭ��:
+ ֻ��洢������ԭʼ��, �����Ķ���ָ������, ֻ��freeһ��;
+ 2)IP�����:
+ �洢������ԭʼ��(���һ����Ƭ), �������malloc��IP��, ����ʹ��ָ������;
*/
#if 0
- if(carry_ip_stream->addr.pktipfragtype & PKT_TYPE_IPREBUILD){
+
#else
- /* ��ΪIPv4�п��ܶ��Ƕ��, ����: MAC->IPv4->UDP->IPv6->IPv4->TCP->APP,
- ���ܽ��жϵ�ǰ����IPv4���Ƿ��Ƿ�Ƭ, ��ײ��IPv4��Ҳ������Դ��IP��Ƭ����İ�.
- ����, ʹ��ԭʼ��ָ��͵�ǰIPͷָ��ľ���ֵƫ�����ж�,
- �����İ�, ��ǰ��ͷ��ԭʼ��ͷ�ĵ�ַƫ�����϶���MTU��Χ��,
- ���������MTU, ��ǰIP���϶�����malloc��, ����Ƭ����İ�.
+ /* ��ΪIPv4�п��ܶ��Ƕ��, ����: MAC->IPv4->UDP->IPv6->IPv4->TCP->APP,
+ ���ܽ��жϵ�ǰ����IPv4���Ƿ��Ƿ�Ƭ, ��ײ��IPv4��Ҳ������Դ��IP��Ƭ����İ�.
+ ����, ʹ��ԭʼ��ָ��͵�ǰIPͷָ��ľ���ֵƫ�����ж�,
+ �����İ�, ��ǰ��ͷ��ԭʼ��ͷ�ĵ�ַƫ�����϶���MTU��Χ��,
+ ���������MTU, ��ǰIP���϶�����malloc��, ����Ƭ����İ�.
*/
if(labs((char *)this_iphdr - (char *)stack_raw_pkt->raw_pkt_data) > MTU_MAX){
#endif
@@ -3735,7 +3800,7 @@ static struct buf_unorder *tcp_save_unorder_pkt(struct streaminfo *a_tcp,const v
uo_packet->urg = (this_tcphdr->th_flags & TH_URG);
uo_packet->urg_ptr = ntohs (this_tcphdr->th_urp);
- /* IP��Ƭ����ָ���ƶ���pakiet�ṹ��, ��ȫ�ֵ�G_IP_FRAG_LIST[tid]ָ���ÿ�, ���ⱻip_entry���ͷ� */
+ /* IP��Ƭ����ָ���ƶ���pakiet�ṹ��, ��ȫ�ֵ�G_IP_FRAG_LIST[tid]ָ���ÿ�, ���ⱻip_entry���ͷ� */
uo_packet->ipfrag_list = raw_ip_frag_list_global_move_pkt(a_tcp);
a_tcp->addr.pkttype = PKT_TYPE_TCPUNORDER;//add by lqy 20151222, mark unorder
@@ -3778,15 +3843,15 @@ static int get_ip_pkt_tot_len(struct streaminfo *ipinfo, const void *this_iphdr)
}
/* 2015-01-13 lijia add,
- ��Ϊkill_xxxϵ�к���ʹ��stream_pr�ṹ�е�raw_pktָ��,
- ����������������ij����, ����kill_xxxϵ�к���,
- ��ʱ��
+ ��Ϊkill_xxxϵ�к���ʹ��stream_pr�ṹ�е�raw_pktָ��,
+ ����������������ij����, ����kill_xxxϵ�к���,
+ ��ʱ��
*/
static inline void update_stream_list_raw_pkt_pointer(struct streaminfo_private *a_tcp_pr, const raw_pkt_t *raw_pkt)
{
a_tcp_pr->raw_pkt = raw_pkt;
- /* TODO 3: �Ƿ���Ҫ�ݹ�Ľ�a_tcp->pfather->raw_pktҲȫ������?! */
+ /* TODO 3: �Ƿ���Ҫ�ݹ�Ľ�a_tcp->pfather->raw_pktҲȫ������?! */
return;
}
@@ -3798,7 +3863,7 @@ static void tcp_flow_stat_free(int thread_seq, void *project_req_value)
}
-/* 2015-12-25 lijia add, for TCP/UDP����ͳ�� */
+/* 2015-12-25 lijia add, for TCP/UDP����ͳ�� */
int tcp_flow_stat_init(void)
{
int project_req_id;
@@ -3807,7 +3872,7 @@ int tcp_flow_stat_init(void)
if(project_req_id >= 0){
G_TCP_FLOW_STAT_PROJECT_ID = project_req_id;
}else{
- /* �����ļ�û��'tcp_flow_stat'��, �رմ˹��� */
+ /* �����ļ�û��'tcp_flow_stat'��, �رմ˹��� */
G_TCP_FLOW_STAT_PROJECT_ID = -1;
}
@@ -3815,7 +3880,7 @@ int tcp_flow_stat_init(void)
if(project_req_id >= 0){
G_TCP_DEDUCE_FLOW_STAT_PROJECT_ID = project_req_id;
}else{
- /* �����ļ�û��'tcp_flow_stat'��, �رմ˹��� */
+ /* �����ļ�û��'tcp_flow_stat'��, �رմ˹��� */
G_TCP_DEDUCE_FLOW_STAT_PROJECT_ID = -1;
}
diff --git a/src/dealpkt/deal_udp.c b/src/dealpkt/deal_udp.c
index 917d420..dc4231c 100644
--- a/src/dealpkt/deal_udp.c
+++ b/src/dealpkt/deal_udp.c
@@ -7,6 +7,8 @@
extern "C" {
#endif
+#include "ip_reassembly.h"
+
extern int udp_stream_table_size;
extern int raw_ip_frag_list_stream_attach(struct streaminfo *stream);
extern int raw_ip_frag_list_stream_detach(struct streaminfo *stream);
@@ -54,6 +56,9 @@ static void udp_change_stream_state(struct streamindex *pindex, struct mesa_udp_
return ;
}
+ int frag_cnt = 0, frag_len = 0;
+ stream_get_scratch_frag_stat(a_udp, &frag_cnt, &frag_len);
+
if(a_udp->curdir==DIR_C2S)
{
pdetail->serverpktnum++;
@@ -62,12 +67,18 @@ static void udp_change_stream_state(struct streamindex *pindex, struct mesa_udp_
a_udp->dir=DIR_DOUBLE;
}
if(G_UDP_FLOW_STAT_PROJECT_ID != -1 && raw_pkt->is_ctrl_pkt == 0){
- pdetail_pr->flow_stat->C2S_pkt++;
- pdetail_pr->flow_stat->C2S_byte += datalen;
- pdetail_pr->flow_stat->C2S_all_byte_raw +=MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
if(a_udp->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->C2S_ip_fragment_pkt=1;
+ pdetail_pr->flow_stat->C2S_pkt+=MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->C2S_byte += MAX(datalen, frag_len);
+ pdetail_pr->flow_stat->C2S_all_byte_raw +=MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,frag_len);
+ pdetail_pr->flow_stat->C2S_ip_fragment_pkt+=MAX(1, frag_cnt);
+ }
+ else
+ {
+ pdetail_pr->flow_stat->C2S_pkt++;
+ pdetail_pr->flow_stat->C2S_byte += datalen;
+ pdetail_pr->flow_stat->C2S_all_byte_raw +=MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
}
}
}
@@ -80,12 +91,19 @@ static void udp_change_stream_state(struct streamindex *pindex, struct mesa_udp_
}
if(G_UDP_FLOW_STAT_PROJECT_ID != -1 && raw_pkt->is_ctrl_pkt == 0){
- pdetail_pr->flow_stat->S2C_pkt++;
- pdetail_pr->flow_stat->S2C_byte += datalen;
- pdetail_pr->flow_stat->S2C_all_byte_raw += MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
+
if(a_udp->addr.pktipfragtype & PKT_TYPE_IPREBUILD)
{
- pdetail_pr->flow_stat->S2C_ip_fragment_pkt=1;
+ pdetail_pr->flow_stat->S2C_pkt+=MAX(1, frag_cnt);
+ pdetail_pr->flow_stat->S2C_byte += MAX(datalen, frag_len);
+ pdetail_pr->flow_stat->S2C_all_byte_raw += MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,frag_len);
+ pdetail_pr->flow_stat->S2C_ip_fragment_pkt+=MAX(1, frag_cnt);
+ }
+ else
+ {
+ pdetail_pr->flow_stat->S2C_pkt++;
+ pdetail_pr->flow_stat->S2C_byte += datalen;
+ pdetail_pr->flow_stat->S2C_all_byte_raw += MAX(raw_pkt->raw_pkt_len-raw_pkt->overlay_layer_bytes,0);
}
}
diff --git a/src/dealpkt/stream_manage.c b/src/dealpkt/stream_manage.c
index 6b10eb9..860275a 100644
--- a/src/dealpkt/stream_manage.c
+++ b/src/dealpkt/stream_manage.c
@@ -42,6 +42,29 @@ static inline void update_stream_status(UCHAR threadnum, UCHAR type, UCHAR strea
int project_requirement_global_init(void);
static inline void __do_streamleavlist(struct streamindex *pindex,struct stream_list *plist);
+#include "ip_reassembly.h"
+extern struct frag_manage *g_ipv4_frag_manage;
+extern struct frag_manage *g_ipv6_frag_manage;
+
+inline void stream_get_scratch_frag_stat(struct streaminfo *pstream, int *frag_cnt, int *frag_len)
+{
+ if(g_ipv4_frag_manage == NULL || g_ipv6_frag_manage == NULL)return;
+ if (pstream == NULL || frag_cnt == NULL || frag_len == NULL)return;
+ struct frag_manage *thread_frag_manage = NULL;
+ if (pstream->addr.addrtype == ADDR_TYPE_IPV4)
+ {
+ thread_frag_manage=&g_ipv4_frag_manage[pstream->threadnum];
+ }
+ if (pstream->addr.addrtype == ADDR_TYPE_IPV6)
+ {
+ thread_frag_manage=&g_ipv6_frag_manage[pstream->threadnum];
+
+ }
+ *frag_cnt = thread_frag_manage->scratch_frag_cnt;
+ *frag_len = thread_frag_manage->scratch_frag_len;
+ return;
+}
+
int tcp_stream_table_size=0;
int udp_stream_table_size=0;
int tcpstate_num[MAX_TCP_STATE]={8000,2000,4000};