From ce2775d331cecc072c99e1c0c3bced954de4900d Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Thu, 5 May 2022 09:46:01 +0200 Subject: [PATCH] flow/icmpv4: fix vlan.use-for-tracking For ICMPv4 error messages the vlan ids were always considered, even if the 'vlan.use-for-tracking' option was disabled. Ticket: #5330 --- src/flow-hash.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/flow-hash.c b/src/flow-hash.c index f16bac3ef8..c858b294a9 100644 --- a/src/flow-hash.c +++ b/src/flow-hash.c @@ -374,28 +374,20 @@ static inline int FlowCompareICMPv4(Flow *f, const Packet *p) /* first check the direction of the flow, in other words, the client -> * server direction as it's most likely the ICMP error will be a * response to the clients traffic */ - if ((f->src.addr_data32[0] == IPV4_GET_RAW_IPSRC_U32( ICMPV4_GET_EMB_IPV4(p) )) && - (f->dst.addr_data32[0] == IPV4_GET_RAW_IPDST_U32( ICMPV4_GET_EMB_IPV4(p) )) && - f->sp == p->icmpv4vars.emb_sport && - f->dp == p->icmpv4vars.emb_dport && - f->proto == ICMPV4_GET_EMB_PROTO(p) && - f->recursion_level == p->recursion_level && - f->vlan_id[0] == p->vlan_id[0] && - f->vlan_id[1] == p->vlan_id[1]) - { + if ((f->src.addr_data32[0] == IPV4_GET_RAW_IPSRC_U32(ICMPV4_GET_EMB_IPV4(p))) && + (f->dst.addr_data32[0] == IPV4_GET_RAW_IPDST_U32(ICMPV4_GET_EMB_IPV4(p))) && + f->sp == p->icmpv4vars.emb_sport && f->dp == p->icmpv4vars.emb_dport && + f->proto == ICMPV4_GET_EMB_PROTO(p) && f->recursion_level == p->recursion_level && + CmpVlanIds(f->vlan_id, p->vlan_id)) { return 1; /* check the less likely case where the ICMP error was a response to * a packet from the server. */ - } else if ((f->dst.addr_data32[0] == IPV4_GET_RAW_IPSRC_U32( ICMPV4_GET_EMB_IPV4(p) )) && - (f->src.addr_data32[0] == IPV4_GET_RAW_IPDST_U32( ICMPV4_GET_EMB_IPV4(p) )) && - f->dp == p->icmpv4vars.emb_sport && - f->sp == p->icmpv4vars.emb_dport && - f->proto == ICMPV4_GET_EMB_PROTO(p) && - f->recursion_level == p->recursion_level && - f->vlan_id[0] == p->vlan_id[0] && - f->vlan_id[1] == p->vlan_id[1]) - { + } else if ((f->dst.addr_data32[0] == IPV4_GET_RAW_IPSRC_U32(ICMPV4_GET_EMB_IPV4(p))) && + (f->src.addr_data32[0] == IPV4_GET_RAW_IPDST_U32(ICMPV4_GET_EMB_IPV4(p))) && + f->dp == p->icmpv4vars.emb_sport && f->sp == p->icmpv4vars.emb_dport && + f->proto == ICMPV4_GET_EMB_PROTO(p) && + f->recursion_level == p->recursion_level && CmpVlanIds(f->vlan_id, p->vlan_id)) { return 1; } -- 2.47.2