-import vpp_papi
+import os
from logging import error
from hook import Hook
+do_import = True
+try:
+ no_vpp_papi = os.getenv("NO_VPP_PAPI")
+ if no_vpp_papi == "1":
+ do_import = False
+except:
+ pass
+
+if do_import:
+ import vpp_papi
+
+
# from vnet/vnet/mpls/mpls_types.h
MPLS_IETF_MAX_LABEL = 0xfffff
MPLS_LABEL_INVALID = MPLS_IETF_MAX_LABEL + 1
+class L2_VTR_OP:
+ L2_POP_1 = 3
+
class VppPapiProvider(object):
"""VPP-api provider using vpp-papi
"""
def __init__(self, name, shm_prefix):
- self.hook = Hook()
+ self.hook = Hook("vpp-papi-provider")
self.name = name
self.shm_prefix = shm_prefix
return reply
def cli(self, cli):
- """Execute a CLI, calling the before/after hooks appropriately
+ """
+ Execute a CLI, calling the before/after hooks appropriately.
:param cli: CLI to execute
:returns: CLI output
cli += '\n'
r = vpp_papi.cli_inband(len(cli), cli)
self.hook.after_cli(cli)
- if(hasattr(r, 'reply')):
+ if hasattr(r, 'reply'):
return r.reply[0].decode().rstrip('\x00')
+ def ppcli(self, cli):
+ """
+ Helping method to print CLI command in case of info logging level.
+
+ :param cli: CLI to execute
+ :returns: CLI output
+ """
+ return cli + "\n" + self.cli(cli)
+
def show_version(self):
""" """
return vpp_papi.show_version()
args = (0, b'')
return self.api(vpp_papi.sw_interface_dump, args)
+ def sw_interface_set_table(self, sw_if_index, is_ipv6, table_id):
+ """
+ Set the IPvX Table-id for the Interface
+
+ :param sw_if_index:
+ :param is_ipv6:
+ :param table_id:
+
+ """
+ return self.api(vpp_papi.sw_interface_set_table,
+ (sw_if_index, is_ipv6, table_id))
+
def sw_interface_add_del_address(self, sw_if_index, addr, addr_len,
is_ipv6=0, is_add=1, del_all=0):
"""
return self.api(vpp_papi.sw_interface_add_del_address,
(sw_if_index, is_add, is_ipv6, del_all, addr_len, addr))
+ def sw_interface_enable_disable_mpls(self, sw_if_index,
+ is_enable=1):
+ """
+ Enable/Disable MPLS on the interface
+ :param sw_if_index:
+ :param is_enable: (Default value = 1)
+
+ """
+ return self.api(vpp_papi.sw_interface_set_mpls_enable,
+ (sw_if_index, is_enable))
+
def sw_interface_ra_suppress(self, sw_if_index):
suppress = 1
managed = 0
default_router, max_interval, min_interval,
lifetime, initial_count, initial_interval, async))
-
def vxlan_add_del_tunnel(
self,
src_addr,
:param rx_sw_if_index: Software interface index of Rx interface.
:param tx_sw_if_index: Software interface index of Tx interface.
:param enable: Create cross-connect if equal to 1, delete cross-connect
- if equal to 0.
+ if equal to 0.
:type rx_sw_if_index: str or int
:type rx_sw_if_index: str or int
:type enable: int
return self.api(vpp_papi.sw_interface_set_l2_xconnect,
(rx_sw_if_index, tx_sw_if_index, enable))
+ def sw_interface_set_l2_tag_rewrite(self, sw_if_index, vtr_oper, push=0, tag1=0, tag2=0):
+ """L2 interface vlan tag rewrite configure request
+ :param client_index - opaque cookie to identify the sender
+ :param context - sender context, to match reply w/ request
+ :param sw_if_index - interface the operation is applied to
+ :param vtr_op - Choose from l2_vtr_op_t enum values
+ :param push_dot1q - first pushed flag dot1q id set, else dot1ad
+ :param tag1 - Needed for any push or translate vtr op
+ :param tag2 - Needed for any push 2 or translate x-2 vtr ops
+
+ """
+ return self.api(vpp_papi.l2_interface_vlan_tag_rewrite,
+ (sw_if_index, vtr_oper, push, tag1, tag2))
+
def sw_interface_set_flags(self, sw_if_index, admin_up_down,
link_up_down=0, deleted=0):
"""
outer_vlan,
inner_vlan))
+ def delete_subif(self, sw_if_index):
+ """Delete subinterface
+
+ :param sw_if_index:
+ """
+ return self.api(vpp_papi.delete_subif, ([sw_if_index]))
+
def create_vlan_subif(self, sw_if_index, vlan):
"""
"""
return self.api(vpp_papi.create_vlan_subif, (sw_if_index, vlan))
+ def create_loopback(self, mac=''):
+ """
+
+ :param mac: (Optional)
+ """
+ return self.api(vpp_papi.create_loopback, (mac,))
+
def ip_add_del_route(
self,
dst_address,
resolve_if_needed=0,
is_add=1,
is_drop=0,
+ is_unreach=0,
+ is_prohibit=0,
is_ipv6=0,
is_local=0,
is_classify=0,
resolve_if_needed,
is_add,
is_drop,
+ is_unreach,
+ is_prohibit,
is_ipv6,
is_local,
is_classify,
dst_address_length,
dst_address,
next_hop_address))
+
+ def ip_neighbor_add_del(self,
+ sw_if_index,
+ mac_address,
+ dst_address,
+ vrf_id=0,
+ is_add=1,
+ is_ipv6=0,
+ is_static=0,
+ ):
+ """ Add neighbor MAC to IPv4 or IPv6 address.
+
+ :param sw_if_index:
+ :param mac_address:
+ :param dst_address:
+ :param vrf_id: (Default value = 0)
+ :param is_add: (Default value = 1)
+ :param is_ipv6: (Default value = 0)
+ :param is_static: (Default value = 0)
+ """
+
+ return self.api(
+ vpp_papi.ip_neighbor_add_del,
+ (vrf_id,
+ sw_if_index,
+ is_add,
+ is_ipv6,
+ is_static,
+ mac_address,
+ dst_address
+ )
+ )
+
+ def sw_interface_span_enable_disable(self, sw_if_index_from, sw_if_index_to, enable=1):
+ """
+
+ :param sw_if_index_from:
+ :param sw_if_index_to:
+ :param enable
+
+ """
+ return self.api(vpp_papi.sw_interface_span_enable_disable, (sw_if_index_from, sw_if_index_to, enable ))
+
+ def gre_tunnel_add_del(self,
+ src_address,
+ dst_address,
+ outer_fib_id=0,
+ is_teb=0,
+ is_add=1,
+ is_ip6=0):
+ """ Add a GRE tunnel
+
+ :param src_address:
+ :param dst_address:
+ :param outer_fib_id: (Default value = 0)
+ :param is_add: (Default value = 1)
+ :param is_ipv6: (Default value = 0)
+ :param is_teb: (Default value = 0)
+ """
+
+ return self.api(
+ vpp_papi.gre_add_del_tunnel,
+ (is_add,
+ is_ip6,
+ is_teb,
+ src_address,
+ dst_address,
+ outer_fib_id)
+ )