diff options
| author | yangwei <[email protected]> | 2022-03-15 18:12:37 +0800 |
|---|---|---|
| committer | 杨威 <[email protected]> | 2022-03-15 19:02:11 +0800 |
| commit | 4af2b214f7cdf139ed6821632324ace0c77dc758 (patch) | |
| tree | 0ebc75628517818bc1401bd78b84f7f7c39adab8 | |
| parent | e0967705ed04b4b4e04d0756e42a805d09268e6c (diff) | |
🐞 fix(checkstreamorder_for_gtp_tunnel): 解决未判断v6地址的bugv4.2.82
| -rw-r--r-- | src/dealpkt/stream_manage.c | 64 |
1 files changed, 51 insertions, 13 deletions
diff --git a/src/dealpkt/stream_manage.c b/src/dealpkt/stream_manage.c index 6960caa..78ed229 100644 --- a/src/dealpkt/stream_manage.c +++ b/src/dealpkt/stream_manage.c @@ -1383,19 +1383,57 @@ static int checkstreamorder_for_gtp_tunnel(const struct streaminfo_private *top_ /* ���ip��ַ��仯, ���ĸ�ip�����ܶ���һ��, �����ⷽ���ַ��ͬ, ������Ϊ������ͬһ��GTP���� TODO, �˴���ҪͬGTP-C���� ?? */ - if(pheap_stream->addr.tuple4_v4->saddr == pstack_stream->addr.tuple4_v4->saddr){ - this_layer_is_same = 1; - cur_pkt_dir = DIR_C2S; - }else if(pheap_stream->addr.tuple4_v4->daddr == pstack_stream->addr.tuple4_v4->daddr){ - this_layer_is_same = 1; - cur_pkt_dir = DIR_C2S; - }else if(pheap_stream->addr.tuple4_v4->saddr == pstack_stream->addr.tuple4_v4->daddr){ - this_layer_is_same = 1; - cur_pkt_dir = DIR_S2C; - }else if(pheap_stream->addr.tuple4_v4->daddr == pstack_stream->addr.tuple4_v4->saddr){ - this_layer_is_same = 1; - cur_pkt_dir = DIR_S2C; - } + if (pheap_stream->addr.addrtype == ADDR_TYPE_IPV4) + { + if (pheap_stream->addr.tuple4_v4->saddr == pstack_stream->addr.tuple4_v4->saddr) + { + this_layer_is_same = 1; + cur_pkt_dir = DIR_C2S; + } + else if (pheap_stream->addr.tuple4_v4->daddr == pstack_stream->addr.tuple4_v4->daddr) + { + this_layer_is_same = 1; + cur_pkt_dir = DIR_C2S; + } + else if (pheap_stream->addr.tuple4_v4->saddr == pstack_stream->addr.tuple4_v4->daddr) + { + this_layer_is_same = 1; + cur_pkt_dir = DIR_S2C; + } + else if (pheap_stream->addr.tuple4_v4->daddr == pstack_stream->addr.tuple4_v4->saddr) + { + this_layer_is_same = 1; + cur_pkt_dir = DIR_S2C; + } + } + else if(pheap_stream->addr.addrtype == ADDR_TYPE_IPV6) + { + if (0 == memcmp(pheap_stream->addr.tuple4_v6->saddr,pstack_stream->addr.tuple4_v6->saddr, IPV6_ADDR_LEN)) + { + this_layer_is_same = 1; + cur_pkt_dir = DIR_C2S; + } + else if (0 == memcmp(pheap_stream->addr.tuple4_v6->daddr,pstack_stream->addr.tuple4_v6->daddr, IPV6_ADDR_LEN)) + { + this_layer_is_same = 1; + cur_pkt_dir = DIR_C2S; + } + else if (0 == memcmp(pheap_stream->addr.tuple4_v6->saddr,pstack_stream->addr.tuple4_v6->daddr, IPV6_ADDR_LEN)) + { + this_layer_is_same = 1; + cur_pkt_dir = DIR_S2C; + } + else if (0 == memcmp(pheap_stream->addr.tuple4_v6->daddr,pstack_stream->addr.tuple4_v6->saddr, IPV6_ADDR_LEN)) + { + this_layer_is_same = 1; + cur_pkt_dir = DIR_S2C; + } + } + else + { + sapp_runtime_log(RLOG_LV_FATAL, "stream:%s, curdir:%d, addrtype:%d for GTP tunnel, heap stream tuple4 addr not IPv4 or IPv6", + printaddr(&top_stream_pr->stream_public.addr, top_stream_pr->stream_public.threadnum), cur_pkt_dir, pheap_stream->addr.addrtype); + } if(0 == this_layer_is_same){ /* �����ַȫ��һ��, ��Ϊ��������һ������, ֱ�ӷ��ش��� */ return -1; |
