This is an old revision of the document!
Патч добавляет функционал в нетграф ноду ng_vlan, в том числе становится возможным делать QinQ.
http://www.netlab.linkpc.net/download/software/FreeBSD/patches/ng_vlan.patch
http://www.freebsd.org/cgi/query-pr.cgi?pr=161908
NGM_VLAN_DEL_VID_FLT (“delvidflt”)
аргумент: число (uint16)
действие: удаляет VLAN фильтр на vid. Те удаляет фльтр на хуке по номеру VLAN (vid), а не по имени хука, как NGM_VLAN_DEL_FILTER
NGM_VLAN_GET_DECAP (“getdecap”)
аргумент: нет
действие: возвращает:
NGM_VLAN_SET_DECAP (“setdecap”)
аргумент: число (hint32)
действие: устанавливает режим декапсуляции ноды, см NGM_VLAN_GET_DECAP
NGM_VLAN_GET_ENCAP (“getencap”)
аргумент: нет
действие: возвращает:
предупреждения:
Возможна комбинация: 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.
В 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
ngctl msg re0: setpromisc 1 ngctl msg re0: setautosrc 0
ngctl mkpeer re0: vlan lower downstream ngctl connect re0: re0:lower upper nomatch
ngctl mkpeer re0:lower eiface vlan1001 ether ngctl mkpeer re0:lower eiface vlan1002 ether
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
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
ngctl msg re0:lower addfilter '{ vid=1001 hook=“vlan1001” }' ngctl msg re0:lower addfilter '{ vid=1002 pcp=6 cfi=1 hook=“vlan1002” }'
# 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 } ] }
# ngctl msg re0:lower getencap Rec'd response “getencap” (5) from “[156]:”: Args: 1
# ngctl msg re0:lower getencapproto Rec'd response “getencapproto” (7) from “[156]:”: Args: 0x8100
# ngctl msg re0:lower delvidflt 1001
# ngctl msg re0:lower gettable Rec'd response “gettable” (4) from “[156]:”: Args: { n=1 filter=[ { hook=“vlan1002” vid=1002 pcp=6 cfi=1 } ] }
# ngctl msg re0:lower delfilter '“vlan1002”'
# ngctl msg re0:lower gettable Rec'd response “gettable” (4) from “[156]:”: Args: {}