vxlan: add udp-port configuration support
Type: improvement Signed-off-by: Artem Glazychev <artem.glazychev@xored.com> Change-Id: Ie30d51ab4df5599b52f7335f863b930cd69dbdc1
This commit is contained in:

committed by
Ole Tr�an

parent
6b354914c2
commit
839dcc0fb7
@@ -7,7 +7,7 @@ from framework import VppTestCase, VppTestRunner
|
||||
from template_bd import BridgeDomain
|
||||
|
||||
from scapy.layers.l2 import Ether
|
||||
from scapy.packet import Raw
|
||||
from scapy.packet import Raw, bind_layers
|
||||
from scapy.layers.inet import IP, UDP
|
||||
from scapy.layers.vxlan import VXLAN
|
||||
|
||||
@@ -79,14 +79,14 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
self.assertEqual(pkt[IP].dst, type(self).mcast_ip4)
|
||||
# Verify UDP destination port is VXLAN 4789, source UDP port could be
|
||||
# arbitrary.
|
||||
self.assertEqual(pkt[UDP].dport, type(self).dport)
|
||||
self.assertEqual(pkt[UDP].dport, self.dport)
|
||||
# Verify UDP checksum
|
||||
self.assert_udp_checksum_valid(pkt)
|
||||
# Verify VNI
|
||||
self.assertEqual(pkt[VXLAN].vni, vni)
|
||||
|
||||
@classmethod
|
||||
def create_vxlan_flood_test_bd(cls, vni, n_ucast_tunnels):
|
||||
def create_vxlan_flood_test_bd(cls, vni, n_ucast_tunnels, port):
|
||||
# Create 10 ucast vxlan tunnels under bd
|
||||
ip_range_start = 10
|
||||
ip_range_end = ip_range_start + n_ucast_tunnels
|
||||
@@ -101,12 +101,13 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
rip.add_vpp_config()
|
||||
|
||||
r = VppVxlanTunnel(cls, src=cls.pg0.local_ip4,
|
||||
src_port=port, dst_port=port,
|
||||
dst=dest_ip4, vni=vni)
|
||||
r.add_vpp_config()
|
||||
cls.vapi.sw_interface_set_l2_bridge(r.sw_if_index, bd_id=vni)
|
||||
|
||||
@classmethod
|
||||
def add_del_shared_mcast_dst_load(cls, is_add):
|
||||
def add_del_shared_mcast_dst_load(cls, port, is_add):
|
||||
"""
|
||||
add or del tunnels sharing the same mcast dst
|
||||
to test vxlan ref_count mechanism
|
||||
@@ -116,6 +117,7 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
vni_end = vni_start + n_shared_dst_tunnels
|
||||
for vni in range(vni_start, vni_end):
|
||||
r = VppVxlanTunnel(cls, src=cls.pg0.local_ip4,
|
||||
src_port=port, dst_port=port,
|
||||
dst=cls.mcast_ip4, mcast_sw_if_index=1, vni=vni)
|
||||
if is_add:
|
||||
r.add_vpp_config()
|
||||
@@ -125,15 +127,15 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
r.remove_vpp_config()
|
||||
|
||||
@classmethod
|
||||
def add_shared_mcast_dst_load(cls):
|
||||
cls.add_del_shared_mcast_dst_load(is_add=1)
|
||||
def add_shared_mcast_dst_load(cls, port):
|
||||
cls.add_del_shared_mcast_dst_load(port=port, is_add=1)
|
||||
|
||||
@classmethod
|
||||
def del_shared_mcast_dst_load(cls):
|
||||
cls.add_del_shared_mcast_dst_load(is_add=0)
|
||||
def del_shared_mcast_dst_load(cls, port):
|
||||
cls.add_del_shared_mcast_dst_load(port=port, is_add=0)
|
||||
|
||||
@classmethod
|
||||
def add_del_mcast_tunnels_load(cls, is_add):
|
||||
def add_del_mcast_tunnels_load(cls, port, is_add):
|
||||
"""
|
||||
add or del tunnels to test vxlan stability
|
||||
"""
|
||||
@@ -144,6 +146,7 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
ip_range_end):
|
||||
vni = bytearray(socket.inet_pton(socket.AF_INET, dest_ip4))[3]
|
||||
r = VppVxlanTunnel(cls, src=cls.pg0.local_ip4,
|
||||
src_port=port, dst_port=port,
|
||||
dst=dest_ip4, mcast_sw_if_index=1, vni=vni)
|
||||
if is_add:
|
||||
r.add_vpp_config()
|
||||
@@ -151,12 +154,12 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
r.remove_vpp_config()
|
||||
|
||||
@classmethod
|
||||
def add_mcast_tunnels_load(cls):
|
||||
cls.add_del_mcast_tunnels_load(is_add=1)
|
||||
def add_mcast_tunnels_load(cls, port):
|
||||
cls.add_del_mcast_tunnels_load(port=port, is_add=1)
|
||||
|
||||
@classmethod
|
||||
def del_mcast_tunnels_load(cls):
|
||||
cls.add_del_mcast_tunnels_load(is_add=0)
|
||||
def del_mcast_tunnels_load(cls, port):
|
||||
cls.add_del_mcast_tunnels_load(port=port, is_add=0)
|
||||
|
||||
# Class method to start the VXLAN test case.
|
||||
# Overrides setUpClass method in VppTestCase class.
|
||||
@@ -168,7 +171,6 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
super(TestVxlan, cls).setUpClass()
|
||||
|
||||
try:
|
||||
cls.dport = 4789
|
||||
cls.flags = 0x8
|
||||
|
||||
# Create 2 pg interfaces.
|
||||
@@ -195,12 +197,17 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestVxlan, self).setUp()
|
||||
|
||||
def createVxLANInterfaces(self, port=4789):
|
||||
# Create VXLAN VTEP on VPP pg0, and put vxlan_tunnel0 and pg1
|
||||
# into BD.
|
||||
self.dport = port
|
||||
|
||||
self.single_tunnel_vni = 0x12345
|
||||
self.single_tunnel_bd = 1
|
||||
r = VppVxlanTunnel(self, src=self.pg0.local_ip4,
|
||||
dst=self.pg0.remote_ip4,
|
||||
src_port=self.dport, dst_port=self.dport,
|
||||
vni=self.single_tunnel_vni)
|
||||
r.add_vpp_config()
|
||||
self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
|
||||
@@ -212,8 +219,10 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
self.n_ucast_tunnels = 10
|
||||
self.mcast_flood_bd = 2
|
||||
self.create_vxlan_flood_test_bd(self.mcast_flood_bd,
|
||||
self.n_ucast_tunnels)
|
||||
self.n_ucast_tunnels,
|
||||
self.dport)
|
||||
r = VppVxlanTunnel(self, src=self.pg0.local_ip4, dst=self.mcast_ip4,
|
||||
src_port=self.dport, dst_port=self.dport,
|
||||
mcast_sw_if_index=1, vni=self.mcast_flood_bd)
|
||||
r.add_vpp_config()
|
||||
self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
|
||||
@@ -222,29 +231,23 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
rx_sw_if_index=self.pg2.sw_if_index, bd_id=self.mcast_flood_bd)
|
||||
|
||||
# Add and delete mcast tunnels to check stability
|
||||
self.add_shared_mcast_dst_load()
|
||||
self.add_mcast_tunnels_load()
|
||||
self.del_shared_mcast_dst_load()
|
||||
self.del_mcast_tunnels_load()
|
||||
self.add_shared_mcast_dst_load(self.dport)
|
||||
self.add_mcast_tunnels_load(self.dport)
|
||||
self.del_shared_mcast_dst_load(self.dport)
|
||||
self.del_mcast_tunnels_load(self.dport)
|
||||
|
||||
# Setup vni 3 to test unicast flooding
|
||||
self.ucast_flood_bd = 3
|
||||
self.create_vxlan_flood_test_bd(self.ucast_flood_bd,
|
||||
self.n_ucast_tunnels)
|
||||
self.n_ucast_tunnels,
|
||||
self.dport)
|
||||
self.vapi.sw_interface_set_l2_bridge(
|
||||
rx_sw_if_index=self.pg3.sw_if_index, bd_id=self.ucast_flood_bd)
|
||||
|
||||
def test_decap(self):
|
||||
""" Decapsulation test
|
||||
from BridgeDoman
|
||||
"""
|
||||
super(TestVxlan, self).test_decap()
|
||||
|
||||
def test_encap_big_packet(self):
|
||||
""" Encapsulation test send big frame from pg1
|
||||
Verify receipt of encapsulated frames on pg0
|
||||
"""
|
||||
# Set scapy listen custom port for VxLAN
|
||||
bind_layers(UDP, VXLAN, dport=self.dport)
|
||||
|
||||
def encap_big_packet(self):
|
||||
self.vapi.sw_interface_set_mtu(self.pg0.sw_if_index, [1500, 0, 0, 0])
|
||||
|
||||
frame = (Ether(src='00:00:00:00:00:02', dst='00:00:00:00:00:01') /
|
||||
@@ -269,9 +272,93 @@ class TestVxlan(BridgeDomain, VppTestCase):
|
||||
# TODO: Scapy bug?
|
||||
# self.assert_eq_pkts(payload, frame)
|
||||
|
||||
"""
|
||||
Tests with default port (4789)
|
||||
"""
|
||||
def test_decap(self):
|
||||
""" Decapsulation test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan, self).test_decap()
|
||||
|
||||
def test_encap(self):
|
||||
""" Encapsulation test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan, self).test_encap()
|
||||
|
||||
def test_encap_big_packet(self):
|
||||
""" Encapsulation test send big frame from pg1
|
||||
Verify receipt of encapsulated frames on pg0
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
self.encap_big_packet()
|
||||
|
||||
def test_ucast_flood(self):
|
||||
""" Unicast flood test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan, self).test_ucast_flood()
|
||||
|
||||
def test_mcast_flood(self):
|
||||
""" Multicast flood test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan, self).test_mcast_flood()
|
||||
|
||||
def test_mcast_rcv(self):
|
||||
""" Multicast receive test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan, self).test_mcast_rcv()
|
||||
|
||||
"""
|
||||
Tests with custom port
|
||||
"""
|
||||
def test_decap_custom_port(self):
|
||||
""" Decapsulation test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan, self).test_decap()
|
||||
|
||||
def test_encap_custom_port(self):
|
||||
""" Encapsulation test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan, self).test_encap()
|
||||
|
||||
def test_ucast_flood_custom_port(self):
|
||||
""" Unicast flood test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan, self).test_ucast_flood()
|
||||
|
||||
def test_mcast_flood_custom_port(self):
|
||||
""" Multicast flood test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan, self).test_mcast_flood()
|
||||
|
||||
def test_mcast_rcv_custom_port(self):
|
||||
""" Multicast receive test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan, self).test_mcast_rcv()
|
||||
|
||||
# Method to define VPP actions before tear down of the test case.
|
||||
# Overrides tearDown method in VppTestCase class.
|
||||
# @param self The object pointer.
|
||||
|
||||
def tearDown(self):
|
||||
super(TestVxlan, self).tearDown()
|
||||
|
||||
|
@@ -6,7 +6,7 @@ from framework import VppTestCase, VppTestRunner
|
||||
from template_bd import BridgeDomain
|
||||
|
||||
from scapy.layers.l2 import Ether
|
||||
from scapy.packet import Raw
|
||||
from scapy.packet import Raw, bind_layers
|
||||
from scapy.layers.inet6 import IP, IPv6, UDP
|
||||
from scapy.layers.vxlan import VXLAN
|
||||
|
||||
@@ -80,14 +80,14 @@ class TestVxlan6(BridgeDomain, VppTestCase):
|
||||
self.assertEqual(pkt[IPv6].dst, type(self).mcast_ip6)
|
||||
# Verify UDP destination port is VXLAN 4789, source UDP port could be
|
||||
# arbitrary.
|
||||
self.assertEqual(pkt[UDP].dport, type(self).dport)
|
||||
self.assertEqual(pkt[UDP].dport, self.dport)
|
||||
# Verify UDP checksum
|
||||
self.assert_udp_checksum_valid(pkt, ignore_zero_checksum=False)
|
||||
# Verify VNI
|
||||
self.assertEqual(pkt[VXLAN].vni, vni)
|
||||
|
||||
@classmethod
|
||||
def create_vxlan_flood_test_bd(cls, vni, n_ucast_tunnels):
|
||||
def create_vxlan_flood_test_bd(cls, vni, n_ucast_tunnels, port):
|
||||
# Create 10 ucast vxlan tunnels under bd
|
||||
start = 10
|
||||
end = start + n_ucast_tunnels
|
||||
@@ -98,6 +98,7 @@ class TestVxlan6(BridgeDomain, VppTestCase):
|
||||
register=False)
|
||||
rip.add_vpp_config()
|
||||
r = VppVxlanTunnel(cls, src=cls.pg0.local_ip6,
|
||||
src_port=port, dst_port=port,
|
||||
dst=dest_ip6, vni=vni)
|
||||
r.add_vpp_config()
|
||||
cls.vapi.sw_interface_set_l2_bridge(r.sw_if_index, bd_id=vni)
|
||||
@@ -120,7 +121,6 @@ class TestVxlan6(BridgeDomain, VppTestCase):
|
||||
super(TestVxlan6, cls).setUpClass()
|
||||
|
||||
try:
|
||||
cls.dport = 4789
|
||||
cls.flags = 0x8
|
||||
|
||||
# Create 2 pg interfaces.
|
||||
@@ -147,12 +147,17 @@ class TestVxlan6(BridgeDomain, VppTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestVxlan6, self).setUp()
|
||||
|
||||
def createVxLANInterfaces(self, port=4789):
|
||||
# Create VXLAN VTEP on VPP pg0, and put vxlan_tunnel0 and pg1
|
||||
# into BD.
|
||||
self.dport = port
|
||||
|
||||
self.single_tunnel_vni = 0x12345
|
||||
self.single_tunnel_bd = 1
|
||||
r = VppVxlanTunnel(self, src=self.pg0.local_ip6,
|
||||
dst=self.pg0.remote_ip6,
|
||||
src_port=self.dport, dst_port=self.dport,
|
||||
vni=self.single_tunnel_vni)
|
||||
r.add_vpp_config()
|
||||
self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
|
||||
@@ -164,8 +169,10 @@ class TestVxlan6(BridgeDomain, VppTestCase):
|
||||
self.n_ucast_tunnels = 10
|
||||
self.mcast_flood_bd = 2
|
||||
self.create_vxlan_flood_test_bd(self.mcast_flood_bd,
|
||||
self.n_ucast_tunnels)
|
||||
self.n_ucast_tunnels,
|
||||
self.dport)
|
||||
r = VppVxlanTunnel(self, src=self.pg0.local_ip6, dst=self.mcast_ip6,
|
||||
src_port=self.dport, dst_port=self.dport,
|
||||
mcast_sw_if_index=1, vni=self.mcast_flood_bd)
|
||||
r.add_vpp_config()
|
||||
self.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
|
||||
@@ -176,10 +183,14 @@ class TestVxlan6(BridgeDomain, VppTestCase):
|
||||
# Setup vni 3 to test unicast flooding
|
||||
self.ucast_flood_bd = 3
|
||||
self.create_vxlan_flood_test_bd(self.ucast_flood_bd,
|
||||
self.n_ucast_tunnels)
|
||||
self.n_ucast_tunnels,
|
||||
self.dport)
|
||||
self.vapi.sw_interface_set_l2_bridge(
|
||||
rx_sw_if_index=self.pg3.sw_if_index, bd_id=self.ucast_flood_bd)
|
||||
|
||||
# Set scapy listen custom port for VxLAN
|
||||
bind_layers(UDP, VXLAN, dport=self.dport)
|
||||
|
||||
# Method to define VPP actions before tear down of the test case.
|
||||
# Overrides tearDown method in VppTestCase class.
|
||||
# @param self The object pointer.
|
||||
@@ -192,11 +203,7 @@ class TestVxlan6(BridgeDomain, VppTestCase):
|
||||
self.logger.info(self.vapi.cli("show bridge-domain 3 detail"))
|
||||
self.logger.info(self.vapi.cli("show vxlan tunnel"))
|
||||
|
||||
def test_encap_fragmented_packet(self):
|
||||
""" Encapsulation test send fragments from pg1
|
||||
Verify receipt of encapsulated frames on pg0
|
||||
"""
|
||||
|
||||
def encap_fragmented_packet(self):
|
||||
frame = (Ether(src='00:00:00:00:00:02', dst='00:00:00:00:00:01') /
|
||||
IP(src='4.3.2.1', dst='1.2.3.4') /
|
||||
UDP(sport=20000, dport=10000) /
|
||||
@@ -221,6 +228,89 @@ class TestVxlan6(BridgeDomain, VppTestCase):
|
||||
|
||||
self.assertEqual(Ether(raw(frame))[IP], reassembled[IP])
|
||||
|
||||
"""
|
||||
Tests with default port (4789)
|
||||
"""
|
||||
def test_decap(self):
|
||||
""" Decapsulation test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan6, self).test_decap()
|
||||
|
||||
def test_encap(self):
|
||||
""" Encapsulation test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan6, self).test_encap()
|
||||
|
||||
def test_encap_fragmented_packet(self):
|
||||
""" Encapsulation test send fragments from pg1
|
||||
Verify receipt of encapsulated frames on pg0
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
self.encap_fragmented_packet()
|
||||
|
||||
def test_ucast_flood(self):
|
||||
""" Unicast flood test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan6, self).test_ucast_flood()
|
||||
|
||||
def test_mcast_flood(self):
|
||||
""" Multicast flood test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan6, self).test_mcast_flood()
|
||||
|
||||
def test_mcast_rcv(self):
|
||||
""" Multicast receive test
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces()
|
||||
super(TestVxlan6, self).test_mcast_rcv()
|
||||
|
||||
"""
|
||||
Tests with custom port
|
||||
"""
|
||||
def test_decap_custom_port(self):
|
||||
""" Decapsulation test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan6, self).test_decap()
|
||||
|
||||
def test_encap_custom_port(self):
|
||||
""" Encapsulation test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan6, self).test_encap()
|
||||
|
||||
def test_ucast_flood_custom_port(self):
|
||||
""" Unicast flood test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan6, self).test_ucast_flood()
|
||||
|
||||
def test_mcast_flood_custom_port(self):
|
||||
""" Multicast flood test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan6, self).test_mcast_flood()
|
||||
|
||||
def test_mcast_rcv_custom_port(self):
|
||||
""" Multicast receive test custom port
|
||||
from BridgeDoman
|
||||
"""
|
||||
self.createVxLANInterfaces(1111)
|
||||
super(TestVxlan6, self).test_mcast_rcv()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main(testRunner=VppTestRunner)
|
||||
|
@@ -3,13 +3,26 @@ from vpp_papi import VppEnum
|
||||
|
||||
|
||||
INDEX_INVALID = 0xffffffff
|
||||
DEFAULT_PORT = 4789
|
||||
UNDEFINED_PORT = 0
|
||||
|
||||
|
||||
def find_vxlan_tunnel(test, src, dst, vni):
|
||||
ts = test.vapi.vxlan_tunnel_dump(INDEX_INVALID)
|
||||
def find_vxlan_tunnel(test, src, dst, s_port, d_port, vni):
|
||||
ts = test.vapi.vxlan_tunnel_v2_dump(INDEX_INVALID)
|
||||
|
||||
src_port = DEFAULT_PORT
|
||||
if s_port != UNDEFINED_PORT:
|
||||
src_port = s_port
|
||||
|
||||
dst_port = DEFAULT_PORT
|
||||
if d_port != UNDEFINED_PORT:
|
||||
dst_port = d_port
|
||||
|
||||
for t in ts:
|
||||
if src == str(t.src_address) and \
|
||||
dst == str(t.dst_address) and \
|
||||
src_port == t.src_port and \
|
||||
dst_port == t.dst_port and \
|
||||
t.vni == vni:
|
||||
return t.sw_if_index
|
||||
return INDEX_INVALID
|
||||
@@ -20,7 +33,9 @@ class VppVxlanTunnel(VppInterface):
|
||||
VPP VXLAN interface
|
||||
"""
|
||||
|
||||
def __init__(self, test, src, dst, vni, mcast_itf=None,
|
||||
def __init__(self, test, src, dst, vni,
|
||||
src_port=UNDEFINED_PORT, dst_port=UNDEFINED_PORT,
|
||||
mcast_itf=None,
|
||||
mcast_sw_if_index=INDEX_INVALID,
|
||||
decap_next_index=INDEX_INVALID,
|
||||
encap_vrf_id=None, instance=0xffffffff):
|
||||
@@ -29,6 +44,8 @@ class VppVxlanTunnel(VppInterface):
|
||||
self.src = src
|
||||
self.dst = dst
|
||||
self.vni = vni
|
||||
self.src_port = src_port
|
||||
self.dst_port = dst_port
|
||||
self.mcast_itf = mcast_itf
|
||||
self.mcast_sw_if_index = mcast_sw_if_index
|
||||
self.encap_vrf_id = encap_vrf_id
|
||||
@@ -39,8 +56,9 @@ class VppVxlanTunnel(VppInterface):
|
||||
self.mcast_sw_if_index = self.mcast_itf.sw_if_index
|
||||
|
||||
def add_vpp_config(self):
|
||||
reply = self.test.vapi.vxlan_add_del_tunnel(
|
||||
reply = self.test.vapi.vxlan_add_del_tunnel_v2(
|
||||
is_add=1, src_address=self.src, dst_address=self.dst, vni=self.vni,
|
||||
src_port=self.src_port, dst_port=self.dst_port,
|
||||
mcast_sw_if_index=self.mcast_sw_if_index,
|
||||
encap_vrf_id=self.encap_vrf_id,
|
||||
instance=self.instance, decap_next_index=self.decap_next_index)
|
||||
@@ -48,8 +66,9 @@ class VppVxlanTunnel(VppInterface):
|
||||
self._test.registry.register(self, self._test.logger)
|
||||
|
||||
def remove_vpp_config(self):
|
||||
self.test.vapi.vxlan_add_del_tunnel(
|
||||
self.test.vapi.vxlan_add_del_tunnel_v2(
|
||||
is_add=0, src_address=self.src, dst_address=self.dst, vni=self.vni,
|
||||
src_port=self.src_port, dst_port=self.dst_port,
|
||||
mcast_sw_if_index=self.mcast_sw_if_index,
|
||||
encap_vrf_id=self.encap_vrf_id, instance=self.instance,
|
||||
decap_next_index=self.decap_next_index)
|
||||
@@ -58,6 +77,8 @@ class VppVxlanTunnel(VppInterface):
|
||||
return (INDEX_INVALID != find_vxlan_tunnel(self._test,
|
||||
self.src,
|
||||
self.dst,
|
||||
self.src_port,
|
||||
self.dst_port,
|
||||
self.vni))
|
||||
|
||||
def object_id(self):
|
||||
|
Reference in New Issue
Block a user