Site Tools


software:freebsd:ng_vlan

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revisionBoth sides next revision
software:freebsd:ng_vlan [2022/02/02 00:51]
root
software:freebsd:ng_vlan [2022/02/04 18:37]
– removed - external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== FreeBSD QinQ: ng_vlan patch ====== 
-Патч добавляет функционал в нетграф ноду ng_vlan, в том числе становится возможным делать QinQ. 
-[[http://www.netlab.linkpc.net/download/software/FreeBSD/patches/ng_vlan.patch|http://www.netlab.linkpc.net/download/software/FreeBSD/patches/ng_vlan.patch]]\\ 
-[[http://www.freebsd.org/cgi/query-pr.cgi?pr=161908|http://www.freebsd.org/cgi/query-pr.cgi?pr=161908]]\\ 
-**Включено в кодовую базу FreeBSD**, патч применять больше не требуетсяю\\ 
- 
- 
-===== Изменения ===== 
-  * **vlan** заменён на **vid** в управляющих сообщениях: используйте **vid**, **vlan** - помечен для удаления в будущем; 
-  * в коде: динамическая таблица заменена на статическую таблицу это позволило упростить код и это даст выигрыш в скорости на большом (>128) количестве VLAN-в обрабатываемом нодой, минус в чуть большем потреблении памяти и возможно замедление на малом (2-100 разбросанных по номерам); 
-  * в коде: улучшен алгоритм инкапсуляции/декапсуляции (tag/untag) 
- 
- 
-===== Новое ===== 
-  * настройка **ethernet_type** для VLAN инкапсуляции, по умолчанию: 0x8100 (33024) 
-  * настройка **PCP** (Priority Code Point) для инкапсуляции каждого VID 
-  * настройка **CFI** (Canonical Format Indicator) для инкапсуляции каждого VID 
-  * возможность удалить VLAN фильтр/хук по VID (те по номеру, а не по имени хука) 
-  * возможность инкапсулировать пакеты с тэгом (в mbuf) пришедшие с nomatch хука при отправке в downstream хук 
-  * возможность на инкапсулировать пакеты пришедшие с фильтра в выставлять тэг (в mbuf) при отправке в downstream хук 
-  * возможность декапсулировать пакеты выходящие из nomatch хука, с сохранением тэга в mbuf 
- 
- 
-===== Сообщения ===== 
-NGM_VLAN_DEL_VID_FLT ("**delvidflt**")\\ 
-**аргумент**: число (uint16)\\ 
-**действие**: удаляет VLAN фильтр на **vid**. Те удаляет фльтр на хуке по номеру VLAN (**vid**), а не по имени хука, как __NGM_VLAN_DEL_FILTER__\\ 
- 
- 
-NGM_VLAN_GET_DECAP ("**getdecap**")\\ 
-**аргумент**: нет\\ 
-**действие**: возвращает: 
-  * **0** - __по умолчанию__, нода пересылает без изменений пакеты не попавшие в фильтры с **downstream** на **nomatch** хук. 
-  * **1** - если нода делает 802.1Q/P декапсуляцию, и добавляет в mbuf флаг M_VLANTAG, записывает всю информацию (**vid**, **pcp**, **cfi**) в __m_pkthdr.ether_vtag__ перед отправкой пакетов на **nomatch** хук. Это обычная декапсуляция, подобная той, что делают сетевые драйвера. 
- 
- 
-NGM_VLAN_SET_DECAP ("**setdecap**")\\ 
-**аргумент**: число (hint32)\\ 
-**действие**: устанавливает режим декапсуляции ноды, см __NGM_VLAN_GET_DECAP__\\ 
- 
- 
-NGM_VLAN_GET_ENCAP ("**getencap**")\\ 
-**аргумент**: нет\\ 
-**действие**: возвращает: 
-  * **0** - если нода не делает 802.1Q/P инкапсуляцию, а добавляет в mbuf флаг M_VLANTAG и записывает всю информацию (**vid**, **pcp**, **cfi**) в __m_pkthdr.ether_vtag__; 
-**предупреждения**: 
-  - если **down** хук подключён к ng_ether, чей интерфейс if_capenable & IFCAP_VLAN_HWTAGGING то инкапсуляцию произведёт сетевой адаптер, с ethernet_type = 0x8100, значение установленное через __NGM_VLAN_SET_ENCAP_PROTO__ - будет проигнорировано! 
-  - если адаптер не поддерживает инкапсуляцию или она отключены то пакеты уйдут в сеть не тегированными. 
-  * **1** (VLAN_ENCAP_FROM_FILTER) - __по умолчанию__, нода производит 802.1Q/P инкапсуляцию пакетов полученный через хук фильтра 
-  * **2** (VLAN_ENCAP_FROM_NOMATCH) - нода производит 802.1Q/P инкапсуляцию пакетов полученный через хук **nomatch** если в заголовке пакеты установлен флаг M_VLANTAG. 
-Возможна комбинация: 1+2 = 3. 
- 
- 
-NGM_VLAN_SET_ENCAP ("**setencap**")\\ 
-**аргумент**: число (hint32)\\ 
-**действие**: устанавливает режим инкапсуляции ноды, см __NGM_VLAN_GET_ENCAP__\\ 
- 
- 
-NGM_VLAN_GET_ENCAP_PROTO ("**getencapproto**")\\ 
-**аргумент**: нет\\ 
-**действие**: возвращает число (hint16) - тэг в который будет использоваться для инкапсуляции/деинкапсуляции (tag/untag) пакетов. По умолчанию: 0x8100 (33024)\\ 
- 
-NGM_VLAN_SET_ENCAP_PROTO ("**setencapproto**") 
-**аргумент**: число (hint16)\\ 
-**действие**: устанавливает число (hint16), см __NGM_VLAN_GET_ENCAP_PROTO__\\ 
-Можно указать: 0x8100 или 33024, что равноценно.\\ 
- 
- 
-NGM_VLAN_SET_DECAP = 1 и NGM_VLAN_SET_ENCAP = 2 (или 3) - это режим в котором все входящие декапсулируются (информация сохраняется в специальном заголовке пакета, доступном ОС) а исходящие инкапсулируются, также ведут себя драйвера сетевых адаптеров с включённой опцией: VLAN_HWTAGGING.\\ 
- 
- 
-===== Тюнинг системы ===== 
-В **/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 
-kldload ng_ether 
- 
-Включить "неразборчивый" режим = отключить mac фильтры на сетевом адаптере и отключить автоматическое установку mac адреса на исходящих пакетах: 
-<code>ngctl msg re0: setpromisc 1 
-ngctl msg re0: setautosrc 0</code> 
- 
-Подключаем ng_vlan к re0 адаптеру, таким образом чтобы все пакеты не попавшие в vlan фильтры ушли в ядро: 
-<code>ngctl mkpeer re0: vlan lower downstream 
-ngctl connect re0: re0:lower upper nomatch</code> 
- 
-Создаём интерфейсы для вланов и подключаем их к ng_vlan на re0: 
-<code>ngctl mkpeer re0:lower eiface vlan1001 ether 
-ngctl mkpeer re0:lower eiface vlan1002 ether</code> 
- 
-Задаём имя интерфейса, mac и ip адрес для созданного влан 1001 интерфейса: 
-<code>ngctl name re0:lower:vlan1001 ngeth0 
-ifconfig ngeth0 link 00:1a:4d:55:9a:43 
-ifconfig ngeth0 inet 192.168.0.36 netmask 255.255.255.0</code> 
- 
-Задаём имя интерфейса, mac и ip адрес для созданного влан 1002 интерфейса: 
-<code>ngctl name re0:lower:vlan1002 ngeth1 
-ifconfig ngeth1 link 00:1a:4d:55:9a:44 
-ifconfig ngeth1 inet 192.168.254.36 netmask 255.255.255.0</code> 
- 
-Добавляем фильтр в ng_vlan для влана 1001: 
-<code>ngctl msg re0:lower addfilter '{ vid=1001 hook="vlan1001" }'</code> 
- 
-Добавляем фильтр в ng_vlan для влана 1002, так же задаем доп параметры: 
-<code>ngctl msg re0:lower addfilter '{ vid=1002 pcp=6 cfi=1 hook="vlan1002" }'</code> 
- 
-Проверяем что фильтры добавились, смотрим какие фильтры есть: 
-<code># ngctl msg re0:lower gettable 
-Rec'd response "gettable" (4) from "[156]:": 
-Args: { n=2 filter=[ { hook="vlan1001" vid=1001 } { hook="vlan1002" vid=1002 pcp=6 cfi=1 } ] }</code> 
- 
-Проверяем режим инкапсуляции пакетов: 
-<code># ngctl msg re0:lower getencap 
-Rec'd response "getencap" (5) from "[156]:": 
-Args: 1</code> 
- 
-Проверяем номер протокола для инкапсуляции/декапсуляции: 
-<code># ngctl msg re0:lower getencapproto 
-Rec'd response "getencapproto" (7) from "[156]:": 
-Args: 0x8100</code> 
- 
-Удаляем фильтр для влан 1001 (интерфейс __ngeth0__ при этом не удаляется из системы!): 
-<code># ngctl msg re0:lower delvidflt 1001</code> 
- 
-Проверяем что удалилось: 
-<code># ngctl msg re0:lower gettable 
-Rec'd response "gettable" (4) from "[156]:": 
-Args: { n=1 filter=[ { hook="vlan1002" vid=1002 pcp=6 cfi=1 } ] } </code> 
- 
-Удаляем фильтр для влан 1002 (интерфейс __ngeth1__ при этом не удаляется из системы!): 
-<code># ngctl msg re0:lower delfilter '"vlan1002"'</code> 
- 
-Убеждаемся что все фильтры удалены: 
-<code># ngctl msg re0:lower gettable 
-Rec'd response "gettable" (4) from "[156]:": 
-Args: {}</code> 
  
software/freebsd/ng_vlan.txt · Last modified: 2022/03/02 23:11 by root