<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17250">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">srsue: Create netns on demand<br><br>Already existing script osmo-gsm-tester_netns_setup.sh is modified to<br>support only creating the entns without moving an iface to it.<br><br>Change-Id: I1b7e186b0146f932fe37fbea68e4dfa3120b7a74<br>---<br>M src/osmo_gsm_tester/remote.py<br>M src/osmo_gsm_tester/srs_ue.py<br>M src/osmo_gsm_tester/util.py<br>M utils/bin/osmo-gsm-tester_netns_setup.sh<br>4 files changed, 31 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/50/17250/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/remote.py b/src/osmo_gsm_tester/remote.py</span><br><span>index c5246ce..10ba069 100644</span><br><span>--- a/src/osmo_gsm_tester/remote.py</span><br><span>+++ b/src/osmo_gsm_tester/remote.py</span><br><span>@@ -171,6 +171,13 @@</span><br><span>         SETCAP_NETSYS_ADMIN_BIN = 'osmo-gsm-tester_setcap_netsys_admin.sh'</span><br><span>         self.run_remote_sync('setcap-netsysadm', ('sudo', SETCAP_NETSYS_ADMIN_BIN, binary_path))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def create_netns(self, netns):</span><br><span style="color: hsl(120, 100%, 40%);">+        '''</span><br><span style="color: hsl(120, 100%, 40%);">+        It creates the netns if it doesn't already exist.</span><br><span style="color: hsl(120, 100%, 40%);">+        '''</span><br><span style="color: hsl(120, 100%, 40%);">+        NETNS_SETUP_BIN = 'osmo-gsm-tester_netns_setup.sh'</span><br><span style="color: hsl(120, 100%, 40%);">+        self.run_remote_sync('create_netns', ('sudo', NETNS_SETUP_BIN, netns))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def change_elf_rpath(self, binary_path, paths):</span><br><span>         '''</span><br><span>         Change RPATH field in ELF executable binary.</span><br><span>diff --git a/src/osmo_gsm_tester/srs_ue.py b/src/osmo_gsm_tester/srs_ue.py</span><br><span>index 4a99ad9..0accaea 100644</span><br><span>--- a/src/osmo_gsm_tester/srs_ue.py</span><br><span>+++ b/src/osmo_gsm_tester/srs_ue.py</span><br><span>@@ -125,6 +125,9 @@</span><br><span>         self.log('Applying CAP_SYS_ADMIN+CAP_NET_ADMIN capability to srsue')</span><br><span>         self.rem_host.setcap_netsys_admin(remote_binary)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        self.log('Creating netns %s' % self.netns())</span><br><span style="color: hsl(120, 100%, 40%);">+        self.rem_host.create_netns(self.netns())</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         #'strace', '-ff',</span><br><span>         args = (remote_binary, self.remote_config_file,</span><br><span>                 '--phy.nof_phy_threads=1',</span><br><span>@@ -159,6 +162,9 @@</span><br><span>         self.log('Applying CAP_SYS_ADMIN+CAP_NET_ADMIN capability to srsue')</span><br><span>         util.setcap_netsys_admin(binary, self.run_dir.new_dir('setcap_netsys_admin'))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        self.log('Creating netns %s' % self.netns())</span><br><span style="color: hsl(120, 100%, 40%);">+        util.create_netns(self.netns(), self.run_dir.new_dir('create_netns'))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         args = (binary, os.path.abspath(self.config_file),</span><br><span>                 '--phy.nof_phy_threads=1',</span><br><span>                 '--gw.netns=' + self.netns(),</span><br><span>diff --git a/src/osmo_gsm_tester/util.py b/src/osmo_gsm_tester/util.py</span><br><span>index de37078..a5b2bbf 100644</span><br><span>--- a/src/osmo_gsm_tester/util.py</span><br><span>+++ b/src/osmo_gsm_tester/util.py</span><br><span>@@ -110,15 +110,22 @@</span><br><span>     proc = Process(SETCAP_NETSYS_ADMIN_BIN, run_dir, ['sudo', SETCAP_NETSYS_ADMIN_BIN, binary])</span><br><span>     proc.launch_sync()</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def move_iface_to_netns(ifname, netns, run_dir):</span><br><span style="color: hsl(120, 100%, 40%);">+def create_netns(netns, run_dir):</span><br><span>     '''</span><br><span style="color: hsl(0, 100%, 40%);">-    Moves an iface to a netns. It creates the netns if it doesn't exist.</span><br><span style="color: hsl(0, 100%, 40%);">-    fail_iface_not_found=False is handy in order to assume the iface is already</span><br><span style="color: hsl(0, 100%, 40%);">-    in another netns and thus cannot be foud.</span><br><span style="color: hsl(120, 100%, 40%);">+    It creates the netns if it doesn't already exist.</span><br><span>     '''</span><br><span>     from .process import Process</span><br><span>     NETNS_SETUP_BIN = 'osmo-gsm-tester_netns_setup.sh'</span><br><span style="color: hsl(0, 100%, 40%);">-    proc = Process('move_netns', run_dir, ['sudo', NETNS_SETUP_BIN, ifname, netns])</span><br><span style="color: hsl(120, 100%, 40%);">+    proc = Process('create_netns', ('sudo', NETNS_SETUP_BIN, netns))</span><br><span style="color: hsl(120, 100%, 40%);">+    proc.launch_sync()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def move_iface_to_netns(ifname, netns, run_dir):</span><br><span style="color: hsl(120, 100%, 40%);">+    '''</span><br><span style="color: hsl(120, 100%, 40%);">+    Moves an iface to a netns. It creates the netns if it doesn't exist.</span><br><span style="color: hsl(120, 100%, 40%);">+    '''</span><br><span style="color: hsl(120, 100%, 40%);">+    from .process import Process</span><br><span style="color: hsl(120, 100%, 40%);">+    NETNS_SETUP_BIN = 'osmo-gsm-tester_netns_setup.sh'</span><br><span style="color: hsl(120, 100%, 40%);">+    proc = Process('move_netns', run_dir, ['sudo', NETNS_SETUP_BIN, netns, ifname])</span><br><span>     proc.launch_sync()</span><br><span> </span><br><span> def import_path_prepend(pathname):</span><br><span>diff --git a/utils/bin/osmo-gsm-tester_netns_setup.sh b/utils/bin/osmo-gsm-tester_netns_setup.sh</span><br><span>index 1600c44..e3d09ea 100755</span><br><span>--- a/utils/bin/osmo-gsm-tester_netns_setup.sh</span><br><span>+++ b/utils/bin/osmo-gsm-tester_netns_setup.sh</span><br><span>@@ -1,11 +1,7 @@</span><br><span> #!/bin/bash -e</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-ifname="$1"</span><br><span style="color: hsl(0, 100%, 40%);">-netns="$2"</span><br><span style="color: hsl(0, 100%, 40%);">-shift</span><br><span style="color: hsl(0, 100%, 40%);">-shift</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+netns="$1"</span><br><span style="color: hsl(120, 100%, 40%);">+ifname="$2" # optional</span><br><span> </span><br><span> if [ -f "/var/run/netns/${netns}" ]; then</span><br><span>     echo "netns $netns already exists"</span><br><span>@@ -14,6 +10,10 @@</span><br><span>     ip netns add "$netns"</span><br><span> fi</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+if [ "x$ifname" = "x" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+    exit 0</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> if [ -d "/sys/class/net/${ifname}" ]; then</span><br><span>     echo "Moving iface $ifname to netns $netns"</span><br><span>     ip link set $ifname netns $netns</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17250">change 17250</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17250"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I1b7e186b0146f932fe37fbea68e4dfa3120b7a74 </div>
<div style="display:none"> Gerrit-Change-Number: 17250 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>