summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlijia <[email protected]>2021-07-01 11:15:57 +0800
committerlijia <[email protected]>2021-07-01 11:15:57 +0800
commit33f5b18cf6854e2849a1a0c813e39e9a0eee6bbf (patch)
treeeebd0217abde6b053b12c5dad7ccb99b1cb128ca
parent3c2b02bd313c9601edd0d2b9e4c81a61c1f0e932 (diff)
TSG-6781, 修复ssdp协议数据包被认为组播而被丢弃的BUG.v4.2.40
-rw-r--r--src/dealpkt/deal_ethernet.c49
-rw-r--r--src/dealpkt/deal_ipv4.c27
-rw-r--r--src/packet_io/packet_io_status.cpp15
3 files changed, 50 insertions, 41 deletions
diff --git a/src/dealpkt/deal_ethernet.c b/src/dealpkt/deal_ethernet.c
index dcfdac8..694c83b 100644
--- a/src/dealpkt/deal_ethernet.c
+++ b/src/dealpkt/deal_ethernet.c
@@ -66,8 +66,32 @@ int eth_entry(struct streaminfo_private *fstream_pr, const void *this_layer_hdr,
local_sys_stat->length_per_layer[ADDR_TYPE_MAC][fstream_pr->layer_index + 1] += this_layer_len;
}
+ ptmp = &tmp_index;
+ pstream_pr = &ptmp->stream;
+ pstream = &pstream_pr->stream_public;
+
+ memset(ptmp, 0, sizeof(struct streamindex));
+ set_mac_addr(&addr, p_eth_hdr);
+ pstream->addr.mac = (struct layer_addr_mac *)&addr;
+ pstream->addr.addrlen = sizeof(struct layer_addr_mac);
+ pstream->addr.addrtype = ADDR_TYPE_MAC;
+ pstream_pr->addr_use_as_hash = 0;
+
+ if(NULL == fstream_pr){
+ pstream_pr->layer_index = 0; /* first layer, index start from 0 */
+ }else{
+ if(unlikely(fstream_pr->layer_index >= SAPP_SUPPORT_LAYER_NUM_MAX)){
+ local_sys_stat->count[SAPP_STAT_DROP_ETHERNET]++;
+ sapp_runtime_log(RLOG_LV_INFO, "eth_entry: layer index more than:%d", fstream_pr->layer_index);
+ return PASS;
+ }
+ pstream_pr->layer_index = fstream_pr->layer_index + 1;
+ }
+ this_layer_is_overlay = sapp_is_overlay_layer(pstream_pr, raw_pkt);
+
if(NET_CONN_SERIAL_GDEV == g_topology_mode){
- if(unlikely(sapp_identify_broad_multicast_pkt(this_layer_hdr, raw_pkt) != 0)){
+ if((this_layer_is_overlay != 0) /* �����overlay��Ҫ���㲥���鲥, �ڲ���������û���ʵ����, �����κ����� */
+ && (unlikely(sapp_identify_broad_multicast_pkt(this_layer_hdr, raw_pkt) != 0))){
local_sys_stat->count[SAPP_STAT_DROP_ETHERNET]++;
local_sys_stat->length[SAPP_STAT_DROP_ETHERNET]+=this_layer_len;
return DROP;
@@ -75,17 +99,7 @@ int eth_entry(struct streaminfo_private *fstream_pr, const void *this_layer_hdr,
}
if(likely(0 == g_skip_ethernet_layer_sw)){
- ptmp = &tmp_index;
- pstream_pr = &ptmp->stream;
- pstream = &pstream_pr->stream_public;
next_layer_offset = offset_to_raw_pkt_hdr + sizeof(struct mesa_ethernet_hdr);
-
- memset(ptmp, 0, sizeof(struct streamindex));
- set_mac_addr(&addr, p_eth_hdr);
- pstream->addr.mac = (struct layer_addr_mac *)&addr;
- pstream->addr.addrlen = sizeof(struct layer_addr_mac);
- pstream->addr.addrtype = ADDR_TYPE_MAC;
- pstream_pr->addr_use_as_hash = 0;
//ptmp->stream.p_layer_header = this_layer_hdr;
//ptmp->stream.offset_to_raw_pkt_hdr = (char *)this_layer_hdr - (char *)raw_pkt->raw_pkt_data;
pstream_pr->offset_to_raw_pkt_hdr = offset_to_raw_pkt_hdr;
@@ -111,16 +125,7 @@ int eth_entry(struct streaminfo_private *fstream_pr, const void *this_layer_hdr,
pstream->curdir = DIR_S2C;
}
- if(NULL == fstream_pr){
- pstream_pr->layer_index = 0; /* first layer, index start from 0 */
- }else{
- if(unlikely(fstream_pr->layer_index >= SAPP_SUPPORT_LAYER_NUM_MAX)){
- local_sys_stat->count[SAPP_STAT_DROP_ETHERNET]++;
- sapp_runtime_log(RLOG_LV_INFO, "eth_entry: layer index more than:%d", fstream_pr->layer_index);
- return PASS;
- }
- pstream_pr->layer_index = fstream_pr->layer_index + 1;
- }
+
if(g_asymmetric_addr_layer_set.layer_type_index[ADDR_TYPE_MAC][pstream_pr->layer_index] != 0){
pstream_pr->need_update_opposite_addr = 1;//�����ַ��һ������Ҫ���¶Բ���Ϣ, һ������mpls�����ڲ��ethernet
}else{
@@ -136,7 +141,7 @@ int eth_entry(struct streaminfo_private *fstream_pr, const void *this_layer_hdr,
}
}
- this_layer_is_overlay = sapp_is_overlay_layer(pstream_pr, raw_pkt);
+
if(0 == this_layer_is_overlay){ /* ��overlay����ۼ���ز���� */
local_sys_stat->count[SAPP_STAT_RCV_ETHERNET]++;
local_sys_stat->length[SAPP_STAT_RCV_ETHERNET] += (unsigned long long)this_layer_len;
diff --git a/src/dealpkt/deal_ipv4.c b/src/dealpkt/deal_ipv4.c
index b646813..756c2fa 100644
--- a/src/dealpkt/deal_ipv4.c
+++ b/src/dealpkt/deal_ipv4.c
@@ -615,23 +615,6 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
return PASS;
}
-#if (0 == HIGH_PERF)
- /* 2012-11-01 add, �������豸ģʽ�£��������鲥��ַ���� */
- if(unlikely(g_topology_mode & __NET_CONN_GDEV)){
- /* �ر�˽�е�ַ�μ�� */
-/*
- if(is_private_addr_v4(ntohl(a_packet->ip_dst.s_addr))){
- ret = DROP;
- goto done;
- }
-*/
- if(is_multicast_addr_v4(ntohl(a_packet->ip_dst.s_addr))){
- local_sys_stat->count[SAPP_STAT_DROP_IPV4]++;
- local_sys_stat->length[SAPP_STAT_DROP_IPV4]+=this_layer_len;
- return DROP;
- }
- }
-#endif
ptmp=&tmp_index;
memset(ptmp, 0x0, sizeof(struct streamindex));
@@ -660,6 +643,16 @@ int ipv4_entry(struct streaminfo_private *pfstream_pr, const void *this_layer_da
}else{
pstream_pr->addr_use_as_hash = 1;
}
+
+ /* 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]++;
+ local_sys_stat->length[SAPP_STAT_DROP_IPV4]+=this_layer_len;
+ return DROP;
+ }
+ }
+
//ptmp->stream.p_layer_header = a_packet;
//ptmp->stream.offset_to_raw_pkt_hdr = (char *)a_packet - (char *)raw_pkt->raw_pkt_data;
pstream_pr->offset_to_raw_pkt_hdr = offset_to_raw_pkt_hdr;
diff --git a/src/packet_io/packet_io_status.cpp b/src/packet_io/packet_io_status.cpp
index 9b8b700..b576264 100644
--- a/src/packet_io/packet_io_status.cpp
+++ b/src/packet_io/packet_io_status.cpp
@@ -289,7 +289,7 @@ void sysinfo_output(void)
fprintf(fp,"\n*********************** %s *********************\n", time_string);
fprintf(fp,"*********************** \033[41m%s\033[0m *************************\n", "sysinfo exactly");
- fprintf(fp,"%-12s %12s %12s %12s %12s\n","RCV-PKT", "total_pkt", "total_len","pps", "Bps");
+ fprintf(fp,"%-12s %12s %12s %12s %12s\n","Layer", "total_pkt", "total_len","pps", "Bps");
fprintf(fp,"%-12s %12llu %12llu %12llu %12llu\n", "Polling_work", 0,0,(cur_count[SAPP_POLLING_WORK]-history_count[SAPP_POLLING_WORK]),0);
fprintf(fp,"%-12s %12llu %12llu %12llu %12llu\n", "Polling_idle", 0,0,(cur_count[SAPP_POLLING_IDLE]-history_count[SAPP_POLLING_IDLE]),0);
@@ -302,6 +302,12 @@ void sysinfo_output(void)
fprintf(fp,"%-12s %12llu %12llu %12llu %12llu\n","TCP",cur_count[SAPP_STAT_RCV_TCP],cur_length[SAPP_STAT_RCV_TCP],(cur_count[SAPP_STAT_RCV_TCP]-history_count[SAPP_STAT_RCV_TCP]),(cur_length[SAPP_STAT_RCV_TCP]-history_length[SAPP_STAT_RCV_TCP]));
fprintf(fp,"%-12s %12llu %12llu %12llu %12llu\n","UDP",cur_count[SAPP_STAT_RCV_UDP],cur_length[SAPP_STAT_RCV_UDP],(cur_count[SAPP_STAT_RCV_UDP]-history_count[SAPP_STAT_RCV_UDP]),(cur_length[SAPP_STAT_RCV_UDP]-history_length[SAPP_STAT_RCV_UDP]));
fprintf(fp,"%-12s %12llu %12llu %12llu %12llu\n","Unknown",cur_count[SAPP_STAT_RCV_UNKNOWN],cur_length[SAPP_STAT_RCV_UNKNOWN],(cur_count[SAPP_STAT_RCV_UNKNOWN]-history_count[SAPP_STAT_RCV_UNKNOWN]),(cur_length[SAPP_STAT_RCV_UNKNOWN]-history_length[SAPP_STAT_RCV_UNKNOWN]));
+ fprintf(fp,"%-12s %12llu %12llu %12llu %12llu\n","Sapp_Drop",
+ cur_count[SAPP_STAT_DROP_ETHERNET]+cur_count[SAPP_STAT_DROP_IPV4]+cur_count[SAPP_STAT_DROP_IPV6],
+ (cur_length[SAPP_STAT_DROP_ETHERNET]+cur_length[SAPP_STAT_DROP_IPV4]+cur_length[SAPP_STAT_DROP_IPV6]),
+ (cur_count[SAPP_STAT_DROP_ETHERNET]+cur_count[SAPP_STAT_DROP_IPV4]+cur_count[SAPP_STAT_DROP_IPV6]-history_count[SAPP_STAT_DROP_ETHERNET]-history_count[SAPP_STAT_DROP_IPV4]-history_count[SAPP_STAT_DROP_IPV6]),
+ ((cur_count[SAPP_STAT_DROP_ETHERNET]+cur_count[SAPP_STAT_DROP_IPV4]+cur_count[SAPP_STAT_DROP_IPV6]-history_count[SAPP_STAT_DROP_ETHERNET]-history_count[SAPP_STAT_DROP_IPV4]-history_count[SAPP_STAT_DROP_IPV6])));
+
fprintf(fp,"\n***************************************************************\n");
fprintf(fp,"%-10s %12s %12s %12s %12s\n","SND-PKT", "total_pkt", "total_len","pps", "Bps");
fprintf(fp,"%-10s %12llu %12llu %12llu %12llu\n", "TCP_RST", cur_count[SAPP_STAT_SND_TCP_RST],cur_length[SAPP_STAT_SND_TCP_RST],(cur_count[SAPP_STAT_SND_TCP_RST]-history_count[SAPP_STAT_SND_TCP_RST]),(cur_length[SAPP_STAT_SND_TCP_RST]-history_length[SAPP_STAT_SND_TCP_RST]));
@@ -367,7 +373,7 @@ void sysinfo_output(void)
fprintf(fp,"*****************************************************************\n\n");
fprintf(fp,"################# \033[41m%s\033[0m --- is same as above! #########\n", "sysinfo humanly");
- fprintf(fp,"%-12s %12s %12s %12s %12s\n", "RCV-PKT", "total_pkt", "total_len","pps", "bps");
+ fprintf(fp,"%-12s %12s %12s %12s %12s\n", "Layer", "total_pkt", "total_len","pps", "bps");
fprintf(fp,"%-12s %12llu %12llu %12llu %12llu\n", "Polling_work", 0,0,(cur_count[SAPP_POLLING_WORK]-history_count[SAPP_POLLING_WORK]),0);
fprintf(fp,"%-12s %12llu %12llu %12llu %12llu\n", "Polling_idle", 0,0,(cur_count[SAPP_POLLING_IDLE]-history_count[SAPP_POLLING_IDLE]),0);
@@ -380,6 +386,11 @@ void sysinfo_output(void)
fprintf(fp,"%-12s %12llu %12s %12llu %12s\n","TCP",cur_count[SAPP_STAT_RCV_TCP],byte_convert_human(cur_length[SAPP_STAT_RCV_TCP],1,1,s1),(cur_count[SAPP_STAT_RCV_TCP]-history_count[SAPP_STAT_RCV_TCP]),byte_convert_human((cur_length[SAPP_STAT_RCV_TCP]-history_length[SAPP_STAT_RCV_TCP]),1,8,s2));
fprintf(fp,"%-12s %12llu %12s %12llu %12s\n","UDP",cur_count[SAPP_STAT_RCV_UDP],byte_convert_human(cur_length[SAPP_STAT_RCV_UDP],1,1,s1),(cur_count[SAPP_STAT_RCV_UDP]-history_count[SAPP_STAT_RCV_UDP]),byte_convert_human((cur_length[SAPP_STAT_RCV_UDP]-history_length[SAPP_STAT_RCV_UDP]),1,8,s2));
fprintf(fp,"%-12s %12llu %12s %12llu %12s\n","Unknown",cur_count[SAPP_STAT_RCV_UNKNOWN],byte_convert_human(cur_length[SAPP_STAT_RCV_UNKNOWN],1,1,s1),(cur_count[SAPP_STAT_RCV_UNKNOWN]-history_count[SAPP_STAT_RCV_UNKNOWN]),byte_convert_human((cur_length[SAPP_STAT_RCV_UNKNOWN]-history_length[SAPP_STAT_RCV_UNKNOWN]),1,8,s2));
+ fprintf(fp,"%-12s %12llu %12s %12llu %12s\n","Sapp_Drop",
+ cur_count[SAPP_STAT_DROP_ETHERNET]+cur_count[SAPP_STAT_DROP_IPV4]+cur_count[SAPP_STAT_DROP_IPV6],
+ byte_convert_human(cur_length[SAPP_STAT_DROP_ETHERNET]+cur_length[SAPP_STAT_DROP_IPV4]+cur_length[SAPP_STAT_DROP_IPV6],1,1,s1),
+ (cur_count[SAPP_STAT_DROP_ETHERNET]+cur_count[SAPP_STAT_DROP_IPV4]+cur_count[SAPP_STAT_DROP_IPV6]-history_count[SAPP_STAT_DROP_ETHERNET]-history_count[SAPP_STAT_DROP_IPV4]-history_count[SAPP_STAT_DROP_IPV6]),
+ byte_convert_human((cur_count[SAPP_STAT_DROP_ETHERNET]+cur_count[SAPP_STAT_DROP_IPV4]+cur_count[SAPP_STAT_DROP_IPV6]-history_count[SAPP_STAT_DROP_ETHERNET]-history_count[SAPP_STAT_DROP_IPV4]-history_count[SAPP_STAT_DROP_IPV6]),1,8,s2));
fprintf(fp,"#################################################################\n");
fprintf(fp,"Network Link Quality:\n");