If you have server with 10G Intel X520 network card
05:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
and you wonder why your system did not have network and even no interface is shown with the commands
ip addr and ifconfig -a
, it is probably because you used unsupported SFP+ module.
In the “dmesg” you’ll see two line regarding the problem with the interface:
[ 3142.439304 ] ixgbe 0000:05:00.0: failed to load because an unsupported SFP+ or QSFP module type was detected. [ 3142.439306 ] ixgbe 0000:05:00.0: Reload the driver after installing a supported module.
Only tested modules are supported by default and it’s probably normal there are a great deal of different SFP+ devices and the creators of the kernel driver would not be able to test all the different SFP+ modules in the world, so all tested SFP+ modules work by default and all other not tested need to enable an option in the kernel to instruct the driver to use them!
Enable the unsupported SF+ module of Intel X520. The kernel module name is “ixgbe”:
- Built-in kernel module, when the ixgbe is build in the kernel, you must pass a configuration parameters to the kernel boot line
Under CentOS 7 and Ubuntu 16/17/18 you can do the following:
and add at the end of the GRUB_CMDLINE_LINUX the above line. So it should look like:
And then for CentOS 7 execute:
grub2-mkconfig -o /boot/grub2/grub.cfg
And for Ubuntu/Debian:
grub-mkconfig -o /boot/grub/grub.cfg
DO NOT forget to execute a grub2 make configuration command, because the grub2 configuration file must be regenerated to include the option you’ve set.
- Most linux distros use ixgbe as a kernel module, so they load the module with the initrd image after booting the kernel. We must instruct how the kernel module will be loaded from the initrd image, so the initrd image must be changed. Here is how to do it properly for CentOS 7 and Ubuntu/Debian:
For the both distros execute the command:
echo "options ixgbe allow_unsupported_sfp=1" > /etc/modprobe.d/ixgbe.conf
It will create a configuration file for the ixgbe kernel module with the configuration you see between the double quotes. And then reinstall the kernel!!! Because the initrd image will be regenerated. If you do not want to reinstall the current kernel, you must manually regenerate the initrd image.
Regenerate all the initrd images for the all installed kernels.
Under CentOS 7:
dracut --regenerate-all --force
update-initramfs -u -k all