Loading the igb_uio Module

Execute the following tasks ONLY if the igb_uio module is not loaded or if the DPDK ports are not bound with igb_uio properly.

In such cases, you will see error messages as shown here:
Jan 12 17:04:10 prodeomprobe2xdfw system_layout.py: unable to bind 0000:3b:00.3 to igb_uio
Jan 12 17:04:10 prodeomprobe2xdfw systemd: pld-rat.service: control process exited, code=exited status=1
Jan 12 17:04:10 prodeomprobe2xdfw systemd: Failed to start OCSM Media Sniffer.
Jan 12 17:04:10 prodeomprobe2xdfw systemd: Unit pld-rat.service entered failed state.
Jan 12 17:04:10 prodeomprobe2xdfw systemd: pld-rat.service failed.
To handle such errors, execute the following instructions which will load the igb_uio module:

Note:

The DPDK version and the interface details will vary for each machine or server. Use the appropriate versions and interfaces while executing the following commands.
  1. Run this command in the terminal as the root user to explicitly load the igb_uio module:
    1. Command 1: Run this command to load the uio module:
      modprobe uio
    2. Command 2: Run this command to list a set of paths containing the igb_uio.ko file:
      sudo find / -name igb_uio.ko
      Example:
      [root@iris ~]# sudo find / -name igb_uio.ko
      /var/cache/ocsm/dpdk/dpdk-22.11.3/build/kmod/igb_uio.ko
      /var/cache/ocsm/dpdk/dpdk-22.11.3/build/build/kernel/linux/igb_uio/igb_uio.ko
      /usr/lib/modules/5.4.17-2011.6.2.el7uek.x86_64/extra/igb_uio.ko [We need to chose this path to load the igb_uio.ko. See next command example]
      
    3. Command 3: Run this command:
      insmod <provide here the path of igb_uio.ko>
      Example:
      insmod /usr/lib/modules/5.4.17-2011.6.2.el7uek.x86_64/extra/igb_uio.ko
      Ensure that there is no error after executing this command. And you must return to the terminal prompt.
  2. Check if the igb_uio driver is correctly loaded. Run the command lsmod | grep igb_uio in the terminal. If the output shows igb_uio with value 1, it means that the module was successfully loaded.
    Example:
    [root@iris ~]# lsmod | grep igb_uio
    igb_uio                20480  1
    uio                    20480  3 igb_uio
    
  3. Check the status of the interface using the command:
    sudo /var/cache/ocsm/dpdk/dpdk-22.11.3/usertools/dpdk-devbind.py -s
    • Let us assume the interface is 0000:3b:00.3, if the interface is bound properly to igb_uio, then the output looks like:
      "0000:3b:00.3 'Ethernet Controller XL710 for 40GbE QSFP+ 1583' drv=igb_uio unused=..."
    • If the interface is still not bound to igb_uio, then the output looks like:
      "0000:3b:00.3 'Ethernet Controller XL710 for 40GbE QSFP+ 1583'unused=i40e,"
    If the interface is still not bound to igb_uio, follow the below procedure:
    1. Open the file /etc/rc.local in edit mode.
    2. Paste this single line command, and exit from the file:
      sudo /var/cache/ocsm/dpdk/dpdk-22.11.3/usertools/dpdk-devbind.py -b igb_uio 0000:3b:00.3
    3. Give execute permissions to the file using command:
      chmod +x /etc/rc.d/rc.local
  4. Run the following commands to install DPDK and make igb_uio get persistent across reboot:
    Command 1 : source /opt/oracle/ocsm/ocsm_env.sh
    Command 2 : scl enable gcc-toolset-11 '/opt/oracle/ocsm/usr/share/pld/rat/configure_dpdk.py' ---> This will load igb_uio module and ensure persistance across reboot.
    Command 3 : reboot
    
    Once the setup is running, check if the igb_uio module is loaded using the command lsmod | grep igb_uio.
  5. After this, check if the appropriate Ethernet interface is enabled in the PSA and if the DPDK installation is successful.