From 6edf9ccf5abf77aa96253fc8c79ac3454b4c47fa Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 4 Apr 2018 15:41:04 +0200 Subject: [PATCH] net: get rid of static constructors --- repos/os/include/net/ethernet.h | 3 +-- repos/os/include/net/ipv4.h | 4 ++-- repos/os/include/nic_bridge/mac_allocator.h | 11 +++++++--- repos/os/src/app/ping/main.cc | 12 +++------- repos/os/src/lib/net/ethernet.cc | 2 -- repos/os/src/lib/net/ipv4.cc | 4 ---- repos/os/src/server/nic_bridge/component.h | 2 ++ .../os/src/server/nic_bridge/mac_allocator.cc | 22 ------------------- repos/os/src/server/nic_bridge/main.cc | 10 ++------- .../src/server/nic_bridge/packet_handler.cc | 2 +- repos/os/src/server/nic_bridge/target.mk | 2 +- repos/os/src/server/nic_dump/main.cc | 8 +------ repos/os/src/server/nic_router/component.cc | 2 +- repos/os/src/server/nic_router/l3_protocol.cc | 12 ++++------ repos/os/src/server/nic_router/l3_protocol.h | 8 +++---- .../os/src/server/nic_router/mac_allocator.cc | 17 -------------- repos/os/src/server/nic_router/main.cc | 3 --- repos/os/src/server/nic_router/target.mk | 2 +- 18 files changed, 31 insertions(+), 95 deletions(-) delete mode 100644 repos/os/src/server/nic_bridge/mac_allocator.cc delete mode 100644 repos/os/src/server/nic_router/mac_allocator.cc diff --git a/repos/os/include/net/ethernet.h b/repos/os/include/net/ethernet.h index df7c65cdd5..69ecf960f0 100644 --- a/repos/os/include/net/ethernet.h +++ b/repos/os/include/net/ethernet.h @@ -49,8 +49,7 @@ class Net::Ethernet_frame ADDR_LEN = 6, /* MAC address length in bytes */ }; - - static const Mac_address BROADCAST; /* broadcast address */ + static Mac_address broadcast() { return Mac_address((Genode::uint8_t)0xff); } private: diff --git a/repos/os/include/net/ipv4.h b/repos/os/include/net/ipv4.h index 4028b5ed06..e623a35fd1 100644 --- a/repos/os/include/net/ipv4.h +++ b/repos/os/include/net/ipv4.h @@ -85,8 +85,8 @@ class Net::Ipv4_packet ADDR_LEN = IPV4_ADDR_LEN, /* Ip address length in bytes */ }; - static const Ipv4_address CURRENT; /* current network */ - static const Ipv4_address BROADCAST; /* broadcast address */ + static Ipv4_address current() { return Ipv4_address((Genode::uint8_t)0x00); } + static Ipv4_address broadcast() { return Ipv4_address((Genode::uint8_t)0xff); } static Ipv4_address ip_from_string(const char *ip); diff --git a/repos/os/include/nic_bridge/mac_allocator.h b/repos/os/include/nic_bridge/mac_allocator.h index aa10cd6a17..a2213e5670 100644 --- a/repos/os/include/nic_bridge/mac_allocator.h +++ b/repos/os/include/nic_bridge/mac_allocator.h @@ -43,9 +43,14 @@ namespace Net { class Alloc_failed : Genode::Exception {}; - - /* reference MAC address */ - static Mac_address mac_addr_base; + /** + * Reference MAC address + * + * We take the range 02:02:02:02:02:XX for our MAC address + * allocator, it's likely, that we will have no clashes here. + * (e.g. Linux uses 02:00... for its tap-devices.) + */ + Mac_address mac_addr_base { Mac_address(0x02) }; Mac_allocator() { Genode::memset(&_msbs, 0, sizeof(_msbs)); } diff --git a/repos/os/src/app/ping/main.cc b/repos/os/src/app/ping/main.cc index 58f49a9e57..ffe6f219fb 100644 --- a/repos/os/src/app/ping/main.cc +++ b/repos/os/src/app/ping/main.cc @@ -181,7 +181,7 @@ void Main::_handle_eth(void *const eth_base, /* drop packet if ETH does not target us */ if (eth.dst() != _src_mac && - eth.dst() != Ethernet_frame::BROADCAST) + eth.dst() != Ethernet_frame::broadcast()) { if (_verbose) { log("bad ETH destination"); } @@ -202,7 +202,7 @@ void Main::_handle_ip(Ethernet_frame ð, size_t const ip_size = eth_size - sizeof(Ethernet_frame); Ipv4_packet &ip = *eth.data(ip_size); if (ip.dst() != _src_ip && - ip.dst() != Ipv4_packet::BROADCAST) + ip.dst() != Ipv4_packet::broadcast()) { if (_verbose) { log("bad IP destination"); } @@ -533,10 +533,4 @@ void Main::_send_ping(Duration) } -void Component::construct(Env &env) -{ - /* XXX execute constructors of global statics */ - env.exec_static_constructors(); - - static Main main(env); -} +void Component::construct(Env &env) { static Main main(env); } diff --git a/repos/os/src/lib/net/ethernet.cc b/repos/os/src/lib/net/ethernet.cc index 1c9c635ba0..1fee4275d6 100644 --- a/repos/os/src/lib/net/ethernet.cc +++ b/repos/os/src/lib/net/ethernet.cc @@ -17,8 +17,6 @@ #include #include -const Net::Mac_address Net::Ethernet_frame::BROADCAST(0xFF); - void Net::Ethernet_frame::print(Genode::Output &output) const { diff --git a/repos/os/src/lib/net/ipv4.cc b/repos/os/src/lib/net/ipv4.cc index 3717b41ed9..123428564b 100644 --- a/repos/os/src/lib/net/ipv4.cc +++ b/repos/os/src/lib/net/ipv4.cc @@ -147,7 +147,3 @@ Genode::uint16_t Ipv4_packet::calculate_checksum(Ipv4_packet const &packet) + host_to_big_endian(data[9]); return ~((0xFFFF & sum) + (sum >> 16)); } - - -const Ipv4_address Ipv4_packet::CURRENT((Genode::uint8_t)0x00); -const Ipv4_address Ipv4_packet::BROADCAST((Genode::uint8_t)0xFF); diff --git a/repos/os/src/server/nic_bridge/component.h b/repos/os/src/server/nic_bridge/component.h index 29b97b1e42..be354da7a3 100644 --- a/repos/os/src/server/nic_bridge/component.h +++ b/repos/os/src/server/nic_bridge/component.h @@ -238,6 +238,8 @@ class Net::Root : public Genode::Root_component Genode::Xml_node config) : Genode::Root_component(env.ep(), md_alloc), _env(env), _nic(nic), _config(config) { } + + Mac_address &mac_addr_base() { return _mac_alloc.mac_addr_base; } }; #endif /* _COMPONENT_H_ */ diff --git a/repos/os/src/server/nic_bridge/mac_allocator.cc b/repos/os/src/server/nic_bridge/mac_allocator.cc deleted file mode 100644 index b629f861a2..0000000000 --- a/repos/os/src/server/nic_bridge/mac_allocator.cc +++ /dev/null @@ -1,22 +0,0 @@ -/* - * \brief MAC-address allocator - * \author Stefan Kalkowski - * \date 2010-08-25 - */ - -/* - * Copyright (C) 2010-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -/* Genode includes */ -#include - -/** - * We take the range 02:02:02:02:02:XX for our MAC address allocator, - * it's likely, that we will have no clashes here. - * (e.g. Linux uses 02:00... for its tap-devices.) - */ -Net::Mac_address Net::Mac_allocator::mac_addr_base(0x02); diff --git a/repos/os/src/server/nic_bridge/main.cc b/repos/os/src/server/nic_bridge/main.cc index b6e2bda5ee..e622141312 100644 --- a/repos/os/src/server/nic_bridge/main.cc +++ b/repos/os/src/server/nic_bridge/main.cc @@ -41,7 +41,7 @@ struct Main try { Nic::Mac_address mac; config.xml().attribute("mac").value(&mac); - Genode::memcpy(&Net::Mac_allocator::mac_addr_base, &mac, + Genode::memcpy(&root.mac_addr_base(), &mac, sizeof(Net::Mac_allocator::mac_addr_base)); } catch(...) {} } @@ -65,10 +65,4 @@ struct Main }; -void Component::construct(Genode::Env &env) -{ - /* XXX execute constructors of global statics */ - env.exec_static_constructors(); - - static Main nic_bridge(env); -} +void Component::construct(Genode::Env &env) { static Main nic_bridge(env); } diff --git a/repos/os/src/server/nic_bridge/packet_handler.cc b/repos/os/src/server/nic_bridge/packet_handler.cc index 60904df0e7..2ffe2d7848 100644 --- a/repos/os/src/server/nic_bridge/packet_handler.cc +++ b/repos/os/src/server/nic_bridge/packet_handler.cc @@ -62,7 +62,7 @@ void Packet_handler::_link_state() void Packet_handler::broadcast_to_clients(Ethernet_frame *eth, Genode::size_t size) { /* check whether it's really a broadcast packet */ - if (eth->dst() == Ethernet_frame::BROADCAST) { + if (eth->dst() == Ethernet_frame::broadcast()) { /* iterate through the list of clients */ Mac_address_node *node = _vlan.mac_list.first(); diff --git a/repos/os/src/server/nic_bridge/target.mk b/repos/os/src/server/nic_bridge/target.mk index f486fcb248..56dea24ce7 100644 --- a/repos/os/src/server/nic_bridge/target.mk +++ b/repos/os/src/server/nic_bridge/target.mk @@ -1,4 +1,4 @@ TARGET = nic_bridge LIBS = base net -SRC_CC = component.cc mac_allocator.cc main.cc nic.cc packet_handler.cc +SRC_CC = component.cc main.cc nic.cc packet_handler.cc INC_DIR += $(PRG_DIR) diff --git a/repos/os/src/server/nic_dump/main.cc b/repos/os/src/server/nic_dump/main.cc index ceb3ce31cb..0f153df2e1 100644 --- a/repos/os/src/server/nic_dump/main.cc +++ b/repos/os/src/server/nic_dump/main.cc @@ -49,10 +49,4 @@ Main::Main(Env &env) } -void Component::construct(Env &env) -{ - /* XXX execute constructors of global statics */ - env.exec_static_constructors(); - - static Main main(env); -} +void Component::construct(Env &env) { static Main main(env); } diff --git a/repos/os/src/server/nic_router/component.cc b/repos/os/src/server/nic_router/component.cc index a38d9670c9..8b4fa3e84f 100644 --- a/repos/os/src/server/nic_router/component.cc +++ b/repos/os/src/server/nic_router/component.cc @@ -125,7 +125,7 @@ Net::Root::Root(Entrypoint &ep, _ep(ep), _router_mac(router_mac), _config(config), _buf_ram(buf_ram), _region_map(region_map), _interfaces(interfaces) { - Mac_allocator::mac_addr_base = config.mac_first(); + _mac_alloc.mac_addr_base = config.mac_first(); } diff --git a/repos/os/src/server/nic_router/l3_protocol.cc b/repos/os/src/server/nic_router/l3_protocol.cc index 88d48aad41..4abc94f881 100644 --- a/repos/os/src/server/nic_router/l3_protocol.cc +++ b/repos/os/src/server/nic_router/l3_protocol.cc @@ -24,16 +24,12 @@ using namespace Net; using namespace Genode; -static Cstring const _udp_name("UDP"); -static Cstring const _tcp_name("TCP"); -static Cstring const _icmp_name("ICMP"); - -Cstring const &Net::udp_name() { return _udp_name; } -Cstring const &Net::tcp_name() { return _tcp_name; } -Cstring const &Net::icmp_name() { return _icmp_name; } +char const *Net::tcp_name() { return "TCP"; } +char const *Net::udp_name() { return "UDP"; } +char const *Net::icmp_name() { return "ICMP"; } -Cstring const &Net::l3_protocol_name(L3_protocol protocol) +char const *Net::l3_protocol_name(L3_protocol protocol) { switch (protocol) { case L3_protocol::TCP: return tcp_name(); diff --git a/repos/os/src/server/nic_router/l3_protocol.h b/repos/os/src/server/nic_router/l3_protocol.h index e5b1cd1535..0d2535edc3 100644 --- a/repos/os/src/server/nic_router/l3_protocol.h +++ b/repos/os/src/server/nic_router/l3_protocol.h @@ -24,10 +24,10 @@ namespace Net { using L3_protocol = Ipv4_packet::Protocol; - Genode::Cstring const &tcp_name(); - Genode::Cstring const &udp_name(); - Genode::Cstring const &icmp_name(); - Genode::Cstring const &l3_protocol_name(L3_protocol protocol); + char const *tcp_name(); + char const *udp_name(); + char const *icmp_name(); + char const *l3_protocol_name(L3_protocol protocol); } #endif /* _L3_PROTOCOL_H_ */ diff --git a/repos/os/src/server/nic_router/mac_allocator.cc b/repos/os/src/server/nic_router/mac_allocator.cc deleted file mode 100644 index 2839a4ec89..0000000000 --- a/repos/os/src/server/nic_router/mac_allocator.cc +++ /dev/null @@ -1,17 +0,0 @@ -/* - * \brief MAC-address allocator - * \author Martin Stein - * \date 2016-10-24 - */ - -/* - * Copyright (C) 2016-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -/* Genode includes */ -#include - -Net::Mac_address Net::Mac_allocator::mac_addr_base(0x02); diff --git a/repos/os/src/server/nic_router/main.cc b/repos/os/src/server/nic_router/main.cc index 9acd974490..277b540b35 100644 --- a/repos/os/src/server/nic_router/main.cc +++ b/repos/os/src/server/nic_router/main.cc @@ -104,9 +104,6 @@ void Net::Main::_handle_config() void Component::construct(Env &env) { - /* XXX execute constructors of global statics */ - env.exec_static_constructors(); - try { static Net::Main main(env); } catch (Net::Domain_tree::No_match) { diff --git a/repos/os/src/server/nic_router/target.mk b/repos/os/src/server/nic_router/target.mk index 31a6d38633..cde2674472 100644 --- a/repos/os/src/server/nic_router/target.mk +++ b/repos/os/src/server/nic_router/target.mk @@ -4,7 +4,7 @@ LIBS += base net SRC_CC += arp_waiter.cc ip_rule.cc ipv4_address_prefix.cc SRC_CC += component.cc port_allocator.cc forward_rule.cc -SRC_CC += nat_rule.cc mac_allocator.cc main.cc ipv4_config.cc +SRC_CC += nat_rule.cc main.cc ipv4_config.cc SRC_CC += uplink.cc interface.cc arp_cache.cc configuration.cc SRC_CC += domain.cc l3_protocol.cc direct_rule.cc link.cc SRC_CC += transport_rule.cc leaf_rule.cc permit_rule.cc