diff --git a/src/fastnetmon.cpp b/src/fastnetmon.cpp index 81495961..08e0a9e6 100644 --- a/src/fastnetmon.cpp +++ b/src/fastnetmon.cpp @@ -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 ports_for_listen; + boost::split(ports_for_listen, netflow_ports_string, boost::is_any_of(","), boost::token_compress_on); + + std::vector 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; } diff --git a/src/fastnetmon_configuration_scheme.hpp b/src/fastnetmon_configuration_scheme.hpp index 25cfb255..21e337c3 100644 --- a/src/fastnetmon_configuration_scheme.hpp +++ b/src/fastnetmon_configuration_scheme.hpp @@ -19,6 +19,7 @@ class fastnetmon_configuration_t { bool netflow{ false }; std::vector netflow_ports{}; std::string netflow_host{ "0.0.0.0" }; + unsigned int netflow_sampling_ratio{ 1 }; // Clickhouse metrics bool clickhouse_metrics{ false }; diff --git a/src/netflow_plugin/ipfix_collector.cpp b/src/netflow_plugin/ipfix_collector.cpp index d76e77a4..328ce925 100644 --- a/src/netflow_plugin/ipfix_collector.cpp +++ b/src/netflow_plugin/ipfix_collector.cpp @@ -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; } diff --git a/src/netflow_plugin/netflow_collector.cpp b/src/netflow_plugin/netflow_collector.cpp index 9953dabd..f4249441 100644 --- a/src/netflow_plugin/netflow_collector.cpp +++ b/src/netflow_plugin/netflow_collector.cpp @@ -48,14 +48,12 @@ #include +#include "../fastnetmon_configuration_scheme.hpp" + // Get it from main programme extern log4cpp::Category& logger; -// Global configuration map -extern std::map 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 ports_for_listen; - boost::split(ports_for_listen, netflow_ports_string, boost::is_any_of(","), boost::token_compress_on); - - std::vector 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); diff --git a/src/netflow_plugin/netflow_v9_collector.cpp b/src/netflow_plugin/netflow_v9_collector.cpp index 06113c80..b8bef137 100644 --- a/src/netflow_plugin/netflow_v9_collector.cpp +++ b/src/netflow_plugin/netflow_v9_collector.cpp @@ -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; } diff --git a/src/sflow_plugin/sflow_collector.cpp b/src/sflow_plugin/sflow_collector.cpp index d0583bc9..6ac92bc4 100644 --- a/src/sflow_plugin/sflow_collector.cpp +++ b/src/sflow_plugin/sflow_collector.cpp @@ -30,9 +30,6 @@ extern log4cpp::Category& logger; #include "../fastnetmon_configuration_scheme.hpp" -// Global configuration map -extern std::map configuration_map; - extern fastnetmon_configuration_t fastnetmon_global_configuration; std::string raw_udp_packets_received_desc = "Number of raw packets received without any errors";