PAPI: Add MACAddress object wrapper for vl_api_mac_address_t 08/16508/6
authorOle Troan <ot@cisco.com>
Mon, 17 Dec 2018 11:02:26 +0000 (12:02 +0100)
committerNeale Ranns <nranns@cisco.com>
Tue, 18 Dec 2018 11:54:24 +0000 (11:54 +0000)
Change the definition of vl_api_mac_address_t to an aliased type.

Change-Id: I1434f316d0fad6a099592f39bceeb8faeaf1d134
Signed-off-by: Ole Troan <ot@cisco.com>
34 files changed:
extras/vom/vom/api_types.cpp
extras/vom/vom/api_types.hpp
extras/vom/vom/bridge_domain_arp_entry_cmds.cpp
extras/vom/vom/gbp_contract_cmds.cpp
extras/vom/vom/gbp_endpoint_cmds.cpp
src/plugins/gbp/gbp_api.c
src/vat/api_format.c
src/vnet/ethernet/ethernet_types.api
src/vnet/ethernet/ethernet_types_api.c
src/vnet/ethernet/ethernet_types_api.h
src/vnet/l2/l2.api
src/vnet/l2/l2_api.c
src/vpp-api/python/vpp_papi/macaddress.py [new file with mode: 0644]
src/vpp-api/python/vpp_papi/vpp_format.py
src/vpp-api/python/vpp_papi/vpp_papi.py
src/vpp-api/python/vpp_papi/vpp_serializer.py
src/vpp/api/types.c
test/test_bond.py
test/test_dhcp.py
test/test_gbp.py
test/test_ip4_irb.py
test/test_l2_fib.py
test/test_l2bd_arp_term.py
test/test_nat.py
test/test_p2p_ethernet.py
test/test_pppoe.py
test/test_util.py
test/util.py
test/vpp_interface.py
test/vpp_l2.py
test/vpp_mac.py [deleted file]
test/vpp_neighbor.py
test/vpp_papi_provider.py
test/vpp_pppoe_interface.py

index 418f3e4..53cd047 100644 (file)
@@ -54,20 +54,16 @@ from_api(const vapi_type_address& v)
   return addr;
 }
 
   return addr;
 }
 
-vapi_type_mac_address
-to_api(const mac_address_t& a)
+void
+to_api(const mac_address_t& a, vapi_type_mac_address& v)
 {
 {
-  vapi_type_mac_address v;
-
-  std::copy(std::begin(a.bytes), std::end(a.bytes), v.bytes);
-
-  return (v);
+  std::copy(std::begin(a.bytes), std::end(a.bytes), v);
 }
 
 mac_address_t
 from_api(const vapi_type_mac_address& v)
 {
 }
 
 mac_address_t
 from_api(const vapi_type_mac_address& v)
 {
-  return mac_address_t(v.bytes);
+  return mac_address_t(v);
 }
 
 route::prefix_t
 }
 
 route::prefix_t
index c28ae1e..784ace2 100644 (file)
@@ -29,7 +29,7 @@ void to_api(const boost::asio::ip::address& a, vapi_type_ip4_address& v);
 ip_address_t from_api(const vapi_type_address& v);
 ip_address_t from_api(const vapi_type_ip4_address& v);
 
 ip_address_t from_api(const vapi_type_address& v);
 ip_address_t from_api(const vapi_type_ip4_address& v);
 
-vapi_type_mac_address to_api(const mac_address_t& a);
+void to_api(const mac_address_t& a, vapi_type_mac_address& m);
 
 mac_address_t from_api(const vapi_type_mac_address& v);
 
 
 mac_address_t from_api(const vapi_type_mac_address& v);
 
index da5c547..a72ad3e 100644 (file)
@@ -45,7 +45,7 @@ create_cmd::issue(connection& con)
   auto& payload = req.get_request().get_payload();
   payload.bd_id = m_bd;
   payload.is_add = 1;
   auto& payload = req.get_request().get_payload();
   payload.bd_id = m_bd;
   payload.is_add = 1;
-  payload.mac = to_api(m_mac);
+  to_api(m_mac, payload.mac);
   to_api(m_ip_addr, payload.ip);
 
   VAPI_CALL(req.execute());
   to_api(m_ip_addr, payload.ip);
 
   VAPI_CALL(req.execute());
@@ -90,7 +90,7 @@ delete_cmd::issue(connection& con)
   auto& payload = req.get_request().get_payload();
   payload.bd_id = m_bd;
   payload.is_add = 0;
   auto& payload = req.get_request().get_payload();
   payload.bd_id = m_bd;
   payload.is_add = 0;
-  payload.mac = to_api(m_mac);
+  to_api(m_mac, payload.mac);
   to_api(m_ip_addr, payload.ip);
 
   VAPI_CALL(req.execute());
   to_api(m_ip_addr, payload.ip);
 
   VAPI_CALL(req.execute());
index 1a3975b..8b15e8c 100644 (file)
@@ -78,7 +78,7 @@ create_cmd::issue(connection& con)
       payload.contract.rules[ii].nh_set.n_nhs = nh_size;
       while (jj < nh_size) {
         to_api(nh_it->getIp(), payload.contract.rules[ii].nh_set.nhs[jj].ip);
       payload.contract.rules[ii].nh_set.n_nhs = nh_size;
       while (jj < nh_size) {
         to_api(nh_it->getIp(), payload.contract.rules[ii].nh_set.nhs[jj].ip);
-        payload.contract.rules[ii].nh_set.nhs[jj].mac = to_api(nh_it->getMac());
+        to_api(nh_it->getMac(), payload.contract.rules[ii].nh_set.nhs[jj].mac);
         payload.contract.rules[ii].nh_set.nhs[jj].bd_id = nh_it->getBdId();
         payload.contract.rules[ii].nh_set.nhs[jj].rd_id = nh_it->getRdId();
         ++nh_it;
         payload.contract.rules[ii].nh_set.nhs[jj].bd_id = nh_it->getBdId();
         payload.contract.rules[ii].nh_set.nhs[jj].rd_id = nh_it->getRdId();
         ++nh_it;
index b15b941..2732d1c 100644 (file)
@@ -56,7 +56,7 @@ create_cmd::issue(connection& con)
   for (n = 0; n < payload.endpoint.n_ips; n++) {
     to_api(m_ip_addrs[n], payload.endpoint.ips[n]);
   }
   for (n = 0; n < payload.endpoint.n_ips; n++) {
     to_api(m_ip_addrs[n], payload.endpoint.ips[n]);
   }
-  payload.endpoint.mac = to_api(m_mac);
+  to_api(m_mac, payload.endpoint.mac);
 
   VAPI_CALL(req.execute());
 
 
   VAPI_CALL(req.execute());
 
index 5f87db8..74355d1 100644 (file)
@@ -154,7 +154,7 @@ vl_api_gbp_endpoint_add_t_handler (vl_api_gbp_endpoint_add_t * mp)
        ip_address_decode (&mp->endpoint.ips[ii], &ips[ii]);
       }
     }
        ip_address_decode (&mp->endpoint.ips[ii], &ips[ii]);
       }
     }
