X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp-api%2Fpython%2Fvpp_papi%2Fvpp_format.py;h=d54106b245c906050d0f568e326109c483491ac8;hb=ab05508e1;hp=1b880ecd2488846cc54fbd48b2569e4fc0c7cc70;hpb=0bcad32b3870f9998fa1393418081cdda685272f;p=vpp.git diff --git a/src/vpp-api/python/vpp_papi/vpp_format.py b/src/vpp-api/python/vpp_papi/vpp_format.py index 1b880ecd248..d54106b245c 100644 --- a/src/vpp-api/python/vpp_papi/vpp_format.py +++ b/src/vpp-api/python/vpp_papi/vpp_format.py @@ -13,9 +13,15 @@ # limitations under the License. # -from socket import inet_pton, inet_ntop, AF_INET6, AF_INET +from socket import inet_pton, AF_INET6, AF_INET import socket import ipaddress +from . import macaddress + +try: + text_type = unicode +except NameError: + text_type = str # Copies from vl_api_address_t definition ADDRESS_IP4 = 0 @@ -30,26 +36,38 @@ def format_vl_api_address_t(args): try: return {'un': {'ip6': inet_pton(AF_INET6, args)}, 'af': ADDRESS_IP6} - except socket.error as e: + # PY2: raises socket.error + # PY3: raises OSError + except (socket.error, OSError): return {'un': {'ip4': inet_pton(AF_INET, args)}, 'af': ADDRESS_IP4} def format_vl_api_prefix_t(args): + if isinstance(args, (ipaddress.IPv4Network, ipaddress.IPv6Network)): + return {'address': format_vl_api_address_t( + text_type(args.network_address)), + 'len': int(args.prefixlen)} p, length = args.split('/') return {'address': format_vl_api_address_t(p), - 'address_length': int(length)} + 'len': int(length)} def format_vl_api_ip6_prefix_t(args): + if isinstance(args, ipaddress.IPv6Network): + return {'address': args.network_address.packed, + 'len': int(args.prefixlen)} p, length = args.split('/') - return {'prefix': inet_pton(AF_INET6, p), + return {'address': inet_pton(AF_INET6, p), 'len': int(length)} def format_vl_api_ip4_prefix_t(args): + if isinstance(args, ipaddress.IPv4Network): + return {'address': args.network_address.packed, + 'len': int(args.prefixlen)} p, length = args.split('/') - return {'prefix': inet_pton(AF_INET, p), + return {'address': inet_pton(AF_INET, p), 'len': int(length)} @@ -66,13 +84,13 @@ conversion_table = { }, 'vl_api_ip6_prefix_t': { - 'IPv6Network': lambda o: {'prefix': o.network_address.packed, + 'IPv6Network': lambda o: {'address': o.network_address.packed, 'len': o.prefixlen}, 'str': lambda s: format_vl_api_ip6_prefix_t(s) }, 'vl_api_ip4_prefix_t': { - 'IPv4Network': lambda o: {'prefix': o.network_address.packed, + 'IPv4Network': lambda o: {'address': o.network_address.packed, 'len': o.prefixlen}, 'str': lambda s: format_vl_api_ip4_prefix_t(s) }, @@ -94,6 +112,11 @@ conversion_table = { '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) + }, } @@ -106,16 +129,17 @@ def unformat_api_address_t(o): def unformat_api_prefix_t(o): if isinstance(o.address, ipaddress.IPv4Address): - return ipaddress.IPv4Network((o.address, o.address_length), False) + return ipaddress.IPv4Network((o.address, o.len), False) if isinstance(o.address, ipaddress.IPv6Address): - return ipaddress.IPv6Network((o.address, o.address_length), False) + return ipaddress.IPv6Network((o.address, o.len), False) conversion_unpacker_table = { 'vl_api_ip6_address_t': lambda o: ipaddress.IPv6Address(o), - 'vl_api_ip6_prefix_t': lambda o: ipaddress.IPv6Network((o.prefix, o.len)), + 'vl_api_ip6_prefix_t': lambda o: ipaddress.IPv6Network((o.address, o.len)), 'vl_api_ip4_address_t': lambda o: ipaddress.IPv4Address(o), - 'vl_api_ip4_prefix_t': lambda o: ipaddress.IPv4Network((o.prefix, o.len)), + 'vl_api_ip4_prefix_t': lambda o: ipaddress.IPv4Network((o.address, 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), }