@@ -412,7 +412,9 @@ static inline bool CmpFlowPacket(const Flow *f, const Packet *p)
412412 const uint32_t * p_dst = p -> dst .address .address_un_data32 ;
413413 return CmpAddrsAndPorts (f_src , f_dst , f -> sp , f -> dp , p_src , p_dst , p -> sp , p -> dp ) &&
414414 f -> proto == p -> proto && f -> recursion_level == p -> recursion_level &&
415- CmpVlanIds (f -> vlan_id , p -> vlan_id ) && (f -> livedev == p -> livedev || g_livedev_mask == 0 );
415+ CmpVlanIds (f -> vlan_id , p -> vlan_id ) &&
416+ ((p -> src .family == AF_INET ) == FLOW_IS_IPV4 (f )) &&
417+ (f -> livedev == p -> livedev || g_livedev_mask == 0 );
416418}
417419
418420static inline bool CmpFlowKey (const Flow * f , const FlowKey * k )
@@ -423,7 +425,9 @@ static inline bool CmpFlowKey(const Flow *f, const FlowKey *k)
423425 const uint32_t * k_dst = k -> dst .address .address_un_data32 ;
424426 return CmpAddrsAndPorts (f_src , f_dst , f -> sp , f -> dp , k_src , k_dst , k -> sp , k -> dp ) &&
425427 f -> proto == k -> proto && f -> recursion_level == k -> recursion_level &&
426- CmpVlanIds (f -> vlan_id , k -> vlan_id ) && CmpLiveDevIds (f -> livedev , k -> livedev_id );
428+ CmpVlanIds (f -> vlan_id , k -> vlan_id ) &&
429+ ((k -> src .family == AF_INET ) == FLOW_IS_IPV4 (f )) &&
430+ CmpLiveDevIds (f -> livedev , k -> livedev_id );
427431}
428432
429433static inline bool CmpAddrsAndICMPTypes (const uint32_t src1 [4 ],
@@ -471,7 +475,9 @@ static inline int FlowCompareICMPv4(Flow *f, const Packet *p)
471475 if ((f -> src .addr_data32 [0 ] == IPV4_GET_RAW_IPSRC_U32 (ICMPV4_GET_EMB_IPV4 (p ))) &&
472476 (f -> dst .addr_data32 [0 ] == IPV4_GET_RAW_IPDST_U32 (ICMPV4_GET_EMB_IPV4 (p ))) &&
473477 f -> sp == p -> icmpv4vars .emb_sport && f -> dp == p -> icmpv4vars .emb_dport &&
474- f -> proto == ICMPV4_GET_EMB_PROTO (p ) && f -> recursion_level == p -> recursion_level &&
478+ f -> proto == ICMPV4_GET_EMB_PROTO (p ) &&
479+ ((p -> src .family == AF_INET ) == FLOW_IS_IPV4 (f )) &&
480+ f -> recursion_level == p -> recursion_level &&
475481 CmpVlanIds (f -> vlan_id , p -> vlan_id ) &&
476482 (f -> livedev == p -> livedev || g_livedev_mask == 0 )) {
477483 return 1 ;
@@ -482,6 +488,7 @@ static inline int FlowCompareICMPv4(Flow *f, const Packet *p)
482488 (f -> src .addr_data32 [0 ] == IPV4_GET_RAW_IPDST_U32 (ICMPV4_GET_EMB_IPV4 (p ))) &&
483489 f -> dp == p -> icmpv4vars .emb_sport && f -> sp == p -> icmpv4vars .emb_dport &&
484490 f -> proto == ICMPV4_GET_EMB_PROTO (p ) &&
491+ ((p -> src .family == AF_INET ) == FLOW_IS_IPV4 (f )) &&
485492 f -> recursion_level == p -> recursion_level && CmpVlanIds (f -> vlan_id , p -> vlan_id ) &&
486493 (f -> livedev == p -> livedev || g_livedev_mask == 0 )) {
487494 return 1 ;
@@ -514,7 +521,8 @@ static inline int FlowCompareESP(Flow *f, const Packet *p)
514521
515522 return CmpAddrs (f_src , p_src ) && CmpAddrs (f_dst , p_dst ) && f -> proto == p -> proto &&
516523 f -> recursion_level == p -> recursion_level && CmpVlanIds (f -> vlan_id , p -> vlan_id ) &&
517- f -> esp .spi == ESP_GET_SPI (p ) && (f -> livedev == p -> livedev || g_livedev_mask == 0 );
524+ ((p -> src .family == AF_INET ) == FLOW_IS_IPV4 (f )) && f -> esp .spi == ESP_GET_SPI (p ) &&
525+ (f -> livedev == p -> livedev || g_livedev_mask == 0 );
518526}
519527
520528void FlowSetupPacket (Packet * p )
0 commit comments