-  mac_address_decode (&mp->endpoint.mac, &mac);
+  mac_address_decode (mp->endpoint.mac, &mac);
 
   if (GBP_ENDPOINT_FLAG_REMOTE & gef)
     {
 
   if (GBP_ENDPOINT_FLAG_REMOTE & gef)
     {
@@ -260,7 +260,7 @@ gbp_endpoint_send_details (index_t gei, void *args)
   mp->endpoint.flags = gbp_endpoint_flags_encode (gef->gef_flags);
   mp->handle = htonl (gei);
   mp->age = vlib_time_now (vlib_get_main ()) - ge->ge_last_time;
   mp->endpoint.flags = gbp_endpoint_flags_encode (gef->gef_flags);
   mp->handle = htonl (gei);
   mp->age = vlib_time_now (vlib_get_main ()) - ge->ge_last_time;
-  mac_address_encode (&ge->ge_key.gek_mac, &mp->endpoint.mac);
+  mac_address_encode (&ge->ge_key.gek_mac, mp->endpoint.mac);
 
   vec_foreach_index (ii, ge->ge_key.gek_ips)
   {
 
   vec_foreach_index (ii, ge->ge_key.gek_ips)
   {
@@ -821,7 +821,7 @@ gbp_next_hop_decode (const vl_api_gbp_next_hop_t * in, index_t * gnhi)
     return (VNET_API_ERROR_NO_SUCH_FIB);
 
   ip_address_decode (&in->ip, &ip);
     return (VNET_API_ERROR_NO_SUCH_FIB);
 
   ip_address_decode (&in->ip, &ip);
-  mac_address_decode (&in->mac, &mac);
+  mac_address_decode (in->mac, &mac);
 
   *gnhi = gbp_next_hop_alloc (&ip, grd, &mac, gbd);
 
 
   *gnhi = gbp_next_hop_alloc (&ip, grd, &mac, gbd);
 
index fc4c38b..55f5197 100644 (file)
 #if VPP_API_TEST_BUILTIN == 0
 #include <netdb.h>
 
 #if VPP_API_TEST_BUILTIN == 0
 #include <netdb.h>
 
-/* *INDENT-OFF* */
-const mac_address_t ZERO_MAC_ADDRESS = {
-  .bytes = {
-    0, 0, 0, 0, 0, 0,
-  },
-};
-/* *INDENT-ON* */
-
 u32
 vl (void *p)
 {
 u32
 vl (void *p)
 {
@@ -7323,7 +7315,7 @@ static int
 api_bd_ip_mac_add_del (vat_main_t * vam)
 {
   vl_api_address_t ip = VL_API_ZERO_ADDRESS;
 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;
+  vl_api_mac_address_t mac = { 0 };
   unformat_input_t *i = vam->input;
   vl_api_bd_ip_mac_add_del_t *mp;
   ip46_type_t type;
   unformat_input_t *i = vam->input;
   vl_api_bd_ip_mac_add_del_t *mp;
   ip46_type_t type;
index c33a02c..f945f20 100644 (file)
@@ -14,6 +14,4 @@
  * limitations under the License.
  */
 
  * limitations under the License.
  */
 
-typedef mac_address {
-  u8 bytes[6];
-};
+typedef u8 mac_address[6];
index 4b84d38..90b630d 100644 (file)
 #undef vl_printfun
 
 void
 #undef vl_printfun
 
 void
-mac_address_decode (const vl_api_mac_address_t * in, mac_address_t * out)
+mac_address_decode (const u8 * in, mac_address_t * out)
 {
 {
-  mac_address_from_bytes (out, in->bytes);
+  mac_address_from_bytes (out, in);
 }
 
 void
 }
 
 void
-mac_address_encode (const mac_address_t * in, vl_api_mac_address_t * out)
+mac_address_encode (const mac_address_t * in, u8 * out)
 {
 {
-  clib_memcpy_fast (out->bytes, in->bytes, 6);
+  clib_memcpy_fast (out, in->bytes, 6);
 }
 
 /*
 }
 
 /*
index b65d9d4..e2c638d 100644 (file)
 
 #include <vnet/ethernet/mac_address.h>
 
 
 #include <vnet/ethernet/mac_address.h>
 
-/**
- * Forward declarations so we need not #include the API definitions here
- */
-struct _vl_api_mac_address;
-
-extern void mac_address_decode (const struct _vl_api_mac_address *in,
-                               mac_address_t * out);
-extern void mac_address_encode (const mac_address_t * in,
-                               struct _vl_api_mac_address *out);
+extern void mac_address_decode (const u8 * in, mac_address_t * out);
+extern void mac_address_encode (const mac_address_t * in, u8 * out);
 
 #endif
 
 
 #endif
 
index 7c71ea6..ea24a71 100644 (file)
@@ -499,7 +499,7 @@ define bd_ip_mac_details
   u32 bd_id;
   u8 is_ipv6;
   u8 ip_address[16];
   u32 bd_id;
   u8 is_ipv6;
   u8 ip_address[16];
-  u8 mac_address[6];
+  vl_api_mac_address_t mac_address;
 };
 
 /** \brief Dump bridge domain IP to MAC entries
 };
 
 /** \brief Dump bridge domain IP to MAC entries
index 2fa238e..9e3a47f 100644 (file)
@@ -883,7 +883,7 @@ vl_api_bd_ip_mac_add_del_t_handler (vl_api_bd_ip_mac_add_del_t * mp)
   bd_index = p[0];
 
   type = ip_address_decode (&mp->ip, &ip_addr);
   bd_index = p[0];
 
   type = ip_address_decode (&mp->ip, &ip_addr);
-  mac_address_decode (&mp->mac, &mac);
+  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;
 
   if (bd_add_del_ip_mac (bd_index, type, &ip_addr, &mac, mp->is_add))
     rv = VNET_API_ERROR_UNSPECIFIED;
diff --git a/src/vpp-api/python/vpp_papi/macaddress.py b/src/vpp-api/python/vpp_papi/macaddress.py
new file mode 100644 (file)
index 0000000..a100381
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2016 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:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import binascii
+
+
+def mac_pton(s):
+    '''Convert MAC address as text to binary'''
+    return binascii.unhexlify(s.replace(':', ''))
+
+
+def mac_ntop(binary):
+    '''Convert MAC address as binary to text'''
+    x = b':'.join(binascii.hexlify(binary)[i:i + 2]
+                  for i in range(0, 12, 2))
+    return str(x.decode('ascii'))
+
+
+class MACAddress():
+    def __init__(self, mac):
+        '''MAC Address as a text-string (aa:bb:cc:dd:ee:ff) or 6 bytes'''
+        # Of course Python 2 doesn't distinguish str from bytes
+        if type(mac) is bytes and len(mac) == 6:
+            self.mac_binary = mac
+            self.mac_string = mac_ntop(mac)
+        else:
+            self.mac_binary = mac_pton(mac)
+            self.mac_string = mac
+
+    @property
+    def packed(self):
+        return self.mac_binary
+
+    def __len__(self):
+        return 6
+
+    def __str__(self):
+        return self.mac_string
+
+    def __repr__(self):
+        return '%s(%s)' % (self.__class__.__name__, self.mac_string)
index 1b880ec..fec0667 100644 (file)
@@ -16,6 +16,7 @@
 from socket import inet_pton, inet_ntop, AF_INET6, AF_INET
 import socket
 import ipaddress
 from socket import inet_pton, inet_ntop, AF_INET6, AF_INET
 import socket
 import ipaddress
+from . import macaddress
 
 # Copies from vl_api_address_t definition
 ADDRESS_IP4 = 0
 
 # Copies from vl_api_address_t definition
 ADDRESS_IP4 = 0
@@ -94,6 +95,11 @@ conversion_table = {
                                   'len': o.prefixlen},
         'str': lambda s: format_vl_api_prefix_t(s)
     },
                                   'len': o.prefixlen},
         'str': lambda s: format_vl_api_prefix_t(s)
     },
+    'vl_api_mac_address_t':
+    {
+        'MACAddress': lambda o: o.packed,
+        'str': lambda s: macaddress.mac_pton(s)
+    },
 }
 
 
 }
 
 
@@ -118,4 +124,5 @@ conversion_unpacker_table = {
     'vl_api_ip4_prefix_t': lambda o: ipaddress.IPv4Network((o.prefix, o.len)),
     'vl_api_address_t': lambda o: unformat_api_address_t(o),
     'vl_api_prefix_t': lambda o: unformat_api_prefix_t(o),
     'vl_api_ip4_prefix_t': lambda o: ipaddress.IPv4Network((o.prefix, o.len)),
     'vl_api_address_t': lambda o: unformat_api_address_t(o),
     'vl_api_prefix_t': lambda o: unformat_api_prefix_t(o),
+    'vl_api_mac_address_t': lambda o: macaddress.MACAddress(o),
 }
 }
index 4de257c..9c4ede9 100644 (file)
@@ -28,6 +28,7 @@ import weakref
 import atexit
 from . vpp_serializer import VPPType, VPPEnumType, VPPUnionType, BaseTypes
 from . vpp_serializer import VPPMessage, vpp_get_type, VPPTypeAlias
 import atexit
 from . vpp_serializer import VPPType, VPPEnumType, VPPUnionType, BaseTypes
 from . vpp_serializer import VPPMessage, vpp_get_type, VPPTypeAlias
+from . macaddress import MACAddress, mac_pton, mac_ntop
 
 logger = logging.getLogger(__name__)
 
 
 logger = logging.getLogger(__name__)
 
@@ -57,6 +58,7 @@ def vpp_atexit(vpp_weakref):
         vpp_instance.logger.debug('Cleaning up VPP on exit')
         vpp_instance.disconnect()
 
         vpp_instance.logger.debug('Cleaning up VPP on exit')
         vpp_instance.disconnect()
 
+
 if sys.version[0] == '2':
     def vpp_iterator(d):
         return d.iteritems()
 if sys.version[0] == '2':
     def vpp_iterator(d):
         return d.iteritems()
index 418c024..d62e3a4 100644 (file)
@@ -30,9 +30,10 @@ import socket
 logger = logging.getLogger(__name__)
 
 if sys.version[0] == '2':
 logger = logging.getLogger(__name__)
 
 if sys.version[0] == '2':
-    check = lambda d: type(d) is dict
+    def check(d): type(d) is dict
 else:
 else:
-    check = lambda d: type(d) is dict or type(d) is bytes
+    def check(d): type(d) is dict or type(d) is bytes
+
 
 def conversion_required(data, field_type):
     if check(data):
 
 def conversion_required(data, field_type):
     if check(data):
@@ -101,7 +102,7 @@ class String(object):
             return b'', 0
         p = BaseTypes('u8', length)
         x, size = p.unpack(data, offset + length_field_size)
             return b'', 0
         p = BaseTypes('u8', length)
         x, size = p.unpack(data, offset + length_field_size)
-        x2 = x.split(b'\0',1)[0]
+        x2 = x.split(b'\0', 1)[0]
         return (x2.decode('utf8'), size + length_field_size)
 
 
         return (x2.decode('utf8'), size + length_field_size)
 
 
index 1e36bf5..0a48711 100644 (file)
@@ -63,7 +63,7 @@ unformat_vl_api_mac_address (unformat_input_t * input, va_list * args)
 {
   vl_api_mac_address_t *mac = va_arg (*args, vl_api_mac_address_t *);
 
 {
   vl_api_mac_address_t *mac = va_arg (*args, vl_api_mac_address_t *);
 
-  return (unformat (input, "%U",unformat_ethernet_address, mac->bytes));
+  return (unformat (input, "%U",unformat_ethernet_address, mac));
 }
 
 uword
 }
 
 uword
@@ -86,6 +86,6 @@ format_vl_api_mac_address (u8 * s, va_list * args)
 {
   vl_api_mac_address_t *mac = va_arg (*args, vl_api_mac_address_t *);
 
 {
   vl_api_mac_address_t *mac = va_arg (*args, vl_api_mac_address_t *);
 
-  return (format (s, "%U", format_ethernet_address, mac->bytes));
+  return (format (s, "%U", format_ethernet_address, mac));
 }
 
 }
 
index b955f89..9926d23 100644 (file)
@@ -7,8 +7,8 @@ from framework import VppTestCase, VppTestRunner
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether
 from scapy.layers.inet import IP, UDP
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether
 from scapy.layers.inet import IP, UDP
-from vpp_mac import mactobinary
 from vpp_bond_interface import VppBondInterface
 from vpp_bond_interface import VppBondInterface
+from vpp_papi import MACAddress
 
 
 class TestBondInterface(VppTestCase):
 
 
 class TestBondInterface(VppTestCase):
@@ -56,7 +56,7 @@ class TestBondInterface(VppTestCase):
         # create interface (BondEthernet0)
         #        self.logger.info("create bond")
         bond0_mac = "02:fe:38:30:59:3c"
         # create interface (BondEthernet0)
         #        self.logger.info("create bond")
         bond0_mac = "02:fe:38:30:59:3c"
-        mac = mactobinary(bond0_mac)
+        mac = MACAddress(bond0_mac).packed
         bond0 = VppBondInterface(self,
                                  mode=3,
                                  lb=1,
         bond0 = VppBondInterface(self,
                                  mode=3,
                                  lb=1,
index db3e3f3..3d00f1b 100644 (file)
@@ -8,7 +8,6 @@ from framework import VppTestCase, VppTestRunner, running_extended_tests
 from vpp_neighbor import VppNeighbor
 from vpp_ip_route import find_route, VppIpTable
 from util import mk_ll_addr
 from vpp_neighbor import VppNeighbor
 from vpp_ip_route import find_route, VppIpTable
 from util import mk_ll_addr
-from vpp_mac import mactobinary, binarytomac
 from scapy.layers.l2 import Ether, getmacbyip, ARP
 from scapy.layers.inet import IP, UDP, ICMP
 from scapy.layers.inet6 import IPv6, in6_getnsmac
 from scapy.layers.l2 import Ether, getmacbyip, ARP
 from scapy.layers.inet import IP, UDP, ICMP
 from scapy.layers.inet6 import IPv6, in6_getnsmac
@@ -20,6 +19,7 @@ from scapy.layers.dhcp6 import DHCP6, DHCP6_Solicit, DHCP6_RelayForward, \
 from socket import AF_INET, AF_INET6
 from scapy.utils import inet_pton, inet_ntop
 from scapy.utils6 import in6_ptop
 from socket import AF_INET, AF_INET6
 from scapy.utils import inet_pton, inet_ntop
 from scapy.utils6 import in6_ptop
+from vpp_papi import mac_pton
 
 DHCP4_CLIENT_PORT = 68
 DHCP4_SERVER_PORT = 67
 
 DHCP4_CLIENT_PORT = 68
 DHCP4_SERVER_PORT = 67
@@ -1218,7 +1218,7 @@ class TestDHCP(VppTestCase):
                    UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                    BOOTP(op=1,
                          yiaddr=self.pg3.local_ip4,
                    UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                    BOOTP(op=1,
                          yiaddr=self.pg3.local_ip4,
-                         chaddr=mactobinary(self.pg3.local_mac)) /
+                         chaddr=mac_pton(self.pg3.local_mac)) /
                    DHCP(options=[('message-type', 'offer'),
                                  ('server_id', self.pg3.remote_ip4),
                                  'end']))
                    DHCP(options=[('message-type', 'offer'),
                                  ('server_id', self.pg3.remote_ip4),
                                  'end']))
@@ -1238,7 +1238,7 @@ class TestDHCP(VppTestCase):
                  IP(src=self.pg3.remote_ip4, dst="255.255.255.255") /
                  UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                  BOOTP(op=1, yiaddr=self.pg3.local_ip4,
                  IP(src=self.pg3.remote_ip4, dst="255.255.255.255") /
                  UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                  BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                       chaddr=mactobinary(self.pg3.local_mac)) /
+                       chaddr=mac_pton(self.pg3.local_mac)) /
                  DHCP(options=[('message-type', 'ack'),
                                ('subnet_mask', "255.255.255.0"),
                                ('router', self.pg3.remote_ip4),
                  DHCP(options=[('message-type', 'ack'),
                                ('subnet_mask', "255.255.255.0"),
                                ('router', self.pg3.remote_ip4),
@@ -1267,7 +1267,7 @@ class TestDHCP(VppTestCase):
 
         # remove the left over ARP entry
         self.vapi.ip_neighbor_add_del(self.pg3.sw_if_index,
 
         # remove the left over ARP entry
         self.vapi.ip_neighbor_add_del(self.pg3.sw_if_index,
-                                      mactobinary(self.pg3.remote_mac),
+                                      mac_pton(self.pg3.remote_mac),
                                       self.pg3.remote_ip4,
                                       is_add=0)
         #
                                       self.pg3.remote_ip4,
                                       is_add=0)
         #
@@ -1315,7 +1315,7 @@ class TestDHCP(VppTestCase):
                  IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
                  UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                  BOOTP(op=1, yiaddr=self.pg3.local_ip4,
                  IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
                  UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                  BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                       chaddr=mactobinary(self.pg3.local_mac)) /
+                       chaddr=mac_pton(self.pg3.local_mac)) /
                  DHCP(options=[('message-type', 'ack'),
                                ('subnet_mask', "255.255.255.0"),
                                ('router', self.pg3.remote_ip4),
                  DHCP(options=[('message-type', 'ack'),
                                ('subnet_mask', "255.255.255.0"),
                                ('router', self.pg3.remote_ip4),
@@ -1373,7 +1373,7 @@ class TestDHCP(VppTestCase):
                    IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
                    UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                    BOOTP(op=1, yiaddr=self.pg3.local_ip4,
                    IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
                    UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                    BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                         chaddr=mactobinary(self.pg3.local_mac)) /
+                         chaddr=mac_pton(self.pg3.local_mac)) /
                    DHCP(options=[('message-type', 'offer'),
                                  ('server_id', self.pg3.remote_ip4),
                                  'end']))
                    DHCP(options=[('message-type', 'offer'),
                                  ('server_id', self.pg3.remote_ip4),
                                  'end']))
@@ -1394,7 +1394,7 @@ class TestDHCP(VppTestCase):
                  IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
                  UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                  BOOTP(op=1, yiaddr=self.pg3.local_ip4,
                  IP(src=self.pg3.remote_ip4, dst=self.pg3.local_ip4) /
                  UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                  BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                       chaddr=mactobinary(self.pg3.local_mac)) /
+                       chaddr=mac_pton(self.pg3.local_mac)) /
                  DHCP(options=[('message-type', 'ack'),
                                ('subnet_mask', "255.255.255.0"),
                                ('router', self.pg3.remote_ip4),
                  DHCP(options=[('message-type', 'ack'),
                                ('subnet_mask', "255.255.255.0"),
                                ('router', self.pg3.remote_ip4),
@@ -1423,7 +1423,7 @@ class TestDHCP(VppTestCase):
 
         # remove the left over ARP entry
         self.vapi.ip_neighbor_add_del(self.pg3.sw_if_index,
 
         # remove the left over ARP entry
         self.vapi.ip_neighbor_add_del(self.pg3.sw_if_index,
-                                      mactobinary(self.pg3.remote_mac),
+                                      mac_pton(self.pg3.remote_mac),
                                       self.pg3.remote_ip4,
                                       is_add=0)
 
                                       self.pg3.remote_ip4,
                                       is_add=0)
 
@@ -1481,7 +1481,7 @@ class TestDHCP(VppTestCase):
                    UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                    BOOTP(op=1,
                          yiaddr=self.pg3.local_ip4,
                    UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                    BOOTP(op=1,
                          yiaddr=self.pg3.local_ip4,
-                         chaddr=mactobinary(self.pg3.local_mac)) /
+                         chaddr=mac_pton(self.pg3.local_mac)) /
                    DHCP(options=[('message-type', 'offer'),
                                  ('server_id', self.pg3.remote_ip4),
                                  ('lease_time', lease_time),
                    DHCP(options=[('message-type', 'offer'),
                                  ('server_id', self.pg3.remote_ip4),
                                  ('lease_time', lease_time),
@@ -1502,7 +1502,7 @@ class TestDHCP(VppTestCase):
                  IP(src=self.pg3.remote_ip4, dst='255.255.255.255') /
                  UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                  BOOTP(op=1, yiaddr=self.pg3.local_ip4,
                  IP(src=self.pg3.remote_ip4, dst='255.255.255.255') /
                  UDP(sport=DHCP4_SERVER_PORT, dport=DHCP4_CLIENT_PORT) /
                  BOOTP(op=1, yiaddr=self.pg3.local_ip4,
-                       chaddr=mactobinary(self.pg3.local_mac)) /
+                       chaddr=mac_pton(self.pg3.local_mac)) /
                  DHCP(options=[('message-type', 'ack'),
                                ('subnet_mask', '255.255.255.0'),
                                ('router', self.pg3.remote_ip4),
                  DHCP(options=[('message-type', 'ack'),
                                ('subnet_mask', '255.255.255.0'),
                                ('router', self.pg3.remote_ip4),
@@ -1530,7 +1530,7 @@ class TestDHCP(VppTestCase):
 
         # remove the left over ARP entry
         self.vapi.ip_neighbor_add_del(self.pg3.sw_if_index,
 
         # remove the left over ARP entry
         self.vapi.ip_neighbor_add_del(self.pg3.sw_if_index,
-                                      mactobinary(self.pg3.remote_mac),
+                                      mac_pton(self.pg3.remote_mac),
                                       self.pg3.remote_ip4,
                                       is_add=0)
 
                                       self.pg3.remote_ip4,
                                       is_add=0)
 
index efac2de..d587759 100644 (file)
@@ -14,9 +14,8 @@ from vpp_vxlan_gbp_tunnel import *
 from vpp_sub_interface import VppDot1QSubint
 
 from vpp_ip import *
 from vpp_sub_interface import VppDot1QSubint
 
 from vpp_ip import *
-from vpp_mac import *
 from vpp_papi_provider import L2_PORT_TYPE
 from vpp_papi_provider import L2_PORT_TYPE
-from vpp_papi import VppEnum
+from vpp_papi import VppEnum, MACAddress
 
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, ARP, Dot1Q
 
 from scapy.packet import Raw
 from scapy.layers.l2 import Ether, ARP, Dot1Q
@@ -35,7 +34,7 @@ def find_gbp_endpoint(test, sw_if_index=None, ip=None, mac=None):
     if ip:
         vip = VppIpAddress(ip)
     if mac:
     if ip:
         vip = VppIpAddress(ip)
     if mac:
-        vmac = VppMacAddress(mac)
+        vmac = MACAddress(mac)
 
     eps = test.vapi.gbp_endpoint_dump()
 
 
     eps = test.vapi.gbp_endpoint_dump()
 
@@ -48,7 +47,7 @@ def find_gbp_endpoint(test, sw_if_index=None, ip=None, mac=None):
                 if vip == eip:
                     return True
         if mac:
                 if vip == eip:
                     return True
         if mac:
-            if vmac == ep.endpoint.mac:
+            if vmac.packed == ep.endpoint.mac:
                 return True
     return False
 
                 return True
     return False
 
@@ -66,13 +65,9 @@ class VppGbpEndpoint(VppObject):
     GBP Endpoint
     """
 
     GBP Endpoint
     """
 
-    @property
-    def bin_mac(self):
-        return self.vmac.bytes
-
     @property
     def mac(self):
     @property
     def mac(self):
-        return self.vmac.address
+        return str(self.vmac)
 
     @property
     def mac(self):
 
     @property
     def mac(self):
@@ -118,9 +113,9 @@ class VppGbpEndpoint(VppObject):
         self._fip6 = VppIpAddress(fip6)
 
         if mac:
         self._fip6 = VppIpAddress(fip6)
 
         if mac:
-            self.vmac = VppMacAddress(self.itf.remote_mac)
+            self.vmac = MACAddress(self.itf.remote_mac)
         else:
         else:
-            self.vmac = VppMacAddress("00:00:00:00:00:00")
+            self.vmac = MACAddress("00:00:00:00:00:00")
 
         self.flags = flags
         self.tun_src = VppIpAddress(tun_src)
 
         self.flags = flags
         self.tun_src = VppIpAddress(tun_src)
@@ -130,7 +125,7 @@ class VppGbpEndpoint(VppObject):
         res = self._test.vapi.gbp_endpoint_add(
             self.itf.sw_if_index,
             [self.ip4.encode(), self.ip6.encode()],
         res = self._test.vapi.gbp_endpoint_add(
             self.itf.sw_if_index,
             [self.ip4.encode(), self.ip6.encode()],
-            self.vmac.encode(),
+            self.vmac.packed,
             self.epg.epg,
             self.flags,
             self.tun_src.encode(),
             self.epg.epg,
             self.flags,
             self.tun_src.encode(),
@@ -414,7 +409,7 @@ class VppGbpContractNextHop():
 
     def encode(self):
         return {'ip': self.ip.encode(),
 
     def encode(self):
         return {'ip': self.ip.encode(),
-                'mac': self.mac.encode(),
+                'mac': self.mac.packed,
                 'bd_id': self.bd.bd.bd_id,
                 'rd_id': self.rd.rd_id}
 
                 'bd_id': self.bd.bd.bd_id,
                 'rd_id': self.rd.rd_id}
 
@@ -584,7 +579,7 @@ class TestGBP(VppTestCase):
         self.create_pg_interfaces(range(9))
         self.create_loopback_interfaces(8)
 
         self.create_pg_interfaces(range(9))
         self.create_loopback_interfaces(8)
 
-        self.router_mac = VppMacAddress("00:11:22:33:44:55")
+        self.router_mac = MACAddress("00:11:22:33:44:55")
 
         for i in self.pg_interfaces:
             i.admin_up()
 
         for i in self.pg_interfaces:
             i.admin_up()
@@ -671,7 +666,7 @@ class TestGBP(VppTestCase):
         rx = self.send_and_expect(src, tx, dst)
 
         for r in rx:
         rx = self.send_and_expect(src, tx, dst)
 
         for r in rx:
-            self.assertEqual(r[Ether].src, self.router_mac.address)
+            self.assertEqual(r[Ether].src, str(self.router_mac))
             self.assertEqual(r[Ether].dst, dst.remote_mac)
             self.assertEqual(r[IP].dst, dst_ip)
             self.assertEqual(r[IP].src, src_ip)
             self.assertEqual(r[Ether].dst, dst.remote_mac)
             self.assertEqual(r[IP].dst, dst_ip)
             self.assertEqual(r[IP].src, src_ip)
@@ -681,7 +676,7 @@ class TestGBP(VppTestCase):
         rx = self.send_and_expect(src, tx, dst)
 
         for r in rx:
         rx = self.send_and_expect(src, tx, dst)
 
         for r in rx:
-            self.assertEqual(r[Ether].src, self.router_mac.address)
+            self.assertEqual(r[Ether].src, str(self.router_mac))
             self.assertEqual(r[Ether].dst, dst.remote_mac)
             self.assertEqual(r[IPv6].dst, dst_ip)
             self.assertEqual(r[IPv6].src, src_ip)
             self.assertEqual(r[Ether].dst, dst.remote_mac)
             self.assertEqual(r[IPv6].dst, dst_ip)
             self.assertEqual(r[IPv6].src, src_ip)
@@ -797,7 +792,7 @@ class TestGBP(VppTestCase):
                 VppIpInterfaceBind(self, epg.bvi, epg.rd.t6).add_vpp_config()
                 self.vapi.sw_interface_set_mac_address(
                     epg.bvi.sw_if_index,
                 VppIpInterfaceBind(self, epg.bvi, epg.rd.t6).add_vpp_config()
                 self.vapi.sw_interface_set_mac_address(
                     epg.bvi.sw_if_index,
-                    self.router_mac.bytes)
+                    self.router_mac.packed)
 
                 # The BVIs are NAT inside interfaces
                 self.vapi.nat44_interface_add_del_feature(epg.bvi.sw_if_index,
 
                 # The BVIs are NAT inside interfaces
                 self.vapi.nat44_interface_add_del_feature(epg.bvi.sw_if_index,
@@ -818,10 +813,10 @@ class TestGBP(VppTestCase):
 
             # add the BD ARP termination entry for BVI IP
             epg.bd_arp_ip4 = VppBridgeDomainArpEntry(self, epg.bd.bd,
 
             # add the BD ARP termination entry for BVI IP
             epg.bd_arp_ip4 = VppBridgeDomainArpEntry(self, epg.bd.bd,
-                                                     self.router_mac.address,
+                                                     str(self.router_mac),
                                                      epg.bvi_ip4)
             epg.bd_arp_ip6 = VppBridgeDomainArpEntry(self, epg.bd.bd,
                                                      epg.bvi_ip4)
             epg.bd_arp_ip6 = VppBridgeDomainArpEntry(self, epg.bd.bd,
-                                                     self.router_mac.address,
+                                                     str(self.router_mac),
                                                      epg.bvi_ip6)
             epg.bd_arp_ip4.add_vpp_config()
             epg.bd_arp_ip6.add_vpp_config()
                                                      epg.bvi_ip6)
             epg.bd_arp_ip4.add_vpp_config()
             epg.bd_arp_ip6.add_vpp_config()
@@ -977,13 +972,13 @@ class TestGBP(VppTestCase):
         # packets to non-local L3 destinations dropped
         #
         pkt_intra_epg_220_ip4 = (Ether(src=self.pg0.remote_mac,
         # packets to non-local L3 destinations dropped
         #
         pkt_intra_epg_220_ip4 = (Ether(src=self.pg0.remote_mac,
-                                       dst=self.router_mac.address) /
+                                       dst=str(self.router_mac)) /
                                  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,
                                  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.address) /
+                                       dst=str(self.router_mac)) /
                                  IP(src=eps[0].ip4.address,
                                     dst="10.0.1.99") /
                                  UDP(sport=1234, dport=1234) /
                                  IP(src=eps[0].ip4.address,
                                     dst="10.0.1.99") /
                                  UDP(sport=1234, dport=1234) /
@@ -992,7 +987,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,
         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.address) /
+                                       dst=str(self.router_mac)) /
                                  IPv6(src=eps[0].ip6.address,
                                       dst="2001:10::99") /
                                  UDP(sport=1234, dport=1234) /
                                  IPv6(src=eps[0].ip6.address,
                                       dst="2001:10::99") /
                                  UDP(sport=1234, dport=1234) /
@@ -1120,7 +1115,7 @@ class TestGBP(VppTestCase):
                                     UDP(sport=1234, dport=1234) /
                                     Raw('\xa5' * 100))
         pkt_inter_epg_220_to_222 = (Ether(src=self.pg0.remote_mac,
                                     UDP(sport=1234, dport=1234) /
                                     Raw('\xa5' * 100))
         pkt_inter_epg_220_to_222 = (Ether(src=self.pg0.remote_mac,
-                                          dst=self.router_mac.address) /
+                                          dst=str(self.router_mac)) /
                                     IP(src=eps[0].ip4.address,
                                        dst=eps[3].ip4.address) /
                                     UDP(sport=1234, dport=1234) /
                                     IP(src=eps[0].ip4.address,
                                        dst=eps[3].ip4.address) /
                                     UDP(sport=1234, dport=1234) /
@@ -1201,7 +1196,7 @@ class TestGBP(VppTestCase):
         self.send_and_expect_routed(eps[0].itf,
                                     pkt_inter_epg_220_to_222 * 65,
                                     eps[3].itf,
         self.send_and_expect_routed(eps[0].itf,
                                     pkt_inter_epg_220_to_222 * 65,
                                     eps[3].itf,
-                                    self.router_mac.address)
+                                    str(self.router_mac))
 
         #
         # remove both contracts, traffic stops in both directions
 
         #
         # remove both contracts, traffic stops in both directions
@@ -1272,7 +1267,7 @@ class TestGBP(VppTestCase):
         # From an EP to an outside addess: IN2OUT
         #
         pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac,
         # From an EP to an outside addess: IN2OUT
         #
         pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac,
-                                             dst=self.router_mac.address) /
+                                             dst=str(self.router_mac)) /
                                        IP(src=eps[0].ip4.address,
                                           dst="1.1.1.1") /
                                        UDP(sport=1234, dport=1234) /
                                        IP(src=eps[0].ip4.address,
                                           dst="1.1.1.1") /
                                        UDP(sport=1234, dport=1234) /
@@ -1307,7 +1302,7 @@ class TestGBP(VppTestCase):
                                     eps[0].fip4.address)
 
         pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac,
                                     eps[0].fip4.address)
 
         pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac,
-                                             dst=self.router_mac.address) /
+                                             dst=str(self.router_mac)) /
                                        IPv6(src=eps[0].ip6.address,
                                             dst="6001::1") /
                                        UDP(sport=1234, dport=1234) /
                                        IPv6(src=eps[0].ip6.address,
                                             dst="6001::1") /
                                        UDP(sport=1234, dport=1234) /
@@ -1321,7 +1316,7 @@ class TestGBP(VppTestCase):
         #
         # From a global address to an EP: OUT2IN
         #
         #
         # From a global address to an EP: OUT2IN
         #
-        pkt_inter_epg_220_from_global = (Ether(src=self.router_mac.address,
+        pkt_inter_epg_220_from_global = (Ether(src=str(self.router_mac),
                                                dst=self.pg0.remote_mac) /
                                          IP(dst=eps[0].fip4.address,
                                             src="1.1.1.1") /
                                                dst=self.pg0.remote_mac) /
                                          IP(dst=eps[0].fip4.address,
                                             src="1.1.1.1") /
@@ -1347,7 +1342,7 @@ class TestGBP(VppTestCase):
                                       eps[0].itf,
                                       eps[0].ip4.address)
 
                                       eps[0].itf,
                                       eps[0].ip4.address)
 
-        pkt_inter_epg_220_from_global = (Ether(src=self.router_mac.address,
+        pkt_inter_epg_220_from_global = (Ether(src=str(self.router_mac),
                                                dst=self.pg0.remote_mac) /
                                          IPv6(dst=eps[0].fip6.address,
                                               src="6001::1") /
                                                dst=self.pg0.remote_mac) /
                                          IPv6(dst=eps[0].fip6.address,
                                               src="6001::1") /
@@ -1364,7 +1359,7 @@ class TestGBP(VppTestCase):
         #  IN2OUT2IN
         #
         pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac,
         #  IN2OUT2IN
         #
         pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac,
-                                          dst=self.router_mac.address) /
+                                          dst=str(self.router_mac)) /
                                     IP(src=eps[0].ip4.address,
                                        dst=eps[1].fip4.address) /
                                     UDP(sport=1234, dport=1234) /
                                     IP(src=eps[0].ip4.address,
                                        dst=eps[1].fip4.address) /
                                     UDP(sport=1234, dport=1234) /
@@ -1377,7 +1372,7 @@ class TestGBP(VppTestCase):
                                            eps[1].ip4.address)
 
         pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac,
                                            eps[1].ip4.address)
 
         pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac,
-                                          dst=self.router_mac.address) /
+                                          dst=str(self.router_mac)) /
                                     IPv6(src=eps[0].ip6.address,
                                          dst=eps[1].fip6.address) /
                                     UDP(sport=1234, dport=1234) /
                                     IPv6(src=eps[0].ip6.address,
                                          dst=eps[1].fip6.address) /
                                     UDP(sport=1234, dport=1234) /
@@ -2039,7 +2034,7 @@ class TestGBP(VppTestCase):
         rd1 = VppGbpRouteDomain(self, 2, t4, t6, tun_ip4_uu, tun_ip6_uu)
         rd1.add_vpp_config()
 
         rd1 = VppGbpRouteDomain(self, 2, t4, t6, tun_ip4_uu, tun_ip6_uu)
         rd1.add_vpp_config()
 
-        self.loop0.set_mac(self.router_mac.address)
+        self.loop0.set_mac(self.router_mac)
 
         #
         # Bind the BVI to the RD
 
         #
         # Bind the BVI to the RD
@@ -2476,7 +2471,7 @@ class TestGBP(VppTestCase):
         rd1 = VppGbpRouteDomain(self, 2, t4, t6)
         rd1.add_vpp_config()
 
         rd1 = VppGbpRouteDomain(self, 2, t4, t6)
         rd1.add_vpp_config()
 
-        self.loop0.set_mac(self.router_mac.address)
+        self.loop0.set_mac(self.router_mac)
 
         #
         # Bind the BVI to the RD
 
         #
         # Bind the BVI to the RD
@@ -2840,19 +2835,19 @@ class TestGBP(VppTestCase):
         # an L3 switch packet between local EPs in different EPGs
         #  different dest ports on each so the are LB hashed differently
         #
         # an L3 switch packet between local EPs in different EPGs
         #  different dest ports on each so the are LB hashed differently
         #
-        p4 = [(Ether(src=ep1.mac, dst=self.router_mac.address) /
+        p4 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
                IP(src=ep1.ip4.address, dst=ep2.ip4.address) /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100)),
                IP(src=ep1.ip4.address, dst=ep2.ip4.address) /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100)),
-              (Ether(src=ep2.mac, dst=self.router_mac.address) /
+              (Ether(src=ep2.mac, dst=str(self.router_mac)) /
                IP(src=ep2.ip4.address, dst=ep1.ip4.address) /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100))]
                IP(src=ep2.ip4.address, dst=ep1.ip4.address) /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100))]
-        p6 = [(Ether(src=ep1.mac, dst=self.router_mac.address) /
+        p6 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
                IPv6(src=ep1.ip6.address, dst=ep2.ip6.address) /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100)),
                IPv6(src=ep1.ip6.address, dst=ep2.ip6.address) /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100)),
-              (Ether(src=ep2.mac, dst=self.router_mac.address) /
+              (Ether(src=ep2.mac, dst=str(self.router_mac)) /
                IPv6(src=ep2.ip6.address, dst=ep1.ip6.address) /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100))]
                IPv6(src=ep2.ip6.address, dst=ep1.ip6.address) /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100))]
@@ -2907,7 +2902,7 @@ class TestGBP(VppTestCase):
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=221, flags=0x88) /
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=221, flags=0x88) /
-             Ether(src="00:22:22:22:22:33", dst=self.router_mac.address) /
+             Ether(src="00:22:22:22:22:33", dst=str(self.router_mac)) /
              IP(src="10.0.0.88", dst=ep1.ip4.address) /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
              IP(src="10.0.0.88", dst=ep1.ip4.address) /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
@@ -2925,7 +2920,7 @@ class TestGBP(VppTestCase):
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=221, flags=0x88) /
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=221, flags=0x88) /
-             Ether(src="00:22:22:22:22:33", dst=self.router_mac.address) /
+             Ether(src="00:22:22:22:22:33", dst=str(self.router_mac)) /
              IPv6(src="2001:10::88", dst=ep1.ip6.address) /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
              IPv6(src="2001:10::88", dst=ep1.ip6.address) /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
@@ -2940,11 +2935,11 @@ class TestGBP(VppTestCase):
         #
         # L3 switch from local to remote EP
         #
         #
         # L3 switch from local to remote EP
         #
-        p4 = [(Ether(src=ep1.mac, dst=self.router_mac.address) /
+        p4 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
                IP(src=ep1.ip4.address, dst="10.0.0.88") /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100))]
                IP(src=ep1.ip4.address, dst="10.0.0.88") /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100))]
-        p6 = [(Ether(src=ep1.mac, dst=self.router_mac.address) /
+        p6 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) /
                IPv6(src=ep1.ip6.address, dst="2001:10::88") /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100))]
                IPv6(src=ep1.ip6.address, dst="2001:10::88") /
                UDP(sport=1234, dport=1234) /
                Raw('\xa5' * 100))]
@@ -3027,7 +3022,7 @@ class TestGBP(VppTestCase):
         rd1 = VppGbpRouteDomain(self, 2, t4, t6)
         rd1.add_vpp_config()
 
         rd1 = VppGbpRouteDomain(self, 2, t4, t6)
         rd1.add_vpp_config()
 
-        self.loop0.set_mac(self.router_mac.address)
+        self.loop0.set_mac(self.router_mac)
 
         #
         # Bind the BVI to the RD
 
         #
         # Bind the BVI to the RD
@@ -3104,12 +3099,12 @@ class TestGBP(VppTestCase):
         # packets destined to unkown addresses in the BVI's subnet
         # are ARP'd for
         #
         # packets destined to unkown addresses in the BVI's subnet
         # are ARP'd for
         #
-        p4 = (Ether(src=self.pg0.remote_mac, dst=self.router_mac.address) /
+        p4 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
               Dot1Q(vlan=100) /
               IP(src="10.0.0.1", dst="10.0.0.88") /
               UDP(sport=1234, dport=1234) /
               Raw('\xa5' * 100))
               Dot1Q(vlan=100) /
               IP(src="10.0.0.1", dst="10.0.0.88") /
               UDP(sport=1234, dport=1234) /
               Raw('\xa5' * 100))
-        p6 = (Ether(src=self.pg0.remote_mac, dst=self.router_mac.address) /
+        p6 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
               Dot1Q(vlan=100) /
               IPv6(src="2001:10::1", dst="2001:10::88") /
               UDP(sport=1234, dport=1234) /
               Dot1Q(vlan=100) /
               IPv6(src="2001:10::1", dst="2001:10::88") /
               UDP(sport=1234, dport=1234) /
@@ -3165,7 +3160,7 @@ class TestGBP(VppTestCase):
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=220, flags=0x88) /
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=220, flags=0x88) /
-             Ether(src=self.pg0.remote_mac, dst=self.router_mac.address) /
+             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
              IP(src="10.0.0.101", dst="10.0.0.1") /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
              IP(src="10.0.0.101", dst="10.0.0.1") /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
@@ -3193,7 +3188,7 @@ class TestGBP(VppTestCase):
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=220, flags=0x88) /
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=220, flags=0x88) /
-             Ether(src=self.pg0.remote_mac, dst=self.router_mac.address) /
+             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
              IP(src="10.0.0.101", dst="10.220.0.1") /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
              IP(src="10.0.0.101", dst="10.220.0.1") /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
@@ -3221,7 +3216,7 @@ class TestGBP(VppTestCase):
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=220, flags=0x88) /
                 dst=self.pg7.local_ip4) /
              UDP(sport=1234, dport=48879) /
              VXLAN(vni=444, gpid=220, flags=0x88) /
-             Ether(src=self.pg0.remote_mac, dst=self.router_mac.address) /
+             Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
              IP(src="10.0.0.101", dst="10.200.0.1") /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
              IP(src="10.0.0.101", dst="10.200.0.1") /
              UDP(sport=1234, dport=1234) /
              Raw('\xa5' * 100))
@@ -3234,7 +3229,7 @@ class TestGBP(VppTestCase):
         #
         # from the the subnet in EPG 220 beyond the external to remote
         #
         #
         # from the the subnet in EPG 220 beyond the external to remote
         #
-        p4 = (Ether(src=self.pg0.remote_mac, dst=self.router_mac.address) /
+        p4 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
               Dot1Q(vlan=100) /
               IP(src="10.220.0.1", dst=rep.ip4.address) /
               UDP(sport=1234, dport=1234) /
               Dot1Q(vlan=100) /
               IP(src="10.220.0.1", dst=rep.ip4.address) /
               UDP(sport=1234, dport=1234) /
@@ -3257,7 +3252,7 @@ class TestGBP(VppTestCase):
         # from the the subnet in EPG 200 beyond the external to remote
         # dropped due to no contract
         #
         # from the the subnet in EPG 200 beyond the external to remote
         # dropped due to no contract
         #
-        p4 = (Ether(src=self.pg0.remote_mac, dst=self.router_mac.address) /
+        p4 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) /
               Dot1Q(vlan=100) /
               IP(src="10.200.0.1", dst=rep.ip4.address) /
               UDP(sport=1234, dport=1234) /
               Dot1Q(vlan=100) /
               IP(src="10.200.0.1", dst=rep.ip4.address) /
               UDP(sport=1234, dport=1234) /
index a7fe787..8c3830c 100644 (file)
@@ -31,7 +31,7 @@ from scapy.layers.l2 import Ether
 from scapy.layers.inet import IP, UDP
 
 from framework import VppTestCase, VppTestRunner
 from scapy.layers.inet import IP, UDP
 
 from framework import VppTestCase, VppTestRunner
-from vpp_mac import mactobinary
+from vpp_papi import MACAddress
 from vpp_papi_provider import L2_PORT_TYPE
 
 
 from vpp_papi_provider import L2_PORT_TYPE
 
 
@@ -265,7 +265,7 @@ class TestIpIrb(VppTestCase):
         self.send_and_verify_l2_to_ip()
 
         # change the BVI's mac and resed traffic
         self.send_and_verify_l2_to_ip()
 
         # change the BVI's mac and resed traffic
-        self.loop0.set_mac("00:00:00:11:11:33")
+        self.loop0.set_mac(MACAddress("00:00:00:11:11:33"))
 
         self.send_and_verify_l2_to_ip()
         # check it wasn't flooded
 
         self.send_and_verify_l2_to_ip()
         # check it wasn't flooded
index 436aa10..1cee589 100644 (file)
@@ -69,6 +69,7 @@ from scapy.layers.inet import IP, UDP
 
 from framework import VppTestCase, VppTestRunner
 from util import Host, ppp
 
 from framework import VppTestCase, VppTestRunner
 from util import Host, ppp
+from vpp_papi import mac_pton
 
 # from src/vnet/l2/l2_fib.h
 MAC_EVENT_ACTION_ADD = 0
 
 # from src/vnet/l2/l2_fib.h
 MAC_EVENT_ACTION_ADD = 0
@@ -205,7 +206,7 @@ class TestL2fib(VppTestCase):
             swif = pg_if.sw_if_index
             for host in hosts[swif]:
                 self.vapi.l2fib_add_del(
             swif = pg_if.sw_if_index
             for host in hosts[swif]:
                 self.vapi.l2fib_add_del(
-                    host.mac, bd_id, swif, static_mac=1)
+                    mac_pton(host.mac), bd_id, swif, static_mac=1)
 
     def delete_l2_fib_entry(self, bd_id, hosts):
         """
 
     def delete_l2_fib_entry(self, bd_id, hosts):
         """
@@ -218,7 +219,7 @@ class TestL2fib(VppTestCase):
             swif = pg_if.sw_if_index
             for host in hosts[swif]:
                 self.vapi.l2fib_add_del(
             swif = pg_if.sw_if_index
             for host in hosts[swif]:
                 self.vapi.l2fib_add_del(
-                    host.mac, bd_id, swif, is_add=0)
+                    mac_pton(host.mac), bd_id, swif, is_add=0)
 
     def flush_int(self, swif, learned_hosts):
         """
 
     def flush_int(self, swif, learned_hosts):
         """
index f25be57..2321aa7 100644 (file)
@@ -20,7 +20,6 @@ from scapy.layers.inet6 import IPv6, UDP, ICMPv6ND_NS, ICMPv6ND_RS, \
 
 from framework import VppTestCase, VppTestRunner
 from util import Host, ppp
 
 from framework import VppTestCase, VppTestRunner
 from util import Host, ppp
-from vpp_mac import VppMacAddress, mactobinary
 
 
 class TestL2bdArpTerm(VppTestCase):
 
 
 class TestL2bdArpTerm(VppTestCase):
@@ -72,7 +71,7 @@ class TestL2bdArpTerm(VppTestCase):
         for e in entries:
             ip = e.ip4 if is_ipv6 == 0 else e.ip6
             self.vapi.bd_ip_mac_add_del(bd_id=bd_id,
         for e in entries:
             ip = e.ip4 if is_ipv6 == 0 else e.ip6
             self.vapi.bd_ip_mac_add_del(bd_id=bd_id,
-                                        mac=VppMacAddress(e.mac).encode(),
+                                        mac=e.mac,
                                         ip=ip,
                                         is_ipv6=is_ipv6,
                                         is_add=is_add)
                                         ip=ip,
                                         is_ipv6=is_ipv6,
                                         is_add=is_add)
index a7ca6d3..9879b76 100644 (file)
@@ -18,7 +18,7 @@ from util import ppp
 from ipfix import IPFIX, Set, Template, Data, IPFIXDecoder
 from time import sleep
 from util import ip4_range
 from ipfix import IPFIX, Set, Template, Data, IPFIXDecoder
 from time import sleep
 from util import ip4_range
-from vpp_mac import mactobinary
+from vpp_papi import mac_pton
 from syslog_rfc5424_parser import SyslogMessage, ParseError
 from syslog_rfc5424_parser.constants import SyslogFacility, SyslogSeverity
 from vpp_papi_provider import SYSLOG_SEVERITY
 from syslog_rfc5424_parser import SyslogMessage, ParseError
 from syslog_rfc5424_parser.constants import SyslogFacility, SyslogSeverity
 from vpp_papi_provider import SYSLOG_SEVERITY
@@ -2952,11 +2952,11 @@ class TestNAT44(MethodHolder):
         """ NAT44 interfaces without configured IP address """
 
         self.vapi.ip_neighbor_add_del(self.pg7.sw_if_index,
         """ NAT44 interfaces without configured IP address """
 
         self.vapi.ip_neighbor_add_del(self.pg7.sw_if_index,
-                                      mactobinary(self.pg7.remote_mac),
+                                      mac_pton(self.pg7.remote_mac),
                                       self.pg7.remote_ip4n,
                                       is_static=1)
         self.vapi.ip_neighbor_add_del(self.pg8.sw_if_index,
                                       self.pg7.remote_ip4n,
                                       is_static=1)
         self.vapi.ip_neighbor_add_del(self.pg8.sw_if_index,
-                                      mactobinary(self.pg8.remote_mac),
+                                      mac_pton(self.pg8.remote_mac),
                                       self.pg8.remote_ip4n,
                                       is_static=1)
 
                                       self.pg8.remote_ip4n,
                                       is_static=1)
 
@@ -2994,11 +2994,11 @@ class TestNAT44(MethodHolder):
         """ NAT44 interfaces without configured IP address - 1:1 NAT """
 
         self.vapi.ip_neighbor_add_del(self.pg7.sw_if_index,
         """ NAT44 interfaces without configured IP address - 1:1 NAT """
 
         self.vapi.ip_neighbor_add_del(self.pg7.sw_if_index,
-                                      mactobinary(self.pg7.remote_mac),
+                                      mac_pton(self.pg7.remote_mac),
                                       self.pg7.remote_ip4n,
                                       is_static=1)
         self.vapi.ip_neighbor_add_del(self.pg8.sw_if_index,
                                       self.pg7.remote_ip4n,
                                       is_static=1)
         self.vapi.ip_neighbor_add_del(self.pg8.sw_if_index,
-                                      mactobinary(self.pg8.remote_mac),
+                                      mac_pton(self.pg8.remote_mac),
                                       self.pg8.remote_ip4n,
                                       is_static=1)
 
                                       self.pg8.remote_ip4n,
                                       is_static=1)
 
@@ -3040,11 +3040,11 @@ class TestNAT44(MethodHolder):
         self.icmp_id_out = 30608
 
         self.vapi.ip_neighbor_add_del(self.pg7.sw_if_index,
         self.icmp_id_out = 30608
 
         self.vapi.ip_neighbor_add_del(self.pg7.sw_if_index,
-                                      mactobinary(self.pg7.remote_mac),
+                                      mac_pton(self.pg7.remote_mac),
                                       self.pg7.remote_ip4n,
                                       is_static=1)
         self.vapi.ip_neighbor_add_del(self.pg8.sw_if_index,
                                       self.pg7.remote_ip4n,
                                       is_static=1)
         self.vapi.ip_neighbor_add_del(self.pg8.sw_if_index,
-                                      mactobinary(self.pg8.remote_mac),
+                                      mac_pton(self.pg8.remote_mac),
                                       self.pg8.remote_ip4n,
                                       is_static=1)
 
                                       self.pg8.remote_ip4n,
                                       is_static=1)
 
index f08d0cc..34a4c24 100644 (file)
@@ -13,7 +13,7 @@ from framework import VppTestCase, VppTestRunner
 from vpp_sub_interface import VppP2PSubint
 from vpp_ip import DpoProto
 from vpp_ip_route import VppIpRoute, VppRoutePath
 from vpp_sub_interface import VppP2PSubint
 from vpp_ip import DpoProto
 from vpp_ip_route import VppIpRoute, VppRoutePath
-from vpp_mac import mactobinary
+from vpp_papi import mac_pton
 
 
 class P2PEthernetAPI(VppTestCase):
 
 
 class P2PEthernetAPI(VppTestCase):
@@ -33,12 +33,12 @@ class P2PEthernetAPI(VppTestCase):
             i.admin_up()
 
     def create_p2p_ethernet(self, parent_if, sub_id, remote_mac):
             i.admin_up()
 
     def create_p2p_ethernet(self, parent_if, sub_id, remote_mac):
-        p2p = VppP2PSubint(self, parent_if, sub_id, mactobinary(remote_mac))
+        p2p = VppP2PSubint(self, parent_if, sub_id, mac_pton(remote_mac))
         self.p2p_sub_ifs.append(p2p)
 
     def delete_p2p_ethernet(self, parent_if, remote_mac):
         self.vapi.delete_p2pethernet_subif(parent_if.sw_if_index,
         self.p2p_sub_ifs.append(p2p)
 
     def delete_p2p_ethernet(self, parent_if, remote_mac):
         self.vapi.delete_p2pethernet_subif(parent_if.sw_if_index,
-                                           mactobinary(remote_mac))
+                                           mac_pton(remote_mac))
 
     def test_api(self):
         """delete/create p2p subif"""
 
     def test_api(self):
         """delete/create p2p subif"""
@@ -79,7 +79,7 @@ class P2PEthernetAPI(VppTestCase):
             try:
                 macs.append(':'.join(re.findall('..', '{:02x}'.format(mac+i))))
                 self.vapi.create_p2pethernet_subif(self.pg2.sw_if_index,
             try:
                 macs.append(':'.join(re.findall('..', '{:02x}'.format(mac+i))))
                 self.vapi.create_p2pethernet_subif(self.pg2.sw_if_index,
-                                                   mactobinary(macs[i-1]),
+                                                   mac_pton(macs[i-1]),
                                                    i)
             except Exception:
                 self.logger.info("Failed to create subif %d %s" % (
                                                    i)
             except Exception:
                 self.logger.info("Failed to create subif %d %s" % (
@@ -144,7 +144,7 @@ class P2PEthernetIPV6(VppTestCase):
         super(P2PEthernetIPV6, self).tearDown()
 
     def create_p2p_ethernet(self, parent_if, sub_id, remote_mac):
         super(P2PEthernetIPV6, self).tearDown()
 
     def create_p2p_ethernet(self, parent_if, sub_id, remote_mac):
-        p2p = VppP2PSubint(self, parent_if, sub_id, mactobinary(remote_mac))
+        p2p = VppP2PSubint(self, parent_if, sub_id, mac_pton(remote_mac))
         p2p.admin_up()
         p2p.config_ip6()
         p2p.disable_ipv6_ra()
         p2p.admin_up()
         p2p.config_ip6()
         p2p.disable_ipv6_ra()
@@ -389,7 +389,7 @@ class P2PEthernetIPV4(VppTestCase):
         return dst_if.get_capture(count)
 
     def create_p2p_ethernet(self, parent_if, sub_id, remote_mac):
         return dst_if.get_capture(count)
 
     def create_p2p_ethernet(self, parent_if, sub_id, remote_mac):
-        p2p = VppP2PSubint(self, parent_if, sub_id, mactobinary(remote_mac))
+        p2p = VppP2PSubint(self, parent_if, sub_id, mac_pton(remote_mac))
         p2p.admin_up()
         p2p.config_ip4()
         return p2p
         p2p.admin_up()
         p2p.config_ip4()
         return p2p
index 615b7a0..b181f6b 100644 (file)
@@ -14,7 +14,6 @@ from scapy.layers.ppp import PPPoE, PPPoED, PPP
 from scapy.layers.inet import IP, UDP
 from scapy.layers.inet6 import IPv6
 from scapy.volatile import RandMAC, RandIP
 from scapy.layers.inet import IP, UDP
 from scapy.layers.inet6 import IPv6
 from scapy.volatile import RandMAC, RandIP
-from vpp_mac import mactobinary
 from util import ppp, ppc
 import socket
 
 from util import ppp, ppc
 import socket
 
index 49095d8..01ba862 100755 (executable)
@@ -3,15 +3,15 @@
 
 import unittest
 from framework import VppTestCase, VppTestRunner
 
 import unittest
 from framework import VppTestCase, VppTestRunner
-from vpp_mac import mactobinary, binarytomac
+from vpp_papi import mac_pton, mac_ntop
 
 
 class TestUtil (VppTestCase):
     """ MAC to binary and back """
     def test_mac_to_binary(self):
         mac = 'aa:bb:cc:dd:ee:ff'
 
 
 class TestUtil (VppTestCase):
     """ MAC to binary and back """
     def test_mac_to_binary(self):
         mac = 'aa:bb:cc:dd:ee:ff'
-        b = mactobinary(mac)
-        mac2 = binarytomac(b)
+        b = mac_pton(mac)
+        mac2 = mac_ntop(b)
         self.assertEqual(type(mac), type(mac2))
         self.assertEqual(mac2, mac)
 
         self.assertEqual(type(mac), type(mac2))
         self.assertEqual(mac2, mac)
 
index a3ec6e3..9652b80 100644 (file)
@@ -14,7 +14,7 @@ from scapy.layers.inet6 import IPv6, IPv6ExtHdrFragment, IPv6ExtHdrRouting,\
 from scapy.utils import hexdump
 from socket import AF_INET6
 from io import BytesIO
 from scapy.utils import hexdump
 from socket import AF_INET6
 from io import BytesIO
-from vpp_mac import mactobinary
+from vpp_papi import mac_pton
 
 
 def ppp(headline, packet):
 
 
 def ppp(headline, packet):
@@ -130,7 +130,7 @@ class Host(object):
     @property
     def bin_mac(self):
         """ MAC address """
     @property
     def bin_mac(self):
         """ MAC address """
-        return mactobinary(self._mac)
+        return mac_pton(self._mac)
 
     @property
     def ip4(self):
 
     @property
     def ip4(self):
index 3235d3f..719f77b 100644 (file)
@@ -5,7 +5,7 @@ from abc import abstractmethod, ABCMeta
 from six import moves
 
 from util import Host, mk_ll_addr
 from six import moves
 
 from util import Host, mk_ll_addr
-from vpp_mac import mactobinary, binarytomac
+from vpp_papi import mac_pton, mac_ntop
 
 
 class VppInterface(object):
 
 
 class VppInterface(object):
@@ -191,11 +191,10 @@ class VppInterface(object):
         self._hosts_by_ip6 = {}
 
     def set_mac(self, mac):
         self._hosts_by_ip6 = {}
 
     def set_mac(self, mac):
-        self._local_mac = mac
-        self._local_ip6_ll = mk_ll_addr(mac)
+        self._local_mac = str(mac)
+        self._local_ip6_ll = mk_ll_addr(self._local_mac)
         self.test.vapi.sw_interface_set_mac_address(
         self.test.vapi.sw_interface_set_mac_address(
-            self.sw_if_index,
-            mactobinary(self._local_mac))
+            self.sw_if_index, mac.packed)
 
     def set_sw_if_index(self, sw_if_index):
         self._sw_if_index = sw_if_index
 
     def set_sw_if_index(self, sw_if_index):
         self._sw_if_index = sw_if_index
@@ -234,7 +233,7 @@ class VppInterface(object):
             if intf.sw_if_index == self.sw_if_index:
                 self._name = intf.interface_name.split(b'\0',
                                                        1)[0].decode('utf8')
             if intf.sw_if_index == self.sw_if_index:
                 self._name = intf.interface_name.split(b'\0',
                                                        1)[0].decode('utf8')
-                self._local_mac = binarytomac(intf.l2_address)
+                self._local_mac = mac_ntop(intf.l2_address)
                 self._dump = intf
                 break
         else:
                 self._dump = intf
                 break
         else:
@@ -274,7 +273,7 @@ class VppInterface(object):
         :param vrf_id: The FIB table / VRF ID. (Default value = 0)
         """
         for host in self._remote_hosts:
         :param vrf_id: The FIB table / VRF ID. (Default value = 0)
         """
         for host in self._remote_hosts:
-            macn = mactobinary(host.mac)
+            macn = mac_pton(host.mac)
             ipn = host.ip4n
             self.test.vapi.ip_neighbor_add_del(
                 self.sw_if_index, macn, ipn)
             ipn = host.ip4n
             self.test.vapi.ip_neighbor_add_del(
                 self.sw_if_index, macn, ipn)
@@ -305,7 +304,7 @@ class VppInterface(object):
         :param vrf_id: The FIB table / VRF ID. (Default value = 0)
         """
         for host in self._remote_hosts:
         :param vrf_id: The FIB table / VRF ID. (Default value = 0)
         """
         for host in self._remote_hosts:
-            macn = mactobinary(host.mac)
+            macn = mac_pton(host.mac)
             ipn = host.ip6n
             self.test.vapi.ip_neighbor_add_del(
                 self.sw_if_index, macn, ipn, is_ipv6=1)
             ipn = host.ip6n
             self.test.vapi.ip_neighbor_add_del(
                 self.sw_if_index, macn, ipn, is_ipv6=1)
index e2f3760..182f2ce 100644 (file)
@@ -5,8 +5,8 @@
 
 from vpp_object import *
 from vpp_ip import VppIpAddress
 
 from vpp_object import *
 from vpp_ip import VppIpAddress
-from vpp_mac import VppMacAddress, mactobinary
 from vpp_lo_interface import VppLoInterface
 from vpp_lo_interface import VppLoInterface
+from vpp_papi import MACAddress
 
 
 class L2_PORT_TYPE:
 
 
 class L2_PORT_TYPE:
@@ -39,7 +39,7 @@ def find_bridge_domain_port(test, bd_id, sw_if_index):
 
 
 def find_bridge_domain_arp_entry(test, bd_id, mac, ip):
 
 
 def find_bridge_domain_arp_entry(test, bd_id, mac, ip):
-    vmac = VppMacAddress(mac)
+    vmac = MACAddress(mac)
     vip = VppIpAddress(ip)
 
     if vip.version == 4:
     vip = VppIpAddress(ip)
 
     if vip.version == 4:
@@ -50,17 +50,17 @@ def find_bridge_domain_arp_entry(test, bd_id, mac, ip):
     arps = test.vapi.bd_ip_mac_dump(bd_id)
     for arp in arps:
         # do IP addr comparison too once .api is fixed...
     arps = test.vapi.bd_ip_mac_dump(bd_id)
     for arp in arps:
         # do IP addr comparison too once .api is fixed...
-        if vmac.bytes == arp.mac_address and \
+        if vmac.packed == arp.mac_address and \
            vip.bytes == arp.ip_address[:n]:
             return True
     return False
 
 
 def find_l2_fib_entry(test, bd_id, mac, sw_if_index):
            vip.bytes == arp.ip_address[:n]:
             return True
     return False
 
 
 def find_l2_fib_entry(test, bd_id, mac, sw_if_index):
-    vmac = VppMacAddress(mac)
+    vmac = MACAddress(mac)
     lfs = test.vapi.l2_fib_table_dump(bd_id)
     for lf in lfs:
     lfs = test.vapi.l2_fib_table_dump(bd_id)
     for lf in lfs:
-        if vmac.bytes == lf.mac and sw_if_index == lf.sw_if_index:
+        if vmac.packed == lf.mac and sw_if_index == lf.sw_if_index:
             return True
     return False
 
             return True
     return False
 
@@ -143,13 +143,13 @@ class VppBridgeDomainArpEntry(VppObject):
     def __init__(self, test, bd, mac, ip):
         self._test = test
         self.bd = bd
     def __init__(self, test, bd, mac, ip):
         self._test = test
         self.bd = bd
-        self.mac = VppMacAddress(mac)
+        self.mac = MACAddress(mac)
         self.ip = VppIpAddress(ip)
 
     def add_vpp_config(self):
         self._test.vapi.bd_ip_mac_add_del(
             self.bd.bd_id,
         self.ip = VppIpAddress(ip)
 
     def add_vpp_config(self):
         self._test.vapi.bd_ip_mac_add_del(
             self.bd.bd_id,
-            self.mac.encode(),
+            self.mac.packed,
             self.ip.encode(),
             is_add=1)
         self._test.registry.register(self, self._test.logger)
             self.ip.encode(),
             is_add=1)
         self._test.registry.register(self, self._test.logger)
@@ -157,14 +157,14 @@ class VppBridgeDomainArpEntry(VppObject):
     def remove_vpp_config(self):
         self._test.vapi.bd_ip_mac_add_del(
             self.bd.bd_id,
     def remove_vpp_config(self):
         self._test.vapi.bd_ip_mac_add_del(
             self.bd.bd_id,
-            self.mac.encode(),
+            self.mac.packed,
             self.ip.encode(),
             is_add=0)
 
     def query_vpp_config(self):
         return find_bridge_domain_arp_entry(self._test,
                                             self.bd.bd_id,
             self.ip.encode(),
             is_add=0)
 
     def query_vpp_config(self):
         return find_bridge_domain_arp_entry(self._test,
                                             self.bd.bd_id,
-                                            self.mac.address,
+                                            self.mac.packed,
                                             self.ip.address)
 
     def __str__(self):
                                             self.ip.address)
 
     def __str__(self):
@@ -180,7 +180,7 @@ class VppL2FibEntry(VppObject):
                  static_mac=0, filter_mac=0, bvi_mac=-1):
         self._test = test
         self.bd = bd
                  static_mac=0, filter_mac=0, bvi_mac=-1):
         self._test = test
         self.bd = bd
-        self.mac = VppMacAddress(mac)
+        self.mac = MACAddress(mac)
         self.itf = itf
         self.static_mac = static_mac
         self.filter_mac = filter_mac
         self.itf = itf
         self.static_mac = static_mac
         self.filter_mac = filter_mac
@@ -191,7 +191,7 @@ class VppL2FibEntry(VppObject):
 
     def add_vpp_config(self):
         self._test.vapi.l2fib_add_del(
 
     def add_vpp_config(self):
         self._test.vapi.l2fib_add_del(
-            self.mac.address,
+            self.mac.packed,
             self.bd.bd_id,
             self.itf.sw_if_index,
             is_add=1,
             self.bd.bd_id,
             self.itf.sw_if_index,
             is_add=1,
@@ -202,7 +202,7 @@ class VppL2FibEntry(VppObject):
 
     def remove_vpp_config(self):
         self._test.vapi.l2fib_add_del(
 
     def remove_vpp_config(self):
         self._test.vapi.l2fib_add_del(
-            self.mac.address,
+            self.mac.packed,
             self.bd.bd_id,
             self.itf.sw_if_index,
             is_add=0)
             self.bd.bd_id,
             self.itf.sw_if_index,
             is_add=0)
@@ -210,7 +210,7 @@ class VppL2FibEntry(VppObject):
     def query_vpp_config(self):
         return find_l2_fib_entry(self._test,
                                  self.bd.bd_id,
     def query_vpp_config(self):
         return find_l2_fib_entry(self._test,
                                  self.bd.bd_id,
-                                 self.mac.address,
+                                 self.mac.packed,
                                  self.itf.sw_if_index)
 
     def __str__(self):
                                  self.itf.sw_if_index)
 
     def __str__(self):
diff --git a/test/vpp_mac.py b/test/vpp_mac.py
deleted file mode 100644 (file)
index b20bf54..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-"""
-  MAC Types
-
-"""
-import binascii
-
-
-def mactobinary(mac):
-    """ Convert the : separated format into binary packet data for the API """
-    return binascii.unhexlify(mac.replace(':', ''))
-
-
-def binarytomac(binary):
-    """ Convert binary packed data in a : separated string """
-    x = b':'.join(binascii.hexlify(binary)[i:i + 2]
-                  for i in range(0, 12, 2))
-    return str(x.decode('ascii'))
-
-
-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._address
-
-    def __str__(self):
-        return self.address
-
-    def __eq__(self, other):
-        if isinstance(other, self.__class__):
-            return self.address == other.address
-        elif hasattr(other, "bytes"):
-            # vl_api_mac_addres_t
-            return self.bytes == other.bytes
-        else:
-            raise TypeError("Comparing VppMacAddress:%s"
-                            "with unknown type: %s" %
-                            (self, other))
-        return False
index 46854c9..7815a28 100644 (file)
@@ -6,7 +6,7 @@
 
 from socket import inet_pton, inet_ntop, AF_INET, AF_INET6
 from vpp_object import *
 
 from socket import inet_pton, inet_ntop, AF_INET, AF_INET6
 from vpp_object import *
-from vpp_mac import mactobinary
+from vpp_papi import mac_pton
 
 
 def find_nbr(test, sw_if_index, ip_addr, is_static=0, inet=AF_INET, mac=None):
 
 
 def find_nbr(test, sw_if_index, ip_addr, is_static=0, inet=AF_INET, mac=None):
@@ -22,7 +22,7 @@ def find_nbr(test, sw_if_index, ip_addr, is_static=0, inet=AF_INET, mac=None):
         if nbr_addr == n.ip_address[:s] \
            and is_static == n.is_static:
             if mac:
         if nbr_addr == n.ip_address[:s] \
            and is_static == n.is_static:
             if mac:
-                if n.mac_address == mactobinary(mac):
+                if n.mac_address == mac_pton(mac):
                     return True
             else:
                 return True
                     return True
             else:
                 return True
@@ -38,7 +38,7 @@ class VppNeighbor(VppObject):
                  af=AF_INET, is_static=False, is_no_fib_entry=0):
         self._test = test
         self.sw_if_index = sw_if_index
                  af=AF_INET, is_static=False, is_no_fib_entry=0):
         self._test = test
         self.sw_if_index = sw_if_index
-        self.mac_addr = mactobinary(mac_addr)
+        self.mac_addr = mac_pton(mac_addr)
         self.af = af
         self.is_static = is_static
         self.is_no_fib_entry = is_no_fib_entry
         self.af = af
         self.is_static = is_static
         self.is_no_fib_entry = is_no_fib_entry
index 4812cb6..0a33c1e 100644 (file)
@@ -4,7 +4,7 @@ import time
 from collections import deque
 
 from six import moves
 from collections import deque
 
 from six import moves
-from vpp_mac import mactobinary
+from vpp_papi import mac_pton
 from hook import Hook
 from vpp_l2 import L2_PORT_TYPE
 
 from hook import Hook
 from vpp_l2 import L2_PORT_TYPE
 
@@ -223,9 +223,6 @@ class VppPapiProvider(object):
         """
         return cli + "\n" + str(self.cli(cli))
 
         """
         return cli + "\n" + str(self.cli(cli))
 
-    def _convert_mac(self, mac):
-        return mactobinary(mac)
-
     def show_version(self):
         """ """
         return self.api(self.papi.show_version, {})
     def show_version(self):
         """ """
         return self.api(self.papi.show_version, {})
@@ -643,7 +640,7 @@ class VppPapiProvider(object):
             interface. (Default value = 0)
         """
         return self.api(self.papi.l2fib_add_del,
             interface. (Default value = 0)
         """
         return self.api(self.papi.l2fib_add_del,
-                        {'mac': self._convert_mac(mac),
+                        {'mac': mac,
                          'bd_id': bd_id,
                          'sw_if_index': sw_if_index,
                          'is_add': is_add,
                          'bd_id': bd_id,
                          'sw_if_index': sw_if_index,
                          'is_add': is_add,
index 28d8a71..9be9232 100644 (file)
@@ -1,7 +1,7 @@
 
 from vpp_interface import VppInterface
 import socket
 
 from vpp_interface import VppInterface
 import socket
-from vpp_mac import mactobinary
+from vpp_papi import mac_pton
 
 
 class VppPppoeInterface(VppInterface):
 
 
 class VppPppoeInterface(VppInterface):
@@ -20,7 +20,7 @@ class VppPppoeInterface(VppInterface):
 
     def add_vpp_config(self):
         cip = socket.inet_pton(socket.AF_INET, self.client_ip)
 
     def add_vpp_config(self):
         cip = socket.inet_pton(socket.AF_INET, self.client_ip)
-        cmac = mactobinary(self.client_mac)
+        cmac = mac_pton(self.client_mac)
         r = self.test.vapi.pppoe_add_del_session(
                 cip, cmac,
                 session_id=self.session_id,
         r = self.test.vapi.pppoe_add_del_session(
                 cip, cmac,
                 session_id=self.session_id,
@@ -30,7 +30,7 @@ class VppPppoeInterface(VppInterface):
 
     def remove_vpp_config(self):
         cip = socket.inet_pton(socket.AF_INET, self.client_ip)
 
     def remove_vpp_config(self):
         cip = socket.inet_pton(socket.AF_INET, self.client_ip)
-        cmac = mactobinary(self.client_mac)
+        cmac = mac_pton(self.client_mac)
         self.unconfig()
         self.test.vapi.pppoe_add_del_session(
                 cip, cmac,
         self.unconfig()
         self.test.vapi.pppoe_add_del_session(
                 cip, cmac,