The Server hardware we use for Proxmox deployments often has Intel X520 (ixgbe driver) or X710 (i40e driver) cards installed. These provide for several SFP+ ports required for 10 Gigabit connectivity.
Enterprise vendors such as DELL and Intel provide compatibility lists for SFP transceivers that are supported by their network adapters. Often times adapter firmware requires specifically encoded modules, preventing any unsupported modules from being initialized.
One way to work around this problem is to use generic SFP transceivers/modules from FS.com. Then, using the FS Box all generic modules can be (re-)encoded on-the-fly to work with any enterprise gear including such from Juniper, DELL and Cisco.
But... what to do in case you don't have access to an FS Box?
Well, at least in case of Linux and an Intel X520 the answer is simple; you tell the IXGBE driver to allow unsupported modules.
The above does the following:
- Set the allow_unsupported_sfp option for the IXGBE driver
- Tell the kernel to reload/probe all kernel modules applying the changes
- Update the initial ramdisk for the currently used kernel (so changes are loaded during boot)
There's no need to repeat any of the steps outlined above when installing new kernel versions (e.g. as part of system updates). The initial ramdisk of any new kernel will automatically include the specified options for the ixgbe driver.
Similar options are available for other kernel modules/drivers! To get a full list of available options of a specific driver you may use the modinfo command.
root@XXXX-pveX:~# modinfo ixgbe | egrep '^(file|version|descr|parm)' filename: /lib/modules/4.15.18-16-pve/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko version: 5.1.0-k description: Intel(R) 10 Gigabit PCI Express Network Driver parm: max_vfs:Maximum number of virtual functions to allocate per physical function - default is zero and maximum value is 63. (Deprecated) (uint) parm: allow_unsupported_sfp:Allow unsupported and untested SFP+ modules on 82599-based adapters (uint) parm: debug:Debug level (0=none,...,16=all) (int)