summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryangwei <[email protected]>2022-03-15 18:12:37 +0800
committer杨威 <[email protected]>2022-03-15 19:02:11 +0800
commit4af2b214f7cdf139ed6821632324ace0c77dc758 (patch)
tree0ebc75628517818bc1401bd78b84f7f7c39adab8
parente0967705ed04b4b4e04d0756e42a805d09268e6c (diff)
🐞 fix(checkstreamorder_for_gtp_tunnel): 解决未判断v6地址的bugv4.2.82
-rw-r--r--src/dealpkt/stream_manage.c64
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;