#!/usr/bin/env bash
-# Copyright (c) 2020 Cisco and/or its affiliates.
+# Copyright (c) 2021 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:
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 "
- # Compile
- make install T="${arch}"-"${machine}"-linuxapp-gcc -j || {
- die "Failed to compile DPDK!"
- }
- popd || die "Popd failed"
+ # i40e specific options
+ meson_options="${meson_options} \
+ -Dc_args=-DRTE_LIBRTE_I40E_16BYTE_RX_DESC=y"
- # 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"
+ # Configure generic build - the same used by VPP
+ meson_options="${meson_options} -Dplatform=generic"
+
+ # Patch L3FWD.
+ sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128"
+ sed_rxd+="/#define RTE_TEST_RX_DESC_DEFAULT 1024/g"
+ sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512"
+ sed_txd+="/#define RTE_TEST_TX_DESC_DEFAULT 1024/g"
sed_file="./main.c"
- pushd "${RTE_SDK}"/examples/l3fwd || die "Pushd failed"
+ pushd 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"
+
+ # Compile using Meson and Ninja.
+ meson ${meson_options} build || {
+ die "Failed to compile DPDK!"
+ }
+ ninja -C build || die "Failed to compile DPDK!"
}
fi
# Remove hugepages
- sudo rm -f /dev/hugepages/* || die "Removing hugepages failed!"
+ sudo rm -rf /dev/hugepages/* || die "Removing hugepages failed!"
}
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"
+ pushd "${DPDK_DIR}" || die "Pushd failed"
+ # Patch L3FWD.
+ sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128"
+ sed_rxd+="/#define RTE_TEST_RX_DESC_DEFAULT 2048/g"
+ sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512"
+ sed_txd+="/#define RTE_TEST_TX_DESC_DEFAULT 2048/g"
sed_file="./main.c"
- pushd "${RTE_SDK}"/examples/l3fwd || die "Pushd failed"
+ pushd examples/l3fwd || die "Pushd failed"
sed -i "${sed_rxd}" "${sed_file}" || die "Patch failed"
sed -i "${sed_txd}" "${sed_file}" || die "Patch 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!"
}
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"
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"
for attempt in {1..60}; do
echo "Checking if testpmd is alive, attempt nr ${attempt}"
- if fgrep "Press enter to exit" screenlog.0; then
- cat screenlog.0
- exit 0
+ if fgrep "Press enter to exit" screenlog.0; then
+ cat screenlog.0
+ exit 0
fi
sleep 1
done