API: deprecated bond APIs 22/30422/6
authorJan Gelety <jgelety@cisco.com>
Fri, 11 Dec 2020 05:03:31 +0000 (06:03 +0100)
committerJan Gelety <jgelety@cisco.com>
Fri, 18 Dec 2020 13:13:22 +0000 (14:13 +0100)
Jira: CSIT-1597

Change-Id: I77b746584851331d46eca1caafd4468d18f1e78d
Signed-off-by: Jan Gelety <jgelety@cisco.com>
resources/api/vpp/supported_crcs.yaml
resources/libraries/python/InterfaceUtil.py
resources/libraries/python/VppConfigGenerator.py
resources/libraries/robot/l2/l2_bridge_domain.robot
resources/libraries/robot/l2/l2_xconnect.robot
resources/libraries/robot/shared/interfaces.robot

index d15e9f4..459bbd5 100644 (file)
     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
     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
     # ^^ 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
index 1245a33..10778ed 100644 (file)
@@ -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
index fa8290d..437386d 100644 (file)
@@ -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.
 
index 1726eb0..812514b 100644 (file)
 | 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
 | | 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
 | | 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}
index fdbd1dc..2cdba5b 100644 (file)
 | 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
 | | 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
 | | 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}
index b842f27..27908c3 100644 (file)
 | | ... | ${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}