@@ -85,9 +85,6 @@ void NHTFlowCache::get_parser_options(CacheOptParser& parser) noexcept
8585 m_new_flow_insert_index = m_line_size / 2 ;
8686 m_split_biflow = parser.m_split_biflow ;
8787 m_enable_fragmentation_cache = parser.m_enable_fragmentation_cache ;
88- #ifdef WITH_CTT
89- m_ctt_controller.init (parser.m_dev , 0 );
90- #endif /* WITH_CTT */
9188}
9289
9390void NHTFlowCache::allocate_table ()
@@ -131,8 +128,18 @@ void NHTFlowCache::init(const char *params)
131128 throw PluginError (" not enough memory for fragment cache allocation" );
132129 }
133130 }
131+ #ifdef WITH_CTT
132+ if (m_ctt_device.empty ()) {
133+ throw PluginError (" CTT device must be set before init" );
134+ }
135+ m_ctt_controller.init (m_ctt_device, m_ctt_comp_index);
136+ #endif /* WITH_CTT */
134137}
135138
139+ #ifdef WITH_CTT
140+ void NHTFlowCache::set_ctt (const std::string& device_name, uint16_t queue_id) override {}
141+ #endif /* WITH_CTT */
142+
136143void NHTFlowCache::close ()
137144{
138145 m_flows.clear ();
@@ -473,54 +480,30 @@ void NHTFlowCache::export_expired(const timeval& now)
473480 m_last_exported_on_timeout_index = (m_last_exported_on_timeout_index + m_new_flow_insert_index) & (m_cache_size - 1 );
474481}
475482
476- template <typename Type, size_t ArraySize>
477- static std::array<uint8_t , ArraySize> pointerToByteArray (const Type* pointer) noexcept
478- {
479- std::array<uint8_t , ArraySize> res;
480- std::copy_n (reinterpret_cast <const uint8_t *>(pointer), ArraySize, res.begin ());
481- return res;
482- }
483-
484483bool NHTFlowCache::create_hash_key (const Packet& packet)
485484{
486485 auto commonFieldsAssigner = [&](auto & key)
487486 {
488487 key.src_port = packet.src_port ;
489488 key.dst_port = packet.dst_port ;
490- key.ip_proto = packet.ip_proto ;
489+ key.proto = packet.ip_proto ;
491490 key.ip_version = packet.ip_version ;
492- // key.src_ip = packet.src_ip;
493- // key.dst_ip = packet.dst_ip;
494491 key.vlan_id = packet.vlan_id ;
495-
496492 };
497493 std::visit (commonFieldsAssigner, m_key);
498494 std::visit (commonFieldsAssigner, m_key_reversed);
499- std::visit ([](auto & key){std::swap (key.src_port , key.dst_port );}, m_key_reversed);
495+ std::visit ([&](auto & key){
496+ key.src_port = packet.dst_port ;
497+ key.dst_port = packet.src_port ;
498+ }, m_key_reversed);
500499 if (packet.ip_version == 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,
504- static_cast<uint16_t>(packet.vlan_id)};
505- m_key_reversed = FlowKeyv4{ packet.dst_port, packet.src_port, packet.ip_proto, IP::v4,
506- packet.dst_ip.v4,
507- packet.src_ip.v4,
508- static_cast<uint16_t>(packet.vlan_id)};*/
509500 std::get<FlowKeyv4>(m_key).src_ip = packet.src_ip .v4 ;
510501 std::get<FlowKeyv4>(m_key).dst_ip = packet.dst_ip .v4 ;
511502 std::get<FlowKeyv4>(m_key_reversed).src_ip = packet.dst_ip .v4 ;
512503 std::get<FlowKeyv4>(m_key_reversed).dst_ip = packet.src_ip .v4 ;
513504 return true ;
514505 }
515506 if (packet.ip_version == 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,
519- static_cast<uint16_t>(packet.vlan_id)};
520- m_key_reversed = FlowKeyv6{ packet.dst_port, packet.src_port, packet.ip_proto, IP::v6,
521- packet.dst_ip.v6,
522- packet.src_ip.v6,
523- static_cast<uint16_t>(packet.vlan_id)};*/
524507 std::memcpy (std::get<FlowKeyv6>(m_key).src_ip .data (), packet.src_ip .v6 , sizeof (packet.src_ip .v6 ));
525508 std::memcpy (std::get<FlowKeyv6>(m_key).dst_ip .data (), packet.dst_ip .v6 , sizeof (packet.dst_ip .v6 ));
526509 std::memcpy (std::get<FlowKeyv6>(m_key_reversed).src_ip .data (), packet.dst_ip .v6 , sizeof (packet.dst_ip .v6 ));
0 commit comments