Revert "fix(IPsecUtil): Delete keywords no longer used"
[csit.git] / resources / libraries / python / InterfaceUtil.py
index 7e645d1..ff01330 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2023 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 
 """Interface util library."""
 
+from json import loads
 from time import sleep
 from enum import IntEnum
 
 from ipaddress import ip_address
 from robot.api import logger
+from robot.libraries.BuiltIn import BuiltIn
 
 from resources.libraries.python.Constants import Constants
 from resources.libraries.python.DUTSetup import DUTSetup
 from resources.libraries.python.IPAddress import IPAddress
 from resources.libraries.python.L2Util import L2Util
 from resources.libraries.python.PapiExecutor import PapiSocketExecutor
-from resources.libraries.python.parsers.JsonParser import JsonParser
 from resources.libraries.python.ssh import SSH, exec_cmd, exec_cmd_no_error
 from resources.libraries.python.topology import NodeType, Topology
 from resources.libraries.python.VPPUtil import VPPUtil
@@ -358,7 +359,6 @@ class InterfaceUtil:
         :type node: dict
         :type interface: str or int
         :type mtu: int
-        :raises AsserionError: If VPP refused to change the MTU or set if state.
         """
         if isinstance(interface, str):
             sw_if_index = Topology.get_interface_sw_index(node, interface)
@@ -723,9 +723,8 @@ class InterfaceUtil:
         ret_code, stdout, _ = ssh.exec_command(cmd)
         if int(ret_code) != 0:
             raise RuntimeError(u"Get interface name and MAC failed")
-        tmp = u"{" + stdout.rstrip().replace(u"\n", u",") + u"}"
 
-        interfaces = JsonParser().parse_data(tmp)
+        interfaces = loads("{" + stdout.rstrip().replace("\n", ",") + "}")
         for interface in node[u"interfaces"].values():
             name = interfaces.get(interface[u"mac_address"])
             if name is None:
@@ -1067,7 +1066,7 @@ class InterfaceUtil:
         :raises RuntimeError: if it is unable to create GTPU interface on the
             node.
         """
-        cmd = u"gtpu_add_del_tunnel"
+        cmd = u"gtpu_add_del_tunnel_v2"
         args = dict(
             is_add=True,
             src_address=IPAddress.create_ip_address_object(
@@ -1078,8 +1077,10 @@ class InterfaceUtil:
             ),
             mcast_sw_if_index=Constants.BITWISE_NON_ZERO,
             encap_vrf_id=0,
-            decap_next_index=2,
-            teid=teid
+            decap_next_index=2,  # ipv4
+            teid=teid,
+            # pdu_extension: Unused, false by default.
+            # qfi: Irrelevant when pdu_extension is not used.
         )
         err_msg = f"Failed to create GTPU tunnel interface " \
             f"on host {node[u'host']}"
@@ -1322,7 +1323,7 @@ class InterfaceUtil:
             node, u"set logging class af_xdp level debug"
         )
 
-        cmd = u"af_xdp_create_v2"
+        cmd = u"af_xdp_create_v3"
         pci_addr = Topology.get_interface_pci_addr(node, if_key)
         args = dict(
             name=InterfaceUtil.pci_to_eth(node, pci_addr),
@@ -1374,7 +1375,7 @@ class InterfaceUtil:
             node, u"set logging class rdma level debug"
         )
 
-        cmd = u"rdma_create_v3"
+        cmd = u"rdma_create_v4"
         pci_addr = Topology.get_interface_pci_addr(node, if_key)
         args = dict(
             name=InterfaceUtil.pci_to_eth(node, pci_addr),
@@ -1387,6 +1388,8 @@ class InterfaceUtil:
             no_multi_seg=False,
             max_pktlen=0,
             # TODO: Apply desired RSS flags.
+            # rss4 kept 0 (auto) as API default.
+            # rss6 kept 0 (auto) as API default.
         )
         err_msg = f"Failed to create RDMA interface on host {node[u'host']}"
         with PapiSocketExecutor(node) as papi_exec:
@@ -1851,7 +1854,7 @@ class InterfaceUtil:
             DUTSetup.pci_driver_bind(node, pf_pci_addr, kernel_driver)
 
         # Initialize PCI VFs.
-        DUTSetup.set_sriov_numvfs(node, pf_pci_addr, numvfs)
+        DUTSetup.set_sriov_numvfs(node, pf_pci_addr, numvfs=numvfs)
 
         if not numvfs:
             if osi_layer == u"L2":
@@ -2014,7 +2017,7 @@ class InterfaceUtil:
 
     @staticmethod
     def vpp_round_robin_rx_placement_on_all_duts(
-            nodes, prefix, workers=None):
+            nodes, prefix, use_dp_cores=False):
         """Set Round Robin interface RX placement on worker threads
         on all DUTs.
 
@@ -2025,14 +2028,18 @@ class InterfaceUtil:
 
         :param nodes: Topology nodes.
         :param prefix: Interface name prefix.
-        :param workers: Comma separated worker index numbers intended for
-            dataplane work.
+        :param use_dp_cores: Limit to dataplane cores.
         :type nodes: dict
         :type prefix: str
-        :type workers: str
+        :type use_dp_cores: bool
         """
-        for node in nodes.values():
-            if node[u"type"] == NodeType.DUT:
+        for node_name, node in nodes.items():
+            if node["type"] == NodeType.DUT:
+                workers = None
+                if use_dp_cores:
+                    workers = BuiltIn().get_variable_value(
+                        f"${{{node_name}_cpu_dp}}"
+                    )
                 InterfaceUtil.vpp_round_robin_rx_placement(
                     node, prefix, workers
                 )