This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
software:freebsd:ng_vlan [2015/05/16 14:18] – [Примеры] root | software:freebsd:ng_vlan [2022/02/04 18:37] – removed - external edit (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== QinQ: ng_vlan patch ====== | ||
- | Патч добавляет функционал в нетграф ноду ng_vlan, в том числе становится возможным делать QinQ. | ||
- | [[http:// | ||
- | [[http:// | ||
- | |||
- | |||
- | ===== Изменения ===== | ||
- | * **vlan** заменён на **vid** в управляющих сообщениях: | ||
- | * в коде: динамическая таблица заменена на статическую таблицу это позволило упростить код и это даст выигрыш в скорости на большом (>128) количестве VLAN-в обрабатываемом нодой, минус в чуть большем потреблении памяти и возможно замедление на малом (2-100 разбросанных по номерам); | ||
- | * в коде: улучшен алгоритм инкапсуляции/ | ||
- | |||
- | |||
- | ===== Новое ===== | ||
- | * настройка **ethernet_type** для VLAN инкапсуляции, | ||
- | * настройка **PCP** (Priority Code Point) для инкапсуляции каждого VID | ||
- | * настройка **CFI** (Canonical Format Indicator) для инкапсуляции каждого VID | ||
- | * возможность удалить VLAN фильтр/ | ||
- | * возможность инкапсулировать пакеты с тэгом (в mbuf) пришедшие с nomatch хука при отправке в downstream хук | ||
- | * возможность на инкапсулировать пакеты пришедшие с фильтра в выставлять тэг (в mbuf) при отправке в downstream хук | ||
- | * возможность декапсулировать пакеты выходящие из nomatch хука, с сохранением тэга в mbuf | ||
- | |||
- | |||
- | ===== Сообщения ===== | ||
- | NGM_VLAN_DEL_VID_FLT (" | ||
- | **аргумент**: | ||
- | **действие**: | ||
- | |||
- | |||
- | NGM_VLAN_GET_DECAP (" | ||
- | **аргумент**: | ||
- | **действие**: | ||
- | * **0** - __по умолчанию__, | ||
- | * **1** - если нода делает 802.1Q/P декапсуляцию, | ||
- | |||
- | |||
- | NGM_VLAN_SET_DECAP (" | ||
- | **аргумент**: | ||
- | **действие**: | ||
- | |||
- | |||
- | NGM_VLAN_GET_ENCAP (" | ||
- | **аргумент**: | ||
- | **действие**: | ||
- | * **0** - если нода не делает 802.1Q/P инкапсуляцию, | ||
- | **предупреждения**: | ||
- | - если **down** хук подключён к ng_ether, чей интерфейс if_capenable & IFCAP_VLAN_HWTAGGING то инкапсуляцию произведёт сетевой адаптер, | ||
- | - если адаптер не поддерживает инкапсуляцию или она отключены то пакеты уйдут в сеть не тегированными. | ||
- | * **1** (VLAN_ENCAP_FROM_FILTER) - __по умолчанию__, | ||
- | * **2** (VLAN_ENCAP_FROM_NOMATCH) - нода производит 802.1Q/P инкапсуляцию пакетов полученный через хук **nomatch** если в заголовке пакеты установлен флаг M_VLANTAG. | ||
- | Возможна комбинация: | ||
- | |||
- | |||
- | NGM_VLAN_SET_ENCAP (" | ||
- | **аргумент**: | ||
- | **действие**: | ||
- | |||
- | |||
- | NGM_VLAN_GET_ENCAP_PROTO (" | ||
- | **аргумент**: | ||
- | **действие**: | ||
- | |||
- | NGM_VLAN_SET_ENCAP_PROTO (" | ||
- | **аргумент**: | ||
- | **действие**: | ||
- | Можно указать: | ||
- | |||
- | |||
- | NGM_VLAN_SET_DECAP = 1 и NGM_VLAN_SET_ENCAP = 2 (или 3) - это режим в котором все входящие декапсулируются (информация сохраняется в специальном заголовке пакета, | ||
- | |||
- | |||
- | ===== Тюнинг системы ===== | ||
- | В **/ | ||
- | **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: setautosrc 0</ | ||
- | |||
- | Подключаем ng_vlan к re0 адаптеру, | ||
- | < | ||
- | ngctl connect re0: re0:lower upper nomatch</ | ||
- | |||
- | Создаём интерфейсы для вланов и подключаем их к ng_vlan на re0: | ||
- | < | ||
- | ngctl mkpeer re0:lower eiface vlan1002 ether</ | ||
- | |||
- | Задаём имя интерфейса, | ||
- | < | ||
- | ifconfig ngeth0 link 00: | ||
- | ifconfig ngeth0 inet 192.168.0.36 netmask 255.255.255.0</ | ||
- | |||
- | Задаём имя интерфейса, | ||
- | < | ||
- | ifconfig ngeth1 link 00: | ||
- | ifconfig ngeth1 inet 192.168.254.36 netmask 255.255.255.0</ | ||
- | |||
- | Добавляем фильтр в ng_vlan для влана 1001: | ||
- | < | ||
- | |||
- | Добавляем фильтр в ng_vlan для влана 1002, так же задаем доп параметры: | ||
- | < | ||
- | |||
- | Проверяем что фильтры добавились, | ||
- | < | ||
- | Rec'd response " | ||
- | Args: { n=2 filter=[ { hook=" | ||
- | |||
- | Проверяем режим инкапсуляции пакетов: | ||
- | < | ||
- | Rec'd response " | ||
- | Args: 1</ | ||
- | |||
- | Проверяем номер протокола для инкапсуляции/ | ||
- | < | ||
- | Rec'd response " | ||
- | Args: 0x8100</ | ||
- | |||
- | Удаляем фильтр для влан 1001 (интерфейс __ngeth0__ при этом не удаляется из системы!): | ||
- | < | ||
- | |||
- | Проверяем что удалилось: | ||
- | < | ||
- | Rec'd response " | ||
- | Args: { n=1 filter=[ { hook=" | ||
- | |||
- | Удаляем фильтр для влан 1002 (интерфейс __ngeth1__ при этом не удаляется из системы!): | ||
- | < | ||
- | |||
- | Убеждаемся что все фильтры удалены: | ||
- | < | ||
- | Rec'd response " | ||
- | Args: {}</ | ||