Категорії
FreeBSD

Заставляем работать igb/ixgbe с altq

Тестовый стенд: FreeBSD 10.1 Release amd64

При попытки использовать ALTQ на igb интерфейсах получаем следующее:

pfctl: igb0 : driver does not support ALTQ

хотя поддержка ALTQ в ядре есть. Вообще, при планировании использования ALTQ рекомендую обратится к такому “списку поддержки ALTQ”. Он не совсем официальный, но сведён в единую таблицу.

UPD. This should be fixed in FreeBSD 12+. Сам тикет закрыт и непонятно, когда именно будет исправлено.

UPD2. В версии 14-CURRENT добавили поддержку dummynet. (читать “Примечание3”)

Примечание.

1) По непонятной пока причине, после применения патчинга, система работает не стабильно под нагрузкой. Будьте осторожны.
2) Для 10.3 можно применить “патч” немного проще:

# echo 'Performing IGB_LEGACY_TX mod'
# cd /usr/src/sys/dev/e1000
# for ext in c h
do
    echo '#define IGB_LEGACY_TX' > if_igb.$ext.new
    cat if_igb.$ext >> if_igb.$ext.new
    mv -v if_igb.$ext.new if_igb.$ext
done

Можно попробовать и для версий ниже, если не вышло, тогда делать как написано ниже. Так же рекомендую посмотреть на баг

3) В 11.2 удалён драйвер ixgb:

20180502:
The ixgb(4) driver has been removed. This driver was for an early and
uncommon legacy PCI 10GbE for a single ASIC, Intel 82597EX. Intel
quickly shifted to the long lived ixgbe family. If you have device
ixgb in your kernel config file it must be removed.

Как заставить работать? При гуглении натолкнулся на описание бага + описание патчинга https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193053 . Ну что ж, приступим. Ниже будут выложены патчи для igb (пути относительно /usr/src), которые я применял (патчи для ixbge в самом низу)

Index: sys/modules/igb/Makefile
===================================================================
--- sys/modules/igb/Makefile    (revision 272488)
+++ sys/modules/igb/Makefile    (working copy)
@@ -21,7 +21,7 @@
 # instead use the older if_start non-multiqueue capable interface.
 # This might be desireable for testing, or to enable the use of
 # ALTQ.
-#CFLAGS  += -DIGB_LEGACY_TX
+CFLAGS  += -DIGB_LEGACY_TX

 .if !defined(KERNBUILDDIR)
 .if ${MK_INET_SUPPORT} != "no"

Index: sys/conf/options
===================================================================
--- sys/conf/options    (revision 272659)
+++ sys/conf/options    (working copy)
@@ -405,6 +405,7 @@
 ETHER_8023             opt_ef.h
 ETHER_II               opt_ef.h
 ETHER_SNAP             opt_ef.h
+IGB_LEGACY_TX          opt_igb.h
 INET                   opt_inet.h
 INET6                  opt_inet6.h
 IPDIVERT

Index: sys/dev/e1000/if_igb.c
===================================================================
--- sys/dev/e1000/if_igb.c      (revision 272659)
+++ sys/dev/e1000/if_igb.c      (working copy)
@@ -33,6 +33,8 @@
 /*$FreeBSD$*/


+#include "opt_igb.h"
+
 #include "opt_inet.h"
 #include "opt_inet6.h"

Index: sys/dev/e1000/if_igb.h
===================================================================
--- sys/dev/e1000/if_igb.h      (revision 272659)
+++ sys/dev/e1000/if_igb.h      (working copy)
@@ -35,6 +35,8 @@
 #ifndef _IGB_H_DEFINED_
 #define _IGB_H_DEFINED_

+#include "opt_igb.h"
+
 /* Tunables */

 /*

Дальше пересобираем ядро с опцией

options IGB_LEGACY_TX

и пробуем:

# pfctl -sr
pass on igb0 all flags S/SA keep state queue wan_rest
# pfctl -sq
queue root_igb0 on igb0 bandwidth 1Gb priority 0 cbq( wrr root ) {wan_viber, wan_rest}
queue wan_viber on igb0 bandwidth 5Mb priority 0
queue wan_rest on igb0 bandwidth 995Mb cbq( default )

Примечание.

Я пытался сделать аналогичное когда-то, но на 10.0 и ничего не вышло. Возможно что-то забыл пропатчить или код поправили в 10.1.

Патчи для ixgbe (igb 10Gbit)

Index: sys/modules/igb/Makefile
===================================================================
--- sys/modules/igb/Makefile    (revision 272488)
+++ sys/modules/igb/Makefile    (working copy)
@@ -21,7 +21,7 @@
 # instead use the older if_start non-multiqueue capable interface.
 # This might be desireable for testing, or to enable the use of
 # ALTQ.
-#CFLAGS  += -DIGB_LEGACY_TX
+CFLAGS  += -DIGB_LEGACY_TX

 .if !defined(KERNBUILDDIR)
 .if ${MK_INET_SUPPORT} != "no"

Index: sys/conf/options
===================================================================
--- sys/conf/options    (revision 272659)
+++ sys/conf/options    (working copy)
@@ -405,6 +405,7 @@
 ETHER_8023             opt_ef.h
 ETHER_II               opt_ef.h
 ETHER_SNAP             opt_ef.h
+IXGBE_LEGACY_TX        opt_ixgbe.h
 INET                   opt_inet.h
 INET6                  opt_inet6.h
 IPDIVERT

Index: sys/dev/ixgbe/ixgbe.c
===================================================================
--- sys/dev/e1000/if_igb.c      (revision 272659)
+++ sys/dev/e1000/if_igb.c      (working copy)
@@ -33,6 +33,8 @@
 /*$FreeBSD$*/


+#include "opt_ixgbe.h"
+
 #include "opt_inet.h"
 #include "opt_inet6.h"

Index: sys/dev/ixgbe/ixgbe.h
===================================================================
--- sys/dev/e1000/if_igb.h      (revision 272659)
+++ sys/dev/e1000/if_igb.h      (working copy)
@@ -35,6 +35,8 @@
 #ifndef _IGB_H_DEFINED_
 #define _IGB_H_DEFINED_

+#include "opt_ixgbe.h"
+
 /* Tunables */

 /*

и пересобрать ядро с опцией

options IXGBE_LEGACY_TX

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff