@@ -409,7 +409,8 @@ static inline bool CmpFlowPacket(const Flow *f, const Packet *p)
409409 const uint32_t * p_src = p -> src .address .address_un_data32 ;
410410 const uint32_t * p_dst = p -> dst .address .address_un_data32 ;
411411 return CmpAddrsAndPorts (f_src , f_dst , f -> sp , f -> dp , p_src , p_dst , p -> sp , p -> dp ) &&
412- CmpFlowMisc (f , p ) && CmpLiveDevIds (p -> livedev_id , f -> livedev_id );
412+ CmpFlowMisc (f , p ) && (PacketIsIPv4 (p ) == FLOW_IS_IPV4 (f )) &&
413+ CmpLiveDevIds (p -> livedev_id , f -> livedev_id );
413414}
414415
415416static inline bool CmpFlowKey (const Flow * f , const FlowKey * k )
@@ -419,7 +420,8 @@ static inline bool CmpFlowKey(const Flow *f, const FlowKey *k)
419420 const uint32_t * k_src = k -> src .address .address_un_data32 ;
420421 const uint32_t * k_dst = k -> dst .address .address_un_data32 ;
421422 return CmpAddrsAndPorts (f_src , f_dst , f -> sp , f -> dp , k_src , k_dst , k -> sp , k -> dp ) &&
422- CmpFlowMisc (f , k ) && CmpLiveDevIds (f -> livedev_id , k -> livedev_id );
423+ CmpFlowMisc (f , k ) && ((k -> src .family == AF_INET ) == FLOW_IS_IPV4 (f )) &&
424+ CmpLiveDevIds (f -> livedev_id , k -> livedev_id );
423425}
424426
425427static inline bool CmpAddrsAndICMPTypes (const uint32_t src1 [4 ],
@@ -466,7 +468,7 @@ static inline int FlowCompareICMPv4(Flow *f, const Packet *p)
466468 if ((f -> src .addr_data32 [0 ] == IPV4_GET_RAW_IPSRC_U32 (PacketGetICMPv4EmbIPv4 (p ))) &&
467469 (f -> dst .addr_data32 [0 ] == IPV4_GET_RAW_IPDST_U32 (PacketGetICMPv4EmbIPv4 (p ))) &&
468470 f -> sp == p -> l4 .vars .icmpv4 .emb_sport && f -> dp == p -> l4 .vars .icmpv4 .emb_dport &&
469- f -> proto == ICMPV4_GET_EMB_PROTO (p ) &&
471+ f -> proto == ICMPV4_GET_EMB_PROTO (p ) && ( PacketIsIPv4 ( p ) == FLOW_IS_IPV4 ( f )) &&
470472 (f -> recursion_level == p -> recursion_level || g_recurlvl_mask == 0 ) &&
471473 CmpVlanIds (f -> vlan_id , p -> vlan_id ) && CmpLiveDevIds (p -> livedev_id , f -> livedev_id )) {
472474 return 1 ;
@@ -476,7 +478,7 @@ static inline int FlowCompareICMPv4(Flow *f, const Packet *p)
476478 } else if ((f -> dst .addr_data32 [0 ] == IPV4_GET_RAW_IPSRC_U32 (PacketGetICMPv4EmbIPv4 (p ))) &&
477479 (f -> src .addr_data32 [0 ] == IPV4_GET_RAW_IPDST_U32 (PacketGetICMPv4EmbIPv4 (p ))) &&
478480 f -> dp == p -> l4 .vars .icmpv4 .emb_sport && f -> sp == p -> l4 .vars .icmpv4 .emb_dport &&
479- f -> proto == ICMPV4_GET_EMB_PROTO (p ) &&
481+ f -> proto == ICMPV4_GET_EMB_PROTO (p ) && ( PacketIsIPv4 ( p ) == FLOW_IS_IPV4 ( f )) &&
480482 (f -> recursion_level == p -> recursion_level || g_recurlvl_mask == 0 ) &&
481483 CmpVlanIds (f -> vlan_id , p -> vlan_id ) &&
482484 CmpLiveDevIds (p -> livedev_id , f -> livedev_id )) {
@@ -509,7 +511,7 @@ static inline int FlowCompareESP(Flow *f, const Packet *p)
509511 const uint32_t * p_dst = p -> dst .address .address_un_data32 ;
510512
511513 return CmpAddrs (f_src , p_src ) && CmpAddrs (f_dst , p_dst ) && CmpFlowMisc (f , p ) &&
512- f -> esp .spi == ESP_GET_SPI (PacketGetESP (p )) &&
514+ ( PacketIsIPv4 ( p ) == FLOW_IS_IPV4 ( f )) && f -> esp .spi == ESP_GET_SPI (PacketGetESP (p )) &&
513515 CmpLiveDevIds (p -> livedev_id , f -> livedev_id );
514516}
515517
0 commit comments