summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRageLtMan <rageltman [at] sempervictus>2024-06-20 20:14:50 -0400
committerRageLtMan <rageltman [at] sempervictus>2024-06-21 22:45:12 -0400
commitc0365df3ca95b99a0d28d7bc553847993acbc7e9 (patch)
tree5f51cbe4aaf8058bc260d87305667d463ac85247
parent65333b4644921d9a475fa796238c83a83a1d0528 (diff)
downloadvyos-build-c0365df3ca95b99a0d28d7bc553847993acbc7e9.tar.gz
vyos-build-c0365df3ca95b99a0d28d7bc553847993acbc7e9.zip
T6231: Mellanox OFED Kernel and Userspace Packages
Build OFED drivers and userspace components against the kernel source tree similar to Intel's NIC drivers. OFED installers create Debian packages of their own tageting the kernel version defined in the build invocation if DKMS is omitted. Script builds with supporting components for VPP to permit handoff of function to the underlying hardware as appropriate. Updating the version is fairly trivial along with adding patching as needed to handle kCFI and hardening measures as they are introduced. Testing: Tested against GCC-built Linux Hardened kernel with the various additions from PR 132 - sustained line-rate testing against 4x100g links on a single machine at a hair below 200g for each LACP pair.
-rw-r--r--packages/linux-kernel/Jenkinsfile3
-rwxr-xr-xpackages/linux-kernel/build-mellanox-ofed.sh87
2 files changed, 90 insertions, 0 deletions
diff --git a/packages/linux-kernel/Jenkinsfile b/packages/linux-kernel/Jenkinsfile
index 9d88663a..ba4a5a1c 100644
--- a/packages/linux-kernel/Jenkinsfile
+++ b/packages/linux-kernel/Jenkinsfile
@@ -62,6 +62,9 @@ def pkgList = [
// Intel IXGBEVF
['name': 'ixgbevf', 'buildCmd': 'cd ..; ./build-intel-ixgbevf.sh'],
+ // Mellanox OFED
+ ['name': 'ofed', 'buildCmd': 'cd ..; ./build-mellanox-ofed.sh'],
+
// Jool
['name': 'jool', 'buildCmd': 'cd ..; ./build-jool.py'],
diff --git a/packages/linux-kernel/build-mellanox-ofed.sh b/packages/linux-kernel/build-mellanox-ofed.sh
new file mode 100755
index 00000000..0ddf084e
--- /dev/null
+++ b/packages/linux-kernel/build-mellanox-ofed.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+DROP_DEV_DBG_DEBS=1
+DEB_DISTRO='debian12.1'
+CWD=$(pwd)
+KERNEL_VAR_FILE=${CWD}/kernel-vars
+
+if ! dpkg-architecture -iamd64; then
+ echo "Mellanox OFED is only buildable on amd64 platforms"
+ exit 0
+fi
+
+if [ ! -f ${KERNEL_VAR_FILE} ]; then
+ echo "Kernel variable file '${KERNEL_VAR_FILE}' does not exist, run ./build_kernel.sh first"
+ exit 1
+fi
+
+. ${KERNEL_VAR_FILE}
+
+url="https://www.mellanox.com/downloads/ofed/MLNX_OFED-24.04-0.6.6.0/MLNX_OFED_SRC-debian-24.04-0.6.6.0.tgz"
+
+cd ${CWD}
+
+DRIVER_FILE=$(basename ${url} | sed -e s/tar_0/tar/)
+DRIVER_DIR="${DRIVER_FILE%.tgz}"
+DRIVER_NAME="ofed"
+DRIVER_PRFX="MLNX_OFED"
+DRIVER_VERSION=$(echo ${DRIVER_DIR} | awk -F${DRIVER_PRFX} '{print $2}' | sed 's/^-//;s|_SRC-debian-||')
+DRIVER_VERSION_EXTRA=""
+
+# Build up Debian related variables required for packaging
+DEBIAN_ARCH=$(dpkg --print-architecture)
+DEBIAN_DIR="${CWD}/vyos-mellanox-${DRIVER_NAME}_${DRIVER_VERSION}_${DEBIAN_ARCH}"
+DEBIAN_CONTROL="${DEBIAN_DIR}/DEBIAN/control"
+DEBIAN_POSTINST="${CWD}/vyos-mellanox-ofed.postinst"
+
+# Fetch OFED driver source from Nvidia
+if [ -e ${DRIVER_FILE} ]; then
+ rm -f ${DRIVER_FILE}
+fi
+curl -L -o ${DRIVER_FILE} ${url}
+if [ "$?" -ne "0" ]; then
+ exit 1
+fi
+
+# Unpack archive
+if [ -d ${DRIVER_DIR} ]; then
+ rm -rf ${DRIVER_DIR}
+fi
+mkdir -p ${DRIVER_DIR}
+tar -C ${DRIVER_DIR} --strip-components=1 -xf ${DRIVER_FILE}
+
+# Build/install debs
+cd ${DRIVER_DIR}
+if [ -z $KERNEL_DIR ]; then
+ echo "KERNEL_DIR not defined"
+ exit 1
+fi
+
+sudo ./install.pl \
+ --basic --dpdk \
+ --without-dkms \
+ --without-mlnx-nvme-modules \
+ --with-vma --vma-vpi --vma-eth \
+ --guest --hypervisor \
+ --builddir $DEBIAN_DIR/mlx \
+ --distro $DEB_DISTRO \
+ -s $KERNEL_DIR \
+ -k $KERNEL_VERSION
+
+if [ $DROP_DEV_DBG_DEBS -eq 1 ]; then
+ echo "I: Removing development and debug packages"
+ sudo rm $(find $CWD/$DRIVER_DIR/DEBS/$DEB_DISTRO -type f | grep -E '\-dev|\-dbg')
+fi
+
+cp $(find $CWD/$DRIVER_DIR/DEBS/$DEB_DISTRO -type f | grep '\.deb$') "$CWD/"
+
+echo "I: Cleanup ${DRIVER_NAME} source"
+cd ${CWD}
+if [ -e ${DRIVER_FILE} ]; then
+ rm -f ${DRIVER_FILE}
+fi
+if [ -d ${DRIVER_DIR} ]; then
+ sudo rm -rf ${DRIVER_DIR}
+fi
+if [ -d ${DEBIAN_DIR} ]; then
+ sudo rm -rf ${DEBIAN_DIR}
+fi