====== Создание и настройка VLAN сети на демонстрационной плате для 1923КХ028 ====== В этой статье мы разберём пример настройки 1923КХ028 для создания простых VLAN сетей. Согласно вики: **VLAN** (аббр. от англ. Virtual Local Area Network) — топологическая («виртуальная») локальная компьютерная сеть, представляет собой группу хостов с общим набором требований, которые взаимодействуют так, как если бы они были подключены к широковещательному домену, независимо от их физического местонахождения. Подробнее ознакомится с понятием VLAN можно в стандарте IEEE 802.1Q, или, например, в [[ https://habr.com/ru/post/319080/|данной статье]], здесь же мы остановимся только на основных моментах. ===== Краткая информация о VLAN ===== Построение VLAN сетей базируется на протоколе 802.1q. Реализация данного протокола состоит в добавлении в стандартный Ethernet-II кадр специального поля – тега, при этом пакет с тегом называется тегированным, а без – не тегированным. {{ supp:1923kx028:vlan:ethtype.png }} **Формат тега** ^ 16 бит ^ 3 бита ^ 1 бит ^ 12 бит ^ | TPID | PCP | CFI | VID | * **Tag Protocol Identifier** (TPID, идентификатор протокола тегирования). Для 802.1Q используется значение 0x8100. * **Priority code point** (PCP). Используется стандартом IEEE 802.1p для задания приоритета передаваемого трафика (class of service). * **Canonical Format Indicator** (CFI, индикатор канонического формата). Указывает на формат MAC-адреса: 0 — канонический (кадр Ethernet), 1 — не канонический. * **VLAN Identifier** (VID, идентификатор VLAN). Указывает номер VLAN, к которому принадлежит кадр. Диапазон возможных значений от 1 до 4094. Тегированные кадры обычно передаются между коммутаторами, конечные же устройства (ПК) обмениваются уже не тегированными кадрами. Поэтому порт коммутатора часто обозначают 2-мя состояниями: //access// или //trunk//. **access port** — порт, принадлежащий одному VLAN’у и передающий нетегированный трафик. Любой кадр, который приходит на access порт, помечается номером, принадлежащим этому VLAN’у. **trunk port** — порт, передающий тегированный трафик одного или нескольких VLAN’ов. Этот порт, наоборот, не изменяет тег, а лишь пропускает кадры с тегами, которые разрешены на этом порту. ===== Настройка 1923КХ028 для создания VLAN сети ===== Рассмотрим простую компьютерную сеть, состоящую из двух VLAN сетей. {{ supp:1923kx028:vlan:net_10_20.png }} В интересующую нас часть сети входят 4 ПК, коммутатор и демоплата для 1923КХ028 с хостом. Относительно демоплаты для 1923КХ028 конфигурация сети будет иметь вид ^ Подключенное устройство ^ IP-адрес ^ VLAN ID ^ № порта ^ | ПК1 | 192.168.1.10/24| 10 | 1 | | ПК2 | 192.168.1.11/24| 10 | 2 | | ПК3 | 192.168.1.20/24| 20 | 5 | | ПК4 | 192.168.1.21/24| 20 | 6 | | Коммутатор | -| - | 10 | Микросхему 1923КХ028 будем использовать в режиме MODE[3:0] = 0000 – управляемый коммутатор с доступом по PCI-E. В качестве хоста выступает ПК, работающий под управлением Ubuntu 16.04 LTS, ядро Linux 4.10.17. Согласно QuickStart, подготовим 1923КХ028 к работе, а именно: * Открываем терминал в папке с драйвером. * Загружаем собранный драйвер в ядро ОС: $ sudo insmod switch.ko * Включаем сетевой интерфейс 1923КХ028. Название сетевого интерфейса можно посмотреть с помощью команды // $ ifconfig -a //, в моём случае это enp3s0. $ sudo ifconfig enp3s0 up После выполнения последней команды на демоплате должны начать мигать зелёные светодиоды. Настройку 1923КХ028 будем осуществлять с помощью интерфейса proc, для это переходим в директорию ///proc/basis//. Подробное описание функционала интерфейса proc приводится в QuickStart. Для данной конфигурации сети вся настройка микросхемы 1923КХ028 сводится к двум действиям: настройки таблицы VLAN и настройки соответствующих портов. Начнём с таблицы VLAN. Для создания записей в таблице VLAN нам необходимо выполнить действия, описанные ниже. Сначала добавим запись для VLAN 10: * Переходим в директорию //hash_tables/vlan//. * Открываем файл «add». В файле «add» уже описан шаблон для заполнения, требуется только внести нужные данные. * В строке «VLAN ID» записываем номер создаваемого VLAN – 10. * В строку «Forward list» записывается список портов, которые входят в данный VLAN; список указывается в виде битовой маски, в которой позиция бита соответствует номеру порта. Для VLAN 10 в «Forward list» необходимо указать порты 1 и 2, к которым подключены ПК 1 и 2, а также порт 10, к которому подключён коммутатор, так как он должен получать пакеты от всех ПК, чтобы иметь возможность перенаправить их в другой сегмент сети. В итоге мы получаем значение 0x00203, где битам, установленным в «1», соответствуют необходимые нам порты (порты 1923КХ028 нумеруются с единицы). * В строку «Untag list» записывается список портов, для которых с тегированных пакетов требуется убрать VLAN тег; список указывается в виде битовой маски, в которой позиция бита соответствует номеру порта. В данном списке указываются все access порты, т.е. в нашем случае порты 1 и 2. В позиции порта 10 записываем «0», так как для этого порта VLAN тег снимать не нужно (trunk порт). Получившееся значение «Untag list»: 0x00003. Остальные строки файла «add» оставляем без изменения. В итоге у нас получился следующий файл (указаны только строки, в которые были внесены изменения): VLAN ID: 10 Forward list: 0x00203 Untag list: 0x00003 Чтобы добавить нашу запись в таблицу VLAN, просто сохраняем файл «add». Если файл не сохраняется сразу, выбираем "Всё равно сохранить"-> "Отмена"-> "Пропустить", после чего закрываем файл. Чтобы убедиться в добавлении записи в таблицу VLAN, можно открыть файл «show», в котором должна появиться записанная нами запись. Чтобы добавить запись для VLAN 20, снова открываем файл «add» и прописываем необходимые настройки. В итоге получился следующий файл (указаны только строки, в которые были внесены изменения): VLAN ID: 20 Forward list: 0x00230 Untag list: 0x00030 На этом настройка VLAN таблицы завершена. Теперь перейдём к настройке портов 1923КХ028, к которым подключены внешние устройства. Для этого переходим в директорию ///proc/basis/port_settings//. Настроим сначала порт 1: * Открываем файл «port1». Он также описан в виде шаблона, поэтому нам требуется только внести нужные данные. * В строке «Fallback_BD_id (dec)» указывается номер vlan, который присваивается всем нетегированным (untagged) пакетам, полученным с данного порта. Для порта 1 это значение должно быть равно 10. * В строке «aft» указывается тип принимаемых пакетов. Так как к этому порту подключен ПК, то записываем в строку число 2 - прием только не тегированных пакетов. * В строке «untag_from_btable» указывается, будет использоваться (1) или нет (0) указанный во VLAN таблице «untag list» при передаче пакетов с порта. Здесь необходимо записать значение 1. В итоге получился следующий файл (указаны только строки, в которые были внесены изменения): Fallback_BD_id (dec): 10 aft: 2 untag_from_btable: 1 Остальные поля оставляем без изменения, сохраняем файл и закрываем его. Настройки портов 2, 5 и 6 устанавливаем абсолютно такими же, как и для порта 1, только в поле «Fallback_BD_id (dec)» указываем соответствующий номер VLAN. Для порта 10 необходимо изменить только следующие строки в файле «port10»: aft: 1 untag_from_btable: 1 **"aft: 1"** означает, что принимаемые пакеты будут только тегированными. На этом настройка микросхемы 1923КХ028 для данной конфигурации сети завершена и демоплата 1923КХ028 готова к коммутации пакетов.