Skip to content

Commit 42d7993

Browse files
committed
++ cache
1 parent e6c7c96 commit 42d7993

File tree

2 files changed

+21
-32
lines changed

2 files changed

+21
-32
lines changed

storage/cache.cpp

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

9390
void 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+
136143
void 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-
484483
bool 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));

storage/cache.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ class NHTFlowCache : TelemetryUtils, public StoragePlugin
118118
FlowRecordStats m_flow_record_stats = {};
119119
FlowCacheStats m_cache_stats = {};
120120
#ifdef WITH_CTT
121+
void set_ctt_config(const std::string& device_name, unsigned comp_index) {
122+
m_ctt_device = device_name;
123+
m_ctt_comp_index = comp_index;
124+
}
125+
std::string m_ctt_device;
126+
unsigned m_ctt_comp_index;
121127
CttController m_ctt_controller;
122128
#endif /* WITH_CTT */
123129

0 commit comments

Comments
 (0)