vm vhost

ip4

eth2p-ethipv4-ip4base-eth-2vhost-1vm-dev

IPv4 routing test cases with vhost user interface

  • [Top] Network Topologies: TG-DUT1-TG 2-node circular topology with VM and single links between nodes.

  • [Enc] Packet Encapsulations: Eth-IPv4 for IPv4 routing on both links.

  • [Cfg] DUT configuration: DUT1 is configured with IPv4 routing and two static IPv4 /24 route entries. Qemu Guest is connected to VPP via vhost-user interfaces. Guest is running VPP ip4 interconnecting vhost-user interfaces.

  • [Ver] TG verification: Test IPv4 packet with IP protocol=61 is sent in one direction by TG on links to DUT1; on receive TG verifies packet for correctness and their IPv4 src-addr, dst-addr and MAC addresses.

  • [Ref] Applicable standard specifications: RFC791, RFC826, RFC792

 Test Name 

 VPP API Test Commands History - Commands Used Per Test Case 

 64b-ethip4-ip4base- 
eth-2vhost-1vm-dev

 DUT1:  
cli_inband(cmd=’show logging’)
show_version()
sw_interface_dump(name_filter_valid=False,name_filter=’’)
cli_inband(cmd=’trace add dpdk-input 50’)
cli_inband(cmd=’trace add vhost-user-input 50’)
cli_inband(cmd=’trace add memif-input 50’)
cli_inband(cmd=’trace add avf-input 50’)
sw_interface_set_flags(sw_if_index=1,flags=1)
hw_interface_set_mtu(sw_if_index=1,mtu=9200)
sw_interface_set_flags(sw_if_index=2,flags=1)
hw_interface_set_mtu(sw_if_index=2,mtu=9200)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_set_flags(sw_if_index=1,flags=1)
hw_interface_set_mtu(sw_if_index=1,mtu=9200)
sw_interface_set_flags(sw_if_index=2,flags=1)
hw_interface_set_mtu(sw_if_index=2,mtu=9200)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
ip_table_add_del(table={‘table_id’: 101, ‘is_ip6’: False},is_add=True)
ip_table_add_del(table={‘table_id’: 102, ‘is_ip6’: False},is_add=True)
sw_interface_set_table(sw_if_index=1,is_ipv6=False,vrf_id=101)
sw_interface_set_table(sw_if_index=2,is_ipv6=False,vrf_id=102)
sw_interface_add_del_address(sw_if_index=1,is_add=True,del_all=False,prefix={‘len’: 30, ‘address’: {‘af’: 0, ‘un’: {‘ip4’: b’dx00x00x01’}}})
sw_interface_add_del_address(sw_if_index=2,is_add=True,del_all=False,prefix={‘len’: 30, ‘address’: {‘af’: 0, ‘un’: {‘ip4’: b’xc8x00x00x01’}}})
ip_neighbor_add_del(is_add=True,neighbor={‘sw_if_index’: 1, ‘flags’: 0, ‘mac_address’: ‘fa:ce:00:00:02:0a’, ‘ip_address’: ‘100.0.0.2’})
ip_neighbor_add_del(is_add=True,neighbor={‘sw_if_index’: 2, ‘flags’: 0, ‘mac_address’: ‘fa:ce:00:00:02:0b’, ‘ip_address’: ‘200.0.0.2’})
ip_route_add_del(is_add=True,is_multipath=False,route={‘table_id’: 101, ‘prefix’: {‘len’: 8, ‘address’: {‘af’: 0, ‘un’: {‘ip4’: b’nx00x00x00’}}}, ‘n_paths’: 1, ‘paths’: [{‘sw_if_index’: 1, ‘table_id’: 0, ‘rpf_id’: 4294967295, ‘weight’: 1, ‘preference’: 1, ‘type’: 0, ‘flags’: 0, ‘proto’: 0, ‘nh’: {‘address’: {‘ip4’: b’dx00x00x02’}, ‘via_label’: 1048576, ‘obj_id’: 4294967295}, ‘n_labels’: 0, ‘label_stack’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}]})
ip_route_add_del(is_add=True,is_multipath=False,route={‘table_id’: 102, ‘prefix’: {‘len’: 8, ‘address’: {‘af’: 0, ‘un’: {‘ip4’: b’x14x00x00x00’}}}, ‘n_paths’: 1, ‘paths’: [{‘sw_if_index’: 2, ‘table_id’: 0, ‘rpf_id’: 4294967295, ‘weight’: 1, ‘preference’: 1, ‘type’: 0, ‘flags’: 0, ‘proto’: 0, ‘nh’: {‘address’: {‘ip4’: b’xc8x00x00x02’}, ‘via_label’: 1048576, ‘obj_id’: 4294967295}, ‘n_labels’: 0, ‘label_stack’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}]})
create_vhost_user_if(is_server=False,sock_filename=’/var/run/vpp/sock-1-1’,enable_gso=False)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
create_vhost_user_if(is_server=False,sock_filename=’/var/run/vpp/sock-1-2’,enable_gso=False)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_set_flags(sw_if_index=3,flags=1)
sw_interface_set_flags(sw_if_index=4,flags=1)
sw_interface_set_flags(sw_if_index=3,flags=1)
sw_interface_set_flags(sw_if_index=4,flags=1)
ip_table_add_del(table={‘table_id’: 101, ‘is_ip6’: False},is_add=True)
ip_table_add_del(table={‘table_id’: 102, ‘is_ip6’: False},is_add=True)
sw_interface_set_table(sw_if_index=3,is_ipv6=False,vrf_id=101)
sw_interface_set_table(sw_if_index=4,is_ipv6=False,vrf_id=102)
sw_interface_add_del_address(sw_if_index=3,is_add=True,del_all=False,prefix={‘len’: 30, ‘address’: {‘af’: 0, ‘un’: {‘ip4’: b’x01x01x01x02’}}})
sw_interface_add_del_address(sw_if_index=4,is_add=True,del_all=False,prefix={‘len’: 30, ‘address’: {‘af’: 0, ‘un’: {‘ip4’: b’x01x01x02x02’}}})
ip_route_add_del(is_add=True,is_multipath=False,route={‘table_id’: 101, ‘prefix’: {‘len’: 8, ‘address’: {‘af’: 0, ‘un’: {‘ip4’: b’x14x00x00x00’}}}, ‘n_paths’: 1, ‘paths’: [{‘sw_if_index’: 3, ‘table_id’: 0, ‘rpf_id’: 4294967295, ‘weight’: 1, ‘preference’: 1, ‘type’: 0, ‘flags’: 0, ‘proto’: 0, ‘nh’: {‘address’: {‘ip4’: b’x01x01x01x01’}, ‘via_label’: 1048576, ‘obj_id’: 4294967295}, ‘n_labels’: 0, ‘label_stack’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}]})
ip_route_add_del(is_add=True,is_multipath=False,route={‘table_id’: 102, ‘prefix’: {‘len’: 8, ‘address’: {‘af’: 0, ‘un’: {‘ip4’: b’nx00x00x00’}}}, ‘n_paths’: 1, ‘paths’: [{‘sw_if_index’: 4, ‘table_id’: 0, ‘rpf_id’: 4294967295, ‘weight’: 1, ‘preference’: 1, ‘type’: 0, ‘flags’: 0, ‘proto’: 0, ‘nh’: {‘address’: {‘ip4’: b’x01x01x02x01’}, ‘via_label’: 1048576, ‘obj_id’: 4294967295}, ‘n_labels’: 0, ‘label_stack’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}]})
show_version()
sw_interface_dump(name_filter_valid=False,name_filter=’’)
show_threads()

