В СКАТ 9.4 добавлена возможность трансляции VLAN: входящий VLAN пакета заменяется на заданный исходящий VLAN.
Трансляция VLAN задается в текстовом файле /etc/dpi/vlan_translation.txt
, имеющем следующую структуру:
# subs VLAN inet VLAN 123 1123 124 1124 125 1125 # и так далее
Каждая строка файла задает соответствие входящего и исходящего VLAN.
Строка, начинающаяся с #
, является комментарием. Начальные пробелы/табуляции строки игнорируются.
Текстовый файл трансляций должен быть сконвертирован в бинарный /etc/dpi/vlan_translation.bin
утилитой vlan2bin из состава dpiutils:
cat vlan_translation.txt|vlan2bin /etc/dpi/vlan_translation.bin
Обратная конвертация из бинарного вида в текстовый производится утилитой bin2vlan:
bin2vlan /etc/dpi/vlan_translation.bin >vlan_translation.txt
Режим трансляции VLAN включается просто наличием файла /etc/dpi/vlan_translation.bin
: если этот файл есть, режим трансляции включен. Отсутствие файла является признаком выключения режима трансляции VLAN. Содержимое файла трансляции можно менять в процессе работы: СКАТ периодически проверяет наличие файла и если он изменился, - перечитывает таблицу трансляции. Выключить режим трансляции на лету можно просто удалив или переименовав файл трансляций /etc/dpi/vlan_translation.bin
.
Если трансляция VLAN включена, она применяется при любом режиме работы СКАТ, а не только в режиме BRAS.
При включенном режиме трансляции VLAN СКАТ делает следующее:
Трансляция VLAN применяется только для пакетов с одним VLAN-тегом. Для QinQ трансляция не применяется. Если пакет не имеет VLAN-тега, трансляция также не применяется, - пакет отправляется "как есть", без изменений.
Соответствие должно быть взаимно-однозначным; следующее задание недопустимо:
# subs VLAN inet VLAN # Ошибка: два subs VLAN (64 и 65) транслируются в один VLAN=200 64 200 65 200 # Аналогичная ошибка: inet VLAN 202 и 203 транслируются в один subs VLAN=2067 2067 202 2067 203 # ...
В конце файла можно добавить записи трансляции по умолчанию:
# subs VLAN inet VLAN 123 1123 124 1124 125 1125 # далее перечисляем все прочие трансляции ... # Запись "все прочие subs VLAN на пути subs->inet транслировать в inet VLAN 4012" # В файле может быть только одна такая запись! * 4012 # Запись "все прочие inet VLAN на пути inet->subs транслировать в subs VLAN 2089" # В файле может быть только одна такая запись! 2089 * # конец файла трансляций
Трансляция VLAN применяется также в режиме L2 BRAS, но с учетом того, что L2 BRAS СКАТ уже умеет выполнять замену VLAN-тегов, немного по другим правилам. Таблица трансляций VLAN применяется в L2 BRAS при терминации трафика sub→inet в следующих случаях:
bras_vlan_terminate=0
);bras_vlan_terminate=3
: если абонент не имеет свойства outVLAN и есть запись трансляции для VLAN-тега пакета.
Проще говоря, в режимах bras_vlan_terminate
=2 или 3 наивысший приоритет при терминации трафика subs→inet имеет свойство outVLAN абонента, далее (если абонент не имеет свойства outVLAN и если пакет имеет только один VLAN-тег) следует поиск в таблице трансляций VLAN, далее, если трансляции не найдено, применяются конфигурационные параметры, как описано в режимах bras_vlan_terminate
(см. ссылки выше).
При приземлении трафика inet→subs таблица трансляций VLAN в режиме L2 BRAS применяется только для неизвестных абонентов, то есть когда СКАТ не находит L2-свойства абонента.
Имеется несколько CLI-команд для работы с таблицей трансляций VLAN.
fdpi_cli vlan translation
Выводит текущие таблицы трансляций subs→inet и inet→subs. В выводе этой команды записи "по умолчанию" вида * N
и N *
развернуты. Если трансляций нет, команда сообщит об этом.
fdpi_cli vlan translation reload
Немедленная загрузка файла /etc/dpi/vlan_translation.bin
. Если файла нет - режим трансляции VLAN выключается.
СКАТ периодически (раз в минуту) проверяет наличие и изменение файла /etc/dpi/vlan_translation.bin
, но этой командой можно принудительно заставить СКАТ перечитать этот файл немедленно.
fdpi_cli vlan translation test [subs|inet] <vlan>
Проверка трансляции VLAN на указанном пути:
subs
- трансляция subs-VLAN <vlan>
inet
- трансляция inet-VLAN <vlan>
Примеры:
# в какой VLAN транслируется VLAN=123 на пути subs->inet fdpi_cli vlan translation test subs 123 # выхлоп команды: VLAN=123 translation subs->inet: 123 -> 1123 # в какой VLAN транслируется VLAN=1124 на пути inet->subs fdpi_cli vlan translation test inet 1124 # выхлоп команды: VLAN=1124 translation inet->subs: 1124 -> 124 # Если трансляции для указанного VLAN нет, команда ответи ошибкой вида: No translation for VLAN=666 for subs->inet