From: Kishor Dhanawade Date: Fri, 22 Nov 2024 09:07:04 +0000 (+0000) Subject: feat(core): crypto support for Octeon DPU X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F70%2F41870%2F12;p=csit.git feat(core): crypto support for Octeon DPU - Enables crypto device and performance test cases on the OCTEON board. - Includes startup configuration for OCTEON crypto device. - Integrates crypto device init virtual funtions for OCTEON. - Introduces IPSec counters statistics. Signed-off-by: Kishor Dhanawade Change-Id: Iea2446bb836a78b51cc4536bce95a29f68a140dd --- diff --git a/resources/libraries/python/Constants.py b/resources/libraries/python/Constants.py index f2191a9211..9c866149da 100644 --- a/resources/libraries/python/Constants.py +++ b/resources/libraries/python/Constants.py @@ -619,6 +619,7 @@ class Constants: "Intel-E823C": "HW_C4xxx", "Intel-X710": "HW_DH895xcc", "Intel-XL710": "HW_DH895xcc", + "Cavium-A063-100G":"HW_A0FD", } DEVICE_TYPE_TO_KEYWORD = {"scapy": None} diff --git a/resources/libraries/python/OCTEONUtil.py b/resources/libraries/python/OCTEONUtil.py new file mode 100644 index 0000000000..2fc2a29b6b --- /dev/null +++ b/resources/libraries/python/OCTEONUtil.py @@ -0,0 +1,74 @@ +# Copyright (c) 2025 Marvell. +# 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: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""OCTEON util library.""" + +from resources.libraries.python.DUTSetup import DUTSetup +from resources.libraries.python.topology import NodeType, Topology +from resources.libraries.python.VPPUtil import VPPUtil + +class OCTEONUtil: + """Contains methods for setting up OCTEON interfaces.""" + + @staticmethod + def octeon_crypto_device_verify_on_all_duts(nodes): + """Verify if Crypto Octeon device and its virtual functions are + initialized on all DUTs. + + :param nodes: Nodes in the topology. + :type nodes: dict + """ + VPPUtil.stop_vpp_service_on_all_duts(nodes) + + for node in nodes.values(): + if node["type"] == NodeType.DUT: + cryptodevs = Topology.get_cryptodev(node) + if not cryptodevs: + return + for device in cryptodevs.values(): + OCTEONUtil.crypto_device_init(node, device) + + @staticmethod + def crypto_device_init(node, device): + """Init Crypto Octeon device virtual functions on DUT. + + :param node: DUT node. + :device: Crypto device entry from topology file. + :type node: dict + :type device: dict + """ + DUTSetup.verify_kernel_module(node, device["module"], force_load=True) + + current_driver = DUTSetup.get_pci_dev_driver( + node, device["pci_address"].replace(":", r"\:") + ) + if current_driver is not None: + DUTSetup.pci_driver_unbind(node, device["pci_address"]) + # Bind to kernel driver. + DUTSetup.pci_driver_bind(node, device["pci_address"], device["driver"]) + + # Initialize VFs. + if int(device["numvfs"]) > 0: + path = f"drivers/{device['driver']}" + DUTSetup.set_sriov_numvfs( + node, device["pci_address"], path=path, + numvfs=device["numvfs"] + ) + uio_driver = Topology.get_uio_driver(node) + for vf in range(int(device["numvfs"])): + DUTSetup.pci_vf_driver_unbind( + node, device["pci_address"], vf + ) + DUTSetup.pci_vf_driver_bind( + node, device["pci_address"], vf, uio_driver + ) diff --git a/resources/libraries/python/VppConfigGenerator.py b/resources/libraries/python/VppConfigGenerator.py index 11e4c85537..550da9a536 100644 --- a/resources/libraries/python/VppConfigGenerator.py +++ b/resources/libraries/python/VppConfigGenerator.py @@ -811,6 +811,14 @@ class VppConfigGenerator: if verify_vpp: VPPUtil.verify_vpp(self._node) + def add_octeon_cryptodev(self): + """Add Octeon Crypto PCI device configuration. + """ + cryptodict = Topology.get_cryptodev(self._node) + cryptodev = cryptodict[u"device1"][u"pci_address"] + cryptodev_config = re.sub(r"\d.\d$", f"0.1", cryptodev) + path = [u"devices", f"dev pci/{cryptodev_config}", u"driver octeon"] + self.add_config_item(self._nodeconfig, u"", path) class VppInitConfig: """VPP Initial Configuration.""" diff --git a/resources/libraries/python/VppCounters.py b/resources/libraries/python/VppCounters.py index 6bd0aea4bf..acd9da939e 100644 --- a/resources/libraries/python/VppCounters.py +++ b/resources/libraries/python/VppCounters.py @@ -1,4 +1,4 @@ -# Copyright (c) 2021 Cisco and/or its affiliates. +# Copyright (c) 2025 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: @@ -270,3 +270,12 @@ class VppCounters: for node in nodes.values(): if node[u"type"] == NodeType.DUT: VppCounters.clear_vpp_statistics(node) + + @staticmethod + def vpp_show_ipsec_all(node): + """Run "show ipsec all" debug CLI command. + + :param node: Node to run command on. + :type node: dict + """ + PapiSocketExecutor.run_cli_cmd_on_all_sockets(node, u"show ipsec all") diff --git a/resources/libraries/python/topology.py b/resources/libraries/python/topology.py index 838ec3701a..e8c649c984 100644 --- a/resources/libraries/python/topology.py +++ b/resources/libraries/python/topology.py @@ -1022,6 +1022,20 @@ class Topology: except KeyError: return None + @staticmethod + def get_eventdev(node): + """Return Eventdev configuration of the node. + + :param node: Node created from topology. + :type node: dict + :returns: Eventdev configuration string. + :rtype: str + """ + try: + return node[u"eventdev"] + except KeyError: + return None + def get_bus(node): """Return bus configuration of the node. diff --git a/resources/libraries/robot/shared/default.robot b/resources/libraries/robot/shared/default.robot index 1779695ebe..ac4ab59943 100644 --- a/resources/libraries/robot/shared/default.robot +++ b/resources/libraries/robot/shared/default.robot @@ -37,6 +37,7 @@ | Library | resources.libraries.python.Namespaces | Library | resources.libraries.python.PapiHistory | Library | resources.libraries.python.QATUtil +| Library | resources.libraries.python.OCTEONUtil | Library | resources.libraries.python.SchedUtils | Library | resources.libraries.python.Tap | Library | resources.libraries.python.Tap.TapFeatureMask diff --git a/resources/libraries/robot/shared/suite_setup.robot b/resources/libraries/robot/shared/suite_setup.robot index 445fdc6ee8..15e70ba66d 100644 --- a/resources/libraries/robot/shared/suite_setup.robot +++ b/resources/libraries/robot/shared/suite_setup.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Cisco and/or its affiliates. +# Copyright (c) 2025 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: @@ -265,9 +265,14 @@ | Additional Suite Setup Action For cryptohw | | [Documentation] -| | ... | Additional Setup for suites which uses QAT HW. -| | -| | Crypto Device Verify on all DUTs | ${nodes} +| | ... | Additional Setup for suites which uses QAT/OCTEON HW. +| | +| | ${marvell}= | Get Node Model Bool | ${nodes[('${duts}[0]')]} +| | ... | Marvell-Octeon +| | Run Keyword If | not ${marvell} +| | ... | Run Keyword | Crypto Device Verify on all DUTs | ${nodes} +| | ... | ELSE +| | ... | Run Keyword | Octeon Crypto Device Verify on all DUTs | ${nodes} | Additional Suite Setup Action For nginx | | [Documentation] diff --git a/resources/libraries/robot/shared/test_teardown.robot b/resources/libraries/robot/shared/test_teardown.robot index 81a9454bce..5f5fb13132 100644 --- a/resources/libraries/robot/shared/test_teardown.robot +++ b/resources/libraries/robot/shared/test_teardown.robot @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Cisco and/or its affiliates. +# Copyright (c) 2025 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: @@ -136,6 +136,7 @@ | | FOR | ${dut} | IN | @{duts} | | | Run Keyword If Test Failed | | | ... | Show Ipsec Security Association | ${nodes['${dut}']} +| | | Run Keyword | Vpp Show Ipsec All | ${nodes['${dut}']} | | END | Additional Test Tear Down Action For ipsec_all