diff --git a/repos/os/src/server/nic_router/README b/repos/os/src/server/nic_router/README index 20b3141c72..d1e96ba507 100644 --- a/repos/os/src/server/nic_router/README +++ b/repos/os/src/server/nic_router/README @@ -435,22 +435,24 @@ However, there are still some differences that are visible to the user: Configuring reporting functionality ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The NIC router can be configured to periodically send reports. +The NIC router can be configured to send reports about its state. Configuration example (shows default values of attributes): - + If the 'report' tag is not available, no reports are send. The attributes of the 'report' tag: -'bytes' : Boolean : Whether to report sent bytes and received bytes per - domain -'config' : Boolean : Whether to report ipv4 interface and gateway per - domain -'interval_sec' : 1..3600 : Interval of sending reports in seconds +'bytes' : Boolean : Whether to report sent bytes and received bytes + per domain +'config' : Boolean : Whether to report IPv4 interface and gateway per + domain +'config_triggers' : Boolean : Wether to force a report each time the IPv4 + config changes +'interval_sec' : 1..3600 : Interval of sending reports in seconds Verbosity diff --git a/repos/os/src/server/nic_router/config.xsd b/repos/os/src/server/nic_router/config.xsd index 484a084394..298104eb9d 100644 --- a/repos/os/src/server/nic_router/config.xsd +++ b/repos/os/src/server/nic_router/config.xsd @@ -96,9 +96,10 @@ - - - + + + + diff --git a/repos/os/src/server/nic_router/domain.cc b/repos/os/src/server/nic_router/domain.cc index a39f3e5e59..571389ad83 100644 --- a/repos/os/src/server/nic_router/domain.cc +++ b/repos/os/src/server/nic_router/domain.cc @@ -94,6 +94,9 @@ void Domain::ip_config(Ipv4_config const &new_ip_config) interface.attach_to_domain_finish(); }); } + /* force report if configured */ + try { _config.report().handle_config(); } + catch (Pointer::Invalid) { } } diff --git a/repos/os/src/server/nic_router/report.cc b/repos/os/src/server/nic_router/report.cc index 326aafadcb..efdb7a2818 100644 --- a/repos/os/src/server/nic_router/report.cc +++ b/repos/os/src/server/nic_router/report.cc @@ -26,7 +26,8 @@ Net::Report::Report(Xml_node const node, Reporter &reporter) : _config(node.attribute_value("config", true)), - _bytes (node.attribute_value("bytes", true)), + _config_triggers(node.attribute_value("config_triggers", false)), + _bytes(node.attribute_value("bytes", true)), _reporter(reporter), _domains(domains), _timeout(timer, *this, &Report::_handle_report_timeout, @@ -36,7 +37,7 @@ Net::Report::Report(Xml_node const node, } -void Net::Report::_handle_report_timeout(Duration) +void Net::Report::_report() { try { Reporter::Xml_generator xml(_reporter, [&] () { @@ -48,3 +49,18 @@ void Net::Report::_handle_report_timeout(Duration) Genode::warning("Failed to generate report"); } } + + +void Net::Report::_handle_report_timeout(Duration) +{ + _report(); +} + + +void Net::Report::handle_config() +{ + if (!_config_triggers) { + return; } + + _report(); +} diff --git a/repos/os/src/server/nic_router/report.h b/repos/os/src/server/nic_router/report.h index 65fe48cc8e..397cead2d7 100644 --- a/repos/os/src/server/nic_router/report.h +++ b/repos/os/src/server/nic_router/report.h @@ -36,6 +36,7 @@ class Net::Report private: bool const _config; + bool const _config_triggers; bool const _bytes; Genode::Reporter &_reporter; Domain_tree &_domains; @@ -43,6 +44,8 @@ class Net::Report void _handle_report_timeout(Genode::Duration); + void _report(); + public: Report(Genode::Xml_node const node, @@ -50,6 +53,8 @@ class Net::Report Domain_tree &domains, Genode::Reporter &reporter); + void handle_config(); + /*************** ** Accessors **