diff --git a/src/osmo_gsm_tester/iperf3.py b/src/osmo_gsm_tester/iperf3.py
index 1b13ffe..78dc140 100644
--- a/src/osmo_gsm_tester/iperf3.py
+++ b/src/osmo_gsm_tester/iperf3.py
@@ -154,17 +154,17 @@
         locally = not self._run_node or self._run_node.is_local()
         return locally
 
-    def prepare_test_proc(self, netns=None):
+    def prepare_test_proc(self, downlink=False, netns=None):
         self.log('Starting iperf3-client connecting to %s:%d' % (self.server.addr(), self.server.port()))
         self.log_copied = False
         self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
         self.log_file = self.run_dir.new_file(IPerf3Client.LOGFILE)
         if self.runs_locally():
-            return self.prepare_test_proc_locally(netns)
+            return self.prepare_test_proc_locally(downlink, netns)
         else:
-            return self.prepare_test_proc_remotely(netns)
+            return self.prepare_test_proc_remotely(downlink, netns)
 
-    def prepare_test_proc_remotely(self, netns):
+    def prepare_test_proc_remotely(self, downlink, netns):
         self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())
 
         remote_prefix_dir = util.Dir(IPerf3Client.REMOTE_DIR)
@@ -176,19 +176,25 @@
         popen_args = ('iperf3', '-c',  self.server.addr(),
                       '-p', str(self.server.port()), '-J',
                       '--logfile', self.remote_log_file)
+        if downlink:
+            popen_args += ('-R',)
+
         if netns:
             self.process = self.rem_host.RemoteNetNSProcess(self.name(), netns, popen_args, env={})
         else:
             self.process = self.rem_host.RemoteProcess(self.name(), popen_args, env={})
         return self.process
 
-    def prepare_test_proc_locally(self, netns):
+    def prepare_test_proc_locally(self, downlink, netns):
         pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
                                    'host %s and port not 22' % self.server.addr(), netns)
 
         popen_args = ('iperf3', '-c',  self.server.addr(),
                       '-p', str(self.server.port()), '-J',
                       '--logfile', os.path.abspath(self.log_file))
+        if downlink:
+            popen_args += ('-R',)
+
         if netns:
             self.process = process.NetNSProcess(self.name(), self.run_dir, netns, popen_args, env={})
         else:
diff --git a/suites/4g/iperf3.py b/suites/4g/iperf3.py
index 5ccc922..cc7bca0 100755
--- a/suites/4g/iperf3.py
+++ b/suites/4g/iperf3.py
@@ -32,7 +32,7 @@
 ue.connect(enb)
 
 iperf3srv.start()
-proc = iperf3cli.prepare_test_proc(ue.netns())
+proc = iperf3cli.prepare_test_proc(False, ue.netns())
 
 print('waiting for UE to attach...')
 wait(ue.is_connected, None)
diff --git a/suites/gprs/lib/testlib.py b/suites/gprs/lib/testlib.py
index 284ca63..c0af372 100644
--- a/suites/gprs/lib/testlib.py
+++ b/suites/gprs/lib/testlib.py
@@ -16,7 +16,7 @@
     procs = []
     for i in range(len(iperf3clients)):
         print("Running iperf3 client to %s through %r" % (str(iperf3clients[i]), repr(ms_li[i].tmp_ctx_id)))
-        procs.append(iperf3clients[i].prepare_test_proc(ms_li[i].netns()))
+        procs.append(iperf3clients[i].prepare_test_proc(False, ms_li[i].netns()))
     try:
         for proc in procs:
             proc.launch()
