summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorNeale Ranns <neale.ranns@cisco.com>2018-09-05 15:42:26 -0700
committerNeale Ranns <nranns@cisco.com>2018-09-11 16:00:29 +0000
commitc0a93143412b4be7bba087bf633855aeeaee7c56 (patch)
treed3031d3a0af0963f75b54c169299425cd5d63319 /test
parent0d8cbc1b1503b633fd024e498e7664b489841075 (diff)
GBP Endpoint Updates
- common types on the API - endpoints keyed in various ways for DP lookup - conparison functions for VPP IP address types Change-Id: If7ec0bbc5cea71fd0983fe78987d147ec1bd7ec8 Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
Diffstat (limited to 'test')
-rw-r--r--test/test_abf.py3
-rw-r--r--test/test_bfd.py3
-rw-r--r--test/test_bier.py3
-rw-r--r--test/test_gbp.py490
-rw-r--r--test/test_gre.py3
-rw-r--r--test/test_ip6.py3
-rw-r--r--test/test_ip_mcast.py3
-rw-r--r--test/test_ipip.py3
-rw-r--r--test/test_map.py3
-rw-r--r--test/test_mpls.py3
-rw-r--r--test/test_mtu.py3
-rw-r--r--test/test_p2p_ethernet.py3
-rw-r--r--test/test_qos.py3
-rw-r--r--test/test_reassembly.py3
-rw-r--r--test/test_sixrd.py3
-rw-r--r--test/test_srmpls.py5
-rw-r--r--test/test_srv6_ad.py3
-rw-r--r--test/vpp_ip.py134
-rw-r--r--test/vpp_ip_route.py10
-rw-r--r--test/vpp_mac.py24
-rw-r--r--test/vpp_papi_provider.py28
-rw-r--r--test/vpp_udp_encap.py6
22 files changed, 432 insertions, 310 deletions
diff --git a/test/test_abf.py b/test/test_abf.py
index ce53e53fc98..fb30fc3018c 100644
--- a/test/test_abf.py
+++ b/test/test_abf.py
@@ -2,7 +2,8 @@
from framework import VppTestCase, VppTestRunner
from vpp_udp_encap import *
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable, DpoProto
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable
from scapy.packet import Raw
from scapy.layers.l2 import Ether, ARP
diff --git a/test/test_bfd.py b/test/test_bfd.py
index b3ac6356d2f..f14ff71b341 100644
--- a/test/test_bfd.py
+++ b/test/test_bfd.py
@@ -20,7 +20,8 @@ from vpp_pg_interface import CaptureTimeoutError, is_ipv6_misc
from vpp_lo_interface import VppLoInterface
from util import ppp
from vpp_papi_provider import UnexpectedApiReturnValueError
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath
USEC_IN_SEC = 1000000
diff --git a/test/test_bier.py b/test/test_bier.py
index c4f64bdbddd..0276f95c4fc 100644
--- a/test/test_bier.py
+++ b/test/test_bier.py
@@ -4,9 +4,10 @@ import unittest
import socket
from framework import VppTestCase, VppTestRunner, running_extended_tests
+from vpp_ip import DpoProto
from vpp_ip_route import VppIpRoute, VppRoutePath, VppMplsRoute, \
VppMplsTable, VppIpMRoute, VppMRoutePath, VppIpTable, \
- MRouteEntryFlags, MRouteItfFlags, MPLS_LABEL_INVALID, DpoProto, \
+ MRouteEntryFlags, MRouteItfFlags, MPLS_LABEL_INVALID, \
VppMplsLabel
from vpp_bier import *
from vpp_udp_encap import *
diff --git a/test/test_gbp.py b/test/test_gbp.py
index 894690b216d..0d5dd154be7 100644
--- a/test/test_gbp.py
+++ b/test/test_gbp.py
@@ -5,7 +5,10 @@ import unittest
from framework import VppTestCase, VppTestRunner
from vpp_object import VppObject
from vpp_neighbor import VppNeighbor
-from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable, DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable
+
+from vpp_ip import *
+from vpp_mac import *
from scapy.packet import Raw
from scapy.layers.l2 import Ether, ARP
@@ -19,6 +22,19 @@ from scapy.utils import inet_pton, inet_ntop
from util import mactobinary
+def find_gbp_endpoint(test, sw_if_index, ip=None, mac=None):
+ vip = VppIpAddress(ip)
+
+ eps = test.vapi.gbp_endpoint_dump()
+ for ep in eps:
+ if ep.endpoint.sw_if_index != sw_if_index:
+ continue
+ for eip in ep.endpoint.ips:
+ if vip == eip:
+ return True
+ return False
+
+
class VppGbpEndpoint(VppObject):
"""
GBP Endpoint
@@ -32,64 +48,67 @@ class VppGbpEndpoint(VppObject):
def mac(self):
return self.itf.remote_mac
- def __init__(self, test, itf, epg, recirc, ip, fip, is_ip6=False):
+ @property
+ def ip4(self):
+ return self._ip4
+
+ @property
+ def fip4(self):
+ return self._fip4
+
+ @property
+ def ip6(self):
+ return self._ip6
+
+ @property
+ def fip6(self):
+ return self._fip6
+
+ @property
+ def ips(self):
+ return [self.ip4, self.ip6]
+
+ @property
+ def fips(self):
+ return [self.fip4, self.fip6]
+
+ def __init__(self, test, itf, epg, recirc, ip4, fip4, ip6, fip6):
self._test = test
self.itf = itf
self.epg = epg
self.recirc = recirc
- self.ip = ip
- self.floating_ip = fip
- self.is_ip6 = is_ip6
- if is_ip6:
- self.proto = DpoProto.DPO_PROTO_IP6
- self.af = AF_INET6
- self.is_ip6 = True
- self.ip_len = 128
- else:
- self.proto = DpoProto.DPO_PROTO_IP4
- self.af = AF_INET
- self.is_ip6 = False
- self.ip_len = 32
- self.ip_n = inet_pton(self.af, ip)
- self.floating_ip_n = inet_pton(self.af, fip)
+
+ self._ip4 = VppIpAddress(ip4)
+ self._fip4 = VppIpAddress(fip4)
+ self._ip6 = VppIpAddress(ip6)
+ self._fip6 = VppIpAddress(fip6)
+
+ self.vmac = VppMacAddress(self.itf.remote_mac)
def add_vpp_config(self):
- self._test.vapi.gbp_endpoint_add_del(
- 1,
+ res = self._test.vapi.gbp_endpoint_add(
self.itf.sw_if_index,
- self.ip_n,
- self.is_ip6,
+ [self.ip4.encode(), self.ip6.encode()],
+ self.vmac.encode(),
self.epg.epg)
+ self.handle = res.handle
self._test.registry.register(self, self._test.logger)
def remove_vpp_config(self):
- self._test.vapi.gbp_endpoint_add_del(
- 0,
- self.itf.sw_if_index,
- self.ip_n,
- self.is_ip6,
- self.epg.epg)
+ self._test.vapi.gbp_endpoint_del(self.handle)
def __str__(self):
return self.object_id()
def object_id(self):
return "gbp-endpoint;[%d:%s:%d]" % (self.itf.sw_if_index,
- self.ip,
+ self.ip4.address,
self.epg.epg)
def query_vpp_config(self):
- eps = self._test.vapi.gbp_endpoint_dump()
- for ep in eps:
- if self.is_ip6:
- if ep.endpoint.address == self.ip_n \
- and ep.endpoint.sw_if_index == self.itf.sw_if_index:
- return True
- else:
- if ep.endpoint.address[:4] == self.ip_n \
- and ep.endpoint.sw_if_index == self.itf.sw_if_index:
- return True
- return False
+ return find_gbp_endpoint(self._test,
+ self.itf.sw_if_index,
+ self.ip4.address)
class VppGbpRecirc(VppObject):
@@ -138,17 +157,11 @@ class VppGbpSubnet(VppObject):
"""
def __init__(self, test, table_id, address, address_len,
- is_internal=True, is_ip6=False,
+ is_internal=True,
sw_if_index=None, epg=None):
self._test = test
self.table_id = table_id
- self.address = address
- self.address_len = address_len
- self.is_ip6 = is_ip6
- if is_ip6:
- self.address_n = inet_pton(AF_INET6, address)
- else:
- self.address_n = inet_pton(AF_INET, address)
+ self.prefix = VppIpPrefix(address, address_len)
self.is_internal = is_internal
self.sw_if_index = sw_if_index
self.epg = epg
@@ -158,11 +171,9 @@ class VppGbpSubnet(VppObject):
1,
self.table_id,
self.is_internal,
- self.address_n,
- self.address_len,
+ self.prefix.encode(),
sw_if_index=self.sw_if_index if self.sw_if_index else 0xffffffff,
- epg_id=self.epg if self.epg else 0xffff,
- is_ip6=self.is_ip6)
+ epg_id=self.epg if self.epg else 0xffff)
self._test.registry.register(self, self._test.logger)
def remove_vpp_config(self):
@@ -170,30 +181,21 @@ class VppGbpSubnet(VppObject):
0,
self.table_id,
self.is_internal,
- self.address_n,
- self.address_len,
- is_ip6=self.is_ip6)
+ self.prefix.encode())
def __str__(self):
return self.object_id()
def object_id(self):
- return "gbp-subnet;[%d:%s/%d]" % (self.table_id,
- self.address,
- self.address_len)
+ return "gbp-subnet;[%d-%s]" % (self.table_id,
+ self.prefix)
def query_vpp_config(self):
ss = self._test.vapi.gbp_subnet_dump()
for s in ss:
if s.subnet.table_id == self.table_id and \
- s.subnet.address_length == self.address_len and \
- s.subnet.is_ip6 == self.is_ip6:
- if self.is_ip6:
- if s.subnet.address == self.address_n:
- return True
- else:
- if s.subnet.address[:4] == self.address_n:
- return True
+ s.subnet.prefix == self.prefix:
+ return True
return False
@@ -481,43 +483,38 @@ class TestGBP(VppTestCase):
#
# 3 EPGs, 2 of which share a BD.
- #
- epgs = []
- recircs = []
- epgs.append(VppGbpEndpointGroup(self, 220, 0, 1, self.pg4,
- self.loop0,
- "10.0.0.128",
- "2001:10::128"))
- recircs.append(VppGbpRecirc(self, epgs[0],
- self.loop3))
- epgs.append(VppGbpEndpointGroup(self, 221, 0, 1, self.pg5,
- self.loop0,
- "10.0.1.128",
- "2001:10:1::128"))
- recircs.append(VppGbpRecirc(self, epgs[1],
- self.loop4))
- epgs.append(VppGbpEndpointGroup(self, 222, 0, 2, self.pg6,
- self.loop1,
- "10.0.2.128",
- "2001:10:2::128"))
- recircs.append(VppGbpRecirc(self, epgs[2],
- self.loop5))
-
- #
# 2 NAT EPGs, one for floating-IP subnets, the other for internet
#
- epgs.append(VppGbpEndpointGroup(self, 333, 20, 20, self.pg7,
- self.loop2,
- "11.0.0.128",
- "3001::128"))
- recircs.append(VppGbpRecirc(self, epgs[3],
- self.loop6, is_ext=True))
- epgs.append(VppGbpEndpointGroup(self, 444, 20, 20, self.pg8,
- self.loop2,
- "11.0.0.129",
- "3001::129"))
- recircs.append(VppGbpRecirc(self, epgs[4],
- self.loop8, is_ext=True))
+ epgs = [VppGbpEndpointGroup(self, 220, 0, 1, self.pg4,
+ self.loop0,
+ "10.0.0.128",
+ "2001:10::128"),
+ VppGbpEndpointGroup(self, 221, 0, 1, self.pg5,
+ self.loop0,
+ "10.0.1.128",
+ "2001:10:1::128"),
+ VppGbpEndpointGroup(self, 222, 0, 2, self.pg6,
+ self.loop1,
+ "10.0.2.128",
+ "2001:10:2::128"),
+ VppGbpEndpointGroup(self, 333, 20, 20, self.pg7,
+ self.loop2,
+ "11.0.0.128",
+ "3001::128"),
+ VppGbpEndpointGroup(self, 444, 20, 20, self.pg8,
+ self.loop2,
+ "11.0.0.129",
+ "3001::129")]
+ recircs = [VppGbpRecirc(self, epgs[0],
+ self.loop3),
+ VppGbpRecirc(self, epgs[1],
+ self.loop4),
+ VppGbpRecirc(self, epgs[2],
+ self.loop5),
+ VppGbpRecirc(self, epgs[3],
+ self.loop6, is_ext=True),
+ VppGbpRecirc(self, epgs[4],
+ self.loop8, is_ext=True)]
epg_nat = epgs[3]
recirc_nat = recircs[3]
@@ -525,43 +522,22 @@ class TestGBP(VppTestCase):
#
# 4 end-points, 2 in the same subnet, 3 in the same BD
#
- eps = []
- eps.append(VppGbpEndpoint(self, self.pg0,
- epgs[0], recircs[0],
- "10.0.0.1",
- "11.0.0.1"))
- eps.append(VppGbpEndpoint(self, self.pg1,
- epgs[0], recircs[0],
- "10.0.0.2",
- "11.0.0.2"))
- eps.append(VppGbpEndpoint(self, self.pg2,
- epgs[1], recircs[1],
- "10.0.1.1",
- "11.0.0.3"))
- eps.append(VppGbpEndpoint(self, self.pg3,
- epgs[2], recircs[2],
- "10.0.2.1",
- "11.0.0.4"))
- eps.append(VppGbpEndpoint(self, self.pg0,
- epgs[0], recircs[0],
- "2001:10::1",
- "3001::1",
- is_ip6=True))
- eps.append(VppGbpEndpoint(self, self.pg1,
- epgs[0], recircs[0],
- "2001:10::2",
- "3001::2",
- is_ip6=True))
- eps.append(VppGbpEndpoint(self, self.pg2,
- epgs[1], recircs[1],
- "2001:10:1::1",
- "3001::3",
- is_ip6=True))
- eps.append(VppGbpEndpoint(self, self.pg3,
- epgs[2], recircs[2],
- "2001:10:2::1",
- "3001::4",
- is_ip6=True))
+ eps = [VppGbpEndpoint(self, self.pg0,
+ epgs[0], recircs[0],
+ "10.0.0.1", "11.0.0.1",
+ "2001:10::1", "3001::1"),
+ VppGbpEndpoint(self, self.pg1,
+ epgs[0], recircs[0],
+ "10.0.0.2", "11.0.0.2",
+ "2001:10::2", "3001::2"),
+ VppGbpEndpoint(self, self.pg2,
+ epgs[1], recircs[1],
+ "10.0.1.1", "11.0.0.3",
+ "2001:10:1::1", "3001::3"),
+ VppGbpEndpoint(self, self.pg3,
+ epgs[2], recircs[2],
+ "10.0.2.1", "11.0.0.4",
+ "2001:10:2::1", "3001::4")]
#
# Config related to each of the EPGs
@@ -653,83 +629,91 @@ class TestGBP(VppTestCase):
# adj-fibs due to the fact the the BVI address has /32 and
# the subnet is not attached.
#
- r = VppIpRoute(self, ep.ip, ep.ip_len,
- [VppRoutePath(ep.ip,
- ep.epg.bvi.sw_if_index,
- proto=ep.proto)],
- is_ip6=ep.is_ip6)
- r.add_vpp_config()
- ep_routes.append(r)
-
- #
- # ARP entries for the endpoints
- #
- a = VppNeighbor(self,
- ep.epg.bvi.sw_if_index,
- ep.itf.remote_mac,
- ep.ip, af=ep.af)
- a.add_vpp_config()
- ep_arps.append(a)
+ for (ip, fip) in zip(ep.ips, ep.fips):
+ r = VppIpRoute(self, ip.address, ip.length,
+ [VppRoutePath(ip.address,
+ ep.epg.bvi.sw_if_index,
+ proto=ip.dpo_proto)],
+ is_ip6=ip.is_ip6)
+ r.add_vpp_config()
+ ep_routes.append(r)
+
+ #
+ # ARP entries for the endpoints
+ #
+ a = VppNeighbor(self,
+ ep.epg.bvi.sw_if_index,
+ ep.itf.remote_mac,
+ ip.address,
+ af=ip.af)
+ a.add_vpp_config()
+ ep_arps.append(a)
+
+ # add the BD ARP termination entry
+ self.vapi.bd_ip_mac_add_del(bd_id=ep.epg.bd,
+ mac=ep.bin_mac,
+ ip=ip.bytes,
+ is_ipv6=ip.is_ip6,
+ is_add=1)
+
+ # Add static mappings for each EP from the 10/8 to 11/8 network
+ if ip.af == AF_INET:
+ self.vapi.nat44_add_del_static_mapping(ip.bytes,
+ fip.bytes,
+ vrf_id=0,
+ addr_only=1)
+ else:
+ self.vapi.nat66_add_del_static_mapping(ip.bytes,
+ fip.bytes,
+ vrf_id=0)
# add each EP itf to the its BD
self.vapi.sw_interface_set_l2_bridge(ep.itf.sw_if_index,
ep.epg.bd)
- # add the BD ARP termination entry
- self.vapi.bd_ip_mac_add_del(bd_id=ep.epg.bd,
- mac=ep.bin_mac,
- ip=ep.ip_n,
- is_ipv6=0,
- is_add=1)
-
# L2 FIB entry
self.vapi.l2fib_add_del(ep.mac,
ep.epg.bd,
ep.itf.sw_if_index,
is_add=1)
- # Add static mappings for each EP from the 10/8 to 11/8 network
- if ep.af == AF_INET:
- self.vapi.nat44_add_del_static_mapping(ep.ip_n,
- ep.floating_ip_n,
- vrf_id=0,
- addr_only=1)
- else:
- self.vapi.nat66_add_del_static_mapping(ep.ip_n,
- ep.floating_ip_n,
- vrf_id=0)
-
# VPP EP create ...
ep.add_vpp_config()
+ self.logger.info(self.vapi.cli("sh gbp endpoint"))
+
# ... results in a Gratuitous ARP/ND on the EPG's uplink
- rx = ep.epg.uplink.get_capture(1, timeout=0.2)
+ rx = ep.epg.uplink.get_capture(len(ep.ips), timeout=0.2)
- if ep.is_ip6:
- self.assertTrue(rx[0].haslayer(ICMPv6ND_NA))
- self.assertEqual(rx[0][ICMPv6ND_NA].tgt, ep.ip)
- else:
- self.assertTrue(rx[0].haslayer(ARP))
- self.assertEqual(rx[0][ARP].psrc, ep.ip)
- self.assertEqual(rx[0][ARP].pdst, ep.ip)
+ for ii, ip in enumerate(ep.ips):
+ p = rx[ii]
- # add the BD ARP termination entry for floating IP
- self.vapi.bd_ip_mac_add_del(bd_id=epg_nat.bd,
- mac=ep.bin_mac,
- ip=ep.floating_ip_n,
- is_ipv6=ep.is_ip6,
- is_add=1)
+ if ip.is_ip6:
+ self.assertTrue(p.haslayer(ICMPv6ND_NA))
+ self.assertEqual(p[ICMPv6ND_NA].tgt, ip.address)
+ else:
+ self.assertTrue(p.haslayer(ARP))
+ self.assertEqual(p[ARP].psrc, ip.address)
+ self.assertEqual(p[ARP].pdst, ip.address)
- # floating IPs route via EPG recirc
- r = VppIpRoute(self, ep.floating_ip, ep.ip_len,
- [VppRoutePath(ep.floating_ip,
- ep.recirc.recirc.sw_if_index,
- is_dvr=1,
- proto=ep.proto)],
- table_id=20,
- is_ip6=ep.is_ip6)
- r.add_vpp_config()
- ep_routes.append(r)
+ # add the BD ARP termination entry for floating IP
+ for fip in ep.fips:
+ self.vapi.bd_ip_mac_add_del(bd_id=epg_nat.bd,
+ mac=ep.bin_mac,
+ ip=fip.bytes,
+ is_ipv6=fip.is_ip6,
+ is_add=1)
+
+ # floating IPs route via EPG recirc
+ r = VppIpRoute(self, fip.address, fip.length,
+ [VppRoutePath(fip.address,
+ ep.recirc.recirc.sw_if_index,
+ is_dvr=1,
+ proto=fip.dpo_proto)],
+ table_id=20,
+ is_ip6=fip.is_ip6)
+ r.add_vpp_config()
+ ep_routes.append(r)
# L2 FIB entries in the NAT EPG BD to bridge the packets from
# the outside direct to the internal EPG
@@ -760,14 +744,14 @@ class TestGBP(VppTestCase):
hwdst="ff:ff:ff:ff:ff:ff",
hwsrc=self.pg0.remote_mac,
pdst=epgs[0].bvi_ip4,
- psrc=eps[0].ip))
+ psrc=eps[0].ip4.address))
self.send_and_expect(self.pg0, [pkt_arp], self.pg0)
- nsma = in6_getnsma(inet_pton(AF_INET6, eps[4].ip))
+ nsma = in6_getnsma(inet_pton(AF_INET6, eps[0].ip6.address))
d = inet_ntop(AF_INET6, nsma)
pkt_nd = (Ether(dst=in6_getnsmac(nsma)) /
- IPv6(dst=d, src=eps[4].ip) /
+ IPv6(dst=d, src=eps[0].ip6.address) /
ICMPv6ND_NS(tgt=epgs[0].bvi_ip6) /
ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac))
self.send_and_expect(self.pg0, [pkt_nd], self.pg0)
@@ -777,7 +761,7 @@ class TestGBP(VppTestCase):
#
pkt_bcast = (Ether(dst="ff:ff:ff:ff:ff:ff",
src=self.pg0.remote_mac) /
- IP(src=eps[0].ip, dst="232.1.1.1") /
+ IP(src=eps[0].ip4.address, dst="232.1.1.1") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
@@ -797,12 +781,14 @@ class TestGBP(VppTestCase):
#
pkt_intra_epg_220_ip4 = (Ether(src=self.pg0.remote_mac,
dst=self.router_mac) /
- IP(src=eps[0].ip, dst="10.0.0.99") /
+ IP(src=eps[0].ip4.address,
+ dst="10.0.0.99") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
pkt_inter_epg_222_ip4 = (Ether(src=self.pg0.remote_mac,
dst=self.router_mac) /
- IP(src=eps[0].ip, dst="10.0.1.99") /
+ IP(src=eps[0].ip4.address,
+ dst="10.0.1.99") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
@@ -810,7 +796,8 @@ class TestGBP(VppTestCase):
pkt_inter_epg_222_ip6 = (Ether(src=self.pg0.remote_mac,
dst=self.router_mac) /
- IPv6(src=eps[4].ip, dst="2001:10::99") /
+ IPv6(src=eps[0].ip6.address,
+ dst="2001:10::99") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
self.send_and_assert_no_replies(self.pg0, pkt_inter_epg_222_ip6 * 65)
@@ -824,9 +811,9 @@ class TestGBP(VppTestCase):
s41.add_vpp_config()
s42.add_vpp_config()
s43.add_vpp_config()
- s61 = VppGbpSubnet(self, 0, "2001:10::1", 64, is_ip6=True)
- s62 = VppGbpSubnet(self, 0, "2001:10:1::1", 64, is_ip6=True)
- s63 = VppGbpSubnet(self, 0, "2001:10:2::1", 64, is_ip6=True)
+ s61 = VppGbpSubnet(self, 0, "2001:10::1", 64)
+ s62 = VppGbpSubnet(self, 0, "2001:10:1::1", 64)
+ s63 = VppGbpSubnet(self, 0, "2001:10:2::1", 64)
s61.add_vpp_config()
s62.add_vpp_config()
s63.add_vpp_config()
@@ -856,7 +843,8 @@ class TestGBP(VppTestCase):
#
pkt_intra_epg_220_to_uplink = (Ether(src=self.pg0.remote_mac,
dst="00:00:00:33:44:55") /
- IP(src=eps[0].ip, dst="10.0.0.99") /
+ IP(src=eps[0].ip4.address,
+ dst="10.0.0.99") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
@@ -869,7 +857,8 @@ class TestGBP(VppTestCase):
pkt_intra_epg_221_to_uplink = (Ether(src=self.pg2.remote_mac,
dst="00:00:00:33:44:66") /
- IP(src=eps[0].ip, dst="10.0.0.99") /
+ IP(src=eps[0].ip4.address,
+ dst="10.0.0.99") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
@@ -882,7 +871,8 @@ class TestGBP(VppTestCase):
#
pkt_intra_epg_220_from_uplink = (Ether(src="00:00:00:33:44:55",
dst=self.pg0.remote_mac) /
- IP(src=eps[0].ip, dst="10.0.0.99") /
+ IP(src=eps[0].ip4.address,
+ dst="10.0.0.99") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
@@ -896,7 +886,8 @@ class TestGBP(VppTestCase):
#
pkt_intra_epg = (Ether(src=self.pg0.remote_mac,
dst=self.pg1.remote_mac) /
- IP(src=eps[0].ip, dst=eps[1].ip) /
+ IP(src=eps[0].ip4.address,
+ dst=eps[1].ip4.address) /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
@@ -908,17 +899,20 @@ class TestGBP(VppTestCase):
#
pkt_inter_epg_220_to_221 = (Ether(src=self.pg0.remote_mac,
dst=self.pg2.remote_mac) /
- IP(src=eps[0].ip, dst=eps[2].ip) /
+ IP(src=eps[0].ip4.address,
+ dst=eps[2].ip4.address) /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
pkt_inter_epg_221_to_220 = (Ether(src=self.pg2.remote_mac,
dst=self.pg0.remote_mac) /
- IP(src=eps[2].ip, dst=eps[0].ip) /
+ IP(src=eps[2].ip4.address,
+ dst=eps[0].ip4.address) /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
pkt_inter_epg_220_to_222 = (Ether(src=self.pg0.remote_mac,
dst=self.router_mac) /
- IP(src=eps[0].ip, dst=eps[3].ip) /
+ IP(src=eps[0].ip4.address,
+ dst=eps[3].ip4.address) /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
@@ -1008,8 +1002,7 @@ class TestGBP(VppTestCase):
se16 = VppGbpSubnet(self, 0, "::", 0,
is_internal=False,
sw_if_index=recirc_nat.recirc.sw_if_index,
- epg=epg_nat.epg,
- is_ip6=True)
+ epg=epg_nat.epg)
se16.add_vpp_config()
# in the NAT RD an external subnet via the NAT EPG's uplink
se3 = VppGbpSubnet(self, 20, "0.0.0.0", 0,
@@ -1019,8 +1012,7 @@ class TestGBP(VppTestCase):
se36 = VppGbpSubnet(self, 20, "::", 0,
is_internal=False,
sw_if_index=epg_nat.uplink.sw_if_index,
- epg=epg_nat.epg,
- is_ip6=True)
+ epg=epg_nat.epg)
se4 = VppGbpSubnet(self, 20, "11.0.0.0", 8,
is_internal=False,
sw_if_index=epg_nat.uplink.sw_if_index,
@@ -1033,14 +1025,15 @@ class TestGBP(VppTestCase):
self.logger.info(self.vapi.cli("sh ip fib 11.0.0.1"))
self.logger.info(self.vapi.cli("sh ip6 fib ::/0"))
self.logger.info(self.vapi.cli("sh ip6 fib %s" %
- eps[4].floating_ip))
+ eps[0].fip6))
#
# From an EP to an outside addess: IN2OUT
#
pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac,
dst=self.router_mac) /
- IP(src=eps[0].ip, dst="1.1.1.1") /
+ IP(src=eps[0].ip4.address,
+ dst="1.1.1.1") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
@@ -1062,25 +1055,26 @@ class TestGBP(VppTestCase):
self.send_and_expect_natted(self.pg0,
pkt_inter_epg_220_to_global * 65,
self.pg7,
- eps[0].floating_ip)
+ eps[0].fip4.address)
pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac,
dst=self.router_mac) /
- IPv6(src=eps[4].ip, dst="6001::1") /
+ IPv6(src=eps[0].ip6.address,
+ dst="6001::1") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
self.send_and_expect_natted6(self.pg0,
pkt_inter_epg_220_to_global * 65,
self.pg7,
- eps[4].floating_ip)
+ eps[0].fip6.address)
#
# From a global address to an EP: OUT2IN
#
pkt_inter_epg_220_from_global = (Ether(src=self.router_mac,
dst=self.pg0.remote_mac) /
- IP(dst=eps[0].floating_ip,
+ IP(dst=eps[0].fip4.address,
src="1.1.1.1") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
@@ -1094,19 +1088,19 @@ class TestGBP(VppTestCase):
self.send_and_expect_unnatted(self.pg7,
pkt_inter_epg_220_from_global * 65,
eps[0].itf,
- eps[0].ip)
+ eps[0].ip4.address)
pkt_inter_epg_220_from_global = (Ether(src=self.router_mac,
dst=self.pg0.remote_mac) /
- IPv6(dst=eps[4].floating_ip,
+ IPv6(dst=eps[0].fip6.address,
src="6001::1") /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
self.send_and_expect_unnatted6(self.pg7,
pkt_inter_epg_220_from_global * 65,
- eps[4].itf,
- eps[4].ip)
+ eps[0].itf,
+ eps[0].ip6.address)
#
# From a local VM to another local VM using resp. public addresses:
@@ -1114,46 +1108,44 @@ class TestGBP(VppTestCase):
#
pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac,
dst=self.router_mac) /
- IP(src=eps[0].ip,
- dst=eps[1].floating_ip) /
+ IP(src=eps[0].ip4.address,
+ dst=eps[1].fip4.address) /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
self.send_and_expect_double_natted(eps[0].itf,
pkt_intra_epg_220_global * 65,
eps[1].itf,
- eps[0].floating_ip,
- eps[1].ip)
+ eps[0].fip4.address,
+ eps[1].ip4.address)
- pkt_intra_epg_220_global = (Ether(src=self.pg4.remote_mac,
+ pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac,
dst=self.router_mac) /
- IPv6(src=eps[4].ip,
- dst=eps[5].floating_ip) /
+ IPv6(src=eps[0].ip6.address,
+ dst=eps[1].fip6.address) /
UDP(sport=1234, dport=1234) /
Raw('\xa5' * 100))
- self.send_and_expect_double_natted6(eps[4].itf,
+ self.send_and_expect_double_natted6(eps[0].itf,
pkt_intra_epg_220_global * 65,
- eps[5].itf,
- eps[4].floating_ip,
- eps[5].ip)
+ eps[1].itf,
+ eps[0].fip6.address,
+ eps[1].ip6.address)
#
# cleanup
#
for ep in eps:
# del static mappings for each EP from the 10/8 to 11/8 network
- if ep.af == AF_INET:
- self.vapi.nat44_add_del_static_mapping(ep.ip_n,
- ep.floating_ip_n,
- vrf_id=0,
- addr_only=1,
- is_add=0)
- else:
- self.vapi.nat66_add_del_static_mapping(ep.ip_n,
- ep.floating_ip_n,
- vrf_id=0,
- is_add=0)
+ self.vapi.nat44_add_del_static_mapping(ep.ip4.bytes,
+ ep.fip4.bytes,
+ vrf_id=0,
+ addr_only=1,
+ is_add=0)
+ self.vapi.nat66_add_del_static_mapping(ep.ip6.bytes,
+ ep.fip6.bytes,
+ vrf_id=0,
+ is_add=0)
for epg in epgs:
# IP config on the BVI interfaces
diff --git a/test/test_gre.py b/test/test_gre.py
index 2559381b1f4..4d40b3b64a1 100644
--- a/test/test_gre.py
+++ b/test/test_gre.py
@@ -6,7 +6,8 @@ from logging import *
from framework import VppTestCase, VppTestRunner
from vpp_sub_interface import VppDot1QSubint
from vpp_gre_interface import VppGreInterface, VppGre6Interface
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto, VppIpTable
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable
from vpp_papi_provider import L2_VTR_OP
from scapy.packet import Raw
diff --git a/test/test_ip6.py b/test/test_ip6.py
index 9a0c752ebfd..95f9229ea5a 100644
--- a/test/test_ip6.py
+++ b/test/test_ip6.py
@@ -7,9 +7,10 @@ from framework import VppTestCase, VppTestRunner
from util import ppp, ip6_normalize
from vpp_sub_interface import VppSubInterface, VppDot1QSubint
from vpp_pg_interface import is_ipv6_misc
+from vpp_ip import DpoProto
from vpp_ip_route import VppIpRoute, VppRoutePath, find_route, VppIpMRoute, \
VppMRoutePath, MRouteItfFlags, MRouteEntryFlags, VppMplsIpBind, \
- VppMplsRoute, DpoProto, VppMplsTable, VppIpTable
+ VppMplsRoute, VppMplsTable, VppIpTable
from vpp_neighbor import find_nbr, VppNeighbor
from scapy.packet import Raw
diff --git a/test/test_ip_mcast.py b/test/test_ip_mcast.py
index 9c216d5657d..64eb304a29e 100644
--- a/test/test_ip_mcast.py
+++ b/test/test_ip_mcast.py
@@ -3,8 +3,9 @@
import unittest
from framework import VppTestCase, VppTestRunner
+from vpp_ip import DpoProto
from vpp_ip_route import VppIpMRoute, VppMRoutePath, VppMFibSignal, \
- MRouteItfFlags, MRouteEntryFlags, VppIpTable, DpoProto
+ MRouteItfFlags, MRouteEntryFlags, VppIpTable
from scapy.packet import Raw
from scapy.layers.l2 import Ether
diff --git a/test/test_ipip.py b/test/test_ipip.py
index 5754bd0366b..350eae0fded 100644
--- a/test/test_ipip.py
+++ b/test/test_ipip.py
@@ -5,7 +5,8 @@ import unittest
from scapy.layers.inet6 import IPv6, Ether, IP, UDP
from scapy.all import fragment, RandShort
from framework import VppTestCase, VppTestRunner
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto, VppIpTable
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable
from socket import AF_INET, AF_INET6, inet_pton
import StringIO
diff --git a/test/test_map.py b/test/test_map.py
index c5e193a975f..1a53492f136 100644
--- a/test/test_map.py
+++ b/test/test_map.py
@@ -4,7 +4,8 @@ import unittest
import socket
from framework import VppTestCase, VppTestRunner
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath
from scapy.layers.l2 import Ether, Raw
from scapy.layers.inet import IP, UDP, ICMP
diff --git a/test/test_mpls.py b/test/test_mpls.py
index 33fed680dbe..d943f8281e9 100644
--- a/test/test_mpls.py
+++ b/test/test_mpls.py
@@ -4,9 +4,10 @@ import unittest
import socket
from framework import VppTestCase, VppTestRunner
+from vpp_ip import DpoProto
from vpp_ip_route import VppIpRoute, VppRoutePath, VppMplsRoute, \
VppMplsIpBind, VppIpMRoute, VppMRoutePath, \
- MRouteItfFlags, MRouteEntryFlags, DpoProto, VppIpTable, VppMplsTable, \
+ MRouteItfFlags, MRouteEntryFlags, VppIpTable, VppMplsTable, \
VppMplsLabel, MplsLspMode
from vpp_mpls_tunnel_interface import VppMPLSTunnelInterface
diff --git a/test/test_mtu.py b/test/test_mtu.py
index d6be2e2afb5..a70d5135c17 100644
--- a/test/test_mtu.py
+++ b/test/test_mtu.py
@@ -12,7 +12,8 @@ import unittest
from scapy.layers.inet6 import IPv6, Ether, IP, UDP, ICMPv6PacketTooBig
from scapy.layers.inet import ICMP
from framework import VppTestCase, VppTestRunner
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath
from socket import AF_INET, AF_INET6, inet_pton
import StringIO
diff --git a/test/test_p2p_ethernet.py b/test/test_p2p_ethernet.py
index d6d5c5071c4..c901eeac39c 100644
--- a/test/test_p2p_ethernet.py
+++ b/test/test_p2p_ethernet.py
@@ -11,7 +11,8 @@ from scapy.layers.inet6 import IPv6
from framework import VppTestCase, VppTestRunner
from vpp_sub_interface import VppP2PSubint
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath
from util import mactobinary
diff --git a/test/test_qos.py b/test/test_qos.py
index 76fa8a11b6e..49165502bd7 100644
--- a/test/test_qos.py
+++ b/test/test_qos.py
@@ -5,8 +5,9 @@ import unittest
from framework import VppTestCase, VppTestRunner
from vpp_papi_provider import QOS_SOURCE
from vpp_sub_interface import VppDot1QSubint
+from vpp_ip import DpoProto
from vpp_ip_route import VppIpRoute, VppRoutePath, VppMplsRoute, \
- VppMplsLabel, VppMplsTable, DpoProto
+ VppMplsLabel, VppMplsTable
from scapy.packet import Raw
from scapy.layers.l2 import Ether, Dot1Q
diff --git a/test/test_reassembly.py b/test/test_reassembly.py
index 76aabcb3fb7..b2c271decac 100644
--- a/test/test_reassembly.py
+++ b/test/test_reassembly.py
@@ -11,7 +11,8 @@ from util import ppp, fragment_rfc791, fragment_rfc8200
from scapy.layers.inet6 import IPv6, IPv6ExtHdrFragment, ICMPv6ParamProblem,\
ICMPv6TimeExceeded
from vpp_gre_interface import VppGreInterface, VppGre6Interface
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath
test_packet_count = 257
diff --git a/test/test_sixrd.py b/test/test_sixrd.py
index 7656c3f4e7c..a469ac5bab6 100644
--- a/test/test_sixrd.py
+++ b/test/test_sixrd.py
@@ -6,7 +6,8 @@ from scapy.layers.inet import IP, UDP, Ether
from scapy.layers.inet6 import IPv6
from scapy.packet import Raw
from framework import VppTestCase, VppTestRunner
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto, VppIpTable
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable
from socket import AF_INET, AF_INET6, inet_pton
""" Test6rd is a subclass of VPPTestCase classes.
diff --git a/test/test_srmpls.py b/test/test_srmpls.py
index ded4a71fa40..756405ab6d7 100644
--- a/test/test_srmpls.py
+++ b/test/test_srmpls.py
@@ -4,10 +4,9 @@ import unittest
import socket
from framework import VppTestCase, VppTestRunner
+from vpp_ip import DpoProto
from vpp_ip_route import VppIpRoute, VppRoutePath, VppMplsRoute, \
- VppMplsIpBind, VppIpMRoute, VppMRoutePath, \
- MRouteItfFlags, MRouteEntryFlags, DpoProto, VppIpTable, VppMplsTable, \
- VppMplsLabel, MplsLspMode
+ VppIpTable, VppMplsTable, VppMplsLabel
from vpp_mpls_tunnel_interface import VppMPLSTunnelInterface
from scapy.packet import Raw
diff --git a/test/test_srv6_ad.py b/test/test_srv6_ad.py
index 75d9d12da48..299f34315e5 100644
--- a/test/test_srv6_ad.py
+++ b/test/test_srv6_ad.py
@@ -5,7 +5,8 @@ import binascii
from socket import AF_INET6
from framework import VppTestCase, VppTestRunner
-from vpp_ip_route import VppIpRoute, VppRoutePath, DpoProto, VppIpTable
+from vpp_ip import DpoProto
+from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable
from vpp_srv6 import SRv6LocalSIDBehaviors, VppSRv6LocalSID, VppSRv6Policy, \
SRv6PolicyType, VppSRv6Steering, SRv6PolicySteeringTypes
diff --git a/test/vpp_ip.py b/test/vpp_ip.py
index 912d8430d81..e44e6b56e30 100644
--- a/test/vpp_ip.py
+++ b/test/vpp_ip.py
@@ -4,6 +4,7 @@
"""
from ipaddress import ip_address
+from socket import AF_INET, AF_INET6
class IpAddressFamily:
@@ -11,17 +12,16 @@ class IpAddressFamily:
ADDRESS_IP6 = 1
-INVALID_INDEX = 0xffffffff
+class DpoProto:
+ DPO_PROTO_IP4 = 0
+ DPO_PROTO_IP6 = 1
+ DPO_PROTO_MPLS = 2
+ DPO_PROTO_ETHERNET = 3
+ DPO_PROTO_BIER = 4
+ DPO_PROTO_NSH = 5
-def compare_ip_address(api_address, py_address):
- if 4 is py_address.version:
- if py_address.packed == api_address.ip4.address:
- return True
- else:
- if py_address.packed == api_address.ip6.address:
- return True
- return False
+INVALID_INDEX = 0xffffffff
class VppIpAddressUnion():
@@ -29,16 +29,8 @@ class VppIpAddressUnion():
self.addr = addr
self.ip_addr = ip_address(unicode(self.addr))
- @property
- def version(self):
- return self.ip_addr.version
-
- @property
- def address(self):
- return self.addr
-
def encode(self):
- if self.ip_addr.version is 6:
+ if self.version is 6:
return {
'ip6': {
'address': self.ip_addr.packed
@@ -51,6 +43,41 @@ class VppIpAddressUnion():
},
}
+ @property
+ def version(self):
+ return self.ip_addr.version
+
+ @property
+ def address(self):
+ return self.addr
+
+ @property
+ def length(self):
+ if self.version is 6:
+ return 128
+ else:
+ return 32
+
+ @property
+ def bytes(self):
+ return self.ip_addr.packed
+
+ def __eq__(self, other):
+ if isinstance(other, self.__class__):
+ return self.ip_addr == other.ip_addr
+ elif hasattr(other, "ip4") and hasattr(other, "ip6"):
+ # vl_api_address_union_t
+ if 4 is self.version:
+ return self.ip_addr.packed == other.ip4.address
+ else:
+ return self.ip_addr.packed == other.ip6.address
+ else:
+ raise Exception("Comparing VppIpAddresUnions:%s"
+ " with unknown type: %s" %
+ (self, other))
+
+ return False
+
class VppIpAddress():
def __init__(self, addr):
@@ -68,10 +95,62 @@ class VppIpAddress():
'un': self.addr.encode()
}
+ def __eq__(self, other):
+ if isinstance(other, self.__class__):
+ return self.addr == other.addr
+ elif hasattr(other, "af") and hasattr(other, "un"):
+ # a vp_api_address_t
+ if 4 is self.version:
+ return other.af == IpAddressFamily.ADDRESS_IP4 and \
+ other.un == self.addr
+ else:
+ return other.af == IpAddressFamily.ADDRESS_IP6 and \
+ other.un == self.addr
+ else:
+ raise Exception("Comparing VppIpAddress:%s with unknown type: %s" %
+ (self, other))
+ return False
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ def __str__(self):
+ return self.address
+
+ @property
+ def bytes(self):
+ return self.addr.bytes
+
@property
def address(self):
return self.addr.address
+ @property
+ def length(self):
+ return self.addr.length
+
+ @property
+ def version(self):
+ return self.addr.version
+
+ @property
+ def is_ip6(self):
+ return (self.version == 6)
+
+ @property
+ def af(self):
+ if self.version == 6:
+ return AF_INET6
+ else:
+ return AF_INET
+
+ @property
+ def dpo_proto(self):
+ if self.version is 6:
+ return DpoProto.DPO_PROTO_IP6
+ else:
+ return DpoProto.DPO_PROTO_IP4
+
class VppIpPrefix():
def __init__(self, addr, len):
@@ -91,6 +170,25 @@ class VppIpPrefix():
def address(self):
return self.addr.address
+ @property
+ def length(self):
+ return self.len
+
+ def __str__(self):
+ return "%s/%d" % (self.address, self.length)
+
+ def __eq__(self, other):
+ if isinstance(other, self.__class__):
+ return (self.len == other.len and self.addr == other.addr)
+ elif hasattr(other, "address") and hasattr(other, "address_length"):
+ # vl_api_prefix_t
+ return self.len == other.address_length and \
+ self.addr == other.address
+ else:
+ raise Exception("Comparing VppIpPrefix:%s with unknown type: %s" %
+ (self, other))
+ return False
+
class VppIpMPrefix():
def __init__(self, saddr, gaddr, len):
diff --git a/test/vpp_ip_route.py b/test/vpp_ip_route.py
index 216f5c7b2c1..9d6bfb77d93 100644
--- a/test/vpp_ip_route.py
+++ b/test/vpp_ip_route.py
@@ -6,6 +6,7 @@
from vpp_object import *
from socket import inet_pton, inet_ntop, AF_INET, AF_INET6
+from vpp_ip import *
# from vnet/vnet/mpls/mpls_types.h
MPLS_IETF_MAX_LABEL = 0xfffff
@@ -29,15 +30,6 @@ class MRouteEntryFlags:
MFIB_ENTRY_FLAG_INHERIT_ACCEPT = 8
-class DpoProto:
- DPO_PROTO_IP4 = 0
- DPO_PROTO_IP6 = 1
- DPO_PROTO_MPLS = 2
- DPO_PROTO_ETHERNET = 3
- DPO_PROTO_BIER = 4
- DPO_PROTO_NSH = 5
-
-
class MplsLspMode:
PIPE = 0
UNIFORM = 1
diff --git a/test/vpp_mac.py b/test/vpp_mac.py
new file mode 100644
index 00000000000..c9ee11e6658
--- /dev/null
+++ b/test/vpp_mac.py
@@ -0,0 +1,24 @@
+"""
+ MAC Types
+
+"""
+
+from util import mactobinary
+
+
+class VppMacAddress():
+ def __init__(self, addr):
+ self.address = addr
+
+ def encode(self):
+ return {
+ 'bytes': self.bytes
+ }
+
+ @property
+ def bytes(self):
+ return mactobinary(self.address)
+
+ @property
+ def address(self):
+ return self.addr.address
diff --git a/test/vpp_papi_provider.py b/test/vpp_papi_provider.py
index b575b8ad6ac..3028a25b70b 100644
--- a/test/vpp_papi_provider.py
+++ b/test/vpp_papi_provider.py
@@ -3432,15 +3432,20 @@ class VppPapiProvider(object):
'enable_ip6': 1 if enable_ip6 else 0,
})
- def gbp_endpoint_add_del(self, is_add, sw_if_index, addr, is_ip6, epg):
- """ GBP endpoint Add/Del """
- return self.api(self.papi.gbp_endpoint_add_del,
- {'is_add': is_add,
- 'endpoint': {
- 'is_ip6': is_ip6,
- 'sw_if_index': sw_if_index,
- 'address': addr,
- 'epg_id': epg}})
+ def gbp_endpoint_add(self, sw_if_index, ips, mac, epg):
+ """ GBP endpoint Add """
+ return self.api(self.papi.gbp_endpoint_add,
+ {'endpoint': {
+ 'sw_if_index': sw_if_index,
+ 'ips': ips,
+ 'n_ips': len(ips),
+ 'mac': mac,
+ 'epg_id': epg}})
+
+ def gbp_endpoint_del(self, handle):
+ """ GBP endpoint Del """
+ return self.api(self.papi.gbp_endpoint_del,
+ {'handle': handle})
def gbp_endpoint_dump(self):
""" GBP endpoint Dump """
@@ -3479,7 +3484,7 @@ class VppPapiProvider(object):
def gbp_subnet_add_del(self, is_add, table_id,
is_internal,
- addr, addr_len,
+ prefix,
sw_if_index=0xffffffff,
epg_id=0xffff,
is_ip6=False):
@@ -3491,8 +3496,7 @@ class VppPapiProvider(object):
'is_ip6': is_ip6,
'sw_if_index': sw_if_index,
'epg_id': epg_id,
- 'address': addr,
- 'address_length': addr_len,
+ 'prefix': prefix,
'table_id': table_id}})
def gbp_subnet_dump(self):
diff --git a/test/vpp_udp_encap.py b/test/vpp_udp_encap.py
index 002f9f4023a..826378b4de8 100644
--- a/test/vpp_udp_encap.py
+++ b/test/vpp_udp_encap.py
@@ -12,10 +12,8 @@ def find_udp_encap(test, ue):
encaps = test.vapi.udp_encap_dump()
for e in encaps:
if ue.id == e.udp_encap.id \
- and compare_ip_address(e.udp_encap.src_ip.un,
- ue.src_ip.addr.ip_addr) \
- and compare_ip_address(e.udp_encap.dst_ip.un,
- ue.dst_ip.addr.ip_addr) \
+ and ue.src_ip == e.udp_encap.src_ip \
+ and ue.dst_ip == e.udp_encap.dst_ip \
and e.udp_encap.dst_port == ue.dst_port \
and e.udp_encap.src_port == ue.src_port:
return True