for filename in fnmatch.filter(filenames, '*.api.json'):
jsonfiles.append(os.path.join(root, filename))
- self.vpp = VPP(jsonfiles, logger=test_class.logger)
+ self.vpp = VPP(jsonfiles, logger=test_class.logger, read_timeout=5)
self._events = deque()
def __enter__(self):
'learn_limit': learn_limit,
'pid': os.getpid(), })
+ def want_dhcp6_reply_events(self, enable_disable=1):
+ return self.api(self.papi.want_dhcp6_reply_events,
+ {'enable_disable': enable_disable,
+ 'pid': os.getpid()})
+
+ def want_dhcp6_pd_reply_events(self, enable_disable=1):
+ return self.api(self.papi.want_dhcp6_pd_reply_events,
+ {'enable_disable': enable_disable,
+ 'pid': os.getpid()})
+
+ def dhcp6_clients_enable_disable(self, enable=1):
+ return self.api(self.papi.dhcp6_clients_enable_disable,
+ {'enable': enable})
+
+ def dhcp6_send_client_message(self, msg_type, sw_if_index, T1, T2,
+ addresses, server_index=0xFFFFFFFF,
+ irt=0, mrt=0, mrc=1, mrd=0, stop=0,
+ ):
+ return self.api(self.papi.dhcp6_send_client_message,
+ {'sw_if_index': sw_if_index,
+ 'server_index': server_index,
+ 'irt': irt,
+ 'mrt': mrt,
+ 'mrc': mrc,
+ 'mrd': mrd,
+ 'stop': stop,
+ 'msg_type': msg_type,
+ 'T1': T1,
+ 'T2': T2,
+ 'n_addresses': len(addresses),
+ 'addresses': addresses})
+
+ def dhcp6_pd_send_client_message(self, msg_type, sw_if_index, T1, T2,
+ prefixes, server_index=0xFFFFFFFF,
+ irt=0, mrt=0, mrc=1, mrd=0, stop=0,
+ ):
+ return self.api(self.papi.dhcp6_pd_send_client_message,
+ {'sw_if_index': sw_if_index,
+ 'server_index': server_index,
+ 'irt': irt,
+ 'mrt': mrt,
+ 'mrc': mrc,
+ 'mrd': mrd,
+ 'stop': stop,
+ 'msg_type': msg_type,
+ 'T1': T1,
+ 'T2': T2,
+ 'n_prefixes': len(prefixes),
+ 'prefixes': prefixes})
+
+ def dhcp6_client_enable_disable(self, sw_if_index, prefix_group='',
+ enable=1):
+ return self.api(self.papi.dhcp6_client_enable_disable,
+ {'sw_if_index': sw_if_index,
+ 'enable': enable})
+
+ def dhcp6_pd_client_enable_disable(self, sw_if_index, prefix_group='',
+ enable=1):
+ return self.api(self.papi.dhcp6_pd_client_enable_disable,
+ {'sw_if_index': sw_if_index,
+ 'prefix_group': prefix_group,
+ 'enable': enable})
+
+ def ip6_add_del_address_using_prefix(self, sw_if_index, address,
+ prefix_length, prefix_group,
+ is_add=1):
+ return self.api(self.papi.ip6_add_del_address_using_prefix,
+ {'sw_if_index': sw_if_index,
+ 'prefix_group': prefix_group,
+ 'address': address,
+ 'prefix_length': prefix_length,
+ 'is_add': is_add})
+
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.
{'sw_if_index': sw_if_index,
'admin_up_down': admin_up_down})
- def sw_interface_set_mtu(self, sw_if_index, mtu):
+ def sw_interface_set_mtu(self, sw_if_index, mtu=[0, 0, 0, 0]):
"""
:param sw_if_index:
:param mtu:
return self.api(
self.papi.proxy_arp_add_del,
- {'vrf_id': vrf_id,
- 'is_add': is_add,
- 'low_address': low_address,
- 'hi_address': hi_address,
- }
- )
+ {'proxy':
+ {
+ 'vrf_id': vrf_id,
+ 'low_address': low_address,
+ 'hi_address': hi_address,
+ },
+ 'is_add': is_add})
def proxy_arp_intfc_enable_disable(self,
sw_if_index,
vrf_id=0,
protocol=0,
twice_nat=0,
+ self_twice_nat=0,
out2in_only=0,
tag="",
is_add=1):
:param vrf_id: VRF ID
:param protocol: IP protocol (Default value = 0)
:param twice_nat: 1 if translate external host address and port
+ :param self_twice_nat: 1 if translate external host address and port
+ whenever external host address equals
+ local address of internal host
:param out2in_only: if 1 rule is matching only out2in direction
:param tag: Opaque string tag
:param is_add: 1 if add, 0 if delete (Default value = 1)
'vrf_id': vrf_id,
'protocol': protocol,
'twice_nat': twice_nat,
+ 'self_twice_nat': self_twice_nat,
'out2in_only': out2in_only,
'tag': tag})
protocol,
vrf_id=0,
twice_nat=0,
+ self_twice_nat=0,
out2in_only=0,
tag='',
local_num=0,
'protocol': protocol,
'vrf_id': vrf_id,
'twice_nat': twice_nat,
+ 'self_twice_nat': self_twice_nat,
'out2in_only': out2in_only,
'tag': tag,
'local_num': local_num,
port,
protocol,
vrf_id=0,
- is_in=1):
+ is_in=1,
+ ext_host_address=None,
+ ext_host_port=0):
"""Delete NAT44 session
:param addr: IPv4 address
:param protocol: IP protocol number
:param vrf_id: VRF ID
:param is_in: 1 if inside network addres and port pari, 0 if outside
- """
- return self.api(
- self.papi.nat44_del_session,
- {'address': addr,
- 'port': port,
- 'protocol': protocol,
- 'vrf_id': vrf_id,
- 'is_in': is_in})
+ :param ext_host_address: external host IPv4 address
+ :param ext_host_port: external host port
+ """
+ if ext_host_address is None:
+ return self.api(
+ self.papi.nat44_del_session,
+ {'address': addr,
+ 'port': port,
+ 'protocol': protocol,
+ 'vrf_id': vrf_id,
+ 'is_in': is_in})
+ else:
+ return self.api(
+ self.papi.nat44_del_session,
+ {'address': addr,
+ 'port': port,
+ 'protocol': protocol,
+ 'vrf_id': vrf_id,
+ 'is_in': is_in,
+ 'ext_host_valid': 1,
+ 'ext_host_address': ext_host_address,
+ 'ext_host_port': ext_host_port})
def nat44_forwarding_enable_disable(
self,
'is_ipv6': is_ip6,
})
+ def dhcp_client_dump(self):
+ return self.api(self.papi.dhcp_client_dump, {})
+
def dhcp_client(self,
sw_if_index,
hostname,
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,
- 'set_broadcast_flag': set_broadcast_flag,
- 'pid': os.getpid(),
+ 'client': {
+ 'sw_if_index': sw_if_index,
+ 'hostname': hostname,
+ 'id': client_id,
+ 'want_dhcp_event': want_dhcp_events,
+ 'set_broadcast_flag': set_broadcast_flag,
+ 'pid': os.getpid()}
})
def ip_mroute_add_del(self,
e_flags,
next_hop_afi,
next_hop_sw_if_index,
+ next_hop_address,
i_flags,
bier_imp=0,
rpf_id=0,
'next_hop_afi': next_hop_afi,
'grp_address_length': grp_address_length,
'grp_address': grp_address,
- 'src_address': src_address})
+ 'src_address': src_address,
+ 'nh_address': next_hop_address})
def mfib_signal_dump(self):
return self.api(self.papi.mfib_signal_dump, {})
'client_mac': client_mac})
def sr_localsid_add_del(self,
- localsid_addr,
+ localsid,
behavior,
- nh_addr,
+ nh_addr4,
+ nh_addr6,
is_del=0,
end_psp=0,
sw_if_index=0xFFFFFFFF,
):
""" Add/del IPv6 SR local-SID.
- :param localsid_addr:
+ :param localsid:
: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 nh_addr4:
+ :param nh_addr6:
:param is_del: (Default value = 0)
:param end_psp: (Default value = 0)
:param sw_if_index: (Default value = 0xFFFFFFFF)
return self.api(
self.papi.sr_localsid_add_del,
{'is_del': is_del,
- 'localsid_addr': localsid_addr,
+ 'localsid': localsid,
'end_psp': end_psp,
'behavior': behavior,
'sw_if_index': sw_if_index,
'vlan_index': vlan_index,
'fib_table': fib_table,
- 'nh_addr': nh_addr
+ 'nh_addr4': nh_addr4,
+ 'nh_addr6': nh_addr6
}
)
:returns: reply from the API
"""
return self.api(
- self.papi.ipsec_interface_add_del_spd, {
- 'spd_id': spd_id,
- 'sw_if_index': sw_if_index, 'is_add': is_add})
+ self.papi.ipsec_interface_add_del_spd,
+ {'spd_id': spd_id, 'sw_if_index': sw_if_index, 'is_add': is_add})
def ipsec_sad_add_del_entry(self,
sad_id,
crypto_key_length=0,
crypto_key='JPjyOWBeVEQiMe7h',
is_add=1,
- is_tunnel=1):
+ is_tunnel=1,
+ udp_encap=0):
""" IPSEC SA add/del
Sample CLI : 'ipsec sa add 10 spi 1001 esp \
crypto-key 4a506a794f574265564551694d653768 \
'crypto_key_length': crypto_key_length,
'crypto_key': crypto_key,
'is_add': is_add,
- 'is_tunnel': is_tunnel})
+ 'is_tunnel': is_tunnel,
+ 'udp_encap': udp_encap})
def ipsec_spd_add_del_entry(self,
spd_id,
{'sw_if_index': sw_if_index})
def ipip_add_tunnel(self, src_address, dst_address, is_ipv6=1,
- instance=0xFFFFFFFF, fib_index=0):
+ instance=0xFFFFFFFF, fib_index=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,
- 'fib_index': fib_index})
+ 'fib_index': fib_index,
+ 'tc_tos': tc_tos})
def ipip_del_tunnel(self, sw_if_index):
""" IPIP tunnel Delete """
"""
return self.api(self.papi.sw_interface_bond_dump,
{})
+
+ def create_vhost_user_if(
+ self,
+ is_server,
+ sock_filename,
+ renumber,
+ custom_dev_instance,
+ use_custom_mac,
+ mac_address,
+ tag=''):
+ """
+ :param is_server: is server
+ :param sock_filename: socket name
+ :param renumber: renumber
+ :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,
+ '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, {})