Skip to content

Commit cafd9af

Browse files
committed
++ cache
1 parent 619bf9b commit cafd9af

File tree

1 file changed

+35
-15
lines changed

1 file changed

+35
-15
lines changed

storage/cache.cpp

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

486484
bool 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

Comments
 (0)