Switched Netflow plugin to new unified configuration storage

This commit is contained in:
Pavel Odintsov 2024-07-16 14:10:30 +03:00
parent 9ebb39c0d9
commit 64a4d3090b
6 changed files with 43 additions and 48 deletions

View File

@ -823,6 +823,39 @@ bool load_configuration_file() {
}
}
if (configuration_map.count("netflow_host") != 0) {
fastnetmon_global_configuration.netflow_host = configuration_map["netflow_host"];
}
// Netflow ports
std::string netflow_ports_string = "";
if (configuration_map.count("netflow_port") != 0) {
netflow_ports_string = configuration_map["netflow_port"];
}
if (configuration_map.count("netflow_sampling_ratio") != 0) {
fastnetmon_global_configuration.netflow_sampling_ratio = convert_string_to_integer(configuration_map["netflow_sampling_ratio"]);
logger << log4cpp::Priority::INFO << "Using custom sampling ratio for Netflow v9 and IPFIX: " << fastnetmon_global_configuration.netflow_sampling_ratio;
}
std::vector<std::string> ports_for_listen;
boost::split(ports_for_listen, netflow_ports_string, boost::is_any_of(","), boost::token_compress_on);
std::vector<unsigned int> netflow_ports;
for (auto port : ports_for_listen) {
unsigned int netflow_port = convert_string_to_integer(port);
if (netflow_port == 0) {
logger << log4cpp::Priority::ERROR << "Cannot parse Netflow port: " << port;
continue;
}
fastnetmon_global_configuration.netflow_ports.push_back(netflow_port);
}
if (configuration_map.count("exabgp_announce_whole_subnet") != 0) {
exabgp_announce_whole_subnet = configuration_map["exabgp_announce_whole_subnet"] == "on" ? true : false;
}

View File

@ -19,6 +19,7 @@ class fastnetmon_configuration_t {
bool netflow{ false };
std::vector<unsigned int> netflow_ports{};
std::string netflow_host{ "0.0.0.0" };
unsigned int netflow_sampling_ratio{ 1 };
// Clickhouse metrics
bool clickhouse_metrics{ false };

View File

@ -1163,7 +1163,7 @@ bool ipfix_flowset_to_store(const uint8_t* pkt,
if (itr == ipfix_sampling_rates.end()) {
// Use global value
packet.sample_ratio = netflow_sampling_ratio;
packet.sample_ratio = fastnetmon_global_configuration.netflow_sampling_ratio;
} else {
packet.sample_ratio = itr->second;
}

View File

@ -48,14 +48,12 @@
#include <boost/algorithm/string.hpp>
#include "../fastnetmon_configuration_scheme.hpp"
// Get it from main programme
extern log4cpp::Category& logger;
// Global configuration map
extern std::map<std::string, std::string> configuration_map;
// Sampling rate for Netflow v9 and IPFIX
unsigned int netflow_sampling_ratio = 1;
extern fastnetmon_configuration_t fastnetmon_global_configuration;
// Sampling rates extracted from Netflow
std::mutex netflow9_sampling_rates_mutex;
@ -1020,50 +1018,16 @@ void start_netflow_collection(process_packet_pointer func_ptr) {
logger << log4cpp::Priority::INFO << "netflow plugin started";
netflow_process_func_ptr = func_ptr;
// By default we listen on IPv4
std::string netflow_host = "0.0.0.0";
// If we have custom port use it from configuration
if (configuration_map.count("netflow_host") != 0) {
netflow_host = configuration_map["netflow_host"];
}
std::string netflow_ports_string = "";
if (configuration_map.count("netflow_port") != 0) {
netflow_ports_string = configuration_map["netflow_port"];
}
if (configuration_map.count("netflow_sampling_ratio") != 0) {
netflow_sampling_ratio = convert_string_to_integer(configuration_map["netflow_sampling_ratio"]);
logger << log4cpp::Priority::INFO << "Using custom sampling ratio for Netflow v9 and IPFIX: " << netflow_sampling_ratio;
}
std::vector<std::string> ports_for_listen;
boost::split(ports_for_listen, netflow_ports_string, boost::is_any_of(","), boost::token_compress_on);
std::vector<unsigned int> netflow_ports;
for (auto port : ports_for_listen) {
unsigned int netflow_port = convert_string_to_integer(port);
if (netflow_port == 0) {
logger << log4cpp::Priority::ERROR << "Cannot parse Netflow port: " << port;
continue;
}
netflow_ports.push_back(netflow_port);
}
boost::thread_group netflow_collector_threads;
logger << log4cpp::Priority::INFO << "Netflow plugin will listen on " << netflow_ports.size() << " ports";
logger << log4cpp::Priority::INFO << "Netflow plugin will listen on " << fastnetmon_global_configuration.netflow_ports.size() << " ports";
for (const auto& netflow_port : netflow_ports) {
for (const auto& netflow_port : fastnetmon_global_configuration.netflow_ports) {
bool reuse_port = false;
auto netflow_processing_thread = new boost::thread(start_netflow_collector, netflow_host, netflow_port, reuse_port);
auto netflow_processing_thread = new boost::thread(start_netflow_collector,
fastnetmon_global_configuration.netflow_host, netflow_port, reuse_port);
// Set unique name
std::string thread_name = "netflow_" + std::to_string(netflow_port);

View File

@ -1252,7 +1252,7 @@ void netflow9_flowset_to_store(const uint8_t* pkt,
if (itr == netflow9_sampling_rates.end()) {
// Use global value
packet.sample_ratio = netflow_sampling_ratio;
packet.sample_ratio = fastnetmon_global_configuration.netflow_sampling_ratio;
} else {
packet.sample_ratio = itr->second;
}

View File

@ -30,9 +30,6 @@ extern log4cpp::Category& logger;
#include "../fastnetmon_configuration_scheme.hpp"
// Global configuration map
extern std::map<std::string, std::string> configuration_map;
extern fastnetmon_configuration_t fastnetmon_global_configuration;
std::string raw_udp_packets_received_desc = "Number of raw packets received without any errors";