From fe21ab48e020a3a6f76e44f13558ecc39e0afa46 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Thu, 24 May 2018 13:18:41 +0200 Subject: [PATCH] nic_router: fix link-state for uplink interface --- repos/os/src/server/nic_router/component.cc | 11 +++++++++++ repos/os/src/server/nic_router/component.h | 11 ++++++----- repos/os/src/server/nic_router/interface.cc | 11 ----------- repos/os/src/server/nic_router/interface.h | 15 +++++++++------ repos/os/src/server/nic_router/uplink.h | 5 +++-- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/repos/os/src/server/nic_router/component.cc b/repos/os/src/server/nic_router/component.cc index 89d64a72c..7504a1778 100644 --- a/repos/os/src/server/nic_router/component.cc +++ b/repos/os/src/server/nic_router/component.cc @@ -108,6 +108,17 @@ Net::Session_component::Session_component(Allocator &alloc, } +bool Net::Session_component::_link_state() +{ + try { + domain(); + return true; + } + catch (Pointer::Invalid) { } + return false; +} + + /********** ** Root ** **********/ diff --git a/repos/os/src/server/nic_router/component.h b/repos/os/src/server/nic_router/component.h index de411c07a..803edfde9 100644 --- a/repos/os/src/server/nic_router/component.h +++ b/repos/os/src/server/nic_router/component.h @@ -102,8 +102,9 @@ class Net::Session_component : private Session_component_base, ** Net::Interface ** ********************/ - Packet_stream_sink &_sink() { return *_tx.sink(); } - Packet_stream_source &_source() { return *_rx.source(); } + Packet_stream_sink &_sink() override { return *_tx.sink(); } + Packet_stream_source &_source() override { return *_rx.source(); } + bool _link_state() override; public: @@ -126,9 +127,9 @@ class Net::Session_component : private Session_component_base, ** Nic::Session ** ******************/ - Mac_address mac_address() override { return _mac; } - bool link_state() override { return Interface::link_state(); } - void link_state_sigh(Genode::Signal_context_capability sigh) override { Interface::link_state_sigh(sigh); } + Mac_address mac_address() override { return _mac; } + bool link_state() override { return _link_state(); } + void link_state_sigh(Genode::Signal_context_capability sigh) override { Interface::link_state_sigh(sigh); } }; diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 4bde1ecc8..8395b29fa 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -284,17 +284,6 @@ void Interface::attach_to_ip_config(Domain &domain, } -bool Interface::link_state() -{ - try { - _domain(); - return true; - } - catch (Pointer::Invalid) { } - return false; -} - - void Interface::link_state_sigh(Signal_context_capability sigh) { _link_state_sigh = sigh; diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h index 76d627a96..ac5492175 100644 --- a/repos/os/src/server/nic_router/interface.h +++ b/repos/os/src/server/nic_router/interface.h @@ -235,10 +235,6 @@ class Net::Interface : private Interface_list::Element void _ack_packet(Packet_descriptor const &pkt); - virtual Packet_stream_sink &_sink() = 0; - - virtual Packet_stream_source &_source() = 0; - void _send_alloc_pkt(Genode::Packet_descriptor &pkt, void * &pkt_base, Genode::size_t pkt_size); @@ -284,6 +280,15 @@ class Net::Interface : private Interface_list::Element Ipv4_packet const &req_ip, Icmp_packet::Code const code); + /******************* + ** Pure virtuals ** + *******************/ + + virtual Packet_stream_sink &_sink() = 0; + + virtual Packet_stream_source &_source() = 0; + + virtual bool _link_state() = 0; /*********************************** @@ -373,8 +378,6 @@ class Net::Interface : private Interface_list::Element void attach_to_remote_ip_config(); - bool link_state(); - void link_state_sigh(Genode::Signal_context_capability sigh); void init(); diff --git a/repos/os/src/server/nic_router/uplink.h b/repos/os/src/server/nic_router/uplink.h index b23b3c030..9ba8ce12a 100644 --- a/repos/os/src/server/nic_router/uplink.h +++ b/repos/os/src/server/nic_router/uplink.h @@ -71,8 +71,9 @@ class Net::Uplink : public Uplink_base, ** Net::Interface ** ********************/ - Packet_stream_sink &_sink() override { return *rx(); } - Packet_stream_source &_source() override { return *tx(); } + Packet_stream_sink &_sink() override { return *rx(); } + Packet_stream_source &_source() override { return *tx(); } + bool _link_state() override { return link_state(); } public: