aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/python
diff options
context:
space:
mode:
Diffstat (limited to 'resources/libraries/python')
-rw-r--r--resources/libraries/python/GeneveUtil.py72
1 files changed, 71 insertions, 1 deletions
diff --git a/resources/libraries/python/GeneveUtil.py b/resources/libraries/python/GeneveUtil.py
index 3c8ebeebb3..d7266f58fa 100644
--- a/resources/libraries/python/GeneveUtil.py
+++ b/resources/libraries/python/GeneveUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2020 Cisco and/or its affiliates.
+# Copyright (c) 2021 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -18,6 +18,7 @@ from ipaddress import ip_address
from resources.libraries.python.Constants import Constants
from resources.libraries.python.InterfaceUtil import InterfaceUtil
from resources.libraries.python.IPAddress import IPAddress
+from resources.libraries.python.IPUtil import IPUtil
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.topology import Topology
@@ -124,3 +125,72 @@ class GeneveUtil:
u"geneve_tunnel_dump",
]
PapiSocketExecutor.dump_and_log(node, cmds)
+
+ @staticmethod
+ def vpp_geneve_add_multiple_tunnels(
+ node, gen_tunnel, n_tunnels, dut_if1, dut_if2, tg_if1_ip4,
+ tg_if2_ip4, tg_pf2_mac, next_idx):
+ """Create multiple GENEVE tunnels.
+
+ :param node: DUT node.
+ :param gen_tunnel: Parameters of the GENEVE tunnel.
+ :param n_tunnels: Number of tunnels.
+ :param dut_if1: The first DUT interface.
+ :param dut_if2: The second DUT interface.
+ :param tg_if1_ip4: TG interface 1 IP address.
+ :param tg_if2_ip4: TG interface 2 IP address.
+ :param tg_pf2_mac: TG interface 2 MAC address.
+ :param next_idx: The index of the next node.
+ :type node: dict
+ :type gen_tunnel: dict
+ :type n_tunnels: int
+ :type dut_if1: str
+ :type dut_if2: str
+ :type tg_if1_ip4: str
+ :type tg_if2_ip4: str
+ :type tg_pf2_mac: str
+ :type next_idx: int
+ """
+
+ src_ip_int = IPUtil.ip_to_int(gen_tunnel[u"src_ip"])
+ dst_ip_int = IPUtil.ip_to_int(gen_tunnel[u"dst_ip"])
+ if_ip_int = IPUtil.ip_to_int(gen_tunnel[u"if_ip"])
+
+ for idx in range(n_tunnels):
+ src_ip = IPUtil.int_to_ip(src_ip_int + idx * 256)
+ dst_ip = IPUtil.int_to_ip(dst_ip_int + idx * 256)
+ if_ip = IPUtil.int_to_ip(if_ip_int + idx * 256)
+
+ IPUtil.vpp_route_add(
+ node, src_ip, gen_tunnel[u"ip_mask"],
+ gateway=tg_if1_ip4, interface=dut_if1
+ )
+ tunnel_sw_index = GeneveUtil.add_geneve_tunnel(
+ node, gen_tunnel[u"local"], gen_tunnel[u"remote"],
+ gen_tunnel[u"vni"] + idx, l3_mode=True, next_index=next_idx
+ )
+ tunnel_if_key = Topology.get_interface_by_sw_index(
+ node, tunnel_sw_index
+ )
+ tunnel_if_mac = Topology.get_interface_mac(
+ node, tunnel_if_key
+ )
+ IPUtil.vpp_interface_set_ip_address(node, tunnel_if_key, if_ip, 24)
+ IPUtil.vpp_add_ip_neighbor(
+ node, tunnel_if_key, tg_if2_ip4, tg_pf2_mac
+ )
+ IPUtil.vpp_route_add(
+ node, dst_ip, gen_tunnel[u"ip_mask"],
+ gateway=tg_if2_ip4, interface=tunnel_if_key
+ )
+ IPUtil.vpp_route_add(
+ node, gen_tunnel[u"remote"], 32,
+ gateway=tg_if2_ip4, interface=dut_if2
+ )
+ IPUtil.vpp_add_ip_neighbor(
+ node, tunnel_if_key, gen_tunnel[u"local"], tunnel_if_mac
+ )
+ IPUtil.vpp_route_add(
+ node, gen_tunnel[u"local"], 32, gateway=if_ip
+ )
+ InterfaceUtil.set_interface_state(node, tunnel_if_key, u"up")