ip6

eth2p-ethipv6-ip6base-eth-2vhost-1vm-dev

IPv4 routing test cases with vhost user interface

  • [Top] Network Topologies: TG-DUT1-TG 2-node circular topology with VM and single links between nodes.

  • [Enc] Packet Encapsulations: Eth-IPv6 for IPv6 routing on both links.

  • [Cfg] DUT configuration: DUT1 is configured with IPv6 routing and two static IPv6 /64 route entries. Qemu Guest is connected to VPP via vhost-user interfaces. Guest is running VPP ip6 interconnecting vhost-user interfaces.

  • [Ver] TG verification: Test IPv6 packets are sent in one direction by TG on links to DUT1; on receive TG verifies packets for correctness and their IPv6 src-addr, dst-addr and MAC addresses.

  • [Ref] Applicable standard specifications: RFC2460, RFC4443, RFC4861

 Test Name 

 VPP API Test Commands History - Commands Used Per Test Case 

 64b-ethipv6-ip6base- 
eth-2vhost-1vm-dev

 DUT1:  
cli_inband(cmd=’show logging’)
show_version()
sw_interface_dump(name_filter_valid=False,name_filter=’’)
cli_inband(cmd=’trace add dpdk-input 50’)
cli_inband(cmd=’trace add vhost-user-input 50’)
cli_inband(cmd=’trace add memif-input 50’)
cli_inband(cmd=’trace add avf-input 50’)
sw_interface_set_flags(sw_if_index=1,flags=1)
hw_interface_set_mtu(sw_if_index=1,mtu=9200)
sw_interface_set_flags(sw_if_index=2,flags=1)
hw_interface_set_mtu(sw_if_index=2,mtu=9200)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
ip_address_dump(sw_if_index=1,is_ipv6=True)
ip_address_dump(sw_if_index=2,is_ipv6=True)
sw_interface_set_flags(sw_if_index=1,flags=1)
hw_interface_set_mtu(sw_if_index=1,mtu=9200)
sw_interface_set_flags(sw_if_index=2,flags=1)
hw_interface_set_mtu(sw_if_index=2,mtu=9200)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
ip_table_add_del(table={‘table_id’: 101, ‘is_ip6’: True},is_add=True)
ip_table_add_del(table={‘table_id’: 102, ‘is_ip6’: True},is_add=True)
sw_interface_set_table(sw_if_index=1,is_ipv6=True,vrf_id=101)
sw_interface_set_table(sw_if_index=2,is_ipv6=True,vrf_id=102)
sw_interface_add_del_address(sw_if_index=1,is_add=True,del_all=False,prefix={‘len’: 64, ‘address’: {‘af’: 1, ‘un’: {‘ip6’: b’ x01x01x00x00x00x00x00x00x00x00x00x00x00x00x01’}}})
sw_interface_add_del_address(sw_if_index=2,is_add=True,del_all=False,prefix={‘len’: 64, ‘address’: {‘af’: 1, ‘un’: {‘ip6’: b’ x01x02x00x00x00x00x00x00x00x00x00x00x00x00x01’}}})
ip_neighbor_add_del(is_add=True,neighbor={‘sw_if_index’: 1, ‘flags’: 0, ‘mac_address’: ‘fa:ce:00:00:02:0a’, ‘ip_address’: ‘2001:100::2’})
ip_neighbor_add_del(is_add=True,neighbor={‘sw_if_index’: 2, ‘flags’: 0, ‘mac_address’: ‘fa:ce:00:00:02:0b’, ‘ip_address’: ‘2001:200::2’})
ip_route_add_del(is_add=True,is_multipath=False,route={‘table_id’: 101, ‘prefix’: {‘len’: 64, ‘address’: {‘af’: 1, ‘un’: {‘ip6’: b’ x01x00x01x00x00x00x00x00x00x00x00x00x00x00x00’}}}, ‘n_paths’: 1, ‘paths’: [{‘sw_if_index’: 1, ‘table_id’: 0, ‘rpf_id’: 4294967295, ‘weight’: 1, ‘preference’: 1, ‘type’: 0, ‘flags’: 0, ‘proto’: 1, ‘nh’: {‘address’: {‘ip6’: b’ x01x01x00x00x00x00x00x00x00x00x00x00x00x00x02’}, ‘via_label’: 1048576, ‘obj_id’: 4294967295}, ‘n_labels’: 0, ‘label_stack’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}]})
ip_route_add_del(is_add=True,is_multipath=False,route={‘table_id’: 102, ‘prefix’: {‘len’: 64, ‘address’: {‘af’: 1, ‘un’: {‘ip6’: b’ x01x00x02x00x00x00x00x00x00x00x00x00x00x00x00’}}}, ‘n_paths’: 1, ‘paths’: [{‘sw_if_index’: 2, ‘table_id’: 0, ‘rpf_id’: 4294967295, ‘weight’: 1, ‘preference’: 1, ‘type’: 0, ‘flags’: 0, ‘proto’: 1, ‘nh’: {‘address’: {‘ip6’: b’ x01x02x00x00x00x00x00x00x00x00x00x00x00x00x02’}, ‘via_label’: 1048576, ‘obj_id’: 4294967295}, ‘n_labels’: 0, ‘label_stack’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}]})
create_vhost_user_if(is_server=False,sock_filename=’/var/run/vpp/sock-1-1’,enable_gso=False)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
create_vhost_user_if(is_server=False,sock_filename=’/var/run/vpp/sock-1-2’,enable_gso=False)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_set_flags(sw_if_index=3,flags=1)
sw_interface_set_flags(sw_if_index=4,flags=1)
sw_interface_set_flags(sw_if_index=3,flags=1)
sw_interface_set_flags(sw_if_index=4,flags=1)
ip_table_add_del(table={‘table_id’: 101, ‘is_ip6’: True},is_add=True)
ip_table_add_del(table={‘table_id’: 102, ‘is_ip6’: True},is_add=True)
sw_interface_set_table(sw_if_index=3,is_ipv6=True,vrf_id=101)
sw_interface_set_table(sw_if_index=4,is_ipv6=True,vrf_id=102)
sw_interface_add_del_address(sw_if_index=3,is_add=True,del_all=False,prefix={‘len’: 64, ‘address’: {‘af’: 1, ‘un’: {‘ip6’: b’x00x01x00x01x00x00x00x00x00x00x00x00x00x00x00x02’}}})
sw_interface_add_del_address(sw_if_index=4,is_add=True,del_all=False,prefix={‘len’: 64, ‘address’: {‘af’: 1, ‘un’: {‘ip6’: b’x00x01x00x02x00x00x00x00x00x00x00x00x00x00x00x02’}}})
ip_route_add_del(is_add=True,is_multipath=False,route={‘table_id’: 101, ‘prefix’: {‘len’: 64, ‘address’: {‘af’: 1, ‘un’: {‘ip6’: b’ x01x00x02x00x00x00x00x00x00x00x00x00x00x00x00’}}}, ‘n_paths’: 1, ‘paths’: [{‘sw_if_index’: 3, ‘table_id’: 0, ‘rpf_id’: 4294967295, ‘weight’: 1, ‘preference’: 1, ‘type’: 0, ‘flags’: 0, ‘proto’: 1, ‘nh’: {‘address’: {‘ip6’: b’x00x01x00x01x00x00x00x00x00x00x00x00x00x00x00x01’}, ‘via_label’: 1048576, ‘obj_id’: 4294967295}, ‘n_labels’: 0, ‘label_stack’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}]})
ip_route_add_del(is_add=True,is_multipath=False,route={‘table_id’: 102, ‘prefix’: {‘len’: 64, ‘address’: {‘af’: 1, ‘un’: {‘ip6’: b’ x01x00x01x00x00x00x00x00x00x00x00x00x00x00x00’}}}, ‘n_paths’: 1, ‘paths’: [{‘sw_if_index’: 4, ‘table_id’: 0, ‘rpf_id’: 4294967295, ‘weight’: 1, ‘preference’: 1, ‘type’: 0, ‘flags’: 0, ‘proto’: 1, ‘nh’: {‘address’: {‘ip6’: b’x00x01x00x02x00x00x00x00x00x00x00x00x00x00x00x01’}, ‘via_label’: 1048576, ‘obj_id’: 4294967295}, ‘n_labels’: 0, ‘label_stack’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}]})
show_version()
sw_interface_dump(name_filter_valid=False,name_filter=’’)
show_threads()

l2bd

eth2p-ethipv4-l2bdbasemaclrn-eth-2vhost-1vm-dev

L2 bridge-domain test cases with vhost user interface

  • [Top] Network Topologies: TG-DUT1-TG 2-node circular topology with VM and single links between nodes.

  • [Enc] Packet Encapsulations: Eth-IPv4 for L2 switching of IPv4.

  • [Cfg] DUT configuration: DUT1 is configured with two L2 bridge-domains (L2BD) switching combined with MAC learning enabled. Qemu Guest is connected to VPP via vhost-user interfaces. Guest is configured with VPP l2 cross-connect interconnecting vhost-user interfaces.

  • [Ver] TG verification: Test IPv4 packets with IP protocol=61 are sent in both directions by TG on links to DUT1 via VM; on receive TG verifies packets for correctness and their IPv4 src-addr, dst-addr and MAC addresses.

  • [Ref] Applicable standard specifications: RFC792

 Test Name 

 VPP API Test Commands History - Commands Used Per Test Case 

 64b-ethipv4-l2bdbasemaclrn- 
eth-2vhost-1vm-dev

 DUT1:  
cli_inband(cmd=’show logging’)
show_version()
sw_interface_dump(name_filter_valid=False,name_filter=’’)
cli_inband(cmd=’trace add dpdk-input 50’)
cli_inband(cmd=’trace add vhost-user-input 50’)
cli_inband(cmd=’trace add memif-input 50’)
cli_inband(cmd=’trace add avf-input 50’)
sw_interface_set_flags(sw_if_index=1,flags=1)
hw_interface_set_mtu(sw_if_index=1,mtu=9200)
sw_interface_set_flags(sw_if_index=2,flags=1)
hw_interface_set_mtu(sw_if_index=2,mtu=9200)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_set_flags(sw_if_index=1,flags=1)
sw_interface_set_l2_bridge(rx_sw_if_index=1,bd_id=1,shg=0,port_type=0,enable=True)
sw_interface_set_flags(sw_if_index=2,flags=1)
sw_interface_set_l2_bridge(rx_sw_if_index=2,bd_id=2,shg=0,port_type=0,enable=True)
create_vhost_user_if(is_server=False,sock_filename=’/var/run/vpp/sock-1-1’,enable_gso=False)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
create_vhost_user_if(is_server=False,sock_filename=’/var/run/vpp/sock-1-2’,enable_gso=False)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_set_flags(sw_if_index=3,flags=1)
sw_interface_set_flags(sw_if_index=4,flags=1)
sw_interface_set_flags(sw_if_index=3,flags=1)
sw_interface_set_l2_bridge(rx_sw_if_index=3,bd_id=1,shg=0,port_type=0,enable=True)
sw_interface_set_flags(sw_if_index=4,flags=1)
sw_interface_set_l2_bridge(rx_sw_if_index=4,bd_id=2,shg=0,port_type=0,enable=True)
show_version()
sw_interface_dump(name_filter_valid=False,name_filter=’’)
show_threads()

l2xc

eth2p-ethipv4-l2xcbase-eth-2vhost-1vm-dev

L2 cross-connect test cases with vhost user interface

  • [Top] Network Topologies: TG-DUT1-TG 2-node circular topology with VM and single links between nodes.

  • [Enc] Packet Encapsulations: Eth-IPv4 for L2 switching of IPv4.

  • [Cfg] DUT configuration: DUT1 is configured with L2 cross-connect (L2XC) switching. Qemu Guest is connected to VPP via vhost-user interfaces. Guest is configured with VPP l2 cross-connect interconnecting vhost-user interfaces.

  • [Ver] TG verification: Test IPv4 packets with IP protocol=61 are sent in both directions by TG on links to DUT1 via VM; on receive TG verifies packets for correctness and their IPv4 src-addr, dst-addr and MAC addresses.

  • [Ref] Applicable standard specifications: RFC792

 Test Name 

 VPP API Test Commands History - Commands Used Per Test Case 

 64b-ethipv4-l2xcbase- 
eth-2vhost-1vm-dev

 DUT1:  
cli_inband(cmd=’show logging’)
show_version()
sw_interface_dump(name_filter_valid=False,name_filter=’’)
cli_inband(cmd=’trace add dpdk-input 50’)
cli_inband(cmd=’trace add vhost-user-input 50’)
cli_inband(cmd=’trace add memif-input 50’)
cli_inband(cmd=’trace add avf-input 50’)
sw_interface_set_flags(sw_if_index=1,flags=1)
hw_interface_set_mtu(sw_if_index=1,mtu=9200)
sw_interface_set_flags(sw_if_index=2,flags=1)
hw_interface_set_mtu(sw_if_index=2,mtu=9200)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
create_vhost_user_if(is_server=False,sock_filename=’/run/vpp/sock-1-1’,enable_gso=False)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
create_vhost_user_if(is_server=False,sock_filename=’/run/vpp/sock-1-2’,enable_gso=False)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_dump(name_filter_valid=False,name_filter=’’)
sw_interface_set_flags(sw_if_index=3,flags=1)
sw_interface_set_flags(sw_if_index=4,flags=1)
sw_interface_set_flags(sw_if_index=1,flags=1)
sw_interface_set_flags(sw_if_index=3,flags=1)
sw_interface_set_l2_xconnect(rx_sw_if_index=1,tx_sw_if_index=3,enable=True)
sw_interface_set_l2_xconnect(rx_sw_if_index=3,tx_sw_if_index=1,enable=True)
sw_interface_set_flags(sw_if_index=4,flags=1)
sw_interface_set_flags(sw_if_index=2,flags=1)
sw_interface_set_l2_xconnect(rx_sw_if_index=4,tx_sw_if_index=2,enable=True)
sw_interface_set_l2_xconnect(rx_sw_if_index=2,tx_sw_if_index=4,enable=True)
show_version()
sw_interface_dump(name_filter_valid=False,name_filter=’’)
show_threads()