#! /bin/bash # exit code is Important should be # -1 : don't continue # 0 : no errors - no need to load mlx share object # 32 : no errors - mlx share object should be loaded (returned by dpdk_setup_ports.py) SYS=`uname -r` if [ -f /etc/debian_version ]; then OS=debian elif [ -f /etc/redhat-release ]; then OS=redhat systemctl stop firewalld.service &> /dev/null else OS=unknown fi MACHINE_TYPE=`uname -m` if [ ${MACHINE_TYPE} != 'x86_64' ]; then echo "ERROR, only 64bit operating systems are supported, please reinstall x86 64 bit OS" exit -1 fi if [ -d /mnt/huge ]; then echo >> /dev/null else echo "Creating huge node" mkdir -p /mnt/huge fi if ! mount | grep hugetlbfs >> /dev/null ; then mount -t hugetlbfs nodev /mnt/huge fi for file in /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages ; do if [ -e $file ] ; then if [ "$(cat $file)" != "2048" ] ; then echo 2048 > $file fi fi done PATH=$PATH:/sbin:/usr/sbin VFIO_PCI_KO=`find /lib/modules/$(uname -r) -type f -name vfio-pci.ko` if [ $VFIO_PCI_KO ] && grep "iommu=pt" /proc/cmdline | grep -q "intel_iommu=on" ; then modprobe vfio-pci elif ! lsmod | grep -q igb_uio ; then echo "Loading kernel drivers for the first time" modprobe uio if [ $? -ne 0 ]; then echo "Failed inserting uio module, please check if it is installed" exit -1 fi km=ko/$SYS/igb_uio.ko if [ ! -e $km ]; then echo "ERROR: We don't have precompiled igb_uio.ko module for your kernel version" echo Will try compiling automatically. { cd ko/src && make && make install && cd - } &> /dev/null || { echo -e "Automatic compilation failed.\n" echo "You can try compiling yourself, using the following commands:" echo " \$cd ko/src " echo " \$make " echo " \$make install " echo -e " \$cd - \n" echo -e "Then, try to run TRex again.\n" echo 'Note: you might need additional Linux packages for that:' echo ' * yum based (Fedora, CentOS, RedHat):' echo ' sudo yum install kernel-devel-`uname -r`' echo ' sudo yum group install "Development tools"' echo ' * apt based (Ubuntu):' echo ' sudo apt install linux-headers-`uname -r`' echo ' sudo apt install build-essential' exit -1 } echo Success. fi if [ -e $km ]; then insmod $km if [ $? -ne 0 ]; then echo "Failed inserting igb_uio module" exit -1 fi fi fi # try to bind the ports from the configuration file (new DPDK) PARENT_ARGS="$0 $@" source find_python.sh $PYTHON ./dpdk_setup_ports.py --parent "$PARENT_ARGS"