summaryrefslogtreecommitdiff
path: root/tests/common/veth.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/common/veth.py')
-rw-r--r--tests/common/veth.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/common/veth.py b/tests/common/veth.py
new file mode 100644
index 00000000..c9d3006c
--- /dev/null
+++ b/tests/common/veth.py
@@ -0,0 +1,83 @@
+from common import process, netns, vlan, iface
+import time
+import math
+
+# creates veth pair. if ok returns 0
+def create_pair(name_a, name_b):
+ veth, out, err = process.run(
+ ["ip", "link", "add", name_a, "type", "veth", "peer", "name", name_b]
+ )
+ print("veth.create: exit=%d out=%s err=%s" % (veth, out, err))
+
+ return veth
+
+
+# put veth to netns. if ok returns 0
+def assign_netns(veth, netns):
+ veth, out, err = process.run(["ip", "link", "set", veth, "netns", netns])
+ print("veth.assign_netns: exit=%d out=%s err=%s" % (veth, out, err))
+
+ return veth
+
+
+# creates netns, creates veth pair and place second link to netns
+# creates vlans over veth interfaces according to veth_pair_vlans_config
+# return dict with 'netns', 'veth_a', 'veth_b'
+def create_veth_pair_netns(veth_pair_vlans_config):
+
+ name = str(math.floor(time.time() * 1000) % 1000000)
+ netns_name = "N" + name
+ netns_status = netns.create(netns_name)
+ print("create_veth_pair_netns: netns_status=%d" % netns_status)
+
+ veth_a = "A" + name
+ veth_b = "B" + name
+ pair_status = create_pair(veth_a, veth_b)
+ print("create_veth_pair_netns: pair_status=%d" % pair_status)
+
+ iface.up(veth_a, None)
+
+ assign_status = assign_netns(veth_b, netns_name)
+ print("create_veth_pair_netns: assign_status=%d" % assign_status)
+
+ iface.up(veth_b, netns_name)
+
+ vlans_a = veth_pair_vlans_config["vlans_a"]
+ for vlan_num in vlans_a:
+ vlan.create(veth_a, vlan_num, None)
+ iface.up(veth_a + "." + str(vlan_num), None)
+
+ vlans_b = veth_pair_vlans_config["vlans_b"]
+ for vlan_num in vlans_b:
+ vlan.create(veth_b, vlan_num, netns_name)
+ iface.up(veth_b + "." + str(vlan_num), netns_name)
+
+ return {
+ "netns": netns_name,
+ "veth_a": veth_a,
+ "veth_b": veth_b,
+ "vlans_a": vlans_a,
+ "vlans_b": vlans_b,
+ }
+
+
+# deletes veth pair and netns created by create_veth_pair_netns
+def delete_veth_pair_netns(veth_pair_netns):
+
+ vlans_a = veth_pair_netns["vlans_a"]
+ veth_a = veth_pair_netns["veth_a"]
+ vlans_b = veth_pair_netns["vlans_b"]
+ veth_b = veth_pair_netns["veth_b"]
+ netns_name = veth_pair_netns["netns"]
+
+ # remove vlans on top of veth interface
+ for vlan_num in vlans_a:
+ iface.delete(veth_a + "." + str(vlan_num), None)
+ for vlan_num in vlans_b:
+ iface.delete(veth_b + "." + str(vlan_num), netns_name)
+
+ veth_status = iface.delete(veth_a, None)
+ print("delete_veth_pair_netns: veth_status=%d" % veth_status)
+
+ netns_status = netns.delete(netns_name)
+ print("delete_veth_pair_netns: netns_status=%d" % netns_status)