Тестовый стенд: 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