diff --git a/repos/os/src/server/nic_dump/component.cc b/repos/os/src/server/nic_dump/component.cc index 7eb727d91f..9222301bb0 100644 --- a/repos/os/src/server/nic_dump/component.cc +++ b/repos/os/src/server/nic_dump/component.cc @@ -70,7 +70,7 @@ Net::Session_component::Session_component(Allocator &alloc, timer, curr_time, config.attribute_value("time", false), _guarded_alloc), _uplink(env, config, timer, curr_time, alloc), - _mac(_uplink.mac_address()) + _link_state_handler(env.ep(), *this, &Session_component::_handle_link_state) { _tx.sigh_ready_to_ack(_sink_ack); _tx.sigh_packet_avail(_sink_submit); @@ -78,19 +78,26 @@ Net::Session_component::Session_component(Allocator &alloc, _rx.sigh_ready_to_submit(_source_submit); Interface::remote(_uplink); _uplink.Interface::remote(*this); + _uplink.link_state_sigh(_link_state_handler); + _print_state(); } -bool Session_component::link_state() +void Session_component::_print_state() { - warning("Session_component::link_state not implemented"); - return false; + log("\033[33m(new state)\033[0m \033[32mMAC address\033[0m ", mac_address(), + " \033[32mlink state\033[0m ", link_state()); } -void Session_component::link_state_sigh(Signal_context_capability sigh) +void Session_component::_handle_link_state() { - warning("Session_component::link_state_sigh not implemented"); + _print_state(); + if (!_link_state_sigh.valid()) { + warning("failed to forward signal"); + return; + } + Signal_transmitter(_link_state_sigh).submit(); } diff --git a/repos/os/src/server/nic_dump/component.h b/repos/os/src/server/nic_dump/component.h index 6f5bf50b05..8354d48a3c 100644 --- a/repos/os/src/server/nic_dump/component.h +++ b/repos/os/src/server/nic_dump/component.h @@ -73,8 +73,12 @@ class Net::Session_component : public Session_component_base, { private: - Uplink _uplink; - Mac_address _mac; + Uplink _uplink; + Genode::Signal_context_capability _link_state_sigh; + Genode::Signal_handler _link_state_handler; + + void _handle_link_state(); + void _print_state(); /******************** @@ -100,9 +104,9 @@ class Net::Session_component : public Session_component_base, ** Nic::Session ** ******************/ - Mac_address mac_address() { return _mac; } - bool link_state(); - void link_state_sigh(Genode::Signal_context_capability sigh); + Mac_address mac_address() { return _uplink.mac_address(); } + bool link_state() { return _uplink.link_state(); } + void link_state_sigh(Genode::Signal_context_capability sigh) { _link_state_sigh = sigh; } };