nic_dump: link state and mac address

The NIC dump component didn't support forwarding of link states and link-state
signals until now. Furthermore, it now prints MAC address and link state
on session creation and on every link state change.

Ref #2490
This commit is contained in:
Martin Stein 2017-08-18 14:26:22 +02:00 committed by Christian Helmuth
parent 84ad50b527
commit b531a862bb
2 changed files with 22 additions and 11 deletions

View File

@ -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();
}

View File

@ -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<Session_component> _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; }
};