From 8006c6aa425126529b4017768a9201e4f03964ad Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Mon, 17 Dec 2018 12:02:26 +0100 Subject: PAPI: Add MACAddress object wrapper for vl_api_mac_address_t Change the definition of vl_api_mac_address_t to an aliased type. Change-Id: I1434f316d0fad6a099592f39bceeb8faeaf1d134 Signed-off-by: Ole Troan --- src/vpp-api/python/vpp_papi/macaddress.py | 54 +++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/vpp-api/python/vpp_papi/macaddress.py (limited to 'src/vpp-api/python/vpp_papi/macaddress.py') diff --git a/src/vpp-api/python/vpp_papi/macaddress.py b/src/vpp-api/python/vpp_papi/macaddress.py new file mode 100644 index 00000000000..a1003812003 --- /dev/null +++ b/src/vpp-api/python/vpp_papi/macaddress.py @@ -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) -- cgit 1.2.3-korg