diff --git a/ports/ports/netperf.mk b/ports/ports/netperf.mk
index 3c2c67c571..27f4b20a47 100644
--- a/ports/ports/netperf.mk
+++ b/ports/ports/netperf.mk
@@ -23,7 +23,8 @@ $(CONTRIB_DIR)/$(NETPERF):
checkout-netperf: $(CONTRIB_DIR)/$(NETPERF)
apply_patches-netperf: checkout-netperf
- $(VERBOSE)patch -d contrib/netperf -N -p0 < $(CURDIR)/src/app/netperf/timer.patch
+ $(VERBOSE)find $(CURDIR)/src/app/netperf/ -name "*.patch" |\
+ xargs -ixxx sh -c "patch -p0 -r - -N -d $(CONTRIB_DIR)/$(NETPERF) < xxx" || true
$(VERBOSE)echo '#define NETPERF_VERSION "$(NETPERF_VERSION)"' >$(CONTRIB_DIR)/$(NETPERF)/src/netperf_version.h
prepare:: apply_patches-netperf
diff --git a/ports/run/netperf.run b/ports/run/netperf.run
index 56b144c5e1..b0ac0d8f79 100644
--- a/ports/run/netperf.run
+++ b/ports/run/netperf.run
@@ -53,7 +53,7 @@ set config {
-
+
@@ -136,9 +136,10 @@ append qemu_args " -m 128 "
append_if [have_spec x86] qemu_args " -net nic,model=e1000 "
append_if [have_spec lan9118] qemu_args " -net nic,model=lan9118 "
-append qemu_args " -net user -redir tcp:12865::12865 "
+append qemu_args " -net user -redir tcp:12865::12865 -redir tcp:49153::49153 "
run_genode_until {.*and family AF_INET.*} 30
+set serial_id $spawn_id
if [is_qemu_available] {
@@ -149,7 +150,7 @@ if [is_qemu_available] {
puts ""
}
-spawn netperf -H $ip_addr -P 1 -v 2 -t TCP_STREAM
+spawn netperf -H $ip_addr -P 1 -v 2 -t TCP_STREAM -c -C -- -S 0,65520 -P 49153,49153
set netperf_id $spawn_id
run_genode_until "Segment" 60 $netperf_id
diff --git a/ports/src/app/netperf/config.h b/ports/src/app/netperf/config.h
index d1b975aeaa..f64e6dbaca 100644
--- a/ports/src/app/netperf/config.h
+++ b/ports/src/app/netperf/config.h
@@ -257,7 +257,7 @@
#undef HAVE_SYS_SYSINFO_H
/* Define to 1 if you have the header file. */
-#undef HAVE_SYS_TIME_H
+#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the header file. */
#define HAVE_SYS_TYPES_H 1
@@ -377,10 +377,10 @@
#undef WANT_INTERVALS
/* Define to one to migrate classic to OMNI tests. */
-#undef WANT_MIGRATION
+#define WANT_MIGRATION 1
/* Define to one to include OMNI tests. */
-#undef WANT_OMNI
+#define WANT_OMNI 1
/* Define to one to include SCTP tests. */
#undef WANT_SCTP
diff --git a/ports/src/app/netperf/netlib.patch b/ports/src/app/netperf/netlib.patch
new file mode 100644
index 0000000000..fb58b5e8ba
--- /dev/null
+++ b/ports/src/app/netperf/netlib.patch
@@ -0,0 +1,25 @@
+Index: src/netlib.c
+===================================================================
+--- src/netlib.c (revision 644)
++++ src/netlib.c (working copy)
+@@ -844,6 +844,10 @@
+ exit(1);
+ }
+
++ /* On Genode libc port -1 is returned for sysconf(_SC_NPROCESSORS_ONLN) */
++ if (temp_cpus < 0)
++ temp_cpus = 1;
++
+ return(temp_cpus);
+
+ }
+@@ -3059,7 +3063,9 @@
+ (which == SEND_BUFFER) ? "SO_SNDBUF" : "SO_RCVBUF",
+ errno);
+ fflush(where);
++#ifndef GENODE_BUILD
+ exit(1);
++#endif
+ }
+ if (debug > 1) {
+ fprintf(where, "netperf: set_sock_buffer: %s of %d requested.\n",
diff --git a/ports/src/app/netperf/omni.patch b/ports/src/app/netperf/omni.patch
new file mode 100644
index 0000000000..6149771af9
--- /dev/null
+++ b/ports/src/app/netperf/omni.patch
@@ -0,0 +1,76 @@
+Index: src/netserver.c
+===================================================================
+--- src/netserver.c (revision 644)
++++ src/netserver.c (working copy)
+@@ -567,7 +567,7 @@
+ int do_inet;
+ int no_name = 0;
+ #ifdef AF_INET6
+- int do_inet6;
++ int do_inet6 = 0;
+ #endif
+
+ if (debug) {
+Index: src/nettest_omni.c
+===================================================================
+--- src/nettest_omni.c (revision 644)
++++ src/nettest_omni.c (working copy)
+@@ -3348,7 +3348,7 @@
+ get_transport_cong_control(SOCKET socket, int protocol, char cong_control[], int len)
+ {
+ #ifdef TCP_CONGESTION
+- int my_len = len;
++ socklen_t my_len = len;
+ if (protocol != IPPROTO_TCP) {
+ strncpy(cong_control,"TCP Only",len);
+ }
+@@ -3477,7 +3477,7 @@
+
+ struct sockaddr_storage remote_addr;
+ struct sockaddr_storage my_addr;
+- int remote_addr_len = sizeof(remote_addr);
++ netperf_socklen_t remote_addr_len = sizeof(remote_addr);
+ netperf_socklen_t my_addr_len = sizeof(my_addr);
+
+ SOCKET data_socket;
+@@ -4892,11 +4892,11 @@
+
+ struct sockaddr_storage myaddr_in, peeraddr_in;
+ int peeraddr_set = 0;
+- SOCKET s_listen, data_socket;
++ SOCKET s_listen, data_socket = -1;
+ netperf_socklen_t addrlen;
+
+- struct ring_elt *send_ring;
+- struct ring_elt *recv_ring;
++ struct ring_elt *send_ring = 0;
++ struct ring_elt *recv_ring = 0;
+
+ int timed_out = 0;
+ int pad_time = 0;
+Index: src/nettest_bsd.h
+===================================================================
+--- src/nettest_bsd.h (revision 644)
++++ src/nettest_bsd.h (working copy)
+@@ -617,7 +617,7 @@
+ extern int get_sockaddr_family_addr_port(struct sockaddr_storage *sockaddr,
+ int family,
+ void *addr,
+- int *port);
++ uint32_t *port);
+ extern void send_tcp_mss(char remote_host[]);
+ extern void send_tcp_stream(char remote_host[]);
+ extern void send_tcp_maerts(char remote_host[]);
+Index: src/nettest_bsd.c
+===================================================================
+--- src/nettest_bsd.c (revision 644)
++++ src/nettest_bsd.c (working copy)
+@@ -1066,7 +1066,7 @@
+
+ /* pull the port and address out of the sockaddr in host format */
+ int
+-get_sockaddr_family_addr_port(struct sockaddr_storage *sockaddr, int family, void *addr, int *port)
++get_sockaddr_family_addr_port(struct sockaddr_storage *sockaddr, int family, void *addr, uint32_t *port)
+ {
+ struct sockaddr_in *sin = (struct sockaddr_in *)sockaddr;
+
diff --git a/ports/src/app/netperf/target.mk b/ports/src/app/netperf/target.mk
index 97f59d0190..f4a8482960 100644
--- a/ports/src/app/netperf/target.mk
+++ b/ports/src/app/netperf/target.mk
@@ -3,10 +3,13 @@ TARGET = netperf
CONTRIB_DIR = $(REP_DIR)/contrib/netperf
LIBS += base libc libm libc-resolv libc-net libc-nameser libc-isc
-# plugins to libc
+# plug-in to libc
LIBS += libc_log libc_lwip_nic_dhcp config_args
-SRC_C = netserver.c netlib.c netsh.c nettest_bsd.c netcpu_none.c dscp.c
+SRC_C = netserver.c netlib.c netsh.c nettest_bsd.c dscp.c
+# omni test
+SRC_C += nettest_omni.c net_uuid.c
+SRC_C += netsys_none.c netsec_none.c netdrv_none.c netrt_none.c netslot_none.c netcpu_none.c
INC_DIR += $(PRG_DIR)
CC_OPT += -DHAVE_CONFIG_H -DGENODE_BUILD
diff --git a/ports/src/app/netperf/timer.patch b/ports/src/app/netperf/timer.patch
index 655ece5999..5411880cb6 100644
--- a/ports/src/app/netperf/timer.patch
+++ b/ports/src/app/netperf/timer.patch
@@ -1,5 +1,5 @@
---- ../netperf-orig/src/netlib.h 2013-04-19 09:47:05.618940425 +0200
-+++ src/netlib.h 2013-04-19 09:50:36.042936062 +0200
+--- src/netlib.h (revision 644)
++++ src/netlib.h (working copy)
@@ -536,7 +536,11 @@
extern void dump_request();
extern void dump_addrinfo(FILE *dumploc, struct addrinfo *info,