From d08e347e5e6606199627d600039786df5bbe4e6d Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Wed, 1 Nov 2023 10:13:51 +0100 Subject: [PATCH] build_inner_connection: Avoid one extra Init() Packet::Init() is not so cheap as one might think: It computes a timestamp from { 0, 0 } using double division. Just avoid this by not initializing an empty Packet. --- src/packet_analysis/protocol/iptunnel/IPTunnel.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/packet_analysis/protocol/iptunnel/IPTunnel.cc b/src/packet_analysis/protocol/iptunnel/IPTunnel.cc index 809212cfd2..9bb66e2a33 100644 --- a/src/packet_analysis/protocol/iptunnel/IPTunnel.cc +++ b/src/packet_analysis/protocol/iptunnel/IPTunnel.cc @@ -152,8 +152,6 @@ std::unique_ptr build_inner_packet(Packet* outer_pkt, int* encap_index, std::shared_ptr encap_stack, uint32_t inner_cap_len, const u_char* data, int link_type, BifEnum::Tunnel::Type tunnel_type, const Tag& analyzer_tag) { - auto inner_pkt = std::make_unique(); - assert(outer_pkt->cap_len >= inner_cap_len); assert(outer_pkt->len >= outer_pkt->cap_len - inner_cap_len); @@ -169,7 +167,8 @@ std::unique_ptr build_inner_packet(Packet* outer_pkt, int* encap_index, pkt_timeval ts; ts.tv_sec = static_cast(run_state::current_timestamp); ts.tv_usec = static_cast((run_state::current_timestamp - static_cast(ts.tv_sec)) * 1000000); - inner_pkt->Init(link_type, &ts, inner_cap_len, inner_wire_len, data); + + auto inner_pkt = std::make_unique(link_type, &ts, inner_cap_len, inner_wire_len, data); *encap_index = 0; if ( outer_pkt->session ) {