net: get rid of static constructors

This commit is contained in:
Martin Stein 2018-04-04 15:41:04 +02:00 committed by Christian Helmuth
parent 29685f48ef
commit 6edf9ccf5a
18 changed files with 31 additions and 95 deletions

View File

@ -49,8 +49,7 @@ class Net::Ethernet_frame
ADDR_LEN = 6, /* MAC address length in bytes */ ADDR_LEN = 6, /* MAC address length in bytes */
}; };
static Mac_address broadcast() { return Mac_address((Genode::uint8_t)0xff); }
static const Mac_address BROADCAST; /* broadcast address */
private: private:

View File

@ -85,8 +85,8 @@ class Net::Ipv4_packet
ADDR_LEN = IPV4_ADDR_LEN, /* Ip address length in bytes */ ADDR_LEN = IPV4_ADDR_LEN, /* Ip address length in bytes */
}; };
static const Ipv4_address CURRENT; /* current network */ static Ipv4_address current() { return Ipv4_address((Genode::uint8_t)0x00); }
static const Ipv4_address BROADCAST; /* broadcast address */ static Ipv4_address broadcast() { return Ipv4_address((Genode::uint8_t)0xff); }
static Ipv4_address ip_from_string(const char *ip); static Ipv4_address ip_from_string(const char *ip);

View File

@ -43,9 +43,14 @@ namespace Net {
class Alloc_failed : Genode::Exception {}; class Alloc_failed : Genode::Exception {};
/**
/* reference MAC address */ * Reference MAC address
static Mac_address mac_addr_base; *
* 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)); } Mac_allocator() { Genode::memset(&_msbs, 0, sizeof(_msbs)); }

View File

@ -181,7 +181,7 @@ void Main::_handle_eth(void *const eth_base,
/* drop packet if ETH does not target us */ /* drop packet if ETH does not target us */
if (eth.dst() != _src_mac && if (eth.dst() != _src_mac &&
eth.dst() != Ethernet_frame::BROADCAST) eth.dst() != Ethernet_frame::broadcast())
{ {
if (_verbose) { if (_verbose) {
log("bad ETH destination"); } log("bad ETH destination"); }
@ -202,7 +202,7 @@ void Main::_handle_ip(Ethernet_frame &eth,
size_t const ip_size = eth_size - sizeof(Ethernet_frame); size_t const ip_size = eth_size - sizeof(Ethernet_frame);
Ipv4_packet &ip = *eth.data<Ipv4_packet>(ip_size); Ipv4_packet &ip = *eth.data<Ipv4_packet>(ip_size);
if (ip.dst() != _src_ip && if (ip.dst() != _src_ip &&
ip.dst() != Ipv4_packet::BROADCAST) ip.dst() != Ipv4_packet::broadcast())
{ {
if (_verbose) { if (_verbose) {
log("bad IP destination"); } log("bad IP destination"); }
@ -533,10 +533,4 @@ void Main::_send_ping(Duration)
} }
void Component::construct(Env &env) void Component::construct(Env &env) { static Main main(env); }
{
/* XXX execute constructors of global statics */
env.exec_static_constructors();
static Main main(env);
}

View File

@ -17,8 +17,6 @@
#include <net/ipv4.h> #include <net/ipv4.h>
#include <base/output.h> #include <base/output.h>
const Net::Mac_address Net::Ethernet_frame::BROADCAST(0xFF);
void Net::Ethernet_frame::print(Genode::Output &output) const void Net::Ethernet_frame::print(Genode::Output &output) const
{ {

View File

@ -147,7 +147,3 @@ Genode::uint16_t Ipv4_packet::calculate_checksum(Ipv4_packet const &packet)
+ host_to_big_endian(data[9]); + host_to_big_endian(data[9]);
return ~((0xFFFF & sum) + (sum >> 16)); 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);

View File

@ -238,6 +238,8 @@ class Net::Root : public Genode::Root_component<Net::Session_component>
Genode::Xml_node config) Genode::Xml_node config)
: Genode::Root_component<Session_component>(env.ep(), md_alloc), : Genode::Root_component<Session_component>(env.ep(), md_alloc),
_env(env), _nic(nic), _config(config) { } _env(env), _nic(nic), _config(config) { }
Mac_address &mac_addr_base() { return _mac_alloc.mac_addr_base; }
}; };
#endif /* _COMPONENT_H_ */ #endif /* _COMPONENT_H_ */

View File

@ -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 <nic_bridge/mac_allocator.h>
/**
* 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);

View File

@ -41,7 +41,7 @@ struct Main
try { try {
Nic::Mac_address mac; Nic::Mac_address mac;
config.xml().attribute("mac").value(&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)); sizeof(Net::Mac_allocator::mac_addr_base));
} catch(...) {} } catch(...) {}
} }
@ -65,10 +65,4 @@ struct Main
}; };
void Component::construct(Genode::Env &env) void Component::construct(Genode::Env &env) { static Main nic_bridge(env); }
{
/* XXX execute constructors of global statics */
env.exec_static_constructors();
static Main nic_bridge(env);
}

View File

@ -62,7 +62,7 @@ void Packet_handler::_link_state()
void Packet_handler::broadcast_to_clients(Ethernet_frame *eth, Genode::size_t size) void Packet_handler::broadcast_to_clients(Ethernet_frame *eth, Genode::size_t size)
{ {
/* check whether it's really a broadcast packet */ /* 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 */ /* iterate through the list of clients */
Mac_address_node *node = Mac_address_node *node =
_vlan.mac_list.first(); _vlan.mac_list.first();

View File

@ -1,4 +1,4 @@
TARGET = nic_bridge TARGET = nic_bridge
LIBS = base net 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) INC_DIR += $(PRG_DIR)

View File

@ -49,10 +49,4 @@ Main::Main(Env &env)
} }
void Component::construct(Env &env) void Component::construct(Env &env) { static Main main(env); }
{
/* XXX execute constructors of global statics */
env.exec_static_constructors();
static Main main(env);
}

View File

@ -125,7 +125,7 @@ Net::Root::Root(Entrypoint &ep,
_ep(ep), _router_mac(router_mac), _config(config), _buf_ram(buf_ram), _ep(ep), _router_mac(router_mac), _config(config), _buf_ram(buf_ram),
_region_map(region_map), _interfaces(interfaces) _region_map(region_map), _interfaces(interfaces)
{ {
Mac_allocator::mac_addr_base = config.mac_first(); _mac_alloc.mac_addr_base = config.mac_first();
} }

View File

@ -24,16 +24,12 @@
using namespace Net; using namespace Net;
using namespace Genode; using namespace Genode;
static Cstring const _udp_name("UDP"); char const *Net::tcp_name() { return "TCP"; }
static Cstring const _tcp_name("TCP"); char const *Net::udp_name() { return "UDP"; }
static Cstring const _icmp_name("ICMP"); char const *Net::icmp_name() { return "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; }
Cstring const &Net::l3_protocol_name(L3_protocol protocol) char const *Net::l3_protocol_name(L3_protocol protocol)
{ {
switch (protocol) { switch (protocol) {
case L3_protocol::TCP: return tcp_name(); case L3_protocol::TCP: return tcp_name();

View File

@ -24,10 +24,10 @@ namespace Net {
using L3_protocol = Ipv4_packet::Protocol; using L3_protocol = Ipv4_packet::Protocol;
Genode::Cstring const &tcp_name(); char const *tcp_name();
Genode::Cstring const &udp_name(); char const *udp_name();
Genode::Cstring const &icmp_name(); char const *icmp_name();
Genode::Cstring const &l3_protocol_name(L3_protocol protocol); char const *l3_protocol_name(L3_protocol protocol);
} }
#endif /* _L3_PROTOCOL_H_ */ #endif /* _L3_PROTOCOL_H_ */

View File

@ -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 <nic_bridge/mac_allocator.h>
Net::Mac_address Net::Mac_allocator::mac_addr_base(0x02);

View File

@ -104,9 +104,6 @@ void Net::Main::_handle_config()
void Component::construct(Env &env) void Component::construct(Env &env)
{ {
/* XXX execute constructors of global statics */
env.exec_static_constructors();
try { static Net::Main main(env); } try { static Net::Main main(env); }
catch (Net::Domain_tree::No_match) { catch (Net::Domain_tree::No_match) {

View File

@ -4,7 +4,7 @@ LIBS += base net
SRC_CC += arp_waiter.cc ip_rule.cc ipv4_address_prefix.cc SRC_CC += arp_waiter.cc ip_rule.cc ipv4_address_prefix.cc
SRC_CC += component.cc port_allocator.cc forward_rule.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 += uplink.cc interface.cc arp_cache.cc configuration.cc
SRC_CC += domain.cc l3_protocol.cc direct_rule.cc link.cc SRC_CC += domain.cc l3_protocol.cc direct_rule.cc link.cc
SRC_CC += transport_rule.cc leaf_rule.cc permit_rule.cc SRC_CC += transport_rule.cc leaf_rule.cc permit_rule.cc