diff --git a/repos/os/include/net/dump.h b/repos/os/include/net/dump.h
new file mode 100644
index 0000000000..e44aaf10de
--- /dev/null
+++ b/repos/os/include/net/dump.h
@@ -0,0 +1,155 @@
+/*
+ * \brief Dump header info of network packets
+ * \author Martin Stein
+ * \date 2016-08-15
+ */
+
+/*
+ * 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__DUMP_H_
+#define _NET__DUMP_H_
+
+/* Genode includes */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace Net
+{
+ void dump_tcp(void * const base, Genode::size_t const size)
+ {
+ Tcp_packet * tcp = new (base) Tcp_packet(size);
+ Genode::printf(
+ "\033[32mTCP\033[0m %u > %u flags '",
+ tcp->src_port(),
+ tcp->dst_port());
+
+ if (tcp->fin()) { Genode::printf("f"); }
+ if (tcp->syn()) { Genode::printf("s"); }
+ if (tcp->rst()) { Genode::printf("r"); }
+ if (tcp->psh()) { Genode::printf("p"); }
+ if (tcp->ack()) { Genode::printf("a"); }
+ if (tcp->urg()) { Genode::printf("u"); }
+ Genode::printf("' ");
+ }
+
+ void dump_dhcp(void * const base, Genode::size_t const size)
+ {
+ Dhcp_packet * dhcp = new (base) Dhcp_packet(size);
+ Genode::printf(
+ "\033[32mDHCP\033[0m %x:%x:%x:%x:%x:%x > %u.%u.%u.%u cmd %u ",
+ dhcp->client_mac().addr[0],
+ dhcp->client_mac().addr[1],
+ dhcp->client_mac().addr[2],
+ dhcp->client_mac().addr[3],
+ dhcp->client_mac().addr[4],
+ dhcp->client_mac().addr[5],
+ dhcp->siaddr().addr[0],
+ dhcp->siaddr().addr[1],
+ dhcp->siaddr().addr[2],
+ dhcp->siaddr().addr[3],
+ dhcp->op());
+ }
+
+ void dump_udp(void * const base, Genode::size_t const size)
+ {
+ Udp_packet * udp = new (base) Udp_packet(size);
+ Genode::printf(
+ "\033[32mUDP\033[0m %u > %u ",
+ udp->src_port(),
+ udp->dst_port());
+
+ Genode::size_t data_size = size - sizeof(Udp_packet);
+ void * data = udp->data();
+ if (Dhcp_packet::is_dhcp(udp)) { dump_dhcp(data, data_size); }
+ }
+
+ void dump_ipv4(void * const base, Genode::size_t const size)
+ {
+ Ipv4_packet * ipv4 = new (base) Ipv4_packet(size);
+ Genode::printf(
+ "\033[32mIPV4\033[0m %u.%u.%u.%u > %u.%u.%u.%u ",
+ ipv4->src().addr[0],
+ ipv4->src().addr[1],
+ ipv4->src().addr[2],
+ ipv4->src().addr[3],
+ ipv4->dst().addr[0],
+ ipv4->dst().addr[1],
+ ipv4->dst().addr[2],
+ ipv4->dst().addr[3]);
+
+ void * data = ipv4->data();
+ Genode::size_t data_size = size - sizeof(Ipv4_packet);
+ switch (ipv4->protocol()) {
+ case Tcp_packet::IP_ID: dump_tcp(data, data_size); break;
+ case Udp_packet::IP_ID: dump_udp(data, data_size); break;
+ default: ; }
+ }
+
+ void dump_arp(void * const base, Genode::size_t const size)
+ {
+ Arp_packet * arp = new (base) Arp_packet(size);
+ if (!arp->ethernet_ipv4()) { return; }
+ Genode::printf(
+ "\033[32mARP\033[0m %x:%x:%x:%x:%x:%x %u.%u.%u.%u "
+ "> %x:%x:%x:%x:%x:%x %u.%u.%u.%u cmd %u ",
+ arp->src_mac().addr[0],
+ arp->src_mac().addr[1],
+ arp->src_mac().addr[2],
+ arp->src_mac().addr[3],
+ arp->src_mac().addr[4],
+ arp->src_mac().addr[5],
+ arp->src_ip().addr[0],
+ arp->src_ip().addr[1],
+ arp->src_ip().addr[2],
+ arp->src_ip().addr[3],
+ arp->dst_mac().addr[0],
+ arp->dst_mac().addr[1],
+ arp->dst_mac().addr[2],
+ arp->dst_mac().addr[3],
+ arp->dst_mac().addr[4],
+ arp->dst_mac().addr[5],
+ arp->dst_ip().addr[0],
+ arp->dst_ip().addr[1],
+ arp->dst_ip().addr[2],
+ arp->dst_ip().addr[3],
+ arp->opcode());
+ }
+
+ void dump_eth(void * const base, Genode::size_t const size)
+ {
+ Ethernet_frame * eth = new (base) Ethernet_frame(size);
+ Genode::printf(
+ "\033[32mETH\033[0m %x:%x:%x:%x:%x:%x > %x:%x:%x:%x:%x:%x ",
+ eth->src().addr[0],
+ eth->src().addr[1],
+ eth->src().addr[2],
+ eth->src().addr[3],
+ eth->src().addr[4],
+ eth->src().addr[5],
+ eth->dst().addr[0],
+ eth->dst().addr[1],
+ eth->dst().addr[2],
+ eth->dst().addr[3],
+ eth->dst().addr[4],
+ eth->dst().addr[5]);
+
+ void * data = eth->data();
+ Genode::size_t data_size = size - sizeof(Ethernet_frame);
+ switch (eth->type()) {
+ case Ethernet_frame::ARP: dump_arp(data, data_size); break;
+ case Ethernet_frame::IPV4: dump_ipv4(data, data_size); break;
+ default: ; }
+ }
+}
+
+#endif /* _NET__DUMP_H_ */