diff --git a/repos/dde_ipxe/include/dde_ipxe/nic.h b/repos/dde_ipxe/include/dde_ipxe/nic.h
index 470227d606..555e6d0cf7 100644
--- a/repos/dde_ipxe/include/dde_ipxe/nic.h
+++ b/repos/dde_ipxe/include/dde_ipxe/nic.h
@@ -70,7 +70,7 @@ extern int dde_ipxe_nic_tx(unsigned if_index, const char *packet, unsigned packe
*
* \return 0 on success, -1 otherwise
*/
-extern int dde_ipxe_nic_get_mac_addr(unsigned if_index, char *out_mac_addr);
+extern int dde_ipxe_nic_get_mac_addr(unsigned if_index, unsigned char *out_mac_addr);
/**
* Get current link-state of device
diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/nic.c b/repos/dde_ipxe/src/lib/dde_ipxe/nic.c
index de53ff9ef6..42b43dc027 100644
--- a/repos/dde_ipxe/src/lib/dde_ipxe/nic.c
+++ b/repos/dde_ipxe/src/lib/dde_ipxe/nic.c
@@ -271,7 +271,7 @@ int dde_ipxe_nic_tx(unsigned if_index, const char *packet, unsigned packet_len)
}
-int dde_ipxe_nic_get_mac_addr(unsigned if_index, char *out_mac_addr)
+int dde_ipxe_nic_get_mac_addr(unsigned if_index, unsigned char *out_mac_addr)
{
if (if_index != 1)
return -1;
diff --git a/repos/os/include/net/arp.h b/repos/os/include/net/arp.h
index 229541ef70..daf9279157 100644
--- a/repos/os/include/net/arp.h
+++ b/repos/os/include/net/arp.h
@@ -198,26 +198,26 @@ class Net::Arp_packet
/**
* \return source MAC address.
*/
- Ethernet_frame::Mac_address src_mac() {
- return Ethernet_frame::Mac_address(&_src_mac_addr); }
+ Mac_address src_mac() {
+ return Mac_address(&_src_mac_addr); }
/**
* \return source IP address.
*/
- Ipv4_packet::Ipv4_address src_ip() {
- return Ipv4_packet::Ipv4_address(&_src_ip_addr); }
+ Ipv4_address src_ip() {
+ return Ipv4_address(&_src_ip_addr); }
/**
* \return destination MAC address.
*/
- Ethernet_frame::Mac_address dst_mac() {
- return Ethernet_frame::Mac_address(&_dst_mac_addr); }
+ Mac_address dst_mac() {
+ return Mac_address(&_dst_mac_addr); }
/**
* \return destination IP address.
*/
- Ipv4_packet::Ipv4_address dst_ip() {
- return Ipv4_packet::Ipv4_address(&_dst_ip_addr); }
+ Ipv4_address dst_ip() {
+ return Ipv4_address(&_dst_ip_addr); }
/******************************
@@ -237,7 +237,7 @@ class Net::Arp_packet
*
* \param src_mac_addr MAC address to set.
*/
- void src_mac(Ethernet_frame::Mac_address src_mac_addr) {
+ void src_mac(Mac_address src_mac_addr) {
src_mac_addr.copy(&_src_mac_addr); }
/**
@@ -245,7 +245,7 @@ class Net::Arp_packet
*
* \param src_ip_addr IP address to set.
*/
- void src_ip(Ipv4_packet::Ipv4_address src_ip_addr) {
+ void src_ip(Ipv4_address src_ip_addr) {
src_ip_addr.copy(&_src_ip_addr); }
/**
@@ -253,7 +253,7 @@ class Net::Arp_packet
*
* \param src_mac_addr MAC address to set.
*/
- void dst_mac(Ethernet_frame::Mac_address dst_mac_addr) {
+ void dst_mac(Mac_address dst_mac_addr) {
dst_mac_addr.copy(&_dst_mac_addr); }
/**
@@ -261,7 +261,7 @@ class Net::Arp_packet
*
* \param src_ip_addr IP address to set.
*/
- void dst_ip(Ipv4_packet::Ipv4_address dst_ip_addr) {
+ void dst_ip(Ipv4_address dst_ip_addr) {
dst_ip_addr.copy(&_dst_ip_addr); }
diff --git a/repos/os/include/net/dhcp.h b/repos/os/include/net/dhcp.h
index da492d0b01..603b48b3ac 100644
--- a/repos/os/include/net/dhcp.h
+++ b/repos/os/include/net/dhcp.h
@@ -195,17 +195,17 @@ class Net::Dhcp_packet
bool broadcast() { return _flags & BROADCAST; }
- Ipv4_packet::Ipv4_address ciaddr() {
- return Ipv4_packet::Ipv4_address(&_ciaddr); }
- Ipv4_packet::Ipv4_address yiaddr() {
- return Ipv4_packet::Ipv4_address(&_yiaddr); }
- Ipv4_packet::Ipv4_address siaddr() {
- return Ipv4_packet::Ipv4_address(&_siaddr); }
- Ipv4_packet::Ipv4_address giaddr() {
- return Ipv4_packet::Ipv4_address(&_giaddr); }
+ Ipv4_address ciaddr() {
+ return Ipv4_address(&_ciaddr); }
+ Ipv4_address yiaddr() {
+ return Ipv4_address(&_yiaddr); }
+ Ipv4_address siaddr() {
+ return Ipv4_address(&_siaddr); }
+ Ipv4_address giaddr() {
+ return Ipv4_address(&_giaddr); }
- Ethernet_frame::Mac_address client_mac() {
- return Ethernet_frame::Mac_address(&_chaddr); }
+ Mac_address client_mac() {
+ return Mac_address(&_chaddr); }
const char* server_name() { return (const char*) &_sname; }
const char* file() { return (const char*) &_file; }
@@ -239,16 +239,16 @@ class Net::Dhcp_packet
void broadcast(bool broadcast) {
_flags = broadcast ? BROADCAST : 0; }
- void ciaddr(Ipv4_packet::Ipv4_address ciaddr) {
+ void ciaddr(Ipv4_address ciaddr) {
ciaddr.copy(&_ciaddr); }
- void yiaddr(Ipv4_packet::Ipv4_address yiaddr) {
+ void yiaddr(Ipv4_address yiaddr) {
yiaddr.copy(&_yiaddr); }
- void siaddr(Ipv4_packet::Ipv4_address siaddr) {
+ void siaddr(Ipv4_address siaddr) {
siaddr.copy(&_siaddr); }
- void giaddr(Ipv4_packet::Ipv4_address giaddr) {
+ void giaddr(Ipv4_address giaddr) {
giaddr.copy(&_giaddr); }
- void client_mac(Ethernet_frame::Mac_address mac) {
+ void client_mac(Mac_address mac) {
mac.copy(&_chaddr); }
diff --git a/repos/os/include/net/ethernet.h b/repos/os/include/net/ethernet.h
index fe67f0832a..0bc45834ff 100644
--- a/repos/os/include/net/ethernet.h
+++ b/repos/os/include/net/ethernet.h
@@ -16,11 +16,10 @@
/* Genode includes */
#include
-#include
#include
#include
-#include
+#include
namespace Net { class Ethernet_frame; }
@@ -44,21 +43,6 @@ class Net::Ethernet_frame
ADDR_LEN = 6, /* MAC address length in bytes */
};
- struct Mac_address : Network_address
- {
- using Network_address::Network_address;
-
- void print(Genode::Output &output) const
- {
- using namespace Genode;
-
- for (unsigned i = 0; i < ADDR_LEN; i++) {
- Genode::print(output, Hex(addr[i], Hex::OMIT_PREFIX,
- Hex::PAD));
- if (i < ADDR_LEN-1) output.out_char(':');
- }
- }
- };
static const Mac_address BROADCAST; /* broadcast address */
diff --git a/repos/os/include/net/ipv4.h b/repos/os/include/net/ipv4.h
index fca7e0a541..cc4a10cb71 100644
--- a/repos/os/include/net/ipv4.h
+++ b/repos/os/include/net/ipv4.h
@@ -16,13 +16,18 @@
/* Genode */
#include
-#include
#include
#include
#include
-namespace Net { class Ipv4_packet; }
+namespace Net
+{
+ enum { IPV4_ADDR_LEN = 4 };
+ typedef Network_address Ipv4_address;
+
+ class Ipv4_packet;
+}
/**
@@ -51,20 +56,7 @@ class Net::Ipv4_packet
public:
enum Size {
- ADDR_LEN = 4, /* Ip address length in bytes */
- };
-
- struct Ipv4_address : Network_address
- {
- using Network_address::Network_address;
-
- void print(Genode::Output &output) const
- {
- for (unsigned i = 0; i < ADDR_LEN; i++) {
- Genode::print(output, (unsigned) addr[i]);
- if (i < ADDR_LEN-1) output.out_char('.');
- }
- }
+ ADDR_LEN = IPV4_ADDR_LEN, /* Ip address length in bytes */
};
static const Ipv4_address CURRENT; /* current network */
diff --git a/repos/os/include/net/mac_address.h b/repos/os/include/net/mac_address.h
new file mode 100644
index 0000000000..1e2df63272
--- /dev/null
+++ b/repos/os/include/net/mac_address.h
@@ -0,0 +1,22 @@
+/*
+ * \brief Ethernet network or MAC address
+ * \author Martin Stein
+ * \date 2016-06-22
+ */
+
+/*
+ * Copyright (C) 2016 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#ifndef _NET__MAC_ADDRESS_H_
+#define _NET__MAC_ADDRESS_H_
+
+/* OS includes */
+#include
+
+namespace Net { using Mac_address = Net::Network_address<6, ':', true>; }
+
+#endif /* _NET__MAC_ADDRESS_H_ */
diff --git a/repos/os/include/net/netaddress.h b/repos/os/include/net/netaddress.h
index 7124e121b1..5f0bfd1260 100644
--- a/repos/os/include/net/netaddress.h
+++ b/repos/os/include/net/netaddress.h
@@ -17,14 +17,15 @@
/* Genode */
#include
#include
+#include
-namespace Net { template class Network_address; }
+namespace Net { template class Network_address; }
/**
* Generic form of a network address.
*/
-template
+template
struct Net::Network_address
{
Genode::uint8_t addr[LEN];
@@ -47,6 +48,16 @@ struct Net::Network_address
void copy(void *dst) { Genode::memcpy(dst, addr, LEN); }
+ void print(Genode::Output &output) const
+ {
+ using namespace Genode;
+ for (unsigned i = 0; i < LEN; i++) {
+ if (!HEX) { Genode::print(output, (unsigned) addr[i]); }
+ else { Genode::print(output, Hex(addr[i], Hex::OMIT_PREFIX, Hex::PAD)); }
+ if (i < LEN - 1) output.out_char(DELIM);
+ }
+ }
+
/***************
** Operators **
diff --git a/repos/os/include/net/udp.h b/repos/os/include/net/udp.h
index ba482a2ea2..6646925ce1 100644
--- a/repos/os/include/net/udp.h
+++ b/repos/os/include/net/udp.h
@@ -110,8 +110,8 @@ class Net::Udp_packet
* | 4 bytes | 4 bytes | 1 byte | 1 byte | 2 bytes |
* --------------------------------------------------------------
*/
- void calc_checksum(Ipv4_packet::Ipv4_address src,
- Ipv4_packet::Ipv4_address dst)
+ void calc_checksum(Ipv4_address src,
+ Ipv4_address dst)
{
/* have to reset the checksum field for calculation */
_checksum = 0;
diff --git a/repos/os/include/nic/stat.h b/repos/os/include/nic/stat.h
index a6755c1d57..826bf34863 100644
--- a/repos/os/include/nic/stat.h
+++ b/repos/os/include/nic/stat.h
@@ -29,7 +29,7 @@ class Nic::Measurement
Timer::Connection &_timer;
- Net::Ethernet_frame::Mac_address _mac;
+ Net::Mac_address _mac;
struct stat
{
diff --git a/repos/os/include/nic_session/nic_session.h b/repos/os/include/nic_session/nic_session.h
index 93e573c73b..0bf34e929f 100644
--- a/repos/os/include/nic_session/nic_session.h
+++ b/repos/os/include/nic_session/nic_session.h
@@ -15,16 +15,17 @@
#define _INCLUDE__NIC_SESSION__NIC_SESSION_H_
#include
-#include
#include
#include
#include
#include
#include
+#include
namespace Nic {
- struct Mac_address;
+ using Mac_address = Net::Mac_address;
+
struct Session;
using Genode::Packet_stream_sink;
@@ -34,22 +35,6 @@ namespace Nic {
}
-struct Nic::Mac_address
-{
- enum { NUM_ELEM = 6 };
-
- char addr[NUM_ELEM];
-
- void print(Genode::Output &out) const
- {
- using Genode::Hex;
- for (unsigned i = 0; i < NUM_ELEM; i++)
- Genode::print(out, i > 0 ? ":" : "",
- Hex(addr[i], Hex::OMIT_PREFIX, Hex::PAD));
- }
-};
-
-
/*
* NIC session interface
*
diff --git a/repos/os/src/lib/net/ethernet.cc b/repos/os/src/lib/net/ethernet.cc
index 4c290481bb..bb009a7698 100644
--- a/repos/os/src/lib/net/ethernet.cc
+++ b/repos/os/src/lib/net/ethernet.cc
@@ -13,4 +13,4 @@
#include
-const Net::Ethernet_frame::Mac_address Net::Ethernet_frame::BROADCAST(0xFF);
+const Net::Mac_address Net::Ethernet_frame::BROADCAST(0xFF);
diff --git a/repos/os/src/lib/net/ipv4.cc b/repos/os/src/lib/net/ipv4.cc
index fdb98a897e..2e8e32fd53 100644
--- a/repos/os/src/lib/net/ipv4.cc
+++ b/repos/os/src/lib/net/ipv4.cc
@@ -27,7 +27,7 @@ struct Scanner_policy_number
typedef ::Genode::Token Token;
-Ipv4_packet::Ipv4_address Ipv4_packet::ip_from_string(const char *ip)
+Ipv4_address Ipv4_packet::ip_from_string(const char *ip)
{
Ipv4_address ip_addr;
Token t(ip);
@@ -78,5 +78,5 @@ Genode::uint16_t Ipv4_packet::calculate_checksum(Ipv4_packet const &packet)
}
-const Ipv4_packet::Ipv4_address Ipv4_packet::CURRENT((Genode::uint8_t)0x00);
-const Ipv4_packet::Ipv4_address Ipv4_packet::BROADCAST((Genode::uint8_t)0xFF);
+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/address_node.h b/repos/os/src/server/nic_bridge/address_node.h
index f02c34e723..47df44e7b1 100644
--- a/repos/os/src/server/nic_bridge/address_node.h
+++ b/repos/os/src/server/nic_bridge/address_node.h
@@ -35,8 +35,8 @@ namespace Net {
*/
template class Address_node;
- using Ipv4_address_node = Address_node;
- using Mac_address_node = Address_node;
+ using Ipv4_address_node = Address_node;
+ using Mac_address_node = Address_node;
}
diff --git a/repos/os/src/server/nic_bridge/component.cc b/repos/os/src/server/nic_bridge/component.cc
index b56ef8d467..a6ced95a3e 100644
--- a/repos/os/src/server/nic_bridge/component.cc
+++ b/repos/os/src/server/nic_bridge/component.cc
@@ -99,7 +99,7 @@ void Session_component::_unset_ipv4_node()
bool Session_component::link_state() { return _nic.link_state(); }
-void Session_component::set_ipv4_address(Ipv4_packet::Ipv4_address ip_addr)
+void Session_component::set_ipv4_address(Ipv4_address ip_addr)
{
_unset_ipv4_node();
_ipv4_node.addr(ip_addr);
@@ -113,7 +113,7 @@ Session_component::Session_component(Genode::Ram_session &ram,
Genode::size_t amount,
Genode::size_t tx_buf_size,
Genode::size_t rx_buf_size,
- Ethernet_frame::Mac_address vmac,
+ Mac_address vmac,
Net::Nic &nic,
char *ip_addr)
: Stream_allocator(ram, rm, amount),
@@ -131,9 +131,9 @@ Session_component::Session_component(Genode::Ram_session &ram,
/* static ip parsing */
if (ip_addr != 0 && Genode::strlen(ip_addr)) {
- Ipv4_packet::Ipv4_address ip = Ipv4_packet::ip_from_string(ip_addr);
+ Ipv4_address ip = Ipv4_packet::ip_from_string(ip_addr);
- if (ip == Ipv4_packet::Ipv4_address()) {
+ if (ip == Ipv4_address()) {
Genode::warning("Empty or error ip address. Skipped.");
} else {
set_ipv4_address(ip);
diff --git a/repos/os/src/server/nic_bridge/component.h b/repos/os/src/server/nic_bridge/component.h
index 844ee7d1eb..4474528008 100644
--- a/repos/os/src/server/nic_bridge/component.h
+++ b/repos/os/src/server/nic_bridge/component.h
@@ -120,15 +120,15 @@ class Net::Session_component : public Net::Stream_allocator,
* \param rx_buf_size buffer size for rx channel
* \param vmac virtual mac address
*/
- Session_component(Genode::Ram_session &ram,
- Genode::Region_map &rm,
- Genode::Entrypoint &ep,
- Genode::size_t amount,
- Genode::size_t tx_buf_size,
- Genode::size_t rx_buf_size,
- Ethernet_frame::Mac_address vmac,
- Net::Nic &nic,
- char *ip_addr = 0);
+ Session_component(Genode::Ram_session &ram,
+ Genode::Region_map &rm,
+ Genode::Entrypoint &ep,
+ Genode::size_t amount,
+ Genode::size_t tx_buf_size,
+ Genode::size_t rx_buf_size,
+ Mac_address vmac,
+ Net::Nic &nic,
+ char *ip_addr = 0);
~Session_component();
@@ -146,7 +146,7 @@ class Net::Session_component : public Net::Stream_allocator,
Genode::Signal_transmitter(_link_state_sigh).submit();
}
- void set_ipv4_address(Ipv4_packet::Ipv4_address ip_addr);
+ void set_ipv4_address(Ipv4_address ip_addr);
/****************************************
diff --git a/repos/os/src/server/nic_bridge/mac.cc b/repos/os/src/server/nic_bridge/mac.cc
index 02931c7713..9beaef30d5 100644
--- a/repos/os/src/server/nic_bridge/mac.cc
+++ b/repos/os/src/server/nic_bridge/mac.cc
@@ -18,4 +18,4 @@
* it's likely, that we will have no clashes here.
* (e.g. Linux uses 02:00... for its tap-devices.)
*/
-Net::Ethernet_frame::Mac_address Net::Mac_allocator::mac_addr_base(0x02);
+Net::Mac_address Net::Mac_allocator::mac_addr_base(0x02);
diff --git a/repos/os/src/server/nic_bridge/mac.h b/repos/os/src/server/nic_bridge/mac.h
index a8366ca11f..04df21988f 100644
--- a/repos/os/src/server/nic_bridge/mac.h
+++ b/repos/os/src/server/nic_bridge/mac.h
@@ -45,7 +45,7 @@ namespace Net {
/* reference MAC address */
- static Ethernet_frame::Mac_address mac_addr_base;
+ static Mac_address mac_addr_base;
Mac_allocator() { Genode::memset(&_msbs, 0, sizeof(_msbs)); }
@@ -56,12 +56,12 @@ namespace Net {
* \throws Alloc_failed if no more MAC addresses are available.
* \return MAC address
*/
- Ethernet_frame::Mac_address alloc()
+ Mac_address alloc()
{
for (int i=0; i < MSB_MAX; i++) {
if (!_msbs[i].used) {
_msbs[i].used = 1;
- Ethernet_frame::Mac_address mac = mac_addr_base;
+ Mac_address mac = mac_addr_base;
mac.addr[5] = i;
return mac;
}
@@ -72,7 +72,7 @@ namespace Net {
/**
* Frees a formerly allocated MAC address.
*/
- void free(Ethernet_frame::Mac_address mac) {
+ void free(Mac_address mac) {
_msbs[(unsigned)mac.addr[5]].used = 0; }
};
}
diff --git a/repos/os/src/server/nic_bridge/main.cc b/repos/os/src/server/nic_bridge/main.cc
index d318e88144..de7bc3feb7 100644
--- a/repos/os/src/server/nic_bridge/main.cc
+++ b/repos/os/src/server/nic_bridge/main.cc
@@ -53,7 +53,7 @@ struct Main
handle_config();
/* show MAC address to use */
- Net::Ethernet_frame::Mac_address mac(nic.mac());
+ Net::Mac_address mac(nic.mac());
Genode::log("--- NIC bridge started (mac=", mac, ") ---");
/* announce at parent */
diff --git a/repos/os/src/server/nic_bridge/nic.cc b/repos/os/src/server/nic_bridge/nic.cc
index 3a4881e238..a7ceab1b3b 100644
--- a/repos/os/src/server/nic_bridge/nic.cc
+++ b/repos/os/src/server/nic_bridge/nic.cc
@@ -42,7 +42,7 @@ bool Net::Nic::handle_arp(Ethernet_frame *eth, Genode::size_t size) {
* and destination MAC and IP addresses, and set the opcode
* to reply, and then push the packet back to the NIC driver.
*/
- Ipv4_packet::Ipv4_address old_src_ip = arp->src_ip();
+ Ipv4_address old_src_ip = arp->src_ip();
arp->opcode(Arp_packet::REPLY);
arp->dst_mac(arp->src_mac());
arp->src_mac(mac());
diff --git a/repos/os/src/server/nic_bridge/nic.h b/repos/os/src/server/nic_bridge/nic.h
index 2111b738e4..02fc068c8c 100644
--- a/repos/os/src/server/nic_bridge/nic.h
+++ b/repos/os/src/server/nic_bridge/nic.h
@@ -33,14 +33,14 @@ class Net::Nic : public Net::Packet_handler
::Nic::Packet_allocator _tx_block_alloc;
::Nic::Connection _nic;
- Ethernet_frame::Mac_address _mac;
+ Mac_address _mac;
public:
Nic(Genode::Entrypoint&, Genode::Heap&, Vlan&);
::Nic::Connection *nic() { return &_nic; }
- Ethernet_frame::Mac_address mac() { return _mac; }
+ Mac_address mac() { return _mac; }
bool link_state() { return _nic.link_state(); }
diff --git a/repos/os/src/server/nic_loopback/main.cc b/repos/os/src/server/nic_loopback/main.cc
index 14b903f299..67a5d8b4f0 100644
--- a/repos/os/src/server/nic_loopback/main.cc
+++ b/repos/os/src/server/nic_loopback/main.cc
@@ -58,7 +58,8 @@ class Nic::Loopback_component : public Nic::Session_component
Mac_address mac_address() override
{
- Mac_address result = {{1,2,3,4,5,6}};
+ char buf[] = {1,2,3,4,5,6};
+ Mac_address result((void*)buf);
return result;
}
diff --git a/repos/os/src/test/nic_raw/main.cc b/repos/os/src/test/nic_raw/main.cc
index 4ed5ac0b39..fcfa39e263 100644
--- a/repos/os/src/test/nic_raw/main.cc
+++ b/repos/os/src/test/nic_raw/main.cc
@@ -34,7 +34,7 @@ class Nic_worker : public Genode::Thread_deprecated
private:
Nic::Connection *_nic; /* nic-session */
- Net::Ethernet_frame::Mac_address _mac;
+ Net::Mac_address _mac;
struct stat {
Genode::uint64_t size;
diff --git a/repos/ports/src/app/openvpn/main.cc b/repos/ports/src/app/openvpn/main.cc
index 4185c5b32e..040788fe96 100644
--- a/repos/ports/src/app/openvpn/main.cc
+++ b/repos/ports/src/app/openvpn/main.cc
@@ -81,7 +81,7 @@ class Openvpn_component : public Tuntap_device,
{
private:
- Nic::Mac_address _mac_addr {{ 0x02, 0x00, 0x00, 0x00, 0x00, 0x01 }};
+ Nic::Mac_address _mac_addr;
char const *_packet;
@@ -138,6 +138,8 @@ class Openvpn_component : public Tuntap_device,
Server::Entrypoint &ep)
: Session_component(tx_buf_size, rx_buf_size, rx_block_md_alloc, ram_session, ep)
{
+ char buf[] = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x01 };
+ _mac_addr = Nic::Mac_address((void*)buf);
if (pipe(_pipefd)) {
Genode::error("could not create pipe");
throw Genode::Exception();