diff --git a/sysmocom/scenarios/cfg-iperf3-proto@.conf b/sysmocom/scenarios/cfg-iperf3-proto@.conf
new file mode 100644
index 0000000..8e2c350
--- /dev/null
+++ b/sysmocom/scenarios/cfg-iperf3-proto@.conf
@@ -0,0 +1,3 @@
+config:
+  iperf3cli:
+    protocol: ${param1}
diff --git a/sysmocom/suites/4g/iperf3_dl.py b/sysmocom/suites/4g/iperf3_dl.py
index d4fa649..bcc569a 100755
--- a/sysmocom/suites/4g/iperf3_dl.py
+++ b/sysmocom/suites/4g/iperf3_dl.py
@@ -1,17 +1,6 @@
 #!/usr/bin/env python3
 from osmo_gsm_tester.testenv import *
 
-def print_result_node(result, node_str):
-    sent = result['end']['sum_sent']
-    recv = result['end']['sum_received']
-    print("Result %s:" % node_str)
-    print("\tSEND: %d KB, %d kbps, %d seconds (%s retrans)" % (sent['bytes']/1000, sent['bits_per_second']/1000, sent['seconds'], str(sent.get('retransmits', 'unknown'))))
-    print("\tRECV: %d KB, %d kbps, %d seconds" % (recv['bytes']/1000, recv['bits_per_second']/1000, recv['seconds']))
-
-def print_results(cli_res, srv_res):
-    print_result_node(cli_res, 'client')
-    print_result_node(srv_res, 'server')
-
 epc = tenv.epc()
 enb = tenv.enb()
 ue = tenv.modem()
@@ -41,7 +30,9 @@
 print("Running iperf3 client to %s through %s" % (str(iperf3cli), ue.netns()))
 proc.launch_sync()
 iperf3srv.stop()
-print_results(iperf3cli.get_results(), iperf3srv.get_results())
+
+iperf3cli.print_results()
+iperf3srv.print_results(iperf3cli.proto() == iperf3cli.PROTO_UDP)
 
 max_rate = enb.ue_max_rate(downlink=True)
 res_str = ue.verify_metric(max_rate * 0.8, operation='avg', metric='dl_brate', criterion='gt')
diff --git a/sysmocom/suites/4g/iperf3_ul.py b/sysmocom/suites/4g/iperf3_ul.py
index 64d476b..a92a658 100755
--- a/sysmocom/suites/4g/iperf3_ul.py
+++ b/sysmocom/suites/4g/iperf3_ul.py
@@ -1,17 +1,6 @@
 #!/usr/bin/env python3
 from osmo_gsm_tester.testenv import *
 
-def print_result_node(result, node_str):
-    sent = result['end']['sum_sent']
-    recv = result['end']['sum_received']
-    print("Result %s:" % node_str)
-    print("\tSEND: %d KB, %d kbps, %d seconds (%s retrans)" % (sent['bytes']/1000, sent['bits_per_second']/1000, sent['seconds'], str(sent.get('retransmits', 'unknown'))))
-    print("\tRECV: %d KB, %d kbps, %d seconds" % (recv['bytes']/1000, recv['bits_per_second']/1000, recv['seconds']))
-
-def print_results(cli_res, srv_res):
-    print_result_node(cli_res, 'client')
-    print_result_node(srv_res, 'server')
-
 epc = tenv.epc()
 enb = tenv.enb()
 ue = tenv.modem()
@@ -41,7 +30,9 @@
 print("Running iperf3 client to %s through %s" % (str(iperf3cli), ue.netns()))
 proc.launch_sync()
 iperf3srv.stop()
-print_results(iperf3cli.get_results(), iperf3srv.get_results())
+
+iperf3cli.print_results()
+iperf3srv.print_results(iperf3cli.proto() == iperf3cli.PROTO_UDP)
 
 max_rate = enb.ue_max_rate(downlink=False)
 res_str = ue.verify_metric(max_rate * 0.8, operation='avg', metric='ul_brate', criterion='gt')
diff --git a/sysmocom/suites/gprs/lib/testlib.py b/sysmocom/suites/gprs/lib/testlib.py
index 636ee2b..765f463 100644
--- a/sysmocom/suites/gprs/lib/testlib.py
+++ b/sysmocom/suites/gprs/lib/testlib.py
@@ -1,21 +1,9 @@
 #!/usr/bin/env python3
 from osmo_gsm_tester.testenv import *
 
-def print_result_node(result, node_str):
-    try:
-        sent = result['end']['sum_sent']
-        recv = result['end']['sum_received']
-        print("Result %s:" % node_str)
-        print("\tSEND: %d KB, %d kbps, %d seconds (%s retrans)" % (sent['bytes']/1000, sent['bits_per_second']/1000, sent['seconds'], str(sent.get('retransmits', 'unknown'))))
-        print("\tRECV: %d KB, %d kbps, %d seconds" % (recv['bytes']/1000, recv['bits_per_second']/1000, recv['seconds']))
-    except Exception as e:
-        print("Exception while using iperf3 %s results: %r" % (node_str, repr(result)))
-        raise e
-
-
-def print_results(cli_res, srv_res):
-    print_result_node(cli_res, 'client')
-    print_result_node(srv_res, 'server')
+def print_results(cli, srv):
+        cli.print_results()
+        srv.print_results(cli.proto() == cli.PROTO_UDP)
 
 def run_iperf3_cli_parallel(iperf3clients, ms_li, ready_cb):
     assert len(iperf3clients) == len(ms_li)
@@ -114,7 +102,7 @@
     for i in range(num_ms):
         servers[i].stop()
         print("Results for %s through %r" % (str(servers[i]), repr(ms_li[i].tmp_ctx_id)))
-        print_results(clients[i].get_results(), servers[i].get_results())
+        print_results(clients[i], servers[i])
 
     for ms in ms_li:
         ms.deactivate_context(ms.tmp_ctx_id)
