diff options
| author | lijia <[email protected]> | 2021-07-01 11:15:57 +0800 |
|---|---|---|
| committer | lijia <[email protected]> | 2021-07-01 11:15:57 +0800 |
| commit | 33f5b18cf6854e2849a1a0c813e39e9a0eee6bbf (patch) | |
| tree | eebd0217abde6b053b12c5dad7ccb99b1cb128ca | |
| parent | 3c2b02bd313c9601edd0d2b9e4c81a61c1f0e932 (diff) | |
TSG-6781, 修复ssdp协议数据包被认为组播而被丢弃的BUG.v4.2.40
| -rw-r--r-- | src/dealpkt/deal_ethernet.c | 49 | ||||
| -rw-r--r-- | src/dealpkt/deal_ipv4.c | 27 | ||||
| -rw-r--r-- | src/packet_io/packet_io_status.cpp | 15 |
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"); |
