diff --git a/src/packet_analysis/protocol/geneve/Geneve.cc b/src/packet_analysis/protocol/geneve/Geneve.cc index c74711c0cb..219c8ba7be 100644 --- a/src/packet_analysis/protocol/geneve/Geneve.cc +++ b/src/packet_analysis/protocol/geneve/Geneve.cc @@ -70,6 +70,9 @@ bool GeneveAnalyzer::AnalyzePacket(size_t len, const uint8_t* data, Packet* pack len -= hdr_size; data += hdr_size; + // We've successfully parsed everything, so we might as well confirm this. + AnalyzerConfirmation(packet->session); + int encap_index = 0; auto inner_packet = packet_analysis::IPTunnel::build_inner_packet( packet, &encap_index, nullptr, len, data, DLT_RAW, BifEnum::Tunnel::GENEVE, @@ -81,21 +84,13 @@ bool GeneveAnalyzer::AnalyzePacket(size_t len, const uint8_t* data, Packet* pack if ( len > hdr_size ) fwd_ret_val = ForwardPacket(len, data, inner_packet.get(), next_header); - if ( fwd_ret_val ) + if ( fwd_ret_val && geneve_packet ) { - AnalyzerConfirmation(packet->session); - - if ( geneve_packet && packet->session ) - { - EncapsulatingConn* ec = inner_packet->encap->At(encap_index); - if ( ec && ec->ip_hdr ) - inner_packet->session->EnqueueEvent(geneve_packet, nullptr, - packet->session->GetVal(), - ec->ip_hdr->ToPktHdrVal(), val_mgr->Count(vni)); - } + EncapsulatingConn* ec = inner_packet->encap->At(encap_index); + if ( ec && ec->ip_hdr ) + inner_packet->session->EnqueueEvent(geneve_packet, nullptr, packet->session->GetVal(), + ec->ip_hdr->ToPktHdrVal(), val_mgr->Count(vni)); } - else - AnalyzerViolation("Geneve invalid inner packet", packet->session); return fwd_ret_val; } diff --git a/src/packet_analysis/protocol/vxlan/VXLAN.cc b/src/packet_analysis/protocol/vxlan/VXLAN.cc index 227df039c6..ed8b93c4df 100644 --- a/src/packet_analysis/protocol/vxlan/VXLAN.cc +++ b/src/packet_analysis/protocol/vxlan/VXLAN.cc @@ -47,6 +47,9 @@ bool VXLAN_Analyzer::AnalyzePacket(size_t len, const uint8_t* data, Packet* pack len -= hdr_size; data += hdr_size; + // We've successfully parsed everything, so we might as well confirm this. + AnalyzerConfirmation(packet->session); + int encap_index = 0; auto inner_packet = packet_analysis::IPTunnel::build_inner_packet( packet, &encap_index, nullptr, len, data, DLT_RAW, BifEnum::Tunnel::VXLAN, @@ -56,18 +59,12 @@ bool VXLAN_Analyzer::AnalyzePacket(size_t len, const uint8_t* data, Packet* pack if ( len > hdr_size ) fwd_ret_val = ForwardPacket(len, data, inner_packet.get()); - if ( fwd_ret_val ) + if ( fwd_ret_val && vxlan_packet ) { - AnalyzerConfirmation(packet->session); - - if ( vxlan_packet && packet->session ) - { - EncapsulatingConn* ec = inner_packet->encap->At(encap_index); - if ( ec && ec->ip_hdr ) - inner_packet->session->EnqueueEvent(vxlan_packet, nullptr, - packet->session->GetVal(), - ec->ip_hdr->ToPktHdrVal(), val_mgr->Count(vni)); - } + EncapsulatingConn* ec = inner_packet->encap->At(encap_index); + if ( ec && ec->ip_hdr ) + inner_packet->session->EnqueueEvent(vxlan_packet, nullptr, packet->session->GetVal(), + ec->ip_hdr->ToPktHdrVal(), val_mgr->Count(vni)); } return fwd_ret_val;