@@ -174,9 +174,7 @@ void NHTFlowCache::finish()
174174 for (decltype (m_cache_size) i = 0 ; i < m_cache_size; i++) {
175175 if (!m_flow_table[i]->is_empty ()) {
176176 plugins_pre_export (m_flow_table[i]->m_flow );
177- // m_flow_table[i]->m_flow.end_reason = FLOW_END_FORCED;
178177 export_flow (i, FLOW_END_FORCED);
179- // m_cache_stats.expired++;
180178 }
181179 }
182180}
@@ -278,7 +276,7 @@ void NHTFlowCache::create_record(const Packet& packet, size_t flow_index, size_t
278276#ifdef WITH_CTT
279277void NHTFlowCache::try_to_add_flow_to_ctt (size_t flow_index) noexcept
280278{
281- if (m_flow_table[flow_index]->is_in_ctt ) {
279+ if (m_flow_table[flow_index]->is_in_ctt || m_flow_table[flow_index]-> m_flow . flow_hash_ctt == 0 ) {
282280 return ;
283281 }
284282 if (only_metadata_required (m_flow_table[flow_index]->m_flow )) {
@@ -485,26 +483,48 @@ static std::array<uint8_t, ArraySize> pointerToByteArray(const Type* pointer) no
485483
486484bool NHTFlowCache::create_hash_key (const Packet& packet)
487485{
486+ auto commonFieldsAssigner = [&](auto & key)
487+ {
488+ key.src_port = packet.src_port ;
489+ key.dst_port = packet.dst_port ;
490+ key.ip_proto = packet.ip_proto ;
491+ key.ip_version = packet.ip_version ;
492+ // key.src_ip = packet.src_ip;
493+ // key.dst_ip = packet.dst_ip;
494+ key.vlan_id = packet.vlan_id ;
495+
496+ };
497+ std::visit (commonFieldsAssigner, m_key);
498+ std::visit (commonFieldsAssigner, m_key_reversed);
499+ std::visit ([](auto & key){std::swap (key.src_port , key.dst_port );}, m_key_reversed);
488500 if (packet.ip_version == IP::v4) {
489- m_key = FlowKeyv4{ packet.src_port , packet.dst_port , packet.ip_proto , IP::v4,
490- pointerToByteArray< uint32_t , sizeof ( uint32_t )>(& packet.src_ip .v4 ) ,
491- pointerToByteArray< uint32_t , sizeof ( uint32_t )>(& packet.dst_ip .v4 ) ,
501+ /* m_key = FlowKeyv4{ packet.src_port, packet.dst_port, packet.ip_proto, IP::v4,
502+ packet.src_ip.v4,
503+ packet.dst_ip.v4,
492504 static_cast<uint16_t>(packet.vlan_id)};
493505 m_key_reversed = FlowKeyv4{ packet.dst_port, packet.src_port, packet.ip_proto, IP::v4,
494- pointerToByteArray<uint32_t , sizeof (uint32_t )>(&packet.dst_ip .v4 ),
495- pointerToByteArray<uint32_t , sizeof (uint32_t )>(&packet.src_ip .v4 ),
496- static_cast <uint16_t >(packet.vlan_id )};
506+ packet.dst_ip.v4,
507+ packet.src_ip.v4,
508+ static_cast<uint16_t>(packet.vlan_id)};*/
509+ std::get<FlowKeyv4>(m_key).src_ip = packet.src_ip .v4 ;
510+ std::get<FlowKeyv4>(m_key).dst_ip = packet.dst_ip .v4 ;
511+ std::get<FlowKeyv4>(m_key_reversed).src_ip = packet.dst_ip .v4 ;
512+ std::get<FlowKeyv4>(m_key_reversed).dst_ip = packet.src_ip .v4 ;
497513 return true ;
498514 }
499515 if (packet.ip_version == IP::v6) {
500- m_key = FlowKeyv6{ packet.src_port , packet.dst_port , packet.ip_proto , IP::v6,
501- pointerToByteArray< uint8_t , sizeof ( packet.src_ip .v6 )>(packet. src_ip . v6 ) ,
502- pointerToByteArray< uint8_t , sizeof ( packet.dst_ip .v6 )>(packet. dst_ip . v6 ) ,
516+ /* m_key = FlowKeyv6{ packet.src_port, packet.dst_port, packet.ip_proto, IP::v6,
517+ packet.src_ip.v6,
518+ packet.dst_ip.v6,
503519 static_cast<uint16_t>(packet.vlan_id)};
504520 m_key_reversed = FlowKeyv6{ packet.dst_port, packet.src_port, packet.ip_proto, IP::v6,
505- pointerToByteArray<uint8_t , sizeof (packet.dst_ip .v6 )>(packet.dst_ip .v6 ),
506- pointerToByteArray<uint8_t , sizeof (packet.src_ip .v6 )>(packet.src_ip .v6 ),
507- static_cast <uint16_t >(packet.vlan_id )};
521+ packet.dst_ip.v6,
522+ packet.src_ip.v6,
523+ static_cast<uint16_t>(packet.vlan_id)};*/
524+ std::memcpy (std::get<FlowKeyv6>(m_key).src_ip .data (), packet.src_ip .v6 , sizeof (packet.src_ip .v6 ));
525+ std::memcpy (std::get<FlowKeyv6>(m_key).dst_ip .data (), packet.dst_ip .v6 , sizeof (packet.dst_ip .v6 ));
526+ std::memcpy (std::get<FlowKeyv6>(m_key_reversed).src_ip .data (), packet.dst_ip .v6 , sizeof (packet.dst_ip .v6 ));
527+ std::memcpy (std::get<FlowKeyv6>(m_key_reversed).dst_ip .data (), packet.src_ip .v6 , sizeof (packet.src_ip .v6 ));
508528 return true ;
509529 }
510530 return false ;
0 commit comments