diff options
-rw-r--r-- | resources/api/vpp/supported_crcs.yaml | 20 | ||||
-rw-r--r-- | resources/libraries/python/InterfaceUtil.py | 51 | ||||
-rw-r--r-- | resources/libraries/python/VppConfigGenerator.py | 20 | ||||
-rw-r--r-- | resources/libraries/robot/l2/l2_bridge_domain.robot | 18 | ||||
-rw-r--r-- | resources/libraries/robot/l2/l2_xconnect.robot | 15 | ||||
-rw-r--r-- | resources/libraries/robot/shared/interfaces.robot | 4 |
6 files changed, 57 insertions, 71 deletions
diff --git a/resources/api/vpp/supported_crcs.yaml b/resources/api/vpp/supported_crcs.yaml index d15e9f44c3..459bbd576b 100644 --- a/resources/api/vpp/supported_crcs.yaml +++ b/resources/api/vpp/supported_crcs.yaml @@ -47,10 +47,10 @@ add_node_next_reply: '0x2ed75f32' # dev avf_create: '0xdaab8ae2' # dev avf_create_reply: '0x5383d31f' # dev - bond_create: '0x48883c7e' # perf - bond_create_reply: '0x5383d31f' # perf - bond_enslave: '0x076ecfa7' # perf - bond_enslave_reply: '0xe8d4e804' # perf + bond_add_member: '0xe7d14948' # perf + bond_add_member_reply: '0xe8d4e804' # perf + bond_create2: '0x912fda76' # perf + bond_create2_reply: '0x5383d31f' # perf # 4x^ tc01-64B-1c-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr # ^ l2xcfwdANDlbond_1lANDnf_testpmd bridge_domain_add_del: '0x600b7170' # dev @@ -245,11 +245,11 @@ sr_steering_pol_dump: '0x51077d14' # perf teardown # 14x^ tc01-78B-1c-ethip6ip6-ip6base-srv6enc1sid-mrr # ^ srv6_1sid + sw_bond_interface_details: '0x9428a69c' # perf + sw_bond_interface_dump: '0xf9e6675e' # perf + # ^^ see bond_* sw_interface_add_del_address: '0x5803d5c4' # dev sw_interface_add_del_address_reply: '0xe8d4e804' # dev - sw_interface_bond_details: '0xf5ef2106' # perf - sw_interface_bond_dump: '0x51077d14' # perf - # ^^ see bond_* sw_interface_details: '0x17b69fa2' # dev setup sw_interface_dump: '0xaa610c27' # dev setup # sw_interface_get_table / reply # honeycomb @@ -279,14 +279,14 @@ # ^^ see ipsec_tunnel_if_add_del sw_interface_set_vxlan_bypass: '0x65247409' # dev sw_interface_set_vxlan_bypass_reply: '0xe8d4e804' # dev - sw_interface_slave_details: '0x3c4a0e23' # perf - sw_interface_slave_dump: '0xf9e6675e' # perf - # ^^ see bond_* # sw_interface_span_dump / details # honeycomb sw_interface_tap_v2_dump: '0xf9e6675e' # dev sw_interface_tap_v2_details: '0xe53c16de' # dev sw_interface_vhost_user_details: '0x98530df1' # dev sw_interface_vhost_user_dump: '0xf9e6675e' # dev + sw_member_interface_details: '0x3c4a0e23' # perf + sw_member_interface_dump: '0xf9e6675e' # perf + # ^^ see bond_* tap_create_v2: '0x445835fd' # dev tap_create_v2_reply: '0x5383d31f' # dev vxlan_add_del_tunnel: '0xa35dc8f5' # dev diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py index 1245a3312a..10778ed49a 100644 --- a/resources/libraries/python/InterfaceUtil.py +++ b/resources/libraries/python/InterfaceUtil.py @@ -1048,24 +1048,28 @@ class InterfaceUtil: return sw_if_index @staticmethod - def vpp_create_bond_interface(node, mode, load_balance=None, mac=None): + def vpp_create_bond_interface( + node, mode, load_balance=None, mac=None, gso=False): """Create bond interface on VPP node. :param node: DUT node from topology. :param mode: Link bonding mode. :param load_balance: Load balance (optional, valid for xor and lacp - modes, otherwise ignored). + modes, otherwise ignored). Default: None. :param mac: MAC address to assign to the bond interface (optional). + Default: None. + :param gso: Enable GSO support (optional). Default: False. :type node: dict :type mode: str :type load_balance: str :type mac: str + :type gso: bool :returns: Interface key (name) in topology. :rtype: str :raises RuntimeError: If it is not possible to create bond interface on the node. """ - cmd = u"bond_create" + cmd = u"bond_create2" args = dict( id=int(Constants.BITWISE_NON_ZERO), use_custom_mac=bool(mac is not None), @@ -1078,7 +1082,8 @@ class InterfaceUtil: LinkBondLoadBalanceAlgo, f"BOND_API_LB_ALGO_{load_balance.upper()}" ).value, - numa_only=False + numa_only=False, + enable_gso=gso ) err_msg = f"Failed to create bond interface on host {node[u'host']}" with PapiSocketExecutor(node) as papi_exec: @@ -1227,8 +1232,8 @@ class InterfaceUtil: return Topology.get_interface_by_sw_index(node, sw_if_index) @staticmethod - def vpp_enslave_physical_interface(node, interface, bond_if): - """Enslave physical interface to bond interface on VPP node. + def vpp_add_bond_member(node, interface, bond_if): + """Add member interface to bond interface on VPP node. :param node: DUT node from topology. :param interface: Physical interface key from topology file. @@ -1236,18 +1241,18 @@ class InterfaceUtil: :type node: dict :type interface: str :type bond_if: str - :raises RuntimeError: If it is not possible to enslave physical - interface to bond interface on the node. + :raises RuntimeError: If it is not possible to add member to bond + interface on the node. """ - cmd = u"bond_enslave" + cmd = u"bond_add_member" args = dict( sw_if_index=Topology.get_interface_sw_index(node, interface), bond_sw_if_index=Topology.get_interface_sw_index(node, bond_if), is_passive=False, is_long_timeout=False ) - err_msg = f"Failed to enslave physical interface {interface} to bond " \ - f"interface {bond_if} on host {node[u'host']}" + err_msg = f"Failed to add member {interface} to bond interface " \ + f"{bond_if} on host {node[u'host']}" with PapiSocketExecutor(node) as papi_exec: papi_exec.add(cmd, **args).get_reply(err_msg) @@ -1260,7 +1265,7 @@ class InterfaceUtil: :type node: dict :type verbose: bool """ - cmd = u"sw_interface_bond_dump" + cmd = u"sw_bond_interface_dump" err_msg = f"Failed to get bond interface dump on host {node[u'host']}" data = f"Bond data on node {node[u'host']}:\n" @@ -1275,26 +1280,26 @@ class InterfaceUtil: data += u" load balance: {lb}\n".format( lb=bond[u"lb"].name.replace(u"BOND_API_LB_ALGO_", u"").lower() ) - data += f" number of active slaves: {bond[u'active_slaves']}\n" + data += f" number of active members: {bond[u'active_members']}\n" if verbose: - slave_data = InterfaceUtil.vpp_bond_slave_dump( + member_data = InterfaceUtil.vpp_bond_member_dump( node, Topology.get_interface_by_sw_index( node, bond[u"sw_if_index"] ) ) - for slave in slave_data: - if not slave[u"is_passive"]: - data += f" {slave[u'interface_name']}\n" - data += f" number of slaves: {bond[u'slaves']}\n" + for member in member_data: + if not member[u"is_passive"]: + data += f" {member[u'interface_name']}\n" + data += f" number of members: {bond[u'members']}\n" if verbose: - for slave in slave_data: - data += f" {slave[u'interface_name']}\n" + for member in member_data: + data += f" {member[u'interface_name']}\n" data += f" interface id: {bond[u'id']}\n" data += f" sw_if_index: {bond[u'sw_if_index']}\n" logger.info(data) @staticmethod - def vpp_bond_slave_dump(node, interface): + def vpp_bond_member_dump(node, interface): """Get bond interface slave(s) data on VPP node. :param node: DUT node from topology. @@ -1304,7 +1309,7 @@ class InterfaceUtil: :returns: Bond slave interface data. :rtype: dict """ - cmd = u"sw_interface_slave_dump" + cmd = u"sw_member_interface_dump" args = dict( sw_if_index=Topology.get_interface_sw_index(node, interface) ) @@ -1313,7 +1318,7 @@ class InterfaceUtil: with PapiSocketExecutor(node) as papi_exec: details = papi_exec.add(cmd, **args).get_details(err_msg) - logger.debug(f"Slave data:\n{details}") + logger.debug(f"Member data:\n{details}") return details @staticmethod diff --git a/resources/libraries/python/VppConfigGenerator.py b/resources/libraries/python/VppConfigGenerator.py index fa8290d974..437386d81d 100644 --- a/resources/libraries/python/VppConfigGenerator.py +++ b/resources/libraries/python/VppConfigGenerator.py @@ -318,26 +318,6 @@ class VppConfigGenerator: path = [u"dpdk", cryptodev_config] self.add_config_item(self._nodeconfig, u"", path) - def add_dpdk_eth_bond_dev(self, ethbond_id, mode, xmit_policy, *slaves): - """Add DPDK Eth_bond device configuration. - - :param ethbond_id: Eth_bond device ID. - :param mode: Link bonding mode. - :param xmit_policy: Transmission policy. - :param slaves: PCI device(s) to be bonded (format xxxx:xx:xx.x). - :type ethbond_id: str or int - :type mode: str or int - :type xmit_policy: str - :type slaves: list - """ - slaves_config = u"slave=" + u",slave=".join( - slave if pci_dev_check(slave) else u"" for slave in slaves - ) - ethbond_config = f"vdev eth_bond{ethbond_id}," \ - f"mode={mode}{slaves_config},xmit_policy={xmit_policy}" - path = [u"dpdk", ethbond_config] - self.add_config_item(self._nodeconfig, u"", path) - def add_dpdk_dev_default_rxq(self, value): """Add DPDK dev default rxq configuration. diff --git a/resources/libraries/robot/l2/l2_bridge_domain.robot b/resources/libraries/robot/l2/l2_bridge_domain.robot index 1726eb0ae6..812514bd98 100644 --- a/resources/libraries/robot/l2/l2_bridge_domain.robot +++ b/resources/libraries/robot/l2/l2_bridge_domain.robot @@ -460,13 +460,13 @@ | Initialize L2 bridge domains with Vhost-User and VLAN with VPP link bonding in a 3-node circular topology | | [Documentation] | | ... | Create two Vhost-User interfaces on all defined VPP nodes. Create one -| | ... | link bonding (BondEthernet) interface on both VPP nodes. Enslave one -| | ... | physical interface towards next DUT by BondEthernet interface. Setup -| | ... | VLAN on BondEthernet interfaces between DUTs. Add one Vhost-User -| | ... | interface into L2 bridge domains with learning enabled with physical -| | ... | interface towards TG and other Vhost-User interface into L2 bridge -| | ... | domains with learning enabled with VLAN sub-interface. All interfaces -| | ... | are brought up. +| | ... | link bonding (BondEthernet) interface on both VPP nodes. Add one +| | ... | physical interface towards next DUT as a member of BondEthernet +| | ... | interface. Setup VLAN on BondEthernet interfaces between DUTs. Add one +| | ... | Vhost-User interface into L2 bridge domains with learning enabled with +| | ... | physical interface towards TG and other Vhost-User interface into L2 +| | ... | bridge domains with learning enabled with VLAN sub-interface. All +| | ... | interfaces are brought up. | | | | ... | *Arguments:* | | ... | - bd_id1 - Bridge domain ID. Type: integer @@ -495,7 +495,7 @@ | | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 | | | ${_even}= | Evaluate | ${pf} % 2 | | | Run Keyword Unless | ${even} -| | | ... | VPP Enslave Physical Interface +| | | ... | VPP Add Bond Member | | | ... | ${dut1} | ${DUT1_${int}${pf}}[0] | ${dut1_eth_bond_if1} | | END | | ${dut2_eth_bond_if1}= | VPP Create Bond Interface @@ -505,7 +505,7 @@ | | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 | | | ${_even}= | Evaluate | ${pf} % 2 | | | Run Keyword If | ${even} -| | | ... | VPP Enslave Physical Interface +| | | ... | VPP Add Bond Member | | | ... | ${dut2} | ${DUT2_${int}${pf}}[0] | ${dut2_eth_bond_if1} | | END | | VPP Show Bond Data On All Nodes | ${nodes} | verbose=${TRUE} diff --git a/resources/libraries/robot/l2/l2_xconnect.robot b/resources/libraries/robot/l2/l2_xconnect.robot index fdbd1dca61..2cdba5b4d2 100644 --- a/resources/libraries/robot/l2/l2_xconnect.robot +++ b/resources/libraries/robot/l2/l2_xconnect.robot @@ -217,11 +217,12 @@ | Initialize L2 xconnect with Vhost-User and VLAN with VPP link bonding in 3-node circular topology | | [Documentation] | | ... | Create two Vhost-User interfaces on all defined VPP nodes. Create one -| | ... | link bonding (BondEthernet) interface on both VPP nodes. Enslave one -| | ... | physical interface towards next DUT by BondEthernet interface. Setup -| | ... | VLAN on BondEthernet interfaces between DUTs. Cross connect one Vhost -| | ... | interface with physical interface towards TG and other Vhost interface -| | ... | with VLAN sub-interface. All interfaces are brought up. +| | ... | link bonding (BondEthernet) interface on both VPP nodes. Add one +| | ... | physical interface towards next DUT as a member of BondEthernet +| | ... | interface. Setup VLAN on BondEthernet interfaces between DUTs. Cross +| | ... | connect one Vhost interface with physical interface towards TG and +| | ... | other Vhost interface with VLAN sub-interface. All interfaces are +| | ... | brought up. | | | | ... | *Arguments:* | | ... | - subid - ID of the sub-interface to be created. Type: string @@ -247,7 +248,7 @@ | | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 | | | ${_even}= | Evaluate | ${pf} % 2 | | | Run Keyword Unless | ${even} -| | | ... | VPP Enslave Physical Interface +| | | ... | VPP Add Bond Member | | | ... | ${dut1} | ${DUT1_${int}${pf}}[0] | ${dut1_eth_bond_if1} | | END | | ${dut2_eth_bond_if1}= | VPP Create Bond Interface @@ -257,7 +258,7 @@ | | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1 | | | ${_even}= | Evaluate | ${pf} % 2 | | | Run Keyword If | ${even} -| | | ... | VPP Enslave Physical Interface +| | | ... | VPP Add Bond Member | | | ... | ${dut2} | ${DUT2_${int}${pf}}[0] | ${dut2_eth_bond_if1} | | END | | VPP Show Bond Data On All Nodes | ${nodes} | verbose=${TRUE} diff --git a/resources/libraries/robot/shared/interfaces.robot b/resources/libraries/robot/shared/interfaces.robot index b842f276ef..27908c3cf8 100644 --- a/resources/libraries/robot/shared/interfaces.robot +++ b/resources/libraries/robot/shared/interfaces.robot @@ -415,9 +415,9 @@ | | ... | ${nodes['${dut}']} | ${bond_mode} | load_balance=${lb_mode} | | ... | mac=00:00:00:01:01:01 | | Set Interface State | ${nodes['${dut}']} | ${if_index} | up -| | VPP Enslave Physical Interface +| | VPP Add Bond Member | | ... | ${nodes['${dut}']} | ${${dut}_${int}1_1} | ${if_index} -| | VPP Enslave Physical Interface +| | VPP Add Bond Member | | ... | ${nodes['${dut}']} | ${${dut}_${int}2_1} | ${if_index} | | FOR | ${id} | IN RANGE | 1 | ${count} + 1 | | | Set Test Variable | ${${dut}_bond1_${id}} | ${if_index} |