From 4d5b917b1a74461abaa30182d4bf5c7761572323 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Wed, 24 Oct 2018 02:57:49 -0700 Subject: [PATCH] BD ARP entry use common API types Change-Id: I29f20dbaf2c2d735faff297cee552ed648f6f61b Signed-off-by: Neale Ranns --- extras/vom/vom/bridge_domain_arp_entry_cmds.cpp | 9 ++-- src/vat/api_format.c | 24 ++++----- src/vnet/ethernet/mac_address.h | 18 +++++-- src/vnet/l2/l2.api | 9 ++-- src/vnet/l2/l2_api.c | 20 +++++--- src/vnet/l2/l2_bd.c | 67 ++++++++++++------------ src/vnet/l2/l2_bd.h | 6 ++- src/vpp/api/custom_dump.c | 11 ++-- test/test_gbp.py | 68 ++++++++++++------------- test/test_l2bd_arp_term.py | 9 ++-- test/vpp_papi_provider.py | 4 +- 11 files changed, 131 insertions(+), 114 deletions(-) diff --git a/extras/vom/vom/bridge_domain_arp_entry_cmds.cpp b/extras/vom/vom/bridge_domain_arp_entry_cmds.cpp index 188d7738a6c..4e5dfb0f2f4 100644 --- a/extras/vom/vom/bridge_domain_arp_entry_cmds.cpp +++ b/extras/vom/vom/bridge_domain_arp_entry_cmds.cpp @@ -14,6 +14,7 @@ */ #include "vom/bridge_domain_arp_entry_cmds.hpp" +#include "vom/api_types.hpp" namespace VOM { namespace bridge_domain_arp_entry_cmds { @@ -44,8 +45,8 @@ create_cmd::issue(connection& con) auto& payload = req.get_request().get_payload(); payload.bd_id = m_bd; payload.is_add = 1; - m_mac.to_bytes(payload.mac_address, 6); - to_bytes(m_ip_addr, &payload.is_ipv6, payload.ip_address); + payload.mac = to_api(m_mac); + payload.ip = to_api(m_ip_addr); VAPI_CALL(req.execute()); @@ -89,8 +90,8 @@ delete_cmd::issue(connection& con) auto& payload = req.get_request().get_payload(); payload.bd_id = m_bd; payload.is_add = 0; - m_mac.to_bytes(payload.mac_address, 6); - to_bytes(m_ip_addr, &payload.is_ipv6, payload.ip_address); + payload.mac = to_api(m_mac); + payload.ip = to_api(m_ip_addr); VAPI_CALL(req.execute()); diff --git a/src/vat/api_format.c b/src/vat/api_format.c index 8b8d0c9fdc0..8b56f7693eb 100644 --- a/src/vat/api_format.c +++ b/src/vat/api_format.c @@ -7826,16 +7826,17 @@ api_bridge_flags (vat_main_t * vam) static int api_bd_ip_mac_add_del (vat_main_t * vam) { + vl_api_address_t ip = VL_API_ZERO_ADDRESS; + vl_api_mac_address_t mac = VL_API_ZERO_MAC_ADDRESS; unformat_input_t *i = vam->input; vl_api_bd_ip_mac_add_del_t *mp; + ip46_type_t type; u32 bd_id; u8 is_ipv6 = 0; u8 is_add = 1; u8 bd_id_set = 0; u8 ip_set = 0; u8 mac_set = 0; - ip4_address_t v4addr; - ip6_address_t v6addr; u8 macaddr[6]; int ret; @@ -7847,16 +7848,11 @@ api_bd_ip_mac_add_del (vat_main_t * vam) { bd_id_set++; } - else if (unformat (i, "%U", unformat_ip4_address, &v4addr)) + else if (unformat (i, "%U", unformat_vl_api_address, &ip)) { ip_set++; } - else if (unformat (i, "%U", unformat_ip6_address, &v6addr)) - { - ip_set++; - is_ipv6++; - } - else if (unformat (i, "%U", unformat_ethernet_address, macaddr)) + else if (unformat (i, "%U", unformat_vl_api_mac_address, &mac)) { mac_set++; } @@ -7885,13 +7881,11 @@ api_bd_ip_mac_add_del (vat_main_t * vam) M (BD_IP_MAC_ADD_DEL, mp); mp->bd_id = ntohl (bd_id); - mp->is_ipv6 = is_ipv6; mp->is_add = is_add; - if (is_ipv6) - clib_memcpy (mp->ip_address, &v6addr, sizeof (v6addr)); - else - clib_memcpy (mp->ip_address, &v4addr, sizeof (v4addr)); - clib_memcpy (mp->mac_address, macaddr, 6); + + clib_memcpy (&mp->ip, &ip, sizeof (ip)); + clib_memcpy (&mp->mac, &mac, sizeof (mac)); + S (mp); W (ret); return ret; diff --git a/src/vnet/ethernet/mac_address.h b/src/vnet/ethernet/mac_address.h index 8e1559b8654..7b4390dfb48 100644 --- a/src/vnet/ethernet/mac_address.h +++ b/src/vnet/ethernet/mac_address.h @@ -20,7 +20,11 @@ typedef struct mac_address_t_ { - u8 bytes[6]; + union + { + u8 bytes[6]; + u64 as_u64; + }; } mac_address_t; extern const mac_address_t ZERO_MAC_ADDRESS; @@ -28,25 +32,29 @@ extern const mac_address_t ZERO_MAC_ADDRESS; static_always_inline void mac_address_from_bytes (mac_address_t * mac, const u8 * bytes) { - clib_memcpy (mac->bytes, bytes, sizeof (*mac)); + /* zero out the last 2 bytes, then copy over only 6 */ + mac->as_u64 = 0; + clib_memcpy (mac->bytes, bytes, 6); } static_always_inline int mac_address_is_zero (const mac_address_t * mac) { - return (ethernet_mac_address_is_zero (mac->bytes)); + return (0 == mac->as_u64); } static_always_inline u64 mac_address_as_u64 (const mac_address_t * mac) { - return (ethernet_mac_address_u64 (mac->bytes)); + return (mac->as_u64); } static_always_inline void mac_address_from_u64 (u64 u, mac_address_t * mac) { - ethernet_mac_address_from_u64 (u, mac->bytes); + mac->as_u64 = u; + mac->bytes[4] = 0; + mac->bytes[5] = 0; } extern uword unformat_mac_address_t (unformat_input_t * input, diff --git a/src/vnet/l2/l2.api b/src/vnet/l2/l2.api index 7a1fb49341b..8b65bc36afc 100644 --- a/src/vnet/l2/l2.api +++ b/src/vnet/l2/l2.api @@ -14,7 +14,10 @@ * limitations under the License. */ -option version = "2.0.1"; +option version = "2.1.1"; + +import "vnet/ip/ip_types.api"; +import "vnet/ethernet/ethernet_types.api"; /** \brief Reply to l2_xconnect_dump @param context - sender context which was passed in the request @@ -481,8 +484,8 @@ autoreply define bd_ip_mac_add_del u32 bd_id; u8 is_add; u8 is_ipv6; - u8 ip_address[16]; - u8 mac_address[6]; + vl_api_address_t ip; + vl_api_mac_address_t mac; }; /** \brief bridge domain IP to MAC entry details structure diff --git a/src/vnet/l2/l2_api.c b/src/vnet/l2/l2_api.c index 377880c3e64..2fa238eadb3 100644 --- a/src/vnet/l2/l2_api.c +++ b/src/vnet/l2/l2_api.c @@ -27,6 +27,8 @@ #include #include #include +#include +#include #include @@ -855,13 +857,17 @@ vl_api_bd_ip_mac_dump_t_handler (vl_api_bd_ip_mac_dump_t * mp) static void vl_api_bd_ip_mac_add_del_t_handler (vl_api_bd_ip_mac_add_del_t * mp) { - bd_main_t *bdm = &bd_main; + ip46_address_t ip_addr = ip46_address_initializer; vl_api_bd_ip_mac_add_del_reply_t *rmp; + bd_main_t *bdm = &bd_main; + u32 bd_index, bd_id; + mac_address_t mac; + ip46_type_t type; int rv = 0; - u32 bd_id = ntohl (mp->bd_id); - u32 bd_index; uword *p; + bd_id = ntohl (mp->bd_id); + if (bd_id == 0) { rv = VNET_API_ERROR_BD_NOT_MODIFIABLE; @@ -874,10 +880,12 @@ vl_api_bd_ip_mac_add_del_t_handler (vl_api_bd_ip_mac_add_del_t * mp) rv = VNET_API_ERROR_NO_SUCH_ENTRY; goto out; } - bd_index = p[0]; - if (bd_add_del_ip_mac (bd_index, mp->ip_address, - mp->mac_address, mp->is_ipv6, mp->is_add)) + + type = ip_address_decode (&mp->ip, &ip_addr); + mac_address_decode (&mp->mac, &mac); + + if (bd_add_del_ip_mac (bd_index, type, &ip_addr, &mac, mp->is_add)) rv = VNET_API_ERROR_UNSPECIFIED; out: diff --git a/src/vnet/l2/l2_bd.c b/src/vnet/l2/l2_bd.c index 59149093b21..943385ccb7c 100644 --- a/src/vnet/l2/l2_bd.c +++ b/src/vnet/l2/l2_bd.c @@ -733,36 +733,40 @@ VLIB_CLI_COMMAND (bd_arp_term_cli, static) = { */ u32 bd_add_del_ip_mac (u32 bd_index, - u8 * ip_addr, u8 * mac_addr, u8 is_ip6, u8 is_add) + ip46_type_t type, + const ip46_address_t * ip, + const mac_address_t * mac, u8 is_add) { l2_bridge_domain_t *bd_cfg = l2input_bd_config (bd_index); - u64 new_mac = *(u64 *) mac_addr; + u64 new_mac = mac_address_as_u64 (mac); u64 *old_mac; - u16 *mac16 = (u16 *) & new_mac; - ASSERT (sizeof (uword) == sizeof (u64)); /* make sure uword is 8 bytes */ + /* make sure uword is 8 bytes */ + ASSERT (sizeof (uword) == sizeof (u64)); ASSERT (bd_is_valid (bd_cfg)); - mac16[3] = 0; /* Clear last 2 unused bytes of the 8-byte MAC address */ - if (is_ip6) + if (IP46_TYPE_IP6 == type) { ip6_address_t *ip6_addr_key; hash_pair_t *hp; - old_mac = (u64 *) hash_get_mem (bd_cfg->mac_by_ip6, ip_addr); + old_mac = (u64 *) hash_get_mem (bd_cfg->mac_by_ip6, &ip->ip6); if (is_add) { - if (old_mac == 0) - { /* new entry - allocate and create ip6 address key */ + if (old_mac == NULL) + { + /* new entry - allocate and create ip6 address key */ ip6_addr_key = clib_mem_alloc (sizeof (ip6_address_t)); - clib_memcpy (ip6_addr_key, ip_addr, sizeof (ip6_address_t)); + clib_memcpy (ip6_addr_key, &ip->ip6, sizeof (ip6_address_t)); } else if (*old_mac == new_mac) - { /* same mac entry already exist for ip6 address */ + { + /* same mac entry already exist for ip6 address */ return 0; } else - { /* update mac for ip6 address */ - hp = hash_get_pair (bd_cfg->mac_by_ip6, ip_addr); + { + /* update mac for ip6 address */ + hp = hash_get_pair (bd_cfg->mac_by_ip6, &ip->ip6); ip6_addr_key = (ip6_address_t *) hp->key; } hash_set_mem (bd_cfg->mac_by_ip6, ip6_addr_key, new_mac); @@ -771,9 +775,9 @@ bd_add_del_ip_mac (u32 bd_index, { if (old_mac && (*old_mac == new_mac)) { - hp = hash_get_pair (bd_cfg->mac_by_ip6, ip_addr); + hp = hash_get_pair (bd_cfg->mac_by_ip6, &ip->ip6); ip6_addr_key = (ip6_address_t *) hp->key; - hash_unset_mem (bd_cfg->mac_by_ip6, ip_addr); + hash_unset_mem (bd_cfg->mac_by_ip6, &ip->ip6); clib_mem_free (ip6_addr_key); } else @@ -782,18 +786,18 @@ bd_add_del_ip_mac (u32 bd_index, } else { - ip4_address_t ip4_addr = *(ip4_address_t *) ip_addr; - old_mac = (u64 *) hash_get (bd_cfg->mac_by_ip4, ip4_addr.as_u32); + old_mac = (u64 *) hash_get (bd_cfg->mac_by_ip4, ip->ip4.as_u32); if (is_add) { if (old_mac && (*old_mac == new_mac)) - return 0; /* mac entry already exist */ - hash_set (bd_cfg->mac_by_ip4, ip4_addr.as_u32, new_mac); + /* mac entry already exist */ + return 0; + hash_set (bd_cfg->mac_by_ip4, ip->ip4.as_u32, new_mac); } else { if (old_mac && (*old_mac == new_mac)) - hash_unset (bd_cfg->mac_by_ip4, ip4_addr.as_u32); + hash_unset (bd_cfg->mac_by_ip4, ip->ip4.as_u32); else return 1; } @@ -810,13 +814,13 @@ static clib_error_t * bd_arp_entry (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) { + ip46_address_t ip_addr = ip46_address_initializer; + ip46_type_t type = IP46_TYPE_IP4; bd_main_t *bdm = &bd_main; clib_error_t *error = 0; u32 bd_index, bd_id; + mac_address_t mac; u8 is_add = 1; - u8 is_ip6 = 0; - u8 ip_addr[16]; - u8 mac_addr[6]; uword *p; if (!unformat (input, "%d", &bd_id)) @@ -837,13 +841,13 @@ bd_arp_entry (vlib_main_t * vm, else return clib_error_return (0, "No such bridge domain %d", bd_id); - if (unformat (input, "%U", unformat_ip4_address, ip_addr)) + if (unformat (input, "%U", unformat_ip4_address, &ip_addr.ip4)) { - is_ip6 = 0; + type = IP46_TYPE_IP4; } - else if (unformat (input, "%U", unformat_ip6_address, ip_addr)) + else if (unformat (input, "%U", unformat_ip6_address, &ip_addr.ip6)) { - is_ip6 = 1; + type = IP46_TYPE_IP6; } else { @@ -852,7 +856,7 @@ bd_arp_entry (vlib_main_t * vm, goto done; } - if (!unformat (input, "%U", unformat_ethernet_address, mac_addr)) + if (!unformat (input, "%U", unformat_mac_address_t, &mac)) { error = clib_error_return (0, "expecting MAC address but got `%U'", format_unformat_error, input); @@ -865,13 +869,12 @@ bd_arp_entry (vlib_main_t * vm, } /* set the bridge domain flagAdd IP-MAC entry into bridge domain */ - if (bd_add_del_ip_mac (bd_index, ip_addr, mac_addr, is_ip6, is_add)) + if (bd_add_del_ip_mac (bd_index, type, &ip_addr, &mac, is_add)) { error = clib_error_return (0, "MAC %s for IP %U and MAC %U failed", is_add ? "add" : "del", - is_ip6 ? - format_ip4_address : format_ip6_address, - ip_addr, format_ethernet_address, mac_addr); + format_ip46_address, &ip_addr, IP46_TYPE_ANY, + format_mac_address_t, &mac); } done: diff --git a/src/vnet/l2/l2_bd.h b/src/vnet/l2/l2_bd.h index 226e30ecfd4..987569aad9e 100644 --- a/src/vnet/l2/l2_bd.h +++ b/src/vnet/l2/l2_bd.h @@ -20,6 +20,8 @@ #include #include +#include +#include typedef enum l2_bd_port_type_t_ { @@ -198,7 +200,9 @@ bd_find_or_add_bd_index (bd_main_t * bdm, u32 bd_id) } u32 bd_add_del_ip_mac (u32 bd_index, - u8 * ip_addr, u8 * mac_addr, u8 is_ip6, u8 is_add); + ip46_type_t type, + const ip46_address_t * ip_addr, + const mac_address_t * mac, u8 is_add); #endif diff --git a/src/vpp/api/custom_dump.c b/src/vpp/api/custom_dump.c index 727032fb1bf..e837b4deee4 100644 --- a/src/vpp/api/custom_dump.c +++ b/src/vpp/api/custom_dump.c @@ -46,6 +46,7 @@ #include #include +#include #include @@ -506,14 +507,8 @@ static void *vl_api_bd_ip_mac_add_del_t_print s = format (0, "SCRIPT: bd_ip_mac_add_del "); s = format (s, "bd_id %d ", ntohl (mp->bd_id)); - if (mp->is_ipv6) - s = format (s, "%U ", format_ip6_address, - (ip6_address_t *) mp->ip_address); - else - s = format (s, "%U ", format_ip4_address, - (ip4_address_t *) mp->ip_address); - - s = format (s, "%U ", format_ethernet_address, mp->mac_address); + s = format (s, "%U ", format_vl_api_address, &mp->ip); + s = format (s, "%U ", format_vl_api_mac_address, &mp->mac); if (mp->is_add == 0) s = format (s, "del "); diff --git a/test/test_gbp.py b/test/test_gbp.py index 132bd247dd1..ef4bf7071eb 100644 --- a/test/test_gbp.py +++ b/test/test_gbp.py @@ -210,10 +210,8 @@ class VppGbpEndpointGroup(VppObject): self._test = test self.uplink = uplink self.bvi = bvi - self.bvi_ip4 = bvi_ip4 - self.bvi_ip4_n = inet_pton(AF_INET, bvi_ip4) - self.bvi_ip6 = bvi_ip6 - self.bvi_ip6_n = inet_pton(AF_INET6, bvi_ip6) + self.bvi_ip4 = VppIpAddress(bvi_ip4) + self.bvi_ip6 = VppIpAddress(bvi_ip6) self.epg = epg self.bd = bd self.rd = rd @@ -358,7 +356,7 @@ class TestGBP(VppTestCase): self.create_pg_interfaces(range(9)) self.create_loopback_interfaces(9) - self.router_mac = "00:11:22:33:44:55" + self.router_mac = VppMacAddress("00:11:22:33:44:55") for i in self.pg_interfaces: i.admin_up() @@ -366,7 +364,7 @@ class TestGBP(VppTestCase): i.admin_up() self.vapi.sw_interface_set_mac_address( i.sw_if_index, - mactobinary(self.router_mac)) + self.router_mac.bytes) def tearDown(self): for i in self.pg_interfaces: @@ -448,7 +446,7 @@ class TestGBP(VppTestCase): rx = self.send_and_expect(src, tx, dst) for r in rx: - self.assertEqual(r[Ether].src, self.router_mac) + self.assertEqual(r[Ether].src, self.router_mac.address) self.assertEqual(r[Ether].dst, dst.remote_mac) self.assertEqual(r[IP].dst, dst_ip) self.assertEqual(r[IP].src, src_ip) @@ -458,7 +456,7 @@ class TestGBP(VppTestCase): rx = self.send_and_expect(src, tx, dst) for r in rx: - self.assertEqual(r[Ether].src, self.router_mac) + self.assertEqual(r[Ether].src, self.router_mac.address) self.assertEqual(r[Ether].dst, dst.remote_mac) self.assertEqual(r[IPv6].dst, dst_ip) self.assertEqual(r[IPv6].src, src_ip) @@ -558,10 +556,10 @@ class TestGBP(VppTestCase): is_add=1) self.vapi.sw_interface_add_del_address(epg.bvi.sw_if_index, - epg.bvi_ip4_n, + epg.bvi_ip4.bytes, 32) self.vapi.sw_interface_add_del_address(epg.bvi.sw_if_index, - epg.bvi_ip6_n, + epg.bvi_ip6.bytes, 128, is_ipv6=True) @@ -573,13 +571,13 @@ class TestGBP(VppTestCase): # add the BD ARP termination entry for BVI IP self.vapi.bd_ip_mac_add_del(bd_id=epg.bd, - mac=mactobinary(self.router_mac), - ip=epg.bvi_ip4_n, + mac=self.router_mac.encode(), + ip=epg.bvi_ip4.encode(), is_ipv6=0, is_add=1) self.vapi.bd_ip_mac_add_del(bd_id=epg.bd, - mac=mactobinary(self.router_mac), - ip=epg.bvi_ip6_n, + mac=self.router_mac.encode(), + ip=epg.bvi_ip6.encode(), is_ipv6=1, is_add=1) @@ -592,7 +590,7 @@ class TestGBP(VppTestCase): port_type=L2_PORT_TYPE.BVI) # BVI L2 FIB entry - self.vapi.l2fib_add_del(self.router_mac, + self.vapi.l2fib_add_del(self.router_mac.address, epg.bd, epg.bvi.sw_if_index, is_add=1, bvi_mac=1) @@ -654,8 +652,8 @@ class TestGBP(VppTestCase): # 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, + mac=ep.vmac.encode(), + ip=ip.encode(), is_ipv6=ip.is_ip6, is_add=1) @@ -702,8 +700,8 @@ class TestGBP(VppTestCase): # 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, + mac=ep.vmac.encode(), + ip=fip.encode(), is_ipv6=fip.is_ip6, is_add=1) @@ -733,7 +731,7 @@ class TestGBP(VppTestCase): ARP(op="who-has", hwdst="ff:ff:ff:ff:ff:ff", hwsrc=self.pg0.remote_mac, - pdst=epgs[0].bvi_ip4, + pdst=epgs[0].bvi_ip4.address, psrc="10.0.0.88")) self.send_and_expect(self.pg0, [pkt_arp], self.pg0) @@ -746,7 +744,7 @@ class TestGBP(VppTestCase): ARP(op="who-has", hwdst="ff:ff:ff:ff:ff:ff", hwsrc=self.pg0.remote_mac, - pdst=epgs[0].bvi_ip4, + pdst=epgs[0].bvi_ip4.address, psrc=eps[0].ip4.address)) self.send_and_expect(self.pg0, [pkt_arp], self.pg0) @@ -755,7 +753,7 @@ class TestGBP(VppTestCase): d = inet_ntop(AF_INET6, nsma) pkt_nd = (Ether(dst=in6_getnsmac(nsma)) / IPv6(dst=d, src=eps[0].ip6.address) / - ICMPv6ND_NS(tgt=epgs[0].bvi_ip6) / + ICMPv6ND_NS(tgt=epgs[0].bvi_ip6.address) / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)) self.send_and_expect(self.pg0, [pkt_nd], self.pg0) @@ -783,13 +781,13 @@ class TestGBP(VppTestCase): # packets to non-local L3 destinations dropped # pkt_intra_epg_220_ip4 = (Ether(src=self.pg0.remote_mac, - dst=self.router_mac) / + dst=self.router_mac.address) / 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) / + dst=self.router_mac.address) / IP(src=eps[0].ip4.address, dst="10.0.1.99") / UDP(sport=1234, dport=1234) / @@ -798,7 +796,7 @@ class TestGBP(VppTestCase): self.send_and_assert_no_replies(self.pg0, pkt_intra_epg_220_ip4 * 65) pkt_inter_epg_222_ip6 = (Ether(src=self.pg0.remote_mac, - dst=self.router_mac) / + dst=self.router_mac.address) / IPv6(src=eps[0].ip6.address, dst="2001:10::99") / UDP(sport=1234, dport=1234) / @@ -913,7 +911,7 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=1234) / Raw('\xa5' * 100)) pkt_inter_epg_220_to_222 = (Ether(src=self.pg0.remote_mac, - dst=self.router_mac) / + dst=self.router_mac.address) / IP(src=eps[0].ip4.address, dst=eps[3].ip4.address) / UDP(sport=1234, dport=1234) / @@ -971,7 +969,7 @@ class TestGBP(VppTestCase): self.send_and_expect_routed(self.pg0, pkt_inter_epg_220_to_222 * 65, self.pg3, - self.router_mac) + self.router_mac.address) # # remove both contracts, traffic stops in both directions @@ -1034,7 +1032,7 @@ class TestGBP(VppTestCase): # From an EP to an outside addess: IN2OUT # pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac, - dst=self.router_mac) / + dst=self.router_mac.address) / IP(src=eps[0].ip4.address, dst="1.1.1.1") / UDP(sport=1234, dport=1234) / @@ -1061,7 +1059,7 @@ class TestGBP(VppTestCase): eps[0].fip4.address) pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac, - dst=self.router_mac) / + dst=self.router_mac.address) / IPv6(src=eps[0].ip6.address, dst="6001::1") / UDP(sport=1234, dport=1234) / @@ -1075,7 +1073,7 @@ class TestGBP(VppTestCase): # # From a global address to an EP: OUT2IN # - pkt_inter_epg_220_from_global = (Ether(src=self.router_mac, + pkt_inter_epg_220_from_global = (Ether(src=self.router_mac.address, dst=self.pg0.remote_mac) / IP(dst=eps[0].fip4.address, src="1.1.1.1") / @@ -1093,7 +1091,7 @@ class TestGBP(VppTestCase): eps[0].itf, eps[0].ip4.address) - pkt_inter_epg_220_from_global = (Ether(src=self.router_mac, + pkt_inter_epg_220_from_global = (Ether(src=self.router_mac.address, dst=self.pg0.remote_mac) / IPv6(dst=eps[0].fip6.address, src="6001::1") / @@ -1110,7 +1108,7 @@ class TestGBP(VppTestCase): # IN2OUT2IN # pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac, - dst=self.router_mac) / + dst=self.router_mac.address) / IP(src=eps[0].ip4.address, dst=eps[1].fip4.address) / UDP(sport=1234, dport=1234) / @@ -1123,7 +1121,7 @@ class TestGBP(VppTestCase): eps[1].ip4.address) pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac, - dst=self.router_mac) / + dst=self.router_mac.address) / IPv6(src=eps[0].ip6.address, dst=eps[1].fip6.address) / UDP(sport=1234, dport=1234) / @@ -1153,11 +1151,11 @@ class TestGBP(VppTestCase): for epg in epgs: # IP config on the BVI interfaces self.vapi.sw_interface_add_del_address(epg.bvi.sw_if_index, - epg.bvi_ip4_n, + epg.bvi_ip4.bytes, 32, is_add=0) self.vapi.sw_interface_add_del_address(epg.bvi.sw_if_index, - epg.bvi_ip6_n, + epg.bvi_ip6.bytes, 128, is_add=0, is_ipv6=True) diff --git a/test/test_l2bd_arp_term.py b/test/test_l2bd_arp_term.py index 20cc537e43b..23742b17f85 100644 --- a/test/test_l2bd_arp_term.py +++ b/test/test_l2bd_arp_term.py @@ -20,6 +20,8 @@ from scapy.layers.inet6 import IPv6, UDP, ICMPv6ND_NS, ICMPv6ND_RS, \ from framework import VppTestCase, VppTestRunner from util import Host, ppp, mactobinary +from vpp_mac import VppMacAddress +from vpp_ip import VppIpAddress class TestL2bdArpTerm(VppTestCase): @@ -69,10 +71,10 @@ class TestL2bdArpTerm(VppTestCase): def add_del_arp_term_hosts(self, entries, bd_id=1, is_add=1, is_ipv6=0): for e in entries: - ip = e.ip4n if is_ipv6 == 0 else e.ip6n + ip = e.ip4 if is_ipv6 == 0 else e.ip6 self.vapi.bd_ip_mac_add_del(bd_id=bd_id, - mac=e.bin_mac, - ip=ip, + mac=VppMacAddress(e.mac).encode(), + ip=VppIpAddress(ip).encode(), is_ipv6=is_ipv6, is_add=is_add) @@ -271,6 +273,7 @@ class TestL2bdArpTerm(VppTestCase): macs = self.mac_list(range(1, 5)) hosts = self.ip4_hosts(4, 1, macs) self.add_del_arp_term_hosts(hosts, is_add=1) + self.verify_arp(src_host, hosts, hosts) type(self).hosts = hosts diff --git a/test/vpp_papi_provider.py b/test/vpp_papi_provider.py index 4e7809f6960..c2192471437 100644 --- a/test/vpp_papi_provider.py +++ b/test/vpp_papi_provider.py @@ -478,8 +478,8 @@ class VppPapiProvider(object): {'bd_id': bd_id, 'is_add': is_add, 'is_ipv6': is_ipv6, - 'ip_address': ip, - 'mac_address': mac}) + 'ip': ip, + 'mac': mac}) def want_ip4_arp_events(self, enable_disable=1, address=0): return self.api(self.papi.want_ip4_arp_events, -- 2.16.6