iperf3: Support configuring data direction (dl vs ul)

Change-Id: I6b5b740beac22015c952ce826c034031ad4c4465
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()