class L2_VTR_OP:
+ L2_DISABLED = 0
+ L2_PUSH_1 = 1
+ L2_PUSH_2 = 2
L2_POP_1 = 3
+ L2_POP_2 = 4
+ L2_TRANSLATE_1_1 = 5
+ L2_TRANSLATE_1_2 = 6
+ L2_TRANSLATE_2_1 = 7
+ L2_TRANSLATE_2_2 = 8
class UnexpectedApiReturnValueError(Exception):
{'sw_if_index': sw_if_index,
'suppress': suppress})
+ def set_ip_flow_hash(self,
+ table_id,
+ src=1,
+ dst=1,
+ sport=1,
+ dport=1,
+ proto=1,
+ reverse=0,
+ is_ip6=0):
+ return self.api(self.papi.set_ip_flow_hash,
+ {'vrf_id': table_id,
+ 'src': src,
+ 'dst': dst,
+ 'dport': dport,
+ 'sport': sport,
+ 'proto': proto,
+ 'reverse': reverse,
+ 'is_ipv6': is_ip6})
+
def ip6_nd_proxy(self, address, sw_if_index, is_del=0):
return self.api(self.papi.ip6nd_proxy_add_del,
{'address': address,
'arp_term': arp_term,
'is_add': is_add})
+ def bd_ip_mac_add_del(self, bd_id, mac, ip, is_ipv6=0, is_add=1):
+ return self.api(self.papi.bd_ip_mac_add_del,
+ {'bd_id': bd_id,
+ 'is_add': is_add,
+ 'is_ipv6': is_ipv6,
+ 'ip_address': ip,
+ 'mac_address': mac})
+
def l2fib_add_del(self, mac, bd_id, sw_if_index, is_add=1, static_mac=0,
filter_mac=0, bvi_mac=0):
"""Create/delete L2 FIB entry.
'filter_mac': filter_mac,
'bvi_mac': bvi_mac})
+ def l2fib_flush_int(self, sw_if_index):
+ """Flush L2 FIB entries for sw_if_index.
+
+ :param int sw_if_index: Software interface index of the interface.
+ """
+ return self.api(self.papi.l2fib_flush_int,
+ {'sw_if_index': sw_if_index})
+
+ def l2fib_flush_bd(self, bd_id):
+ """Flush L2 FIB entries for bd_id.
+
+ :param int sw_if_index: Bridge Domain id.
+ """
+ return self.api(self.papi.l2fib_flush_bd,
+ {'bd_id': bd_id})
+
+ def l2fib_flush_all(self):
+ """Flush all L2 FIB.
+ """
+ return self.api(self.papi.l2fib_flush_all, {})
+
def sw_interface_set_l2_bridge(self, sw_if_index, bd_id,
shg=0, bvi=0, enable=1):
"""Add/remove interface to/from bridge domain.
'tag1': tag1,
'tag2': tag2})
- def sw_interface_set_flags(self, sw_if_index, admin_up_down,
- link_up_down=0, deleted=0):
+ def sw_interface_set_flags(self, sw_if_index, admin_up_down):
"""
:param admin_up_down:
:param sw_if_index:
- :param link_up_down: (Default value = 0)
- :param deleted: (Default value = 0)
"""
return self.api(self.papi.sw_interface_set_flags,
{'sw_if_index': sw_if_index,
- 'admin_up_down': admin_up_down,
- 'link_up_down': link_up_down,
- 'deleted': deleted})
+ 'admin_up_down': admin_up_down})
def create_subif(self, sw_if_index, sub_id, outer_vlan, inner_vlan,
no_tags=0, one_tag=0, two_tags=0, dot1ad=0, exact_match=0,
'outer_vlan_id': outer_vlan,
'inner_vlan_id': inner_vlan})
+ def create_p2pethernet_subif(self, sw_if_index, remote_mac, subif_id):
+ """Create p2p ethernet subinterface
+
+ :param sw_if_index: main (parent) interface
+ :param remote_mac: client (remote) mac address
+
+ """
+ return self.api(
+ self.papi.p2p_ethernet_add,
+ {'parent_if_index': sw_if_index,
+ 'remote_mac': remote_mac,
+ 'subif_id': subif_id})
+
def delete_subif(self, sw_if_index):
"""Delete subinterface
return self.api(self.papi.delete_subif,
{'sw_if_index': sw_if_index})
+ def delete_p2pethernet_subif(self, sw_if_index, remote_mac):
+ """Delete p2p ethernet subinterface
+
+ :param sw_if_index: main (parent) interface
+ :param remote_mac: client (remote) mac address
+
+ """
+ return self.api(
+ self.papi.p2p_ethernet_del,
+ {'parent_if_index': sw_if_index,
+ 'remote_mac': remote_mac})
+
def create_vlan_subif(self, sw_if_index, vlan):
"""
)
def sw_interface_span_enable_disable(
- self, sw_if_index_from, sw_if_index_to, state=1):
+ self, sw_if_index_from, sw_if_index_to, state=1, is_l2=0):
"""
:param sw_if_index_from:
:param sw_if_index_to:
:param state:
+ :param is_l2:
"""
return self.api(self.papi.sw_interface_span_enable_disable,
{'sw_if_index_from': sw_if_index_from,
'sw_if_index_to': sw_if_index_to,
- 'state': state})
+ 'state': state,
+ 'is_l2': is_l2,
+ })
def gre_tunnel_add_del(self,
src_address,
self,
label,
eos,
- next_hop_proto_is_ip4,
+ next_hop_proto,
next_hop_address,
next_hop_sw_if_index=0xFFFFFFFF,
table_id=0,
'mr_is_resolve_attached': is_resolve_attached,
'mr_is_interface_rx': is_interface_rx,
'mr_is_rpf_id': is_rpf_id,
- 'mr_next_hop_proto_is_ip4': next_hop_proto_is_ip4,
+ 'mr_next_hop_proto': next_hop_proto,
'mr_next_hop_weight': next_hop_weight,
'mr_next_hop': next_hop_address,
'mr_next_hop_n_out_labels': next_hop_n_out_labels,
'mt_next_hop_table_id': next_hop_table_id,
'mt_next_hop_out_label_stack': next_hop_out_label_stack})
- def snat_interface_add_del_feature(
+ def nat44_interface_add_del_feature(
self,
sw_if_index,
is_inside=1,
is_add=1):
- """Enable/disable S-NAT feature on the interface
+ """Enable/disable NAT44 feature on the interface
:param sw_if_index: Software index of the interface
:param is_inside: 1 if inside, 0 if outside (Default value = 1)
:param is_add: 1 if add, 0 if delete (Default value = 1)
"""
return self.api(
- self.papi.snat_interface_add_del_feature,
+ self.papi.nat44_interface_add_del_feature,
{'is_add': is_add,
'is_inside': is_inside,
'sw_if_index': sw_if_index})
- def snat_add_static_mapping(
+ def nat44_interface_add_del_output_feature(
+ self,
+ sw_if_index,
+ is_inside=1,
+ is_add=1):
+ """Enable/disable NAT44 output feature on the interface
+
+ :param sw_if_index: Software index of the interface
+ :param is_inside: 1 if inside, 0 if outside (Default value = 1)
+ :param is_add: 1 if add, 0 if delete (Default value = 1)
+ """
+ return self.api(
+ self.papi.nat44_interface_add_del_output_feature,
+ {'is_add': is_add,
+ 'is_inside': is_inside,
+ 'sw_if_index': sw_if_index})
+
+ def nat44_add_del_static_mapping(
self,
local_ip,
external_ip=0,
addr_only=1,
vrf_id=0,
protocol=0,
- is_add=1,
- is_ip4=1):
- """Add/delete S-NAT static mapping
+ is_add=1):
+ """Add/delete NAT44 static mapping
:param local_ip: Local IP address
:param external_ip: External IP address
:param vrf_id: VRF ID
:param protocol: IP protocol (Default value = 0)
:param is_add: 1 if add, 0 if delete (Default value = 1)
- :param is_ip4: 1 if address type is IPv4 (Default value = 1)
"""
return self.api(
- self.papi.snat_add_static_mapping,
+ self.papi.nat44_add_del_static_mapping,
{'is_add': is_add,
- 'is_ip4': is_ip4,
'addr_only': addr_only,
'local_ip_address': local_ip,
'external_ip_address': external_ip,
'vrf_id': vrf_id,
'protocol': protocol})
- def snat_add_address_range(
+ def nat44_add_del_address_range(
self,
first_ip_address,
last_ip_address,
is_add=1,
- is_ip4=1,
vrf_id=0xFFFFFFFF):
- """Add/del S-NAT address range
+ """Add/del NAT44 address range
:param first_ip_address: First IP address
:param last_ip_address: Last IP address
:param vrf_id: VRF id for the address range
:param is_add: 1 if add, 0 if delete (Default value = 1)
- :param is_ip4: 1 if address type is IPv4 (Default value = 1)
"""
return self.api(
- self.papi.snat_add_address_range,
- {'is_ip4': is_ip4,
- 'first_ip_address': first_ip_address,
+ self.papi.nat44_add_del_address_range,
+ {'first_ip_address': first_ip_address,
'last_ip_address': last_ip_address,
'vrf_id': vrf_id,
'is_add': is_add})
- def snat_address_dump(self):
- """Dump S-NAT addresses
- :return: Dictionary of S-NAT addresses
+ def nat44_address_dump(self):
+ """Dump NAT44 addresses
+ :return: Dictionary of NAT44 addresses
+ """
+ return self.api(self.papi.nat44_address_dump, {})
+
+ def nat44_interface_dump(self):
+ """Dump interfaces with NAT44 feature
+ :return: Dictionary of interfaces with NAT44 feature
"""
- return self.api(self.papi.snat_address_dump, {})
+ return self.api(self.papi.nat44_interface_dump, {})
- def snat_interface_dump(self):
- """Dump interfaces with S-NAT feature
- :return: Dictionary of interfaces with S-NAT feature
+ def nat44_interface_output_feature_dump(self):
+ """Dump interfaces with NAT44 output feature
+ :return: Dictionary of interfaces with NAT44 output feature
"""
- return self.api(self.papi.snat_interface_dump, {})
+ return self.api(self.papi.nat44_interface_output_feature_dump, {})
- def snat_static_mapping_dump(self):
- """Dump S-NAT static mappings
- :return: Dictionary of S-NAT static mappings
+ def nat44_static_mapping_dump(self):
+ """Dump NAT44 static mappings
+ :return: Dictionary of NAT44 static mappings
"""
- return self.api(self.papi.snat_static_mapping_dump, {})
+ return self.api(self.papi.nat44_static_mapping_dump, {})
- def snat_show_config(self):
- """Show S-NAT config
- :return: S-NAT config parameters
+ def nat_show_config(self):
+ """Show NAT plugin config
+ :return: NAT plugin config parameters
"""
- return self.api(self.papi.snat_show_config, {})
+ return self.api(self.papi.nat_show_config, {})
- def snat_add_interface_addr(
+ def nat44_add_interface_addr(
self,
sw_if_index,
is_add=1):
- """Add/del S-NAT address from interface
+ """Add/del NAT44 address from interface
:param sw_if_index: Software index of the interface
:param is_add: 1 if add, 0 if delete (Default value = 1)
"""
- return self.api(self.papi.snat_add_del_interface_addr,
+ return self.api(self.papi.nat44_add_del_interface_addr,
{'is_add': is_add, 'sw_if_index': sw_if_index})
- def snat_interface_addr_dump(self):
- """Dump S-NAT addresses interfaces
- :return: Dictionary of S-NAT addresses interfaces
+ def nat44_interface_addr_dump(self):
+ """Dump NAT44 addresses interfaces
+ :return: Dictionary of NAT44 addresses interfaces
"""
- return self.api(self.papi.snat_interface_addr_dump, {})
+ return self.api(self.papi.nat44_interface_addr_dump, {})
- def snat_ipfix(
+ def nat_ipfix(
self,
domain_id=1,
src_port=4739,
enable=1):
- """Enable/disable S-NAT IPFIX logging
+ """Enable/disable NAT IPFIX logging
:param domain_id: Observation domain ID (Default value = 1)
:param src_port: Source port number (Default value = 4739)
:param enable: 1 if enable, 0 if disable (Default value = 1)
"""
return self.api(
- self.papi.snat_ipfix_enable_disable,
+ self.papi.nat_ipfix_enable_disable,
{'domain_id': domain_id,
'src_port': src_port,
'enable': enable})
- def snat_user_session_dump(
+ def nat44_user_session_dump(
self,
ip_address,
- vrf_id,
- is_ip4=1):
- """Dump S-NAT user's sessions
+ vrf_id):
+ """Dump NAT44 user's sessions
:param ip_address: ip adress of the user to be dumped
:param cpu_index: cpu_index on which the user is
:return: Dictionary of S-NAT sessions
"""
return self.api(
- self.papi.snat_user_session_dump,
+ self.papi.nat44_user_session_dump,
{'ip_address': ip_address,
+ 'vrf_id': vrf_id})
+
+ def nat44_user_dump(self):
+ """Dump NAT44 users
+
+ :return: Dictionary of NAT44 users
+ """
+ return self.api(self.papi.nat44_user_dump, {})
+
+ def nat44_add_del_lb_static_mapping(
+ self,
+ external_addr,
+ external_port,
+ protocol,
+ vrf_id=0,
+ local_num=0,
+ locals=None,
+ is_add=1):
+ """Add/delete NAT44 load balancing static mapping
+
+ :param is_add - 1 if add, 0 if delete
+ """
+ return self.api(
+ self.papi.nat44_add_del_lb_static_mapping,
+ {'is_add': is_add,
+ 'external_addr': external_addr,
+ 'external_port': external_port,
+ 'protocol': protocol,
'vrf_id': vrf_id,
- 'is_ip4': is_ip4})
+ 'local_num': local_num,
+ 'locals': locals})
- def snat_user_dump(self):
- """Dump S-NAT users
+ def nat44_lb_static_mapping_dump(self):
+ """Dump NAT44 load balancing static mappings
- :return: Dictionary of S-NAT users
+ :return: Dictionary of NAT44 load balancing static mapping
"""
- return self.api(self.papi.snat_user_dump, {})
+ return self.api(self.papi.nat44_lb_static_mapping_dump, {})
- def snat_add_det_map(
+ def nat_det_add_del_map(
self,
in_addr,
in_plen,
out_addr,
out_plen,
is_add=1):
- """Add/delete S-NAT deterministic mapping
+ """Add/delete deterministic NAT mapping
:param is_add - 1 if add, 0 if delete
:param in_addr - inside IP address
:param out_plen - outside IP address prefix length
"""
return self.api(
- self.papi.snat_add_det_map,
+ self.papi.nat_det_add_del_map,
{'is_add': is_add,
+ 'is_nat44': 1,
'in_addr': in_addr,
'in_plen': in_plen,
'out_addr': out_addr,
'out_plen': out_plen})
- def snat_det_forward(
+ def nat_det_forward(
self,
in_addr):
"""Get outside address and port range from inside address
:param in_addr - inside IP address
"""
return self.api(
- self.papi.snat_det_forward,
- {'in_addr': in_addr})
+ self.papi.nat_det_forward,
+ {'in_addr': in_addr,
+ 'is_nat44': 1})
- def snat_det_reverse(
+ def nat_det_reverse(
self,
out_addr,
out_port):
:param out_port - outside port
"""
return self.api(
- self.papi.snat_det_reverse,
+ self.papi.nat_det_reverse,
{'out_addr': out_addr,
'out_port': out_port})
- def snat_det_map_dump(self):
- """Dump S-NAT deterministic mappings
+ def nat_det_map_dump(self):
+ """Dump deterministic NAT mappings
- :return: Dictionary of S-NAT deterministic mappings
+ :return: Dictionary of deterministic NAT mappings
"""
- return self.api(self.papi.snat_det_map_dump, {})
+ return self.api(self.papi.nat_det_map_dump, {})
- def snat_det_set_timeouts(
+ def nat_det_set_timeouts(
self,
udp=300,
tcp_established=7440,
:param icmp - ICMP timeout (Default value = 60)
"""
return self.api(
- self.papi.snat_det_set_timeouts,
+ self.papi.nat_det_set_timeouts,
{'udp': udp,
'tcp_established': tcp_established,
'tcp_transitory': tcp_transitory,
'icmp': icmp})
- def snat_det_get_timeouts(self):
+ def nat_det_get_timeouts(self):
"""Get values of timeouts for deterministic NAT
:return: Timeouts for deterministic NAT (in seconds)
"""
- return self.api(self.papi.snat_det_get_timeouts, {})
+ return self.api(self.papi.nat_det_get_timeouts, {})
- def snat_det_close_session_out(
+ def nat_det_close_session_out(
self,
out_addr,
out_port,
ext_addr,
- ext_port,
- is_ip4=1):
- """Close CGN session using outside address and port
+ ext_port):
+ """Close deterministic NAT session using outside address and port
:param out_addr - outside IP address
:param out_port - outside port
:param ext_addr - external host IP address
:param ext_port - external host port
- :param is_ip4: 1 if address type is IPv4 (Default value = 1)
"""
return self.api(
- self.papi.snat_det_close_session_out,
+ self.papi.nat_det_close_session_out,
{'out_addr': out_addr,
'out_port': out_port,
'ext_addr': ext_addr,
- 'ext_port': ext_port,
- 'is_ip4': is_ip4})
+ 'ext_port': ext_port})
- def snat_det_close_session_in(
+ def nat_det_close_session_in(
self,
in_addr,
in_port,
ext_addr,
- ext_port,
- is_ip4=1):
- """Close CGN session using inside address and port
+ ext_port):
+ """Close deterministic NAT session using inside address and port
:param in_addr - inside IP address
:param in_port - inside port
:param ext_addr - external host IP address
:param ext_port - external host port
- :param is_ip4: 1 if address type is IPv4 (Default value = 1)
"""
return self.api(
- self.papi.snat_det_close_session_in,
+ self.papi.nat_det_close_session_in,
{'in_addr': in_addr,
'in_port': in_port,
'ext_addr': ext_addr,
'ext_port': ext_port,
- 'is_ip4': is_ip4})
+ 'is_nat44': 1})
+
+ def nat_det_session_dump(
+ self,
+ user_addr):
+ """Dump deterministic NAT sessions belonging to a user
+
+ :param user_addr - inside IP address of the user
+ :return: Dictionary of deterministic NAT sessions
+ """
+ return self.api(
+ self.papi.nat_det_session_dump,
+ {'is_nat44': 1,
+ 'user_addr': user_addr})
+
+ def nat64_add_del_pool_addr_range(
+ self,
+ start_addr,
+ end_addr,
+ vrf_id=0xFFFFFFFF,
+ is_add=1):
+ """Add/del address range to NAT64 pool
+
+ :param start_addr: First IP address
+ :param end_addr: Last IP address
+ :param vrf_id: VRF id for the address range
+ :param is_add: 1 if add, 0 if delete (Default value = 1)
+ """
+ return self.api(
+ self.papi.nat64_add_del_pool_addr_range,
+ {'start_addr': start_addr,
+ 'end_addr': end_addr,
+ 'vrf_id': vrf_id,
+ 'is_add': is_add})
+
+ def nat64_pool_addr_dump(self):
+ """Dump NAT64 pool addresses
+ :return: Dictionary of NAT64 pool addresses
+ """
+ return self.api(self.papi.nat64_pool_addr_dump, {})
+
+ def nat64_add_del_interface(
+ self,
+ sw_if_index,
+ is_inside=1,
+ is_add=1):
+ """Enable/disable NAT64 feature on the interface
+ :param sw_if_index: Index of the interface
+ :param is_inside: 1 if inside, 0 if outside (Default value = 1)
+ :param is_add: 1 if add, 0 if delete (Default value = 1)
+ """
+ return self.api(
+ self.papi.nat64_add_del_interface,
+ {'sw_if_index': sw_if_index,
+ 'is_inside': is_inside,
+ 'is_add': is_add})
+
+ def nat64_interface_dump(self):
+ """Dump interfaces with NAT64 feature
+ :return: Dictionary of interfaces with NAT64 feature
+ """
+ return self.api(self.papi.nat64_interface_dump, {})
+
+ def nat64_add_del_static_bib(
+ self,
+ in_ip,
+ out_ip,
+ in_port,
+ out_port,
+ protocol,
+ vrf_id=0,
+ is_add=1):
+ """Add/delete S-NAT static BIB entry
+
+ :param in_ip: Inside IPv6 address
+ :param out_ip: Outside IPv4 address
+ :param in_port: Inside port number
+ :param out_port: Outside port number
+ :param protocol: IP protocol
+ :param vrf_id: VRF ID (Default value = 0)
+ :param is_add: 1 if add, 0 if delete (Default value = 1)
+ """
+ return self.api(
+ self.papi.nat64_add_del_static_bib,
+ {'i_addr': in_ip,
+ 'o_addr': out_ip,
+ 'i_port': in_port,
+ 'o_port': out_port,
+ 'vrf_id': vrf_id,
+ 'proto': protocol,
+ 'is_add': is_add})
+
+ def nat64_bib_dump(self, protocol=255):
+ """Dump NAT64 BIB
+
+ :param protocol: IP protocol (Default value = 255, all BIBs)
+ :returns: Dictionary of NAT64 BIB entries
+ """
+ return self.api(self.papi.nat64_bib_dump, {'proto': protocol})
+
+ def nat64_set_timeouts(self, udp=300, icmp=60, tcp_trans=240, tcp_est=7440,
+ tcp_incoming_syn=6):
+ """Set values of timeouts for NAT64 (in seconds)
+
+ :param udpi: UDP timeout (Default value = 300)
+ :param icmp: ICMP timeout (Default value = 60)
+ :param tcp_trans: TCP transitory timeout (Default value = 240)
+ :param tcp_est: TCP established timeout (Default value = 7440)
+ :param tcp_incoming_syn: TCP incoming SYN timeout (Default value = 6)
+ """
+ return self.api(
+ self.papi.nat64_set_timeouts,
+ {'udp': udp,
+ 'icmp': icmp,
+ 'tcp_trans': tcp_trans,
+ 'tcp_est': tcp_est,
+ 'tcp_incoming_syn': tcp_incoming_syn})
+
+ def nat64_get_timeouts(self):
+ """Get values of timeouts for NAT64
+
+ :return: Timeouts for NAT64 (in seconds)
+ """
+ return self.api(self.papi.nat64_get_timeouts, {})
+
+ def nat64_st_dump(self, protocol=255):
+ """Dump NAT64 session table
+
+ :param protocol: IP protocol (Default value = 255, all STs)
+ :returns: Dictionary of NAT64 sesstion table entries
+ """
+ return self.api(self.papi.nat64_st_dump, {'proto': protocol})
+
+ def nat64_add_del_prefix(self, prefix, plen, vrf_id=0, is_add=1):
+ """Add/del NAT64 prefix
+
+ :param prefix: NAT64 prefix
+ :param plen: NAT64 prefix length
+ :param vrf_id: VRF id of tenant (Default 0)
+ :param is_add: 1 if add, 0 if delete (Default value = 1)
+ """
+ return self.api(
+ self.papi.nat64_add_del_prefix,
+ {'prefix': prefix,
+ 'prefix_len': plen,
+ 'vrf_id': vrf_id,
+ 'is_add': is_add})
+
+ def nat64_prefix_dump(self):
+ """Dump NAT64 prefix
+
+ :returns: Dictionary of NAT64 prefixes
+ """
+ return self.api(self.papi.nat64_prefix_dump, {})
def control_ping(self):
self.api(self.papi.control_ping)
'oui': oui,
})
+ def dhcp_client(self,
+ sw_if_index,
+ hostname,
+ client_id='',
+ is_add=1,
+ want_dhcp_events=0):
+ return self.api(
+ self.papi.dhcp_client_config,
+ {
+ 'sw_if_index': sw_if_index,
+ 'hostname': hostname,
+ 'client_id': client_id,
+ 'is_add': is_add,
+ 'want_dhcp_event': want_dhcp_events,
+ 'pid': os.getpid(),
+ })
+
def ip_mroute_add_del(self,
src_address,
grp_address,
'is_translation': is_translation,
'mtu': mtu
})
+
+ def gtpu_add_del_tunnel(
+ self,
+ src_addr,
+ dst_addr,
+ is_add=1,
+ is_ipv6=0,
+ mcast_sw_if_index=0xFFFFFFFF,
+ encap_vrf_id=0,
+ decap_next_index=0xFFFFFFFF,
+ teid=0):
+ """
+
+ :param is_add: (Default value = 1)
+ :param is_ipv6: (Default value = 0)
+ :param src_addr:
+ :param dst_addr:
+ :param mcast_sw_if_index: (Default value = 0xFFFFFFFF)
+ :param encap_vrf_id: (Default value = 0)
+ :param decap_next_index: (Default value = 0xFFFFFFFF)
+ :param teid: (Default value = 0)
+
+ """
+ return self.api(self.papi.gtpu_add_del_tunnel,
+ {'is_add': is_add,
+ 'is_ipv6': is_ipv6,
+ 'src_address': src_addr,
+ 'dst_address': dst_addr,
+ 'mcast_sw_if_index': mcast_sw_if_index,
+ 'encap_vrf_id': encap_vrf_id,
+ 'decap_next_index': decap_next_index,
+ 'teid': teid})
+
+ def vxlan_gpe_add_del_tunnel(
+ self,
+ src_addr,
+ dst_addr,
+ mcast_sw_if_index=0xFFFFFFFF,
+ is_add=1,
+ is_ipv6=0,
+ encap_vrf_id=0,
+ decap_vrf_id=0,
+ protocol=3,
+ vni=0):
+ """
+
+ :param local:
+ :param remote:
+ :param is_add: (Default value = 1)
+ :param is_ipv6: (Default value = 0)
+ :param encap_vrf_id: (Default value = 0)
+ :param decap_vrf_id: (Default value = 0)
+ :param mcast_sw_if_index: (Default value = 0xFFFFFFFF)
+ :param protocol: (Default value = 3)
+ :param vni: (Default value = 0)
+
+ """
+ return self.api(self.papi.vxlan_gpe_add_del_tunnel,
+ {'is_add': is_add,
+ 'is_ipv6': is_ipv6,
+ 'local': src_addr,
+ 'remote': dst_addr,
+ 'mcast_sw_if_index': mcast_sw_if_index,
+ 'encap_vrf_id': encap_vrf_id,
+ 'decap_vrf_id': decap_vrf_id,
+ 'protocol': protocol,
+ 'vni': vni})
+
+ def pppoe_add_del_session(
+ self,
+ client_ip,
+ client_mac,
+ session_id=0,
+ is_add=1,
+ is_ipv6=0,
+ decap_vrf_id=0):
+ """
+
+ :param is_add: (Default value = 1)
+ :param is_ipv6: (Default value = 0)
+ :param client_ip:
+ :param session_id: (Default value = 0)
+ :param client_mac:
+ :param decap_vrf_id: (Default value = 0)
+
+ """
+ return self.api(self.papi.pppoe_add_del_session,
+ {'is_add': is_add,
+ 'is_ipv6': is_ipv6,
+ 'session_id': session_id,
+ 'client_ip': client_ip,
+ 'decap_vrf_id': decap_vrf_id,
+ 'client_mac': client_mac})
+
+ def sr_localsid_add_del(self,
+ localsid_addr,
+ behavior,
+ nh_addr,
+ is_del=0,
+ end_psp=0,
+ sw_if_index=0xFFFFFFFF,
+ vlan_index=0,
+ fib_table=0,
+ ):
+ """ Add/del IPv6 SR local-SID.
+
+ :param localsid_addr:
+ :param behavior: END=1; END.X=2; END.DX2=4; END.DX6=5;
+ :param behavior: END.DX4=6; END.DT6=7; END.DT4=8
+ :param nh_addr:
+ :param is_del: (Default value = 0)
+ :param end_psp: (Default value = 0)
+ :param sw_if_index: (Default value = 0xFFFFFFFF)
+ :param vlan_index: (Default value = 0)
+ :param fib_table: (Default value = 0)
+ """
+ return self.api(
+ self.papi.sr_localsid_add_del,
+ {'is_del': is_del,
+ 'localsid_addr': localsid_addr,
+ 'end_psp': end_psp,
+ 'behavior': behavior,
+ 'sw_if_index': sw_if_index,
+ 'vlan_index': vlan_index,
+ 'fib_table': fib_table,
+ 'nh_addr': nh_addr
+ }
+ )
+
+ def sr_policy_add(
+ self,
+ bsid_addr,
+ weight=1,
+ is_encap=1,
+ type=0,
+ fib_table=0,
+ n_segments=0,
+ segments=[]):
+ """
+ :param bsid_addr: bindingSID of the SR Policy
+ :param weight: weight of the sid list. optional. (default: 1)
+ :param is_encap: (bool) whether SR policy should Encap or SRH insert \
+ (default: Encap)
+ :param type: type/behavior of the SR policy. (default or spray) \
+ (default: default)
+ :param fib_table: VRF where to install the FIB entry for the BSID \
+ (default: 0)
+ :param n_segments: number of segments \
+ (default: 0)
+ :param segments: a vector of IPv6 address composing the segment list \
+ (default: [])
+ """
+ return self.api(
+ self.papi.sr_policy_add,
+ {'bsid_addr': bsid_addr,
+ 'weight': weight,
+ 'is_encap': is_encap,
+ 'type': type,
+ 'fib_table': fib_table,
+ 'n_segments': n_segments,
+ 'segments': segments
+ }
+ )
+
+ def sr_policy_del(
+ self,
+ bsid_addr,
+ sr_policy_index=0):
+ """
+ :param bsid: bindingSID of the SR Policy
+ :param sr_policy_index: index of the sr policy (default: 0)
+ """
+ return self.api(
+ self.papi.sr_policy_del,
+ {'bsid_addr': bsid_addr,
+ 'sr_policy_index': sr_policy_index
+ })
+
+ def sr_steering_add_del(
+ self,
+ is_del,
+ bsid_addr,
+ sr_policy_index,
+ table_id,
+ prefix_addr,
+ mask_width,
+ sw_if_index,
+ traffic_type):
+ """
+ Steer traffic L2 and L3 traffic through a given SR policy
+
+ :param is_del: delete or add
+ :param bsid_addr: bindingSID of the SR Policy (alt to sr_policy_index)
+ :param sr_policy: is the index of the SR Policy (alt to bsid)
+ :param table_id: is the VRF where to install the FIB entry for the BSID
+ :param prefix_addr: is the IPv4/v6 address for L3 traffic type
+ :param mask_width: is the mask for L3 traffic type
+ :param sw_if_index: is the incoming interface for L2 traffic
+ :param traffic_type: type of traffic (IPv4: 4, IPv6: 6, L2: 2)
+ """
+ return self.api(
+ self.papi.sr_steering_add_del,
+ {'is_del': is_del,
+ 'bsid_addr': bsid_addr,
+ 'sr_policy_index': sr_policy_index,
+ 'table_id': table_id,
+ 'prefix_addr': prefix_addr,
+ 'mask_width': mask_width,
+ 'sw_if_index': sw_if_index,
+ 'traffic_type': traffic_type
+ })
+
+ def macip_acl_add_replace(self, rules, acl_index=0xFFFFFFFF, tag=""):
+ """ Add MACIP acl
+
+ :param rules: list of rules for given acl
+ :param tag: acl tag
+ """
+
+ # return self.api(self.papi.macip_acl_add_replace,
+ # {'acl_index': acl_index,
+ # 'r': rules,
+ # 'count': len(rules),
+ # 'tag': tag})
+ return self.api(self.papi.macip_acl_add,
+ {'r': rules,
+ 'count': len(rules),
+ 'tag': tag})
+
+ def macip_acl_del(self, acl_index):
+ """
+
+ :param acl_index:
+ :return:
+ """
+ return self.api(self.papi.macip_acl_del,
+ {'acl_index': acl_index})
+
+ def macip_acl_interface_add_del(self,
+ sw_if_index,
+ acl_index,
+ is_add=1):
+ """ Add MACIP acl to interface
+
+ :param sw_if_index:
+ :param acl_index:
+ :param is_add: (Default value = 1)
+ """
+
+ return self.api(self.papi.macip_acl_interface_add_del,
+ {'is_add': is_add,
+ 'sw_if_index': sw_if_index,
+ 'acl_index': acl_index})
+
+ def macip_acl_interface_get(self):
+ """ Return interface acls dump
+ """
+ return self.api(
+ self.papi.macip_acl_interface_get, {})
+
+ def macip_acl_dump(self, acl_index=4294967295):
+ """ Return MACIP acl dump
+ """
+
+ return self.api(
+ self.papi.macip_acl_dump, {'acl_index': acl_index})