mirror of
https://github.com/pavel-odintsov/fastnetmon.git
synced 2024-09-21 10:27:13 +00:00
Switched Netflow plugin to new unified configuration storage
This commit is contained in:
parent
9ebb39c0d9
commit
64a4d3090b
@ -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) {
|
if (configuration_map.count("exabgp_announce_whole_subnet") != 0) {
|
||||||
exabgp_announce_whole_subnet = configuration_map["exabgp_announce_whole_subnet"] == "on" ? true : false;
|
exabgp_announce_whole_subnet = configuration_map["exabgp_announce_whole_subnet"] == "on" ? true : false;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ class fastnetmon_configuration_t {
|
|||||||
bool netflow{ false };
|
bool netflow{ false };
|
||||||
std::vector<unsigned int> netflow_ports{};
|
std::vector<unsigned int> netflow_ports{};
|
||||||
std::string netflow_host{ "0.0.0.0" };
|
std::string netflow_host{ "0.0.0.0" };
|
||||||
|
unsigned int netflow_sampling_ratio{ 1 };
|
||||||
|
|
||||||
// Clickhouse metrics
|
// Clickhouse metrics
|
||||||
bool clickhouse_metrics{ false };
|
bool clickhouse_metrics{ false };
|
||||||
|
@ -1163,7 +1163,7 @@ bool ipfix_flowset_to_store(const uint8_t* pkt,
|
|||||||
|
|
||||||
if (itr == ipfix_sampling_rates.end()) {
|
if (itr == ipfix_sampling_rates.end()) {
|
||||||
// Use global value
|
// Use global value
|
||||||
packet.sample_ratio = netflow_sampling_ratio;
|
packet.sample_ratio = fastnetmon_global_configuration.netflow_sampling_ratio;
|
||||||
} else {
|
} else {
|
||||||
packet.sample_ratio = itr->second;
|
packet.sample_ratio = itr->second;
|
||||||
}
|
}
|
||||||
|
@ -48,14 +48,12 @@
|
|||||||
|
|
||||||
#include <boost/algorithm/string.hpp>
|
#include <boost/algorithm/string.hpp>
|
||||||
|
|
||||||
|
#include "../fastnetmon_configuration_scheme.hpp"
|
||||||
|
|
||||||
// Get it from main programme
|
// Get it from main programme
|
||||||
extern log4cpp::Category& logger;
|
extern log4cpp::Category& logger;
|
||||||
|
|
||||||
// Global configuration map
|
extern fastnetmon_configuration_t fastnetmon_global_configuration;
|
||||||
extern std::map<std::string, std::string> configuration_map;
|
|
||||||
|
|
||||||
// Sampling rate for Netflow v9 and IPFIX
|
|
||||||
unsigned int netflow_sampling_ratio = 1;
|
|
||||||
|
|
||||||
// Sampling rates extracted from Netflow
|
// Sampling rates extracted from Netflow
|
||||||
std::mutex netflow9_sampling_rates_mutex;
|
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";
|
logger << log4cpp::Priority::INFO << "netflow plugin started";
|
||||||
|
|
||||||
netflow_process_func_ptr = func_ptr;
|
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;
|
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;
|
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
|
// Set unique name
|
||||||
std::string thread_name = "netflow_" + std::to_string(netflow_port);
|
std::string thread_name = "netflow_" + std::to_string(netflow_port);
|
||||||
|
@ -1252,7 +1252,7 @@ void netflow9_flowset_to_store(const uint8_t* pkt,
|
|||||||
|
|
||||||
if (itr == netflow9_sampling_rates.end()) {
|
if (itr == netflow9_sampling_rates.end()) {
|
||||||
// Use global value
|
// Use global value
|
||||||
packet.sample_ratio = netflow_sampling_ratio;
|
packet.sample_ratio = fastnetmon_global_configuration.netflow_sampling_ratio;
|
||||||
} else {
|
} else {
|
||||||
packet.sample_ratio = itr->second;
|
packet.sample_ratio = itr->second;
|
||||||
}
|
}
|
||||||
|
@ -30,9 +30,6 @@ extern log4cpp::Category& logger;
|
|||||||
|
|
||||||
#include "../fastnetmon_configuration_scheme.hpp"
|
#include "../fastnetmon_configuration_scheme.hpp"
|
||||||
|
|
||||||
// Global configuration map
|
|
||||||
extern std::map<std::string, std::string> configuration_map;
|
|
||||||
|
|
||||||
extern fastnetmon_configuration_t fastnetmon_global_configuration;
|
extern fastnetmon_configuration_t fastnetmon_global_configuration;
|
||||||
|
|
||||||
std::string raw_udp_packets_received_desc = "Number of raw packets received without any errors";
|
std::string raw_udp_packets_received_desc = "Number of raw packets received without any errors";
|
||||||
|
Loading…
Reference in New Issue
Block a user