This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
software:freebsd:ng_vlan [2015/05/16 11:51] – создано root | software:freebsd:ng_vlan [2022/03/02 23:11] (current) – [FreeBSD QinQ: ng_vlan patch] root | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== QinQ: ng_vlan patch ====== | + | ====== |
- | Патч добавляет функционал в нетграф ноду ng_vlan, в том числе становится возможным делать QinQ. | + | Патч добавляет функционал в нетграф ноду ng_vlan, в том числе становится возможным делать QinQ.\\ |
[[http:// | [[http:// | ||
[[http:// | [[http:// | ||
+ | <note important> | ||
Line 12: | Line 13: | ||
===== Новое ===== | ===== Новое ===== | ||
- | * настройка | + | * настройка |
- | * настройка | + | * настройка |
- | * настройка | + | * настройка |
* возможность удалить VLAN фильтр/ | * возможность удалить VLAN фильтр/ | ||
* возможность инкапсулировать пакеты с тэгом (в mbuf) пришедшие с nomatch хука при отправке в downstream хук | * возможность инкапсулировать пакеты с тэгом (в mbuf) пришедшие с nomatch хука при отправке в downstream хук | ||
Line 22: | Line 23: | ||
===== Сообщения ===== | ===== Сообщения ===== | ||
- | NGM_VLAN_DEL_VID_FLT (" | + | NGM_VLAN_DEL_VID_FLT (" |
- | [b]аргумент: | + | **аргумент**: число (uint16)\\ |
- | [b]действие: | + | **действие**: удаляет VLAN фильтр на **vid**. Те удаляет фльтр на хуке по номеру VLAN (**vid**), а не по имени хука, как |
- | NGM_VLAN_GET_DECAP (" | + | NGM_VLAN_GET_DECAP (" |
- | [b]аргумент: | + | **аргумент**: нет\\ |
- | [b]действие: | + | **действие**: возвращает: |
- | [i]0[/i]: - [u]по умолчанию[/u], нода пересылает без изменений пакеты не попавшие в фильтры с downstream на nomatch хук. | + | * **0** - __по умолчанию__, нода пересылает без изменений пакеты не попавшие в фильтры с **downstream** на **nomatch** хук. |
- | [i]1[/i]: - если нода делает 802.1Q/P декапсуляцию, | + | * **1** - если нода делает 802.1Q/P декапсуляцию, |
- | NGM_VLAN_SET_DECAP (" | + | NGM_VLAN_SET_DECAP (" |
- | [b]аргумент: | + | **аргумент**: число (hint32)\\ |
- | [b]действие: | + | **действие**: устанавливает режим декапсуляции ноды, см __NGM_VLAN_GET_DECAP__\\ |
- | NGM_VLAN_GET_ENCAP (" | + | NGM_VLAN_GET_ENCAP (" |
- | [b]аргумент: | + | **аргумент**: нет\\ |
- | [b]действие: | + | **действие**: возвращает: |
- | [i]0[/i]: - если нода не делает 802.1Q/P инкапсуляцию, | + | * **0** - если нода не делает 802.1Q/P инкапсуляцию, |
- | [b][u]предупреждения: | + | **предупреждения**: |
- | -- если down хук подключён к ng_ether, чей интерфейс if_capenable & IFCAP_VLAN_HWTAGGING то инкапсуляцию произведёт сетевой адаптер, | + | - если |
- | -- если адаптер не поддерживает инкапсуляцию или она отключены то пакеты уйдут в сеть не тегированными. | + | - если адаптер не поддерживает инкапсуляцию или она отключены то пакеты уйдут в сеть не тегированными. |
- | [i]1[/i] (VLAN_ENCAP_FROM_FILTER): - [u]по умолчанию[/u], нода производит 802.1Q/P инкапсуляцию пакетов полученный через хук фильтра | + | * **1** (VLAN_ENCAP_FROM_FILTER) - __по умолчанию__, нода производит 802.1Q/P инкапсуляцию пакетов полученный через хук фильтра |
- | [i]2[/i] (VLAN_ENCAP_FROM_NOMATCH): - нода производит 802.1Q/P инкапсуляцию пакетов полученный через хук | + | * **2** (VLAN_ENCAP_FROM_NOMATCH) - нода производит 802.1Q/P инкапсуляцию пакетов полученный через хук |
Возможна комбинация: | Возможна комбинация: | ||
- | NGM_VLAN_SET_ENCAP ([b]" | + | NGM_VLAN_SET_ENCAP ("**setencap**")\\ |
- | [b]аргумент: | + | **аргумент**: число (hint32)\\ |
- | [b]действие: | + | **действие**: устанавливает режим инкапсуляции ноды, см __NGM_VLAN_GET_ENCAP__\\ |
- | NGM_VLAN_GET_ENCAP_PROTO ([b]" | + | NGM_VLAN_GET_ENCAP_PROTO ("**getencapproto**")\\ |
- | [b]аргумент: | + | **аргумент**: нет\\ |
- | [b]действие: | + | **действие**: возвращает число (hint16) - тэг в который будет использоваться для инкапсуляции/ |
- | NGM_VLAN_SET_ENCAP_PROTO ([b]" | + | NGM_VLAN_SET_ENCAP_PROTO ("**setencapproto**") |
- | [b]аргумент: | + | **аргумент**: число (hint16)\\ |
- | [b]действие: | + | **действие**: устанавливает число (hint16), см __NGM_VLAN_GET_ENCAP_PROTO__\\ |
- | Можно указать: | + | Можно указать: |
- | [hr] | ||
- | NGM_VLAN_SET_DECAP = 1 и NGM_VLAN_SET_ENCAP = 2 (или 3) - это режим в котором все входящие декапсулируются (информация сохраняется в специальном заголовке пакета, | ||
- | [hr] | + | NGM_VLAN_SET_DECAP |
- | [size=12pt][b]Тюнинг системы[/ | + | |
- | В [i]loader.conf[/ | + | |
- | [i]kern.ipc.max_linkhdr[/ | + | |
- | 20 - 1 VLAN tag (.Q) | + | |
- | 24 - 2 VLAN tags (QinQ) | + | |
- | 28 - 3 VLAN tags (QinQinQ) | + | |
- | 32 - 4 VLAN tags (...) | + | |
- | [hr] | + | ===== Тюнинг системы ===== |
- | [size=12pt][b]Примеры[/b][/size] | + | В **/boot/loader.conf**\\ |
+ | **kern.ipc.max_linkhdr** - рекомендую увеличить, | ||
+ | * **20** - 1 VLAN tag (.Q) | ||
+ | * **24** - 2 VLAN tags (QinQ) | ||
+ | * **28** - 3 VLAN tags (QinQinQ) | ||
+ | * **32** - 4 VLAN tags (...) | ||
+ | |||
+ | ===== Примеры ===== | ||
kldunload ng_vlan | kldunload ng_vlan | ||
kldload ng_ether | kldload ng_ether | ||
- | ngctl msg re0: setpromisc 1 | + | Включить " |
- | ngctl msg re0: setautosrc 0 | + | < |
+ | ngctl msg re0: setautosrc 0</ | ||
- | ngctl mkpeer re0: vlan lower downstream | + | Подключаем ng_vlan к re0 адаптеру, |
- | ngctl connect re0: re0:lower upper nomatch | + | < |
+ | ngctl connect re0: re0:lower upper nomatch</ | ||
- | ngctl mkpeer re0:lower eiface vlan1001 ether | + | Создаём интерфейсы для вланов и подключаем их к ng_vlan на re0: |
- | ngctl mkpeer re0:lower eiface vlan1002 ether | + | < |
+ | ngctl mkpeer re0:lower eiface vlan1002 ether</ | ||
- | ngctl name re0: | + | Задаём имя интерфейса, |
+ | < | ||
ifconfig ngeth0 link 00: | ifconfig ngeth0 link 00: | ||
- | ifconfig ngeth0 inet 192.168.0.36 netmask 255.255.255.0 | + | ifconfig ngeth0 inet 192.168.0.36 netmask 255.255.255.0</ |
- | ngctl name re0: | + | Задаём имя интерфейса, |
+ | < | ||
ifconfig ngeth1 link 00: | ifconfig ngeth1 link 00: | ||
- | ifconfig ngeth1 inet 192.168.254.36 netmask 255.255.255.0 | + | ifconfig ngeth1 inet 192.168.254.36 netmask 255.255.255.0</ |
- | ngctl msg re0:lower addfilter '{ vid=1001 hook=" | + | Добавляем фильтр в ng_vlan для влана 1001: |
- | ngctl msg re0:lower addfilter '{ vid=1002 pcp=6 cfi=1 hook=" | + | < |
+ | Добавляем фильтр в ng_vlan для влана 1002, так же задаем доп параметры: | ||
+ | < | ||
- | + | Проверяем что фильтры добавились, | |
- | # ngctl msg re0:lower gettable | + | < |
Rec'd response " | Rec'd response " | ||
- | Args: { n=2 filter=[ { hook=" | + | Args: { n=2 filter=[ { hook=" |
- | # ngctl msg re0:lower getencap | + | Проверяем режим инкапсуляции пакетов: |
+ | < | ||
Rec'd response " | Rec'd response " | ||
- | Args: 1 | + | Args: 1</ |
- | # ngctl msg re0:lower getencapproto | + | Проверяем номер протокола для инкапсуляции/ |
+ | < | ||
Rec'd response " | Rec'd response " | ||
- | Args: 0x8100 | + | Args: 0x8100</ |
- | # ngctl msg re0:lower delvidflt 1001 | + | Удаляем фильтр для влан 1001 (интерфейс __ngeth0__ при этом не удаляется из системы!): |
+ | < | ||
- | # ngctl msg re0:lower gettable | + | Проверяем что удалилось: |
+ | < | ||
Rec'd response " | Rec'd response " | ||
- | Args: { n=1 filter=[ { hook=" | + | Args: { n=1 filter=[ { hook=" |
- | # ngctl msg re0:lower delfilter '" | + | Удаляем фильтр для влан 1002 (интерфейс __ngeth1__ при этом не удаляется из системы!): |
+ | < | ||
- | # ngctl msg re0:lower gettable | + | Убеждаемся что все фильтры удалены: |
+ | < | ||
Rec'd response " | Rec'd response " | ||
- | Args: {} | + | Args: {}</ |
+ | |||
+ | |||
+ | {{tag> |