+
+ def ip_reassembly_enable_disable(self, sw_if_index, enable_ip4=False,
+ enable_ip6=False):
+ """ Enable/disable IP reassembly """
+ return self.api(self.papi.ip_reassembly_enable_disable,
+ {'sw_if_index': sw_if_index,
+ 'enable_ip4': 1 if enable_ip4 else 0,
+ 'enable_ip6': 1 if enable_ip6 else 0,
+ })
+
+ def gbp_endpoint_add(self, sw_if_index, ips, mac, epg):
+ """ GBP endpoint Add """
+ return self.api(self.papi.gbp_endpoint_add,
+ {'endpoint': {
+ 'sw_if_index': sw_if_index,
+ 'ips': ips,
+ 'n_ips': len(ips),
+ 'mac': mac,
+ 'epg_id': epg}})
+
+ def gbp_endpoint_del(self, handle):
+ """ GBP endpoint Del """
+ return self.api(self.papi.gbp_endpoint_del,
+ {'handle': handle})
+
+ def gbp_endpoint_dump(self):
+ """ GBP endpoint Dump """
+ return self.api(self.papi.gbp_endpoint_dump, {})
+
+ def gbp_endpoint_group_add_del(self, is_add, epg, bd,
+ ip4_rd,
+ ip6_rd,
+ uplink_sw_if_index):
+ """ GBP endpoint group Add/Del """
+ return self.api(self.papi.gbp_endpoint_group_add_del,
+ {'is_add': is_add,
+ 'epg': {
+ 'uplink_sw_if_index': uplink_sw_if_index,
+ 'bd_id': bd,
+ 'ip4_table_id': ip4_rd,
+ 'ip6_table_id': ip6_rd,
+ 'epg_id': epg}})
+
+ def gbp_endpoint_group_dump(self):
+ """ GBP endpoint group Dump """
+ return self.api(self.papi.gbp_endpoint_group_dump, {})
+
+ def gbp_recirc_add_del(self, is_add, sw_if_index, epg, is_ext):
+ """ GBP recirc Add/Del """
+ return self.api(self.papi.gbp_recirc_add_del,
+ {'is_add': is_add,
+ 'recirc': {
+ 'is_ext': is_ext,
+ 'sw_if_index': sw_if_index,
+ 'epg_id': epg}})
+
+ def gbp_recirc_dump(self):
+ """ GBP recirc Dump """
+ return self.api(self.papi.gbp_recirc_dump, {})
+
+ def gbp_subnet_add_del(self, is_add, table_id,
+ is_internal,
+ prefix,
+ sw_if_index=0xffffffff,
+ epg_id=0xffff,
+ is_ip6=False):
+ """ GBP Subnet Add/Del """
+ return self.api(self.papi.gbp_subnet_add_del,
+ {'is_add': is_add,
+ 'subnet': {
+ 'is_internal': is_internal,
+ 'is_ip6': is_ip6,
+ 'sw_if_index': sw_if_index,
+ 'epg_id': epg_id,
+ 'prefix': prefix,
+ 'table_id': table_id}})
+
+ def gbp_subnet_dump(self):
+ """ GBP Subnet Dump """
+ return self.api(self.papi.gbp_subnet_dump, {})
+
+ def gbp_contract_add_del(self, is_add, src_epg, dst_epg, acl_index):
+ """ GBP contract Add/Del """
+ return self.api(self.papi.gbp_contract_add_del,
+ {'is_add': is_add,
+ 'contract': {
+ 'acl_index': acl_index,
+ 'src_epg': src_epg,
+ 'dst_epg': dst_epg}})
+
+ def gbp_contract_dump(self):
+ """ GBP contract Dump """
+ return self.api(self.papi.gbp_contract_dump, {})
+
+ def ipip_6rd_add_tunnel(self, ip6_table_id, ip6_prefix, ip6_prefix_len,
+ ip4_table_id, ip4_prefix, ip4_prefix_len, ip4_src,
+ security_check):
+ """ 6RD tunnel Add """
+ return self.api(self.papi.ipip_6rd_add_tunnel,
+ {'ip4_table_id': ip4_table_id,
+ 'ip6_table_id': ip6_table_id,
+ 'ip6_prefix': ip6_prefix,
+ 'ip6_prefix_len': ip6_prefix_len,
+ 'ip4_prefix': ip4_prefix,
+ 'ip4_prefix_len': ip4_prefix_len,
+ 'ip4_src': ip4_src,
+ 'security_check': security_check})
+
+ def ipip_6rd_del_tunnel(self, sw_if_index):
+ """ 6RD tunnel Delete """
+ return self.api(self.papi.ipip_6rd_del_tunnel,
+ {'sw_if_index': sw_if_index})
+
+ def ipip_add_tunnel(self, src_address, dst_address, is_ipv6=1,
+ instance=0xFFFFFFFF, table_id=0, tc_tos=0):
+ """ IPIP tunnel Add/Del """
+ return self.api(self.papi.ipip_add_tunnel,
+ {'is_ipv6': is_ipv6,
+ 'instance': instance,
+ 'src_address': src_address,
+ 'dst_address': dst_address,
+ 'table_id': table_id,
+ 'tc_tos': tc_tos})
+
+ def ipip_del_tunnel(self, sw_if_index):
+ """ IPIP tunnel Delete """
+ return self.api(self.papi.ipip_del_tunnel,
+ {'sw_if_index': sw_if_index})
+
+ def qos_egress_map_update(self, id, outputs):
+ """ QOS egress map update """
+ return self.api(self.papi.qos_egress_map_update,
+ {'map_id': id,
+ 'rows': outputs})
+
+ def qos_egress_map_delete(self, id):
+ """ QOS egress map delete """
+ return self.api(self.papi.qos_egress_map_delete,
+ {'map_id': id})
+
+ def qos_mark_enable_disable(self, sw_if_index,
+ output_source,
+ map_id,
+ enable):
+ """ QOS Mark Enable/Disable """
+ return self.api(self.papi.qos_mark_enable_disable,
+ {'map_id': map_id,
+ 'sw_if_index': sw_if_index,
+ 'output_source': output_source,
+ 'enable': enable})
+
+ def qos_record_enable_disable(self, sw_if_index, input_source, enable):
+ """ IP QoS recording Enble/Disable """
+ return self.api(self.papi.qos_record_enable_disable,
+ {'sw_if_index': sw_if_index,
+ 'input_source': input_source,
+ 'enable': enable})
+
+ def igmp_enable_disable(self, sw_if_index, enable, host):
+ """ Enable/disable IGMP on a given interface """
+ return self.api(self.papi.igmp_enable_disable,
+ {'enable': enable,
+ 'mode': host,
+ 'sw_if_index': sw_if_index})
+
+ def igmp_proxy_device_add_del(self, vrf_id, sw_if_index, add):
+ """ Add/del IGMP proxy device """
+ return self.api(self.papi.igmp_proxy_device_add_del,
+ {'vrf_id': vrf_id, 'sw_if_index': sw_if_index,
+ 'add': add})
+
+ def igmp_proxy_device_add_del_interface(self, vrf_id, sw_if_index, add):
+ """ Add/del interface to/from IGMP proxy device """
+ return self.api(self.papi.igmp_proxy_device_add_del_interface,
+ {'vrf_id': vrf_id, 'sw_if_index': sw_if_index,
+ 'add': add})
+
+ def igmp_listen(self, filter, sw_if_index, saddrs, gaddr):
+ """ Listen for new (S,G) on specified interface
+
+ :param enable: add/del
+ :param sw_if_index: interface sw index
+ :param saddr: source ip4 addr
+ :param gaddr: group ip4 addr
+ """
+ return self.api(self.papi.igmp_listen,
+ {
+ 'group':
+ {
+ 'filter': filter,
+ 'sw_if_index': sw_if_index,
+ 'n_srcs': len(saddrs),
+ 'saddrs': saddrs,
+ 'gaddr':
+ {
+ 'address': gaddr
+ }
+ }
+ })
+
+ def igmp_dump(self, sw_if_index=None):
+ """ Dump all (S,G) interface configurations """
+ if sw_if_index is None:
+ sw_if_index = 0xffffffff
+ return self.api(self.papi.igmp_dump,
+ {'sw_if_index': sw_if_index})
+
+ def igmp_clear_interface(self, sw_if_index):
+ """ Remove all (S,G)s from specified interface
+ doesn't send IGMP report!
+ """
+ return self.api(
+ self.papi.igmp_clear_interface, {
+ 'sw_if_index': sw_if_index})
+
+ def want_igmp_events(self, enable=1):
+ return self.api(self.papi.want_igmp_events, {'enable': enable,
+ 'pid': os.getpid()})
+
+ def bond_create(
+ self,
+ mode,
+ lb,
+ use_custom_mac,
+ mac_address=''):
+ """
+ :param mode: mode
+ :param lb: load balance
+ :param use_custom_mac: use custom mac
+ :param mac_address: mac address
+ """
+ return self.api(
+ self.papi.bond_create,
+ {'mode': mode,
+ 'lb': lb,
+ 'use_custom_mac': use_custom_mac,
+ 'mac_address': mac_address
+ })
+
+ def bond_delete(
+ self,
+ sw_if_index):
+ """
+ :param sw_if_index: interface the operation is applied to
+ """
+ return self.api(self.papi.bond_delete,
+ {'sw_if_index': sw_if_index})
+
+ def bond_enslave(
+ self,
+ sw_if_index,
+ bond_sw_if_index,
+ is_passive,
+ is_long_timeout):
+ """
+ :param sw_if_index: slave sw_if_index
+ :param bond_sw_if_index: bond sw_if_index
+ :param is_passive: is passive lacp speaker
+ :param is_long_time: 90 seconds timeout instead of 3 seconds timeout
+ """
+ return self.api(
+ self.papi.bond_enslave,
+ {'sw_if_index': sw_if_index,
+ 'bond_sw_if_index': bond_sw_if_index,
+ 'is_passive': is_passive,
+ 'is_long_timeout': is_long_timeout
+ })
+
+ def bond_detach_slave(
+ self,
+ sw_if_index):
+ """
+ :param sw_if_index: slave interface the operation is applied to
+ """
+ return self.api(self.papi.bond_detach_slave,
+ {'sw_if_index': sw_if_index})
+
+ def sw_interface_slave_dump(
+ self,
+ sw_if_index):
+ """
+ :param sw_if_index: bond sw_if_index
+ """
+ return self.api(self.papi.sw_interface_slave_dump,
+ {'sw_if_index': sw_if_index})
+
+ def sw_interface_bond_dump(
+ self):
+ """
+
+ """
+ return self.api(self.papi.sw_interface_bond_dump,
+ {})
+
+ def create_vhost_user_if(
+ self,
+ is_server,
+ sock_filename,
+ renumber,
+ disable_mrg_rxbuf,
+ disable_indirect_desc,
+ custom_dev_instance,
+ use_custom_mac,
+ mac_address,
+ tag=''):
+ """
+ :param is_server: is server
+ :param sock_filename: socket name
+ :param renumber: renumber
+ :param disable_mrg_rxbuf: disable mergable rx buffers
+ :param disable_indirect_desc: disable indirect descriptors
+ :param custom_dev_instance: custom dev instance
+ :param use_custom_mac: use custom mac
+ :param mac_address: mac address
+ :param tag: tag (default '')
+ """
+ return self.api(
+ self.papi.create_vhost_user_if,
+ {'is_server': is_server,
+ 'sock_filename': sock_filename,
+ 'renumber': renumber,
+ 'disable_mrg_rxbuf': disable_mrg_rxbuf,
+ 'disable_indirect_desc': disable_indirect_desc,
+ 'custom_dev_instance': custom_dev_instance,
+ 'use_custom_mac': use_custom_mac,
+ 'mac_address': mac_address,
+ 'tag': tag
+ })
+
+ def delete_vhost_user_if(
+ self,
+ sw_if_index):
+ """
+ :param sw_if_index: interface the operation is applied to
+ """
+ return self.api(self.papi.delete_vhost_user_if,
+ {'sw_if_index': sw_if_index, })
+
+ def sw_interface_vhost_user_dump(
+ self):
+ """
+
+ """
+ return self.api(self.papi.sw_interface_vhost_user_dump,
+ {})
+
+ def abf_policy_add_del(self, is_add, policy):
+ return self.api(
+ self.papi.abf_policy_add_del,
+ {'is_add': is_add,
+ 'policy': policy})
+
+ def abf_itf_attach_add_del(self, is_add, attach):
+ return self.api(
+ self.papi.abf_itf_attach_add_del,
+ {'is_add': is_add,
+ 'attach': attach})
+
+ def abf_policy_dump(self):
+ return self.api(
+ self.papi.abf_policy_dump, {})
+
+ def abf_itf_attach_dump(self):
+ return self.api(
+ self.papi.abf_itf_attach_dump, {})
+
+ def pipe_create(self, is_specified, user_instance):
+ return self.api(self.papi.pipe_create,
+ {'is_specified': is_specified,
+ 'user_instance': user_instance})
+
+ def pipe_delete(self, parent_sw_if_index):
+ return self.api(self.papi.pipe_delete,
+ {'parent_sw_if_index': parent_sw_if_index})
+
+ def pipe_dump(self):
+ return self.api(self.papi.pipe_dump, {})
+
+ def memif_create(
+ self,
+ role,
+ mode,
+ rx_queues=None,
+ tx_queues=None,
+ _id=None,
+ socket_id=None,
+ secret=None,
+ ring_size=None,
+ buffer_size=None,
+ hw_addr=None):
+ return self.api(self.papi.memif_create,
+ {'role': role,
+ 'mode': mode,
+ 'rx_queues': rx_queues,
+ 'tx_queues': tx_queues,
+ 'id': _id,
+ 'socket_id': socket_id,
+ 'secret': secret,
+ 'ring_size': ring_size,
+ 'buffer_size': buffer_size,
+ 'hw_addr': hw_addr})
+
+ def memif_delete(self, sw_if_index):
+ return self.api(self.papi.memif_delete, {'sw_if_index': sw_if_index})
+
+ def memif_dump(self):
+ return self.api(self.papi.memif_dump, {})
+
+ def memif_socket_filename_add_del(
+ self, is_add, socket_id, socket_filename):
+ return self.api(
+ self.papi.memif_socket_filename_add_del,
+ {'is_add': is_add,
+ 'socket_id': socket_id,
+ 'socket_filename': socket_filename})
+
+ def memif_socket_filename_dump(self):
+ return self.api(self.papi.memif_socket_filename_dump, {})
+
+ def svs_table_add_del(self, af, table_id, is_add=1):
+ return self.api(self.papi.svs_table_add_del,
+ {
+ 'table_id': table_id,
+ 'is_add': is_add,
+ 'af': af,
+ })
+
+ def svs_route_add_del(self, table_id, prefix, src_table_id, is_add=1):
+ return self.api(self.papi.svs_route_add_del,
+ {
+ 'table_id': table_id,
+ 'source_table_id': src_table_id,
+ 'prefix': prefix,
+ 'is_add': is_add,
+ })
+
+ def svs_enable_disable(self, af, table_id, sw_if_index, is_enable=1):
+ return self.api(self.papi.svs_enable_disable,
+ {
+ 'af': af,
+ 'table_id': table_id,
+ 'sw_if_index': sw_if_index,
+ 'is_enable': is_enable,
+ })
+
+ def svs_dump(self):
+ return self.api(self.papi.svs_dump, {})