diff options
author | Ole Troan <ot@cisco.com> | 2018-12-17 12:02:26 +0100 |
---|---|---|
committer | Neale Ranns <nranns@cisco.com> | 2018-12-18 11:54:24 +0000 |
commit | 8006c6aa425126529b4017768a9201e4f03964ad (patch) | |
tree | 7b7342e6fb4964a5c8ca65c3d13d8dcc980f120d /src/vpp-api/python/vpp_papi/macaddress.py | |
parent | 02782d6ebd13ce02f2d3facebb54fec3c2137c88 (diff) |
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 <ot@cisco.com>
Diffstat (limited to 'src/vpp-api/python/vpp_papi/macaddress.py')
-rw-r--r-- | src/vpp-api/python/vpp_papi/macaddress.py | 54 |
1 files changed, 54 insertions, 0 deletions
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) |