Revert "fix(jobspec): Delete ipsec nfv density tests"
[csit.git] / resources / libraries / bash / function / dpdk.sh
index 4298e79..86abb84 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-# Copyright (c) 2020 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:
@@ -84,55 +84,23 @@ function dpdk_compile () {
 
     set -exuo pipefail
 
-    arch=$(uname -m) || {
-        die "Get CPU architecture failed."
-    }
-
-    # DPDK prefers "arm64" to "aarch64" and does not allow arm64 native target.
-    if [ ${arch} == "aarch64" ]; then
-        arch="arm64"
-        machine="armv8a"
-    else
-        machine="native"
-    fi
-
-    # Patch settings.
-    sed_mlx="s/^CONFIG_RTE_LIBRTE_MLX5_PMD=n/CONFIG_RTE_LIBRTE_MLX5_PMD=y/g"
-    sed_i40e="s/^CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=n/CONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC=y/g"
-    sed_file="./config/common_base"
-
     pushd "${DPDK_DIR}" || die "Pushd failed"
-    if ( lsmod || die ) | fgrep mlx; then
-        sed -i "${sed_mlx}" "${sed_file}" || die
-    fi
 
-    sed -i "${sed_i40e}" "${sed_file}" || die "Patch failed"
+    # enable l3fwd
+    meson_options="-Dexamples=l3fwd "
 
-    sed_build_fix='s/#include <\(rte_ethdev.*.h\)>/#include "\1"/g'
-    # can't put the filename in quotes so that shell expands it
-    sed -i "${sed_build_fix}" ./lib/librte_ethdev/rte_ethdev*.h || {
-        die "DPDK build patch failed"
-    }
+    # i40e specific options
+    meson_options="${meson_options} \
+        -Dc_args=-DRTE_LIBRTE_I40E_16BYTE_RX_DESC=y"
+
+    # Configure generic build - the same used by VPP
+    meson_options="${meson_options} -Dplatform=generic"
 
-    # Compile
-    make install T="${arch}"-"${machine}"-linuxapp-gcc -j || {
+    # Compile using Meson and Ninja.
+    meson setup ${meson_options} build || {
         die "Failed to compile DPDK!"
     }
-    popd || die "Popd failed"
-
-    # Compile the l3fwd.
-    export RTE_SDK="${DPDK_DIR}/"
-    export RTE_TARGET="${arch}-${machine}-linuxapp-gcc"
-    # Patch settings.
-    sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128/#define RTE_TEST_RX_DESC_DEFAULT 1024/g"
-    sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512/#define RTE_TEST_TX_DESC_DEFAULT 1024/g"
-    sed_file="./main.c"
-    pushd "${RTE_SDK}"/examples/l3fwd || die "Pushd failed"
-    sed -i "${sed_rxd}" "${sed_file}" || die "Patch failed"
-    sed -i "${sed_txd}" "${sed_file}" || die "Patch failed"
-    make clean || die "Failed to compile l3fwd"
-    make -j || die "Failed to compile l3fwd"
-    popd || die "Popd failed"
+    ninja -C build || die "Failed to compile DPDK!"
 }
 
 
@@ -222,38 +190,18 @@ function dpdk_l3fwd_compile () {
     #
     # Variables read:
     # - DPDK_DIR - Path to DPDK framework.
-    # - CSIT_DIR - Path to CSIT framework.
     # Functions called:
     # - die - Print to stderr and exit.
 
     set -exuo pipefail
 
-    arch=$(uname -m) || {
-        die "Get CPU architecture failed."
-    }
-
-    # DPDK prefers "arm64" to "aarch64" and does not allow arm64 native target.
-    if [ ${arch} == "aarch64" ]; then
-        arch="arm64"
-        machine="armv8a"
-    else
-        machine="native"
-    fi
-
-    # Compile the l3fwd.
-    export RTE_SDK="${DPDK_DIR}/"
-    export RTE_TARGET="${arch}-${machine}-linuxapp-gcc"
-    # Patch settings.
-    sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128/#define RTE_TEST_RX_DESC_DEFAULT 2048/g"
-    sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512/#define RTE_TEST_TX_DESC_DEFAULT 2048/g"
-    sed_file="./main.c"
-    pushd "${RTE_SDK}"/examples/l3fwd || die "Pushd failed"
-    sed -i "${sed_rxd}" "${sed_file}" || die "Patch failed"
-    sed -i "${sed_txd}" "${sed_file}" || die "Patch failed"
+    pushd "${DPDK_DIR}" || die "Pushd failed"
+    # Patch L3FWD.
+    pushd examples/l3fwd || die "Pushd failed"
     chmod +x ${1} && source ${1} || die "Patch failed"
-    make clean || die "Failed to compile l3fwd"
-    make -j || die "Failed to compile l3fwd"
     popd || die "Popd failed"
+
+    ninja -C build || die "Failed to compile DPDK!"
 }
 
 
@@ -268,20 +216,8 @@ function dpdk_l3fwd () {
 
     set -exuo pipefail
 
-    arch=$(uname -m) || {
-        die "Get CPU architecture failed."
-    }
-
-    # DPDK prefers "arm64" to "aarch64" and does not allow arm64 native target.
-    if [ ${arch} == "aarch64" ]; then
-        arch="arm64"
-        machine="armv8a"
-    else
-        machine="native"
-    fi
-
     rm -f screenlog.0 || true
-    binary="${DPDK_DIR}/examples/l3fwd/build/app/l3fwd"
+    binary="${DPDK_DIR}/build/examples/dpdk-l3fwd"
 
     sudo sh -c "screen -dmSL DPDK-test ${binary} ${@}" || {
         die "Failed to start l3fwd"
@@ -290,6 +226,28 @@ function dpdk_l3fwd () {
     for attempt in {1..60}; do
         echo "Checking if l3fwd is alive, attempt nr ${attempt}"
         if fgrep "L3FWD: entering main loop on lcore" screenlog.0; then
+            cat screenlog.0
+            exit 0
+        fi
+        sleep 1
+    done
+    cat screenlog.0
+
+    exit 1
+}
+
+
+function dpdk_l3fwd_check () {
+
+    # DPDK l3fwd check state.
+
+    set -exuo pipefail
+
+    for attempt in {1..60}; do
+        echo "Checking if l3fwd state is ok, attempt nr ${attempt}"
+        if fgrep "Link up" screenlog.0; then
+            cat screenlog.0
+            dpdk_l3fwd_pid
             exit 0
         fi
         sleep 1
@@ -300,6 +258,16 @@ function dpdk_l3fwd () {
 }
 
 
+function dpdk_l3fwd_pid () {
+    l3fwd_pid="$(pidof dpdk-l3fwd)"
+    if [ ! -z "${l3fwd_pid}" ]; then
+        echo "L3fwd process ID: ${l3fwd_pid}"
+    else
+        echo "L3fwd not running!"
+    fi
+}
+
+
 function dpdk_precheck () {
 
     # Precheck system settings (nr_hugepages, max_map_count).
@@ -335,20 +303,8 @@ function dpdk_testpmd () {
 
     set -exuo pipefail
 
-    arch=$(uname -m) || {
-        die "Get CPU architecture failed."
-    }
-
-    # DPDK prefers "arm64" to "aarch64" and does not allow arm64 native target.
-    if [ ${arch} == "aarch64" ]; then
-        arch="arm64"
-        machine="armv8a"
-    else
-        machine="native"
-    fi
-
     rm -f screenlog.0 || true
-    binary="${DPDK_DIR}/${arch}-${machine}-linuxapp-gcc/app/testpmd"
+    binary="${DPDK_DIR}/build/app/dpdk-testpmd"
 
     sudo sh -c "screen -dmSL DPDK-test ${binary} ${@}" || {
         die "Failed to start testpmd"
@@ -356,11 +312,30 @@ function dpdk_testpmd () {
 
     for attempt in {1..60}; do
         echo "Checking if testpmd is alive, attempt nr ${attempt}"
-         if fgrep "Press enter to exit" screenlog.0 && \
-            fgrep "Port 0: link state change event" screenlog.0 && \
-            fgrep "Port 1: link state change event" screenlog.0; then
-             cat screenlog.0
-             exit 0
+        if fgrep "Press enter to exit" screenlog.0; then
+            cat screenlog.0
+            dpdk_testpmd_pid
+            exit 0
+        fi
+        sleep 1
+    done
+    cat screenlog.0
+
+    exit 1
+}
+
+
+function dpdk_testpmd_check () {
+
+    # DPDK testpmd check links state.
+
+    set -exuo pipefail
+
+    for attempt in {1..60}; do
+        echo "Checking if testpmd links state changed, attempt nr ${attempt}"
+        if fgrep "link state change event" screenlog.0; then
+            cat screenlog.0
+            exit 0
         fi
         sleep 1
     done
@@ -368,3 +343,13 @@ function dpdk_testpmd () {
 
     exit 1
 }
+
+
+function dpdk_testpmd_pid () {
+    testpmd_pid="$(pidof dpdk-testpmd)"
+    if [ ! -z "${testpmd_pid}" ]; then
+        echo "Testpmd process ID: ${testpmd_pid}"
+    else
+        echo "Testpmd not running!"
+    fi
+}