Updating a kernel module for XenServer 7
We recently bought a new server cluster equipped with Intel X722 10Gbps SFP+ cards. These cards were not recognised by the XenServer 7.0 driver because it is too old; the Linux Kernel Driver Database lists it as
vendor: 8086 ("Intel Corporation"), device: 37d3 ("Ethernet Connection X722 for 10GbE SFP+")
since kernel 4.7.
The trivial solution is to upgrade to a later version of XenServer 7, but unfortunately Citrix changed it's licensing which removed some essential features from the free edition, so that was not an option.
The old XenServer 7.0 will receive updates until May 2019, but without the fast network interfaces we were stuck. As we wanted to migrate away from older hardware with live migration, choosing another platform was not a favourable option (although we do plan to migrate away from XenServer in 2018).
We were ready to install older network cards in the servers, but there was one other option: build an up-to-date driver for the old kernel.
I obtained the latest i40e driver from SourceForge (then 2.4.3 dated 2017-12-07) and uploaded the tarball to a fresh machine imported from the DDK iso. Then building the RPMs was simply a matter of
rpmbuild -ta <tarball>
since there is already a spec file inside the tarball.
The resulting RPM contains the module as an update:
which, on installation, will override the original driver.
Installing the driver was simply a case of running
rpm -i, but
modprobe i40e had the effect that the names of the interfaces were weird, like "side-12345-eth2" with different hex numbers for each port. Rebooting the servers resolved this and they now receive the simple names eth2 through eth5 (the 1Gbps card has ports eth0 and eth1).
To save others the trouble of going through the same chores, the rpms can be found on our website.