Как драйвер VLAN передает информацию VLAN в аппаратный драйвер Ethernet?

Как драйвер VLAN передает информацию VLAN в аппаратный драйвер Ethernet?

Я пытаюсь реализовать VLAN на целевом устройстве программным путем.

Но сначала я хотел настроить vlan вручную, чтобы лучше понять настройку vlan. Поэтому я настроил vlan вручную на своей системе разработки (ubuntu) с помощью комбинации команд vconfig/ifconfig, но использование той же комбинации команд на предполагаемой цели не работает.

Обе системы используют один и тот же драйвер 8021q, поэтому метод информирования драйвера Ethernet нижнего уровня о vlan-информации должен быть одинаковым (я думаю). После изучения источника драйвера vlan становится ясно, что он собирает информацию о vlan и добавляет ее в структуру sk_buff, которая в конечном итоге передается драйверу ethernet, но не очевидно, где должна происходить магия vlan (драйвер ethernet или драйвер 8021q).

Я посмотрел на исходный код драйвера ethernet целевой системы, и он поддерживает метод ioctl для настройки vlan. Но это не похоже на обычный способ, которым Linux настраивает vlan в драйвере ethernet.

С помощью какого механизма драйвер VLAN (8021q.ko) сообщает оборудованию Ethernet о VLAN?

Это специальный вызов API к драйверу Ethernet для настройки VLAN на оборудовании или драйвер VLAN должен добавлять теги VLAN в пакет?

Любая информация о реализации VLAN также будет полезна.

Связанный контент