Взгляд из гнезда (birdofluck) wrote,
Взгляд из гнезда
birdofluck

Category:

QinQ в FreeBSD

На irc поднялся вопрос, как у нас нынче с поддержкой qinq в любимой системе. Выяснилось, что путь в лоб - создание влана через ifconfig vlan create с указанием vlandev другого влана - не подходит. С другой стороны, выход есть в ng_vlan(4), которых можно цеплять сколь угодно много и теоретически сделать qinqinqinqinqinq.. :). Однако, есть нюанс. В 802.1ad пункте 9.5 написано следующее:

A distinct Ethertype has been allocated (Table 9-1) for use in the TPID field (9.4) of each tag type so they can be distinguished from each other, and from other protocols.

Далее следует табличка, где рассказывается, что TPID/Ethertype 0x8100 - это customer vlan tag, а тег для правильных пацанов^W^Wservice VLAN tag - 0x88A8.

То, что в списке IANA ethertype 0x88a8 пустует, поначалу удивило. После чтения комментариев и rfc 5342 стало ясно, что актуальный список и функции по регистрации новых ethertype перекочевали к IEEE.

С TPID получилось как обычно - все заимплементили стандарт по-разному и получилось примерно следующее:
Cisco: By default Cisco 7600 series router supports Ethertype 0x8100 for .1Q and Q-in-Q outer tag., при этом есть dot1q tunnelling ethertype <0x88a8>
Juniper: в разных софтах по-разному, 0x8100 и 0x9100, опять же с крутилкой svlan ethertype
Huaway: 0x8100
Extreme Networks: 0x88a8

В FreeBSD жестко забито ethertype = ETHERTYPE_VLAN (0x8100) в соотв. местах (ng_vlan, ether_input, if_vlan). Во многих сетевых драйверах типа em(4) такой же ethertype жестко вбивается как минимум при отправке пакета. Поэтому написание какого-нибудь netgraph message для крутилки будет мало, надо еще и как-то передавать информацию о том, что пакет qinq (например, через mbuf_tags(9)) и рисовать какие-то ioctl для драйверов, чтобы те сохраняли TPID для интерфейса.

Тем не менее, в дефолтном виде (0x8100 везде) с ng_vlan оно заработает, а подкрутить TPID можно и на железке, куда оно воткнуто
Tags: freebsd, iana, ieee, qinq
Subscribe

  • Загрузка старого ядра с zfs-only

    Просто, чтобы не забыть: правильный и документированный способ: boot [-s -v] kernel.old Долгий и недокументированный: unload load…

  • Kernel debugging на живой системе

    Иногда очень хочется поглядеть в ядро на лету. Оказывается, для этого уже почти все есть: Собственно, депенд один: обьектные файлы ядра в /usr/obj:…

  • Профилирование ядра FreeBSD

    Сделать это можно достаточно быстро и просто - примерно с 2009 года в GENERIC-ядро включены HWPMC_HOOKS. Таким образом для поддержки со стороны ядра…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments