aboutsummaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
Diffstat (limited to 'resources')
-rw-r--r--resources/libraries/python/DUTSetup.py57
-rw-r--r--resources/libraries/python/VPPUtil.py57
-rw-r--r--resources/libraries/python/VppConfigGenerator.py39
-rw-r--r--resources/libraries/robot/shared/default.robot7
4 files changed, 93 insertions, 67 deletions
diff --git a/resources/libraries/python/DUTSetup.py b/resources/libraries/python/DUTSetup.py
index 363bb7243b..2485fbb904 100644
--- a/resources/libraries/python/DUTSetup.py
+++ b/resources/libraries/python/DUTSetup.py
@@ -647,63 +647,6 @@ class DUTSetup:
exec_cmd_no_error(node, command, timeout=30, sudo=True, message=message)
@staticmethod
- def install_vpp_on_all_duts(nodes, vpp_pkg_dir):
- """Install VPP on all DUT nodes. Start the VPP service in case of
- systemd is not available or does not support autostart.
-
- :param nodes: Nodes in the topology.
- :param vpp_pkg_dir: Path to directory where VPP packages are stored.
- :type nodes: dict
- :type vpp_pkg_dir: str
- :raises RuntimeError: If failed to remove or install VPP.
- """
- for node in nodes.values():
- message = f"Failed to install VPP on host {node[u'host']}!"
- if node[u"type"] == NodeType.DUT:
- command = "mkdir -p /var/log/vpp/"
- exec_cmd(node, command, sudo=True)
-
- command = u"ln -s /dev/null /etc/sysctl.d/80-vpp.conf || true"
- exec_cmd_no_error(node, command, sudo=True)
-
- command = u". /etc/lsb-release; echo \"${DISTRIB_ID}\""
- stdout, _ = exec_cmd_no_error(node, command)
-
- if stdout.strip() == u"Ubuntu":
- exec_cmd_no_error(
- node, u"apt-get purge -y '*vpp*' || true",
- timeout=120, sudo=True
- )
- # workaround to avoid installation of vpp-api-python
- exec_cmd_no_error(
- node, f"rm -f {vpp_pkg_dir}vpp-api-python.deb",
- timeout=120, sudo=True
- )
- exec_cmd_no_error(
- node, f"dpkg -i --force-all {vpp_pkg_dir}*.deb",
- timeout=120, sudo=True, message=message
- )
- exec_cmd_no_error(node, u"dpkg -l | grep vpp", sudo=True)
- if DUTSetup.running_in_container(node):
- DUTSetup.restart_service(node, Constants.VPP_UNIT)
- else:
- exec_cmd_no_error(
- node, u"yum -y remove '*vpp*' || true",
- timeout=120, sudo=True
- )
- # workaround to avoid installation of vpp-api-python
- exec_cmd_no_error(
- node, f"rm -f {vpp_pkg_dir}vpp-api-python.rpm",
- timeout=120, sudo=True
- )
- exec_cmd_no_error(
- node, f"rpm -ivh {vpp_pkg_dir}*.rpm",
- timeout=120, sudo=True, message=message
- )
- exec_cmd_no_error(node, u"rpm -qai '*vpp*'", sudo=True)
- DUTSetup.restart_service(node, Constants.VPP_UNIT)
-
- @staticmethod
def running_in_container(node):
"""This method tests if topology node is running inside container.
diff --git a/resources/libraries/python/VPPUtil.py b/resources/libraries/python/VPPUtil.py
index 26c2109117..0e69ec7fb6 100644
--- a/resources/libraries/python/VPPUtil.py
+++ b/resources/libraries/python/VPPUtil.py
@@ -41,7 +41,14 @@ class VPPUtil:
"""
# Containers have a separate lifecycle, but better be safe.
PapiSocketExecutor.disconnect_all_sockets_by_node(node)
- DUTSetup.restart_service(node, Constants.VPP_UNIT)
+
+ VPPUtil.stop_vpp_service(node)
+ command = "/usr/bin/vpp -c /etc/vpp/startup.conf"
+ message = f"Node {node[u'host']} failed to start VPP!"
+ exec_cmd_no_error(
+ node, command, timeout=180, sudo=True, message=message
+ )
+
if node_key:
Topology.add_new_socket(
node, SocketType.CLI, node_key, Constants.SOCKCLI_PATH)
@@ -72,12 +79,19 @@ class VPPUtil:
:type node: dict
:type node_key: str
"""
- # Containers have a separate lifecycle, but better be safe.
PapiSocketExecutor.disconnect_all_sockets_by_node(node)
- DUTSetup.stop_service(node, Constants.VPP_UNIT)
+ command = "pkill vpp"
+ exec_cmd(node, command, timeout=180, sudo=True)
+ command = (
+ "/bin/rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api"
+ )
+ exec_cmd(node, command, timeout=180, sudo=True)
+
if node_key:
- Topology.del_node_socket_id(node, SocketType.PAPI, node_key)
- Topology.del_node_socket_id(node, SocketType.STATS, node_key)
+ if Topology.get_node_sockets(node, socket_type=SocketType.PAPI):
+ Topology.del_node_socket_id(node, SocketType.PAPI, node_key)
+ if Topology.get_node_sockets(node, socket_type=SocketType.STATS):
+ Topology.del_node_socket_id(node, SocketType.STATS, node_key)
@staticmethod
def stop_vpp_service_on_all_duts(nodes):
@@ -91,6 +105,39 @@ class VPPUtil:
VPPUtil.stop_vpp_service(node, node_key)
@staticmethod
+ def install_vpp_on_all_duts(nodes, vpp_pkg_dir):
+ """Install VPP on all DUT nodes.
+
+ :param nodes: Nodes in the topology.
+ :param vpp_pkg_dir: Path to directory where VPP packages are stored.
+ :type nodes: dict
+ :type vpp_pkg_dir: str
+ """
+ VPPUtil.stop_vpp_service_on_all_duts(nodes)
+ for node in nodes.values():
+ message = f"Failed to install VPP on host {node['host']}!"
+ if node["type"] == NodeType.DUT:
+ command = "mkdir -p /var/log/vpp/"
+ exec_cmd(node, command, sudo=True)
+
+ command = "ln -s /dev/null /etc/systemd/system/vpp.service"
+ exec_cmd(node, command, sudo=True)
+
+ command = "ln -s /dev/null /etc/sysctl.d/80-vpp.conf"
+ exec_cmd(node, command, sudo=True)
+
+ command = "apt-get purge -y '*vpp*' || true"
+ exec_cmd_no_error(node, command, timeout=120, sudo=True)
+
+ command = f"dpkg -i --force-all {vpp_pkg_dir}*.deb"
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
+
+ command = "dpkg -l | grep vpp"
+ exec_cmd_no_error(node, command, sudo=True)
+
+ @staticmethod
def verify_vpp_installed(node):
"""Verify that VPP is installed on the specified topology node.
diff --git a/resources/libraries/python/VppConfigGenerator.py b/resources/libraries/python/VppConfigGenerator.py
index 9a117626ea..a57d24cde5 100644
--- a/resources/libraries/python/VppConfigGenerator.py
+++ b/resources/libraries/python/VppConfigGenerator.py
@@ -21,7 +21,7 @@ from resources.libraries.python.topology import NodeType
from resources.libraries.python.topology import Topology
from resources.libraries.python.VPPUtil import VPPUtil
-__all__ = [u"VppConfigGenerator"]
+__all__ = ["VppConfigGenerator", "VppInitConfig"]
def pci_dev_check(pci_dev):
@@ -704,3 +704,40 @@ class VppConfigGenerator:
VPPUtil.restart_vpp_service(self._node, self._node_key)
if verify_vpp:
VPPUtil.verify_vpp(self._node)
+
+
+class VppInitConfig:
+ """VPP Initial Configuration."""
+ @staticmethod
+ def init_vpp_startup_configuration_on_all_duts(nodes):
+ """Apply initial VPP startup configuration on all DUTs.
+
+ :param nodes: Nodes in the topology.
+ :type nodes: dict
+ """
+ huge_size = Constants.DEFAULT_HUGEPAGE_SIZE
+ for node in nodes.values():
+ if node[u"type"] == NodeType.DUT:
+ vpp_config = VppConfigGenerator()
+ vpp_config.set_node(node)
+ vpp_config.add_unix_log()
+ vpp_config.add_unix_cli_listen()
+ vpp_config.add_unix_cli_no_pager()
+ vpp_config.add_unix_gid()
+ vpp_config.add_unix_coredump()
+ vpp_config.add_socksvr(socket=Constants.SOCKSVR_PATH)
+ vpp_config.add_main_heap_size("2G")
+ vpp_config.add_main_heap_page_size(huge_size)
+ vpp_config.add_default_hugepage_size(huge_size)
+ vpp_config.add_statseg_size("2G")
+ vpp_config.add_statseg_page_size(huge_size)
+ vpp_config.add_statseg_per_node_counters("on")
+ vpp_config.add_plugin("disable", "default")
+ vpp_config.add_plugin("enable", "dpdk_plugin.so")
+ vpp_config.add_dpdk_dev(
+ *[node["interfaces"][interface].get("pci_address") \
+ for interface in node[u"interfaces"]]
+ )
+ vpp_config.add_ip6_hash_buckets(2000000)
+ vpp_config.add_ip6_heap_size("4G")
+ vpp_config.apply_config() \ No newline at end of file
diff --git a/resources/libraries/robot/shared/default.robot b/resources/libraries/robot/shared/default.robot
index c28fc4f820..ad1cabb6c1 100644
--- a/resources/libraries/robot/shared/default.robot
+++ b/resources/libraries/robot/shared/default.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2022 Cisco and/or its affiliates.
+# Copyright (c) 2023 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:
@@ -43,6 +43,7 @@
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.Trace
| Library | resources.libraries.python.VhostUser.VirtioFeatureMask
+| Library | resources.libraries.python.VppConfigGenerator.VppInitConfig
| Library | resources.libraries.python.VppCounters
| Library | resources.libraries.python.VPPUtil
|
@@ -84,8 +85,6 @@
| | ... | If it exists (and not None), call the resetter (as a Python callable).
| | ... | This is usually used to reset any state on DUT before next trial.
| |
-| | ... | TODO: Move to a more specific library if needed.
-| |
| | ... | *Example:*
| |
| | ... | \| Call Resetter \|
@@ -171,7 +170,7 @@
| | | Run Keyword | ${dut}.Add Unix Log
| | | Run Keyword | ${dut}.Add Unix CLI Listen
| | | Run Keyword | ${dut}.Add Unix CLI No Pager
-| | | Run Keyword | ${dut}.Add Unix Nodaemon
+| | | Run Keyword | ${dut}.Add Unix GID
| | | Run Keyword | ${dut}.Add Unix Coredump
| | | Run Keyword | ${dut}.Add Socksvr | ${SOCKSVR_PATH}
| | | Run Keyword | ${dut}.Add Main Heap Size | ${${heap_size_mult}*${2}}G