Просмотр Исходного

h2. Теория

У устройств известен *PCI-ID*.

Драйвера при загрузке сообщают ядру, устройства с каким PCI-ID они поддерживают. Так для устройства подбирается драйвер.

Коллизий в поддержке разными драйверами одних и тех же устройств не бывает, а если бывают - это ошибка.

h2. Примеры: как разобраться почему устройство не работает?


h3. Узнать PCI-ID устройства

{code}
# lspci -nn | grep X7
03:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572] (rev 02)
{code}

PCI-ID в квадратных скобках и состоит из двух чисел: *Vendor ID* \- 8086 и *Device ID* \- 1572.

8086 - Intel Corporation

1572 - Ethernet Controller X710 for 10GbE SFP\+

h3. Найти упоминание драйвера в исходном коде

В исходных кодах драйверов можно найти упоминание device-id. Если его там нет - значит этот драйвер не поддерживает это устройство.

{code}
# grep -r 1572 ./
./src/i40e_devids.h:#define I40E_DEV_ID_SFP_XL710 0x1572
{code}

В драйверах для Intel с SourceForge обычно в корне есть файл pci.updates, в нём перечислены поддерживаемые устройства:

{code}
# egrep '(8086|1572)' pci.updates
8086 Intel Corporation
1572 Ethernet Controller X710 for 10GbE SFP+
...
{code}

h3. Гипотеза - NO-CARRIER на интерфейсах из-за неподдерживаемых SFP\+ модулей

В логе 

{code}
/var/log/messages
{code}
есть строчки:

{code}
kernel: i40e 0000:03:00.0: Rx/Tx is disabled on this device because an unsupported SFP+ module type was detected.
{code}

В ixgbe драйвере есть параметр, с помощью которого можно игнорировать неподдерживаемые SFP\+ модули:

{code}
allow_unsupported_sfp=1,1
{code}

Но ни обновлённый i40e-драйвер:

{code}
# modinfo i40e | egrep '(filename|parm)'
filename: /lib/modules/2.6.32-754.el6.x86_64/updates/drivers/net/ethernet/intel/i40e/i40e.ko
parm: debug:Debug level (0=none,...,16=all) (int)
{code}

Ни стандартный, от CentOS 6:

{code}
# modinfo /lib/modules/2.6.32-754.el6.x86_64/kernel/drivers/net/i40e/i40e.ko | egrep '(filename|parm)'
filename: /lib/modules/2.6.32-754.el6.x86_64/kernel/drivers/net/i40e/i40e.ko
parm: debug:Debug level (0=none,...,16=all) (int)
{code}

Не поддерживают параметров кроме debug. Следовательно *единственный способ заставить эти карты работать - купить поддерживаемые SFP-модули*.
https://github.com/bibigon812/xl710-unlocker