e.g:
from vpp_papi import VppEnum
VppEnum.vl_api_address_family_t.ADDRESS_IP4
Change-Id: I10c22d57234a1a06e98a889cf80b19085b468ed3
Signed-off-by: Ole Troan <ot@cisco.com>
import weakref
import atexit
from . vpp_serializer import VPPType, VPPEnumType, VPPUnionType, BaseTypes
import weakref
import atexit
from . vpp_serializer import VPPType, VPPEnumType, VPPUnionType, BaseTypes
-from . vpp_serializer import VPPMessage
+from . vpp_serializer import VPPMessage, vpp_get_type
if sys.version[0] == '2':
import Queue as queue
if sys.version[0] == '2':
import Queue as queue
+class VppEnumType(type):
+ def __getattr__(cls, name):
+ t = vpp_get_type(name)
+ return t.enum
+
+
+# Python3
+# class VppEnum(metaclass=VppEnumType):
+# pass
+class VppEnum:
+ __metaclass__ = VppEnumType
+
+
def vpp_atexit(vpp_weakref):
"""Clean up VPP connection on shutdown."""
vpp_instance = vpp_weakref()
def vpp_atexit(vpp_weakref):
"""Clean up VPP connection on shutdown."""
vpp_instance = vpp_weakref()
unresolved = {}
for k, v in types.items():
t = v['data']
unresolved = {}
for k, v in types.items():
t = v['data']
- if v['type'] == 'enum':
- try:
- VPPEnumType(t[0], t[1:])
- except ValueError:
- unresolved[k] = v
- elif v['type'] == 'union':
- try:
- VPPUnionType(t[0], t[1:])
- except ValueError:
- unresolved[k] = v
- elif v['type'] == 'type':
- try:
- VPPType(t[0], t[1:])
- except ValueError:
- unresolved[k] = v
+ if not vpp_get_type(t[0]):
+ if v['type'] == 'enum':
+ try:
+ VPPEnumType(t[0], t[1:])
+ except ValueError:
+ unresolved[k] = v
+ elif v['type'] == 'union':
+ try:
+ VPPUnionType(t[0], t[1:])
+ except ValueError:
+ unresolved[k] = v
+ elif v['type'] == 'type':
+ try:
+ VPPType(t[0], t[1:])
+ except ValueError:
+ unresolved[k] = v
if len(unresolved) == 0:
break
if i > 3:
if len(unresolved) == 0:
break
if i > 3:
return self.context
get_context = ContextId()
return self.context
get_context = ContextId()
+ def get_type(self, name):
+ return vpp_get_type(name)
+
@classmethod
def find_api_dir(cls):
"""Attempt to find the best directory in which API definition
@classmethod
def find_api_dir(cls):
"""Attempt to find the best directory in which API definition
types['bool'] = BaseTypes('bool')
types['bool'] = BaseTypes('bool')
+def vpp_get_type(name):
+ try:
+ return types[name]
+ except KeyError:
+ return None
+
+
class FixedList_u8():
def __init__(self, name, field_type, num):
self.name = name
class FixedList_u8():
def __init__(self, name, field_type, num):
self.name = name
def __getattr__(self, name):
return self.enum[name]
def __getattr__(self, name):
return self.enum[name]
+ def __nonzero__(self):
+ return True
+
def pack(self, data, kwargs=None):
return types['u32'].pack(data, kwargs)
def pack(self, data, kwargs=None):
return types['u32'].pack(data, kwargs)
#!/usr/bin/env python
from framework import VppTestCase, VppTestRunner
#!/usr/bin/env python
from framework import VppTestCase, VppTestRunner
-from vpp_ip import IpAddressFamily, VppIpPrefix
+from vpp_ip import VppIpPrefix
from vpp_ip_route import VppIpTable
from vpp_ip_route import VppIpTable
from scapy.layers.inet import IP, UDP, ICMP
from scapy.layers.inet6 import IPv6
from scapy.layers.inet import IP, UDP, ICMP
from scapy.layers.inet6 import IPv6
+from vpp_papi import VppEnum
+
class TestSVS(VppTestCase):
""" SVS Test Case """
class TestSVS(VppTestCase):
""" SVS Test Case """
table_ids = [101, 102]
for table_id in table_ids:
table_ids = [101, 102]
for table_id in table_ids:
- self.vapi.svs_table_add_del(IpAddressFamily.ADDRESS_IP4, table_id)
+ self.vapi.svs_table_add_del(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP4, table_id)
#
# map X.0.0.0/8 to each SVS table for lookup in table X
#
# map X.0.0.0/8 to each SVS table for lookup in table X
#
# Enable SVS on pg0/pg1 using table 1001/1002
#
#
# Enable SVS on pg0/pg1 using table 1001/1002
#
- self.vapi.svs_enable_disable(IpAddressFamily.ADDRESS_IP4,
- table_ids[0],
- self.pg0.sw_if_index)
- self.vapi.svs_enable_disable(IpAddressFamily.ADDRESS_IP4,
- table_ids[1],
- self.pg1.sw_if_index)
+ self.vapi.svs_enable_disable(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP4, table_ids[0],
+ self.pg0.sw_if_index)
+ self.vapi.svs_enable_disable(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP4, table_ids[1],
+ self.pg1.sw_if_index)
#
# now all the packets should be delivered out the respective interface
#
# now all the packets should be delivered out the respective interface
self.assertEqual(ss[0].table_id, table_ids[0])
self.assertEqual(ss[0].sw_if_index, self.pg0.sw_if_index)
self.assertEqual(ss[0].table_id, table_ids[0])
self.assertEqual(ss[0].sw_if_index, self.pg0.sw_if_index)
- self.assertEqual(ss[0].af, IpAddressFamily.ADDRESS_IP4)
+ self.assertEqual(ss[0].af, VppEnum.vl_api_address_family_t.ADDRESS_IP4)
self.assertEqual(ss[1].table_id, table_ids[1])
self.assertEqual(ss[1].sw_if_index, self.pg1.sw_if_index)
self.assertEqual(ss[1].table_id, table_ids[1])
self.assertEqual(ss[1].sw_if_index, self.pg1.sw_if_index)
- self.assertEqual(ss[1].af, IpAddressFamily.ADDRESS_IP4)
+ self.assertEqual(ss[1].af, VppEnum.vl_api_address_family_t.ADDRESS_IP4)
- self.vapi.svs_enable_disable(IpAddressFamily.ADDRESS_IP4,
- table_ids[0],
- self.pg0.sw_if_index,
- is_enable=0)
- self.vapi.svs_enable_disable(IpAddressFamily.ADDRESS_IP4,
- table_ids[1],
- self.pg1.sw_if_index,
- is_enable=0)
+ self.vapi.svs_enable_disable(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP4,
+ table_ids[0],
+ self.pg0.sw_if_index,
+ is_enable=0)
+ self.vapi.svs_enable_disable(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP4,
+ table_ids[1],
+ self.pg1.sw_if_index,
+ is_enable=0)
for table_id in table_ids:
for i in range(1, 4):
for table_id in table_ids:
for i in range(1, 4):
table_id,
VppIpPrefix("%d.0.0.0" % i, 8).encode(),
0, is_add=0)
table_id,
VppIpPrefix("%d.0.0.0" % i, 8).encode(),
0, is_add=0)
- self.vapi.svs_table_add_del(IpAddressFamily.ADDRESS_IP4,
- table_id,
- is_add=0)
+ self.vapi.svs_table_add_del(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP4,
+ table_id,
+ is_add=0)
def test_svs6(self):
""" Source VRF Select IP6 """
def test_svs6(self):
""" Source VRF Select IP6 """
table_ids = [101, 102]
for table_id in table_ids:
table_ids = [101, 102]
for table_id in table_ids:
- self.vapi.svs_table_add_del(IpAddressFamily.ADDRESS_IP6, table_id)
+ self.vapi.svs_table_add_del(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP6, table_id)
#
# map X.0.0.0/8 to each SVS table for lookup in table X
#
# map X.0.0.0/8 to each SVS table for lookup in table X
#
# Enable SVS on pg0/pg1 using table 1001/1002
#
#
# Enable SVS on pg0/pg1 using table 1001/1002
#
- self.vapi.svs_enable_disable(IpAddressFamily.ADDRESS_IP6,
- table_ids[0],
- self.pg0.sw_if_index)
- self.vapi.svs_enable_disable(IpAddressFamily.ADDRESS_IP6,
- table_ids[1],
- self.pg1.sw_if_index)
+ self.vapi.svs_enable_disable(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP6,
+ table_ids[0],
+ self.pg0.sw_if_index)
+ self.vapi.svs_enable_disable(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP6,
+ table_ids[1],
+ self.pg1.sw_if_index)
#
# now all the packets should be delivered out the respective interface
#
# now all the packets should be delivered out the respective interface
self.assertEqual(ss[0].table_id, table_ids[0])
self.assertEqual(ss[0].sw_if_index, self.pg0.sw_if_index)
self.assertEqual(ss[0].table_id, table_ids[0])
self.assertEqual(ss[0].sw_if_index, self.pg0.sw_if_index)
- self.assertEqual(ss[0].af, IpAddressFamily.ADDRESS_IP6)
+ self.assertEqual(ss[0].af, VppEnum.vl_api_address_family_t.ADDRESS_IP6)
self.assertEqual(ss[1].table_id, table_ids[1])
self.assertEqual(ss[1].sw_if_index, self.pg1.sw_if_index)
self.assertEqual(ss[1].table_id, table_ids[1])
self.assertEqual(ss[1].sw_if_index, self.pg1.sw_if_index)
- self.assertEqual(ss[1].af, IpAddressFamily.ADDRESS_IP6)
+ self.assertEqual(ss[1].af, VppEnum.vl_api_address_family_t.ADDRESS_IP6)
- self.vapi.svs_enable_disable(IpAddressFamily.ADDRESS_IP6,
- table_ids[0],
- self.pg0.sw_if_index,
- is_enable=0)
- self.vapi.svs_enable_disable(IpAddressFamily.ADDRESS_IP6,
- table_ids[1],
- self.pg1.sw_if_index,
- is_enable=0)
+ self.vapi.svs_enable_disable(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP6,
+ table_ids[0],
+ self.pg0.sw_if_index,
+ is_enable=0)
+ self.vapi.svs_enable_disable(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP6,
+ table_ids[1],
+ self.pg1.sw_if_index,
+ is_enable=0)
for table_id in table_ids:
for i in range(1, 4):
self.vapi.svs_route_add_del(
table_id,
VppIpPrefix("2001:%d::" % i, 32).encode(),
0, is_add=0)
for table_id in table_ids:
for i in range(1, 4):
self.vapi.svs_route_add_del(
table_id,
VppIpPrefix("2001:%d::" % i, 32).encode(),
0, is_add=0)
- self.vapi.svs_table_add_del(IpAddressFamily.ADDRESS_IP6,
- table_id,
- is_add=0)
+ self.vapi.svs_table_add_del(
+ VppEnum.vl_api_address_family_t.ADDRESS_IP6,
+ table_id,
+ is_add=0)
+
if __name__ == '__main__':
unittest.main(testRunner=VppTestRunner)
if __name__ == '__main__':
unittest.main(testRunner=VppTestRunner)
from ipaddress import ip_address
from socket import AF_INET, AF_INET6
from ipaddress import ip_address
from socket import AF_INET, AF_INET6
-
-
-class IpAddressFamily:
- ADDRESS_IP4 = 0
- ADDRESS_IP6 = 1
+from vpp_papi import VppEnum
def encode(self):
if self.addr.version is 6:
return {
def encode(self):
if self.addr.version is 6:
return {
- 'af': IpAddressFamily.ADDRESS_IP6,
+ 'af': VppEnum.vl_api_address_family_t.ADDRESS_IP6,
'un': self.addr.encode()
}
else:
return {
'un': self.addr.encode()
}
else:
return {
- 'af': IpAddressFamily.ADDRESS_IP4,
+ 'af': VppEnum.vl_api_address_family_t.ADDRESS_IP4,
'un': self.addr.encode()
}
'un': self.addr.encode()
}
elif hasattr(other, "af") and hasattr(other, "un"):
# a vp_api_address_t
if 4 is self.version:
elif hasattr(other, "af") and hasattr(other, "un"):
# a vp_api_address_t
if 4 is self.version:
- return other.af == IpAddressFamily.ADDRESS_IP4 and \
+ return other.af == \
+ VppEnum.vl_api_address_family_t.ADDRESS_IP4 and \
other.un == self.addr
else:
other.un == self.addr
else:
- return other.af == IpAddressFamily.ADDRESS_IP6 and \
+ return other.af == \
+ VppEnum.vl_api_address_family_t.ADDRESS_IP6 and \
other.un == self.addr
else:
raise Exception("Comparing VppIpAddress:%s with unknown type: %s" %
other.un == self.addr
else:
raise Exception("Comparing VppIpAddress:%s with unknown type: %s" %
if 6 is self.ip_saddr.version:
prefix = {
if 6 is self.ip_saddr.version:
prefix = {
- 'af': IpAddressFamily.ADDRESS_IP6,
+ 'af': VppEnum.vl_api_address_family_t.ADDRESS_IP6,
'grp_address': {
'ip6': {
'address': self.ip_gaddr.packed
'grp_address': {
'ip6': {
'address': self.ip_gaddr.packed
- 'af': IpAddressFamily.ADDRESS_IP4,
+ 'af': VppEnum.vl_api_address_family_t.ADDRESS_IP4,
'grp_address': {
'ip4': {
'address': self.ip_gaddr.packed
'grp_address': {
'ip4': {
'address': self.ip_gaddr.packed