<p>Pau Espin Pedrol <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/13526">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Pau Espin Pedrol: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">modem: Move modem iface to its netns before using it<br><br>We used to do that once after ofono startup for all iface<br>(modem-netns-setup.py), but then if a modem crashes the interface is<br>re-created on the default netns, and tests fail until manual re-run of<br>modem-netns-setup.py.<br><br>This way now we always make sure the iface is moved to the expected<br>netns before it is used.<br><br>Related: OS#3881<br>Change-Id: I506309c424aa46684c4516a1a0217343ecbf32c6<br>---<br>M src/osmo_gsm_tester/modem.py<br>M src/osmo_gsm_tester/util.py<br>A utils/osmo-gsm-tester_netns_setup.sh<br>3 files changed, 34 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/modem.py b/src/osmo_gsm_tester/modem.py</span><br><span>index 28f7f04..7e58e32 100644</span><br><span>--- a/src/osmo_gsm_tester/modem.py</span><br><span>+++ b/src/osmo_gsm_tester/modem.py</span><br><span>@@ -677,6 +677,7 @@</span><br><span>         iface = ctx_settings.get('Interface', None)</span><br><span>         if not iface:</span><br><span>             raise log.Error('%s Settings contains no iface! %r' % (ctx_id, repr(ctx_settings)))</span><br><span style="color: hsl(120, 100%, 40%);">+        util.move_iface_to_netns(iface, self.netns(), self.run_dir.new_dir('move_netns'))</span><br><span>         self.run_netns_wait('ifup', ('ip', 'link', 'set', 'dev', iface, 'up'))</span><br><span>         self.run_netns_wait('dhcp', ('udhcpc', '-q', '-i', iface))</span><br><span> </span><br><span>diff --git a/src/osmo_gsm_tester/util.py b/src/osmo_gsm_tester/util.py</span><br><span>index 21653be..b0ce041 100644</span><br><span>--- a/src/osmo_gsm_tester/util.py</span><br><span>+++ b/src/osmo_gsm_tester/util.py</span><br><span>@@ -100,6 +100,17 @@</span><br><span>     proc = Process(SETCAP_NET_ADMIN_BIN, run_dir, ['sudo', SETCAP_NET_ADMIN_BIN, binary])</span><br><span>     proc.launch_sync()</span><br><span> </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%);">+    fail_iface_not_found=False is handy in order to assume the iface is already</span><br><span style="color: hsl(120, 100%, 40%);">+    in another netns and thus cannot be foud.</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, ifname, 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> def import_path_prepend(pathname):</span><br><span>     dir = os.path.realpath(pathname)</span><br><span>     if dir not in sys.path:</span><br><span>diff --git a/utils/osmo-gsm-tester_netns_setup.sh b/utils/osmo-gsm-tester_netns_setup.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..1600c44</span><br><span>--- /dev/null</span><br><span>+++ b/utils/osmo-gsm-tester_netns_setup.sh</span><br><span>@@ -0,0 +1,22 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/bin/bash -e</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ifname="$1"</span><br><span style="color: hsl(120, 100%, 40%);">+netns="$2"</span><br><span style="color: hsl(120, 100%, 40%);">+shift</span><br><span style="color: hsl(120, 100%, 40%);">+shift</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if [ -f "/var/run/netns/${netns}" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+    echo "netns $netns already exists"</span><br><span style="color: hsl(120, 100%, 40%);">+else</span><br><span style="color: hsl(120, 100%, 40%);">+    echo "Creating netns $netns"</span><br><span style="color: hsl(120, 100%, 40%);">+    ip netns add "$netns"</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if [ -d "/sys/class/net/${ifname}" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+    echo "Moving iface $ifname to netns $netns"</span><br><span style="color: hsl(120, 100%, 40%);">+    ip link set $ifname netns $netns</span><br><span style="color: hsl(120, 100%, 40%);">+else</span><br><span style="color: hsl(120, 100%, 40%);">+    ip netns exec $netns ls "/sys/class/net/${ifname}" >/dev/null && echo "iface $ifname already in netns $netns"</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13526">change 13526</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/13526"/><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-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I506309c424aa46684c4516a1a0217343ecbf32c6 </div>
<div style="display:none"> Gerrit-Change-Number: 13526 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>