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 revision
Previous revision
software:freebsd:ng_vlan [2015/05/16 11:53]
– [Новое] 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 ====== +====== FreeBSD QinQ: ng_vlan patch ====== 
-Патч добавляет функционал в нетграф ноду ng_vlan, в том числе становится возможным делать QinQ.+Патч добавляет функционал в нетграф ноду 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.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]]\\ [[http://www.freebsd.org/cgi/query-pr.cgi?pr=161908|http://www.freebsd.org/cgi/query-pr.cgi?pr=161908]]\\
 +<note important>Включено в кодовую базу FreeBSD, патч применять больше не требуется.</note>\\
  
  
Line 22: Line 23:
  
 ===== Сообщения ===== ===== Сообщения =====
-NGM_VLAN_DEL_VID_FLT ("**delvidflt**"+NGM_VLAN_DEL_VID_FLT ("**delvidflt**")\\ 
-[b]аргумент:[/b] число (uint16) +**аргумент**: число (uint16)\\ 
-[b]действие:[/b] удаляет VLAN фильтр на [i]vid[/i]. Те удаляет фльтр на хуке по номеру VLAN ([i]vid[/i]), а не по имени хука, как [i]NGM_VLAN_DEL_FILTER[/i]+**действие**: удаляет VLAN фильтр на **vid**. Те удаляет фльтр на хуке по номеру VLAN (**vid**), а не по имени хука, как __NGM_VLAN_DEL_FILTER__\\
  
  
-NGM_VLAN_GET_DECAP ("**getdecap**"+NGM_VLAN_GET_DECAP ("**getdecap**")\\ 
-[b]аргумент:[/b] нет +**аргумент**: нет\\ 
-[b]действие:[/b] возвращает: +**действие**: возвращает: 
-[i]0[/i]: [u]по умолчанию[/u], нода пересылает без изменений пакеты не попавшие в фильтры с downstream на nomatch хук. +  * **0** __по умолчанию__, нода пересылает без изменений пакеты не попавшие в фильтры с **downstream** на **nomatch** хук. 
-[i]1[/i]: - если нода делает 802.1Q/P декапсуляцию, и добавляет в mbuf флаг M_VLANTAG, записывает всю информацию ([i]vid[/i][i]pcp[/i][i]cfi[/i]) в m_pkthdr.ether_vtag перед отправкой пакетов на nomatch хук. Это обычная декапсуляция, подобная той, что делают сетевые драйвера.+  * **1** - если нода делает 802.1Q/P декапсуляцию, и добавляет в mbuf флаг M_VLANTAG, записывает всю информацию (**vid****pcp****cfi**) в __m_pkthdr.ether_vtag__ перед отправкой пакетов на **nomatch** хук. Это обычная декапсуляция, подобная той, что делают сетевые драйвера.
  
  
-NGM_VLAN_SET_DECAP ("**setdecap**"+NGM_VLAN_SET_DECAP ("**setdecap**")\\ 
-[b]аргумент:[/b] число (hint32) +**аргумент**: число (hint32)\\ 
-[b]действие:[/b] устанавливает режим декапсуляции ноды, см [i]NGM_VLAN_GET_DECAP[/i]+**действие**: устанавливает режим декапсуляции ноды, см __NGM_VLAN_GET_DECAP__\\
  
  
-NGM_VLAN_GET_ENCAP ("**getencap**"+NGM_VLAN_GET_ENCAP ("**getencap**")\\ 
-[b]аргумент:[/b] нет +**аргумент**: нет\\ 
-[b]действие:[/b] возвращает: +**действие**: возвращает: 
-[i]0[/i]: - если нода не делает 802.1Q/P инкапсуляцию, а добавляет в mbuf флаг M_VLANTAG и записывает всю информацию ([i]vid[/i][i]pcp[/i][i]cfi[/i]) в m_pkthdr.ether_vtag+  * **0** - если нода не делает 802.1Q/P инкапсуляцию, а добавляет в mbuf флаг M_VLANTAG и записывает всю информацию (**vid****pcp****cfi**) в __m_pkthdr.ether_vtag__
-[b][u]предупреждения:[/u][/b] +**предупреждения**
- -- если down хук подключён к ng_ether, чей интерфейс if_capenable & IFCAP_VLAN_HWTAGGING то инкапсуляцию произведёт сетевой адаптер, с ethernet_type = [i]0x8100[/i], значение установленное через NGM_VLAN_SET_ENCAP_PROTO - будет проигнорировано! +  - если **down** хук подключён к ng_ether, чей интерфейс if_capenable & IFCAP_VLAN_HWTAGGING то инкапсуляцию произведёт сетевой адаптер, с ethernet_type = 0x8100, значение установленное через __NGM_VLAN_SET_ENCAP_PROTO__ - будет проигнорировано! 
- -- если адаптер не поддерживает инкапсуляцию или она отключены то пакеты уйдут в сеть не тегированными. +  - если адаптер не поддерживает инкапсуляцию или она отключены то пакеты уйдут в сеть не тегированными. 
-[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 инкапсуляцию пакетов полученный через хук [b]nomatch[/b] если в заголовке пакеты установлен флаг M_VLANTAG.+  * **2** (VLAN_ENCAP_FROM_NOMATCH) - нода производит 802.1Q/P инкапсуляцию пакетов полученный через хук **nomatch** если в заголовке пакеты установлен флаг M_VLANTAG.
 Возможна комбинация: 1+2 = 3. Возможна комбинация: 1+2 = 3.
  
  
-NGM_VLAN_SET_ENCAP ([b]"setencap"[/b]+NGM_VLAN_SET_ENCAP ("**setencap**")\\ 
-[b]аргумент:[/b] число (hint32) +**аргумент**: число (hint32)\\ 
-[b]действие:[/b] устанавливает режим инкапсуляции ноды, см [i]NGM_VLAN_GET_ENCAP[/i]+**действие**: устанавливает режим инкапсуляции ноды, см __NGM_VLAN_GET_ENCAP__\\
  
  
-NGM_VLAN_GET_ENCAP_PROTO ([b]"getencapproto"[/b]+NGM_VLAN_GET_ENCAP_PROTO ("**getencapproto**")\\ 
-[b]аргумент:[/b] нет +**аргумент**: нет\\ 
-[b]действие:[/b] возвращает число (hint16) - тэг в который будет использоваться для инкапсуляции/деинкапсуляции (tag/untag) пакетов. По умолчанию: [i]0x8100 (33024)[/i]+**действие**: возвращает число (hint16) - тэг в который будет использоваться для инкапсуляции/деинкапсуляции (tag/untag) пакетов. По умолчанию: 0x8100 (33024)\\
  
-NGM_VLAN_SET_ENCAP_PROTO ([b]"setencapproto"[/b]+NGM_VLAN_SET_ENCAP_PROTO ("**setencapproto**") 
-[b]аргумент:[/b] число (hint16) +**аргумент**: число (hint16)\\ 
-[b]действие:[/b] устанавливает число (hint16), см [i]NGM_VLAN_GET_ENCAP_PROTO[/i] +**действие**: устанавливает число (hint16), см __NGM_VLAN_GET_ENCAP_PROTO__\\ 
-Можно указать: 0x8100 или 33024, что равноценно.+Можно указать: 0x8100 или 33024, что равноценно.\\
  
-[hr] + 
-NGM_VLAN_SET_DECAP = 1 и NGM_VLAN_SET_ENCAP = 2 (или 3) - это режим в котором все входящие декапсулируются (информация сохраняется в специальном заголовке пакета, доступном ОС) а исходящие инкапсулируются, также ведут себя драйвера сетевых адаптеров с включённой опцией: VLAN_HWTAGGING.+NGM_VLAN_SET_DECAP = 1 и NGM_VLAN_SET_ENCAP = 2 (или 3) - это режим в котором все входящие декапсулируются (информация сохраняется в специальном заголовке пакета, доступном ОС) а исходящие инкапсулируются, также ведут себя драйвера сетевых адаптеров с включённой опцией: VLAN_HWTAGGING.\\
  
  
 ===== Тюнинг системы ===== ===== Тюнинг системы =====
-В [i]loader.conf[/i] +В **/boot/loader.conf**\\ 
-[i]kern.ipc.max_linkhdr[/i] - рекомендую увеличить, это критично для тех, кто генерирует трафик, маршрутизации это мало касается: +**kern.ipc.max_linkhdr** - рекомендую увеличить, это критично для тех, кто генерирует трафик, маршрутизации это мало касается: 
-20 - 1 VLAN tag (.Q) +  * **20** - 1 VLAN tag (.Q) 
-24 - 2 VLAN tags (QinQ) +  * **24** - 2 VLAN tags (QinQ) 
-28 - 3 VLAN tags (QinQinQ) +  * **28** - 3 VLAN tags (QinQinQ) 
-32 - 4 VLAN tags (...)+  * **32** - 4 VLAN tags (...)
  
  
Line 82: Line 83:
 kldload ng_ether kldload ng_ether
  
-ngctl msg re0: setpromisc 1 +Включить "неразборчивый" режим = отключить mac фильтры на сетевом адаптере и отключить автоматическое установку mac адреса на исходящих пакетах: 
-ngctl msg re0: setautosrc 0+<code>ngctl msg re0: setpromisc 1 
 +ngctl msg re0: setautosrc 0</code>
  
-ngctl mkpeer re0: vlan lower downstream +Подключаем ng_vlan к re0 адаптеру, таким образом чтобы все пакеты не попавшие в vlan фильтры ушли в ядро: 
-ngctl connect re0: re0:lower upper nomatch+<code>ngctl mkpeer re0: vlan lower downstream 
 +ngctl connect re0: re0:lower upper nomatch</code>
  
-ngctl mkpeer re0:lower eiface vlan1001 ether +Создаём интерфейсы для вланов и подключаем их к ng_vlan на re0: 
-ngctl mkpeer re0:lower eiface vlan1002 ether+<code>ngctl mkpeer re0:lower eiface vlan1001 ether 
 +ngctl mkpeer re0:lower eiface vlan1002 ether</code>
  
-ngctl name re0:lower:vlan1001 ngeth0+Задаём имя интерфейса, mac и ip адрес для созданного влан 1001 интерфейса: 
 +<code>ngctl name re0:lower:vlan1001 ngeth0
 ifconfig ngeth0 link 00:1a:4d:55:9a:43 ifconfig ngeth0 link 00:1a:4d:55:9a:43
-ifconfig ngeth0 inet 192.168.0.36 netmask 255.255.255.0+ifconfig ngeth0 inet 192.168.0.36 netmask 255.255.255.0</code>
  
-ngctl name re0:lower:vlan1002 ngeth1+Задаём имя интерфейса, mac и ip адрес для созданного влан 1002 интерфейса: 
 +<code>ngctl name re0:lower:vlan1002 ngeth1
 ifconfig ngeth1 link 00:1a:4d:55:9a:44 ifconfig ngeth1 link 00:1a:4d:55:9a:44
-ifconfig ngeth1 inet 192.168.254.36 netmask 255.255.255.0+ifconfig ngeth1 inet 192.168.254.36 netmask 255.255.255.0</code>
  
-ngctl msg re0:lower addfilter '{ vid=1001 hook="vlan1001" }' +Добавляем фильтр в ng_vlan для влана 1001: 
-ngctl msg re0:lower addfilter '{ vid=1002 pcp=6 cfi=1 hook="vlan1002" }'+<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>
  
- +Проверяем что фильтры добавились, смотрим какие фильтры есть: 
-# ngctl msg re0:lower gettable+<code># ngctl msg re0:lower gettable
 Rec'd response "gettable" (4) from "[156]:": Rec'd response "gettable" (4) from "[156]:":
-Args: { n=2 filter=[ { hook="vlan1001" vid=1001 } { hook="vlan1002" vid=1002 pcp=6 cfi=1 } ] }+Args: { n=2 filter=[ { hook="vlan1001" vid=1001 } { hook="vlan1002" vid=1002 pcp=6 cfi=1 } ] }</code>
  
-# ngctl msg re0:lower getencap+Проверяем режим инкапсуляции пакетов: 
 +<code># ngctl msg re0:lower getencap
 Rec'd response "getencap" (5) from "[156]:": Rec'd response "getencap" (5) from "[156]:":
-Args: 1+Args: 1</code>
  
-# ngctl msg re0:lower getencapproto+Проверяем номер протокола для инкапсуляции/декапсуляции: 
 +<code># ngctl msg re0:lower getencapproto
 Rec'd response "getencapproto" (7) from "[156]:": Rec'd response "getencapproto" (7) from "[156]:":
-Args: 0x8100+Args: 0x8100</code>
  
-# ngctl msg re0:lower delvidflt 1001+Удаляем фильтр для влан 1001 (интерфейс __ngeth0__ при этом не удаляется из системы!): 
 +<code># ngctl msg re0:lower delvidflt 1001</code>
  
-# ngctl msg re0:lower gettable+Проверяем что удалилось: 
 +<code># ngctl msg re0:lower gettable
 Rec'd response "gettable" (4) from "[156]:": Rec'd response "gettable" (4) from "[156]:":
-Args: { n=1 filter=[ { hook="vlan1002" vid=1002 pcp=6 cfi=1 } ] }+Args: { n=1 filter=[ { hook="vlan1002" vid=1002 pcp=6 cfi=1 } ] } </code>
  
-# ngctl msg re0:lower delfilter '"vlan1002"'+Удаляем фильтр для влан 1002 (интерфейс __ngeth1__ при этом не удаляется из системы!): 
 +<code># ngctl msg re0:lower delfilter '"vlan1002"'</code>
  
-# ngctl msg re0:lower gettable+Убеждаемся что все фильтры удалены: 
 +<code># ngctl msg re0:lower gettable
 Rec'd response "gettable" (4) from "[156]:": Rec'd response "gettable" (4) from "[156]:":
-Args: {}+Args: {}</code> 
 + 
 + 
 +{{tag>software freebsd net netgraph vlan deprecated mysoft}}
software/freebsd/ng_vlan.1431777227.txt.gz · Last modified: 2015/05/16 11:53 by root