ExtremeXOS

Материал из Xgu.ru

(Перенаправлено с Extreme Networks)
Перейти к: навигация, поиск

Здесь описываются основные с практической точки зрения моменты по настройке и взаимодействию с ExtremeXOS на коммутаторах от Extreme Networks. В качестве основного источника информации используется ExtremeXOS Concepts Guide.

Содержание

[править] Управление конфигурациями

show configuration {<module-name>} [detailes]	- показывает весь активный конфиг, или только конфиг модуля. details- не только изменённые значения.
save configuration [primary | secondary]	- сохранить runing-config в primary.cfg
use configuration [pri | sec | <filename>]	- выбрать активный файл конфигурации, который будет использован после ребута.
tftp put <ip> vr <name> <src-file> [<dst-file>]- загрузка файла конфигурации со свича на tftp-сервер (xml).
tftp get <ip> vr <name> <src-file> <dst-file>  - загрузка файла конфигурации с tftp-сервера на свич (xml).
upload configuration <ip> <file.xsf> vr <name>  - загрузка текущей конфигурации со свича на tftp-сервер (asci).
tftp get <ip> <remote-file>			- загрузка изменённого командного скрипта с tftp на свич (asci).
load script newscript.xsf			- загрузка командного скрипта в текущую конфигурацию (после этого надо сохранить текущий конф в pri или sec.
edit script newscript.xsf			- редактирование командного скрипта прямо на свиче.
unconfigure switch [all]			- вернуть конфиг к заводским настройкам кроме аккаунтов, паролей, даты и времени all - кроме даты и времени.
reboot						- перезагрузка свича.
show switch					- сводная информация по свичу.

Если имеется полный файл конфигурации в формате asci (полученный командой upload configuration...), то чтобы применить содержащиеся в нём команды, нужно переименовать его в .xsf и затем

load script <config-file-name>.xsf

[править] Файловая система

ls,cp,mv,rm					- список файлов, копирование, переименовывание, удаление.
edit policy <filename>				- редактирование файлов политик.
edit <file-type> <file-name>			- внутренний редактор свича. По командам очень похож на vi.

[править] BootStrap

Для входа надо подключиться с консоли, перезагрузить свич и во время загрузки держать нажатым space пока не появится приглашение "BootStrap>". h - для отображения помощи по командам.

download bootrom <tftp-ip> summitX450-<version>.xbr	- обновление BootROMa. Требуется осторожность, прерывание может повредить BootROM и тогда хана.

[править] Управление Image-файлами

show version					- посмотреть текущую версию имиджа.
download image <ip> <file> vr <name> {pri|sec} - загрузить файл имиджа на свич в позицию pri или sec.
use image <primary | secondary>		- установка активного имиджа, который будет загружен после перезагрузки.

[править] Настройка управления свичём

show management					- сводная информация по настройке функций управления.
show account					- показать существующие учётные записи.
create account [admin | user] <name> <pass>	- создать аккаунт. 
delete account test				- удалить аккаунт.
configure account test				- задать пароль для пользователя test. (обязательно установить пароль для admin)
configure failsafe-account			- для доступа к свичу, если пароль админа утерян. Никогда не отображается, всегда присутствует.
						  пароль невозможно восстановить. Сразу же сохраняется в NVRAM (не в конфиг).
configure cli max-sessons <n>			- макс. число одновременных пользовательских сессий.
configure cli max-failed-logins <n>		- макс. число неудачных попыток ввода пароля.
configuer account [all|<name>] password-policy lockout-in-ligin-failures on - блокировать аккаунт после достижения предела неудачных попыток входа.
clear account [all|<name>] lockout		- снять блокировку аккаунта (из-под другого админского акка).
configure telnet vr admin_vrouter		- определяет VR, через IP-интерфейсы которого возможно получить доступ по telnet.
enable ssh2					- включить возможность доступа по ssh (установка модуля ssh так же добавляет функциональность https).
scp2 {cipher [3des|blowfish]} {port <n>} {debug <level>} <user>@<host>:<remote_file> <local_file> {vr <name>} - копирование файла по scp.
disable clipaging				- отключить постраничный вывод.
[no-refresh]					- опция обеспечивает вывод инфы без циклического обновления.
show session {{detail} {<sessID>}} {history}
clear session [<sessID> | all]

[править] Загрузка и активизация модуля SSH2

download image <tftp-server-ip> summitX-<ver>-ssh.xmod vr <VR-name>	- загрузка файла модуля
run update								- активация нового программного модуля
start process exsshd							- запуск процесса SSH2.
configure ssh2 key							- генерация нового ключа.
enable ssh2								- включение SSH2.

[править] SNMP

enable snmp access				- включает snmp
configure snmp sysname <str>			- задаёт имя узла
configure snmp syslocation <str>		- задаёт расположение узла
configure snmp syscontact <str>		- контактная информация.
configure snmp add community [readonly|readwrite] <str>	- добавляет комьюнити.
configure snmp traps				- включает рассылку трапов.
configure snmp add trapreceiver <ip> community <str>	- определяет получателя трапов.

[править] Логгирование

configure syslog {add} [ip] {vr <name>} [local0 .. local7] {<severity>}
enable syslog
show log {<severity>}			- посмотреть локальный лог. Локальное логгирование: до 20000 сообщений (по по умолчанию 1000).
conf log filter "DefaultFilter" add exclude events SNMP.Master.DropReqAccessDeny - не записывать в лог сообщения о несанкционированных попытках обращения по SNMP.

[править] SNTP (периодический опрос серверов NTP)

configure sntp-client [pri|sec] server <host> {vr <name>}
enable sntp-client

[править] Настройка слотов расширений

configure slot <num> module [ G48T | G48P | G24X | 10G4X ]	- настройка типа модуля, установленного в данном слоте расширения.
unconfiugre slot 						- сброс конфигурации указанного модуля.
clear slot <num>						- удалить всю конфигурацию слота.

[править] SVI

configure vlan mgmt ipaddress 10.0.0.1 255.255.255.0		- повесить ip-адрес на SVI влана
configure vlan default ipaddress 10.0.0.1/24			- повесить ip-адрес на SVI влана
unconfigure vlan mgmt ipaddress				- убрать ip-адрес с SVI влана
configure vlan <name> add secondary-ipaddress <ip/<mask>	- добавление дополнительных ip-адресов во влане.

[править] Настройка портов

Обозначения портов в многомодульном свиче:
2:4 - второй слот, четвёртый порт;
3:6-8,11 - группа с 6 по 8 порты и 11 порт в модуле 3.

  • Диагностика
show ports <port-list> [no-refresh]				- отображение состояния заданного списка портов (вкл/выкл линк/скорость/дуплекс). 
show ports <port-list> configuration				- отображение конфигурации порта.
show ports <port-list> information				- отображение информации о работе порта.
show ports <port-list> congestion				- посмотреть, есть ли дропы из-за перегрузки линка.
show ports <port-list> information detail			- самый подробный вывод всей информации, связанной с портами.
show ports <port-list> packet					- посмотреть гистограмму распределения по количеству и размеру пакетов.
  • Настройка:
enable ports <port-list>					- включить группу портов.
disable ports <port-list>					- отключить группу портов.
configure ports 1 auto off speed 100 duplex full		- настройка неготиации, скорости и дуплекса.
configure ports 1 auto-polariry					- настройка автоопределения типа кабеля.
enable jumbo-frame ports [all | <port-list>]			- разрешение jubmo-фреймов.
configure jumbo-frame size <jumbo_frame_mtu>			- установка размера (1523-9216).

[править] Функции таблицы коммутации

show fdb								- посмотреть всю таблицу коммутации.
create fdbentry <dst-mac> vlan <name> [ports <port_list>|blackhole]	- создание статической fdb-записи.
delete fdbentry {all | <mac> [vlan <name>] }				- удаление статической fdb-записи.
clear fdb { <mac> | blackhole | ports <port-list> | vlan <name>}	- удаление динамической(их) fdb-записи(ей).
disable learning drop-packets port 5					- на порту 5(in) форвардить пакеты только по статической fdb. Остальные отбрасывать.
disable learning forward-packets port 5				- не запоминать маки на 5 порту, но форвардить входящий трафик.
show ports 5 information		- проверить настроенный режим обучения (флаг m говорит, что функция запоминания активна).
configure fdb agingtime <15-1000000>	- время жизни записи в таблице коммутации. 0 - бесконечно.

[править] Функции безопасности уровня коммутации

1. Egress Flood Control - ограничивает исхдящий флуд разного типа трафика (unknown-unicast, broadcast, multicast).

disable flooding unicast port 1	- запретить флуд юникаст пакетов с неизвестным dst-mac в порт 1.
enable flooding broadcast port all	- разрешить флудить бродкастом на всех портах.
show port 1 info detail		- проверить настроенные режимы функции на порту 1.

2. Limit-Learning - ограничивает число маков, которые могут быть запомнены на порту в определённом влане. Трафик незапомненных маков блокируется (в обоих направлениях).

configure ports <port> vlan <name> learning-limit 3		- во влане <name> на порту <port> может быть запомнено не более 3 маков.
configure ports <port> vlan <name> unlimited-learnings	- снять ограничение для связки порт/влан.

3. Lock-Learning - запоминает текущие маки на порту во влане и блокирует трафик всех остальных маков.

configure ports <port> vlan <name> lock-learning		- запомнить текущие маки на порту <port> во влане <name>
configure ports <port> vlan <name> unlock-learning		- снять блокировку.
для диагностики работы функций:
show fdb
show vlan <name> security

4. Extreme Link Status Monitoring (ELSM) Проприетарный протокол, который следит за сбоями CPU и удалённых линков, предотвращая возможное образование колец. Работает по принципу point-to-point, настраивается на обоих конечных точках (свичах), соединённых через L2-облоко. Если ELSM ложится, пакеты данных не принемаются и не передаются через этот порт.

show elsm port 3	- проверка работы функции на порту 3.

5. Rate-Limit

configure ports <port_list> rate-limit flood [broadcast | multicast | unknown-destmac] [no-limit | <pps>]

[править] ELRP (Extreme Loop Recovery Protocol)

ELRP используется для обнаружения колец на уровне 2. Свич передаёт в порты фреймы со специальным мак-адресом назначения в определённом влане. Если данный пакет получен свичём через какой-то порт, то считается, что образовалось кольцо. В этом случае свич может погасить порт, послать трап, либо просто отметить событие в логе.

{enable | disable} elrp-client			- глобальное включение функции.
configure elrp-client periodic <vlan_name> ports <ports> interval <sec> [log | log-and-trap | trap] {disable-port {{duration <sec>} | permanent} - включение фичи во влане на портах.
unconfigure elrp-client <vlan_name> - отключение фичи во влане.
configure elrp-client disable-ports [exclude | include] [ <ports> | eaps-ring-ports] - отключение фичи на аплинках
unconfigure elrp-client disable-ports		- отмена отключения фичи на аплинках (чтобы блокирование осуществлялось)
show elrp					- просмотр состояния работы функции
show elrp disabled-ports			- просмотр информации об отключенных портах

Практическая демонстрация работы ELRP представлена в этом видео.

ELSM (Extreme Link Status Monitoring)

Это проприетарный протокол от Extreme Networks предназначенный для мониторинга аварий CPU и порта на удалённой стороне линка. Например, может использоваться для обнаружения однонаправленного линка и блокирования порта. Бывают случаи, когда аппаратный или программный сбой приводит к тому, что CPU не может получать или посылать пакеты. В этом случае ELSM изолирует соединения к аварийному коммутатору, отключая его от оставшейся сети. Это необходимо для предотвращения колец в активной L2-топологии. Работает в режиме точка-точка. Можно включать на интерфейсах, которые подключены к устройствам от Extreme Networks, на обоих сторонах соединения точка-точка. ELSM оценивает работоспособность линков и CPU при помощи обмена hello-сообщениями на линке между пирами. Соединение между двумя пирами организуется на канальном уровне в линке, соединяющем порты. Пиры могут быть как соединены напрямую, так и разделены хабами. Если они соединены напрямую, они считаются соседями (neighbors).
Если ELSM включен на порту и обнаруживает аварию линка, то на этом порту блокируется весь входящий и исходящий трафик. Например, если один пир перестаёт получать ELSM-hello от своего партнёра, то ELSM блокирует весь входящий и исходящий трафик на порту и информирует приложения, что линк пропал.

ELSM Hello-сообщения
  • Hello+ - посылается в порт, когда этот порт регулярно получает сигналы от партнёра и никаких проблем на линке не обнаружено.
  • Hello- - посылается в порт, когда этот порт не получил Hello+ сообщения от партнёра в течение установленного промежутка времени (1сек).

Переходные состояния порта:

  • HelloRx(+) - порт поднят и получает Hello+ от партнёра. Порт будет находиться в этом состоянии и обновлять HelloRx-таймер каждый раз, когда получает Hello+. Если HelloRx-таймер истекает, порт входит в состояние HelloRx(-). HelloRx-таймер = 6 * hello-таймер. По-умолчанию это 6 секунд.
  • HelloRx(-) - порт в переходном состоянии из ELSM-initial, или поднят, но не получил Hello-сообщения из-за проблем на линке или физического отсутствия пира.
Состояния портов ELSM
  • UP - партнёр по порту исправен и порт получает Hello+ сообщения от парнтёра. При каждом получении Hello+ up-таймер сбрасывается. up-таймер = 6 * hello-таймер. По-умолчанию 6 секунд.
  • DOWN - на порту нет линка, порт заблокирован или не получал Hello+ от парнтнёра. Если порт не получил Hello+ до того, как истёк up-таймер, он переходит в состояние DOWN. В этом состоянии пакеты данных и управляющий трафик (весь кроме ELSM PDU) не передаются и не принимаются через порт.
  • DOWN-Wait - свидетельствует о переходном состоянии. Если порт вошел в состояние DOWN, а позже получил Hello+ сообщение от партнёра, то он переходит в состояние DOWN-Wait. Если количество полученных Hello+ больше или равно заданному hold-threshold (по-умолчанию 2), порт переходит в состояние UP. Если количество Hello+ осталось меньше hold-threshold, порт возвращается в состояние DOWN.
  • DOWN-Stuck - говорит о том, что порт в состоянии DOWN и требует вмешательства администратора. Если порт продолжает моргать между состояниями UP и DOWN, он переводится в DOWN-Stuck. В зависимости от настроек, есть 2 способа вывода порта из этого состояния.
    • По-умолчанию, автоматический рестарт включен, и порт автоматически будет пытаться восстановиться.
    • Если автоматический рестарт выключен, то вывести порт из состояния DOWN-Stuck в DOWN возможно командой
clear elsm ports <portlist> auto-restart

Включение и отключение автоматического восстановления из DOWN-Stuck осуществляется командой

{enable | disable} elsm ports <portlist> auto-restart

Примечание: Во время перезагрузки партнёра, ELSM-порт в его сторону может войти в состояние DOWN-Stuck. Тогда понадобится вывести порт из этого состояния одним из описанных выше способов.

Состояния линков ELSM

Независимо от работы ELSM, линк может находиться в состоянииях

  • Ready - порт административно включен, но на нём нет физического линка;
  • Active - порт административно включен, и на нём поднялся физический линк;

Узнать эти состояния у портов возможно командами

show elsm ports {all | <portlist>}
show ports [<port_list>] information [detail]

Состояния линков ELSM могут быть следующими:

  • ELSM включен и соединение с партнёром установлено, порт функционирует;
  • ELSM включен но порт не функционирует, поэтому соединение с партнёром не установлено;
  • ELSM выключен.

Чтобы изучить текущее состояние, помогут команды

show elsm                                      - включен ли ELSM на коммутаторе глобально;
show elsm ports <port-list>                    - какое состояние ELSM-линков на указанных портах;
show ports [<port-list>] information {detail}  - полная информация о состоянии портов;
                                                 L - ELSM включен глобально на коммутаторе;
                                                 (колонка ELSM) up - ELSM включен на порту, партнёр обнаружен, проблем с линком нет.
                                                 (колонка ELSM) dn - ELSM включен на порту, но партнёра на линке не обнаружено, есть проблема с линком.
                                                 (колонка ELSM) -  - ELSM на коммутаторе отключен.
ELSM-таймеры

В своей работе протокол ELSM обменивается ELSM PDU сообщениями с партнёрами и делает выводы о работоспособности соединений на основе критерия, пришел ли нужный ELSM PDU на порт до истечения таймера, или нет. Из всех видов ELSM-таймеров, настройке поддаётся только hello-таймер. Остальные определяются исходя из значений hello-таймера.

ELSM-таймеры
таймер описание
Hello Единственный таймер, который можно настраивать. Определяет время в секундах между принимаемыми hello-сообщениями. По-умолчанию 1 секунда. Можно задавать в пределах от 100 мсек до 255 секунд.
Down Определяет время, которое занимает переход ELSM-порта через следующие состояния: DOWN -> DOWN-Wait -> UP. Определяется как
(2 + hold-threshold) * hello-timer. По-умолчанию 4 секунды.
После истечения Down-таймера порт проверяет количество полученных сообщений Hello+ и сравнивает его со значением hold-threshold. Если количество Hello+ >= hold-threshold, порт из состояния DOWN-Wait переводится в UP. Если NUM(Hello+) < hold-threshold, тогда порт возвращается в состояние DOWN.
Up Запускается в момент, когда порт переводится в состояние UP. Каждый раз, когда на порт приходит сообщение Hello+, таймер сбрасывается.
Определяется как UpTimer-threshold * hello-timer. Настраивается в диапазоне 3-60 сек. По-умолчанию, UpTimer-threshold = 6, следовательно up-таймер = 6 (6*1).
HelloRx Определяет время, в которое ожидается получение сообщения Hello. Если порт не получает сообщения Hello от партнёра, возможно случился сбой CPU партнёра или авария линка. Определяется как 6 * hello-таймер. По-умолчанию 6 секунд.
Настройка ELSM
{enable | disable} elsm ports <portlist>			- включить ELSM на нужных портах (процессы ELSM на разных портах работают независимо)
configure elsm ports <portlist> hellotime <hello_time>		- задание hello-таймера на портах (рекомендуется на порту партнёра сделать одинаковым)
configure elsm ports <portlist> hold-threshold <hold_threshold>- задание hold-threshold на портах (рекомендуется на порту партнёра сделать одинаковым)
{enable | disable} elsm ports <portlist> auto-restart		- включить ли автовосстановление из состояние DOWN-Stuck. По-умолчанию включено.
clear elsm ports <portlist> auto-restart                       - вручную вывести порт из состояния DOWN-Stuck.
clear elsm {ports <portlist>} counters                         - сбросить статистику счётчиков
Команды диагностики ELSM
show elsm							- общая информация о работе ELSM на всех портах
show elsm ports <all | portlist>				- детальная информация о работе ELSM на нужных портах


VLAN

show vlan [detail] [<name>]			- посмотреть список существующих вланов, либо инфу по конкретному влану.
  • Port-Based VLAN
create vlan <name>				- создание port-based влана <name>
delete vlan <name>				- удаление port-based влана <name>
enable vlan <name>				- активизация работы port-based влана на свиче.
disable vlan <name>				- отключение работы port-based влана.
configure vlan <old_name> name <new_name>	- переименовывание влана.
configure vlan <name> add port <port-list>	- добавление портов в port-based влан.
configure vlan <name> delete port <port-list>	- удаление портов из port-based влана.
  • Tagged VLAN
create vlan <name>				- создание влана
configure vlan <name> tag <number>		- назначение влану тэга
configure vlan <name> delete port <port-list>	- удаление влана из указанных портов.
configure vlan <name> add port <port-list> [tagged|untagged] - добавление влана в указанные порты. По-умолчанию нетегировано, поэтому помним про tagged.

STP

Настройка в режиме 802.1w

create stpd <name> [description <stpd-description>]		- создаём домен STP c именем <name>. По-умолчанию присутствует домен s0.
configure stpd <stpd_name> mode dot1w				- задание режима работы STP домену.
configure stpd <stpd_name> add vlan <name> port <port-list>	- добавляет вланы в домен STP на портах (перед этим вланы должны быть выброшены в эти
								  порты). Порты, на которых обеспечивать работу STP задаются в ручную. ИЛИ...
configure stpd <name> auto-bind vlan <name>			- или можно автоматически включать в домен stp все порты, куда выбрасываются вланы.
configure stpd <stpd_name> priority <pri>			- Для RSTP и MSTP должны быть кратными 4096.
configure stpd <stpd_name> ports cost <auto|cost> <port-list>  - Задание специфичной стоимости линков на портах.
configure stpd <stpd_name> ports priority <pri> <port-list>	- задание значения приоритета порта (для определения назначенного).
confugure stpd <stpd_name> hellotime <sec>
configure stpd <stpd_name> forwarddelay <sec>
configure stpd <stpd_name> maxage <sec>
enable stpd <stpd_name> 					- включает использование протокола STP. Домен по-умолчанию s0.
disable stpd {<stpd_name>}					- отключить STP
unconfig stpd {<stpd_name>}					- восстановить умолчательные настройки работы STP.

Настройка в режиме 802.1s (MSTP)

I) Настройка домена MSTP CIST

create stpd <name> [description <stpd-description>]		- создаём домен
configure stpd <name> mode mstp cist				- говорим, что этот домен будет MSTP CIST
enable stpd <name>						- включаем stp домен cist

HINT: Чтобы расконфигурить домен из CIST надо поставить ему режим dot1d.

II) Настройка MSTI (инстансов) в регионе

create stpd <iname>						- создаём домен инстанса
configure stpd <iname> mode mstp msti <inst_num>		- назначаем домену ID инстанса <1-4096>. max(MSTIs) для региона = 64.
								  ID должны быть уникальны только в пределах региона.
configure stpd <iname> add vlan <name> ports <port-list>	- привязка вланов к MSTI на указанных портах (влан на портах должен уже присутствовать).
	или с помощью auto-bind:
enable stpd <iname> auto-bind vlan <name>
enable stpd <iname>						- включаем msti домен.

III) Настройка MSTP атрибутов (идентификаторы региона)

Следующие параметры должны быть идентичны на всех свичах в регионе.

  • имя региона;
  • номер ревизии конфигурации;
  • таблица соответствия привязки номеров вланов к MSTI-инстансам;
configure mstp region <RegionName>				- обозначение принадлежности свича к региону
configure mstp revision <rev_num>				- номер ревизии конфигурации.
configure mstp format <format_id>				- <0-255> - номер, определяющий формат MSTP BPDUs. по-умолчанию 0.

Диагностика

show configurateion stp					- отобразить секцию конфига, посвященного stp
show stpd						- общая инфа о настройке STP + список и основные параметры доменов.
show stpd <domain-name>					- общая инфа о работе конкретного домена STP.
show stpd <domain-name> ports [detail]			- информация о настройках, ролях и статусах портов в указанном домене STP.
show stpd <domain-name> {[detail | <port_list> {detail}]} - подробная информация о домене или статусах портов.
show vlan <vlan_name> stpd				- информация, к какому инстансу относится влан.

Link-Aggrigation

configure sharing address-based custom ipv4 source-and-destination - выбор алгоритма распределения нагрузки по портам.
enable sharing <port> grouping <port-list> {algorithm address-based {L2|L3|L3_L4}} {lacp}
			Сформировать канальную группу. Первый порт в группе настраивается как логический порт
			группы и представляет собой группу с т.з. конфигурации.
disable sharing <logic-port>				- расформировать канальную группу.
configure sharing lacp system-priority 3		- установить приоритет lacp у свича. 0 - удаляет на стройку. По-умолчанию приоритет = MAC.
configure sharing <logic-port> add ports <port-list>	- динамически добавить порт к группе (должен быть предварительно enabled).
configure sharing <logic-port> delete ports <port-list> - динамически удалить порты из канальной группы.
configure sharing <logic-port> lacp activity-mode <{active|passive}> - установка режима работы LACP в канальной группе.
configure sharing <logic-port> lacp system-priority <1..65535> - установить приоритет lacp свича в конкретной канальной группе.
clear lacp counters					- сбросить счётчики.

[править] Диагностика

show lacp					- список групп и их статус.
show lacp lag <masterport> [detail]		- подробный статус lacp конкретной группы (представляемой мастер-портом).
show ports sharing 				- информация по группе агрегации (не обязательно с lacp).
show lacp member-port <port-list>		- информация о статусе lacp на конкретных портах из группы.
show lacp counters				- счётчики PDU.

[править] LLDP

enable lldp ports [all|<port-list>] {receive-only|transmit-only}	- включает LLDP TLVs на портах.
configure lldp transmit-interval <seconds>
configure lldp transmit-hold <hold>
configure lldp transmit-delay [auto|<seconds>]
configure lldp ports [all|<port-list>] [advertise|no-advertise] system-name

[править] Диагностика

show lldp {port [all|<port-list>]} {neighbors} {detailed}

[править] Extreme Discovery Protocole (EDP)

enable edp ports all
show edp ...

[править] ACL

[править] Общие сведения

Политики ACL применяются к трафику во входящем и/или исходящем направлении на портах, либо ко влану. Применяя ACL ко влану, на самом деле он применяется ко всем портам коммутатора. ACL бывают статические, определяемые в файлах, и динамические, состоящие из одного правила, применённого к портам. По-умолчанию, динамические ACL сохраняются после перезагрузки. Возможно переопределить это, чтобы не сохранялись.

С помощью ACL можно выделять трафик на основе критериев

  • IP-адреса/подсети источника и назначения;
  • MAC-адреса источника и назначения;
  • vlan-id;
  • протокол;
  • tcp/udp-порты источника и назначения;

и применять к нему следующие действия:

  • permit;
  • deny;

и модификаторы:

  • увеличение счётчиков;
  • логгирование заголовков пакетов;
  • мироринг трафика в мониторинговый порт;
  • назначение политики QoS в виде QoS-профайла;
  • полисинг полосы пропускания с использованием meter.

Использование ACL не влияет на производительность коммутатора (за исключением действия mirror-cpu).

Структура каждого правила в ACL-файле выглядит так:

entry <RULE-NAME> {
        if {
                <match-conditions>;
        } then {
                <action>;
                <action-modifiers>;
        }
} 

Чтобы отредактировать ACL-файл и повесить его на порт, используйте следующие команды:

edit policy <PNAME>							- редактировать политику (ACL).
check policy <PNAME>							- проверить отредактированную политику на правильность синтаксиса.
configure access-list <PNAME> ports <port-list> {ingress | egress}	- навесить файл ACL-политики на порты для входящего или исходящего трафика.
unconfigure access-list ports <port-list> [ingress | egress]		- снять файл ACL-политики с портов.

При редактировании правил можно использовать комментарии и описания. Отличия в том, что комментарии игнорируются policy-manager'ом, содержатся только в файле политики и не отображаются при выводе политики на экран с помощью show policy. Описания обрабатываются policy-manager'ом и отображаются в выводе show policy.

# This is a comment in policy.pol file.
@description "And this line is a description." 

Для ingress ACL, если секция if не содержит условий match, считается, что правило применяется ко всему трафику. Для egress ACL, если секция if не содержит условий match, то ни один пакет не подпадает под условия такого правила. Чтобы задать правило для всего трафика в egress ACL, нужно, например, указать критерий совпадения с любым адресом источника source-address 0.0.0.0/0. Если в секции then явно не указано действие (permit или deny), по-умолчанию используется permit.

[править] Типы записей правил в ACL

  • L2 - правило содержит только проверки L2-заголовков (ethernet-soruce-address, ethernet-destination-address...);
  • L3 - правило содержит только проверки L3-заголовков (ip-адреса, подсети, протокол...);
  • L4 - правило содержит проверки и L3 и L4 поля заголовков (ip-адреса, номера портов TCP/UDP);
  • Если секция if не содержит критериев, такая проверка считается L2.

На BlackDiamond 10800 и 12800 синтаксическая проверка выдаст ошибку, если в записи содержится проверка L2 вместе с L3/L4. На BlackDiamond 20800 запись может содержать проверки либо L2, либо L3, но не обе.

[править] Перечень возможных критериев для выделения трафика

Условия в ACL
Условие Описание применяется к
протоколам / направлениям
ethernet-type <number> Тип ethernet. В качестве значения можно задать и текстовые значения: ETHER-P-IP (0x0800), ETHER-P-8021Q (0x8100), ETHER-P-IPV6 (0x86DD) ethernet / ingress
ethernet-source-address <MAC> МАС-адрес источника ethernet / ingress
ethernet-source-address <MAC> mask <MASK>
или
ethernet-source-address <MAC> / <MASK>
Например
ethernet-source-address 00:01:02:03:01:01 mask ff:ff:ff:ff:00:00
ethernet-source-address 00:01:02:03:01:01 / ff:ff:ff:ff:00:00
Проверяются только те значения битов, которые в маске соответствуют 1. В приведённом примере все маки 00:01:02:03:xx:xx удовлетворят условию.
ethernet / ingress
ethernet-destination-address <MAC>
ethernet-destination-address <MAC> mask <MASK>
ethernet-destination-address <MAC> / <MASK>
МАС-адрес назначения. Маски задаются и обрабатываются так же как в случае ethernet-source-address. ethernet / ingress
source-address <IP-prefix> IP-префикс (адрес и маска) источника. Маска не обязательно должна задавать IP-подсеть. все IP / ingress и egress
destination-address <IP-prefix> IP-префикс (адрес и маска) назначения. Маска не обязательно должна задавать IP-подсеть. все IP / ingress и egress
Source-port <number>, <range> Номер порта источника TCP или UDP. Для использования необходимо определить и протокол (TCP/UDP). TCP, UDP / ingress и egress
Destination-port <number>, <range> Номер порта назначения TCP или UDP. Для использования необходимо определить и протокол (TCP/UDP). TCP, UDP / ingress и egress
TCP-flags <bitfield> Флаги TCP. Используется в дополнение к критерию protocol. В качестве значения кроме цифр можно задавать следующие текстовые синонимы: ACK(0x10), FIN(0x01), PUSH(0x08), RST(0x04), SYN(0x02), URG(0x20), SYN_ACK(0x12). TCP / ingress и egress
IGMP-msg-type <number> Тип сообщения IGMP. Возможны следующие значения (текстовые синонимы): v1-report(0x12), v2-report(0x16), v3-report(0x22), V2-leave(0x17), query(0x11). IGMP / ingress и egress
ICMP-type <number> Поле типа ICMP. Используется в дополнение к критерию protocol. Вместо <number> можно использовать следующие текстовые псевдонимы: echo-reply(0), echo-request(8), info-reply(16), info-request(15), mask-request(17), mask-reply(18), parameter-problem(12), redirect(5), router-advertisement(9), router-solicit(10), source-quench(4), time-exceeded(11), timestamp(13), timestamp-reply(14), unreachable(3). ICMP / ingress и egress
ICMP-code <number> Поле кода ICMP. Точнее определяет смысл типа ICMP. Используется в дополнение к критерию ICMP-type. Описание значений см. в Concepts Guide. ICMP / ingress и egress
source-sap SSAP - поле длиной 1 байт, диапазон значений 0-255. Может определяться в десятичном или 16-ричном виде. Значение поля SSAP в пакете формата 802.3 SNAP или LLC находится в байте со смещением 15. ethernet / ingress
destination-sap DSAP - поле длиной 1 байт, диапазон значений 0-255. Может определяться в десятичном или 16-ричном виде. Значение поля DSAP в пакете формата 802.3 SNAP или LLC находится в байте со смещением 14. ethernet / ingress
snap-type Тип SNAP - поле длиной 2 байта, диапазон значений 0-65535. Может определяться в десятичном или 16-ричном виде. Значение поля DSAP в пакете формата 802.3 SNAP находится в байтах со смещением 20 и 21. ethernet / ingress
IP-ToS Поле IP-ToS. Вместо числового значения можно указывать текстовые синонимы: minimize-delay 16(0x10), maximize-reliability 4(0x04), minimize-cost 2(0x02), normal-service 0(0x00). все IP / ingress и egress
dscp Биты dscp в поле IP-ToS. Указывается десятичное значение. все IP / ingress и egress
fragments Фрагментированные IP-пакеты. FO > 0 (FO = Fragment Offset в заголовке IP). все IP, без правил L4 / ingress
first-fragment Фрагментированный НЕ-IP пакет, либо первый фрагмент IP-пакета. FO = 0. все IP / ingress
protocol <number> Поле IP-протокола. Можно использовать следующие текстовые синонимы: egp(8), gre(47), icmp(1), igmp(2), ipip(4), ipv6 over ipv4(41), ospf(89), pim(103), rsvp(46), st(5), tcp(6), udp(17). все IP / ingress и egress
vlan-id <number> Значение VLAN-ID. Правило ACL может быть применено только к портам (не к вланам). На Summit это значение соответствует внешнему тэгу (QinQ,VMAN). все IP / ingress (и egress только на Summit)
dot1p <priority> Проверяет поле 802.1p CoS заголовка 802.1q. все IP / ingress
arp-sender-address <prefix>
или
arp-target-address <prefix>
Выделяют адреса отправителей или получателей в arp-пакете. Не могут быть в одной записи с ethernet-source-address или ethernet-destination-address. Могут быть использованы, только когда база данных ACL на железе настроена в режиме internal. ARP пакеты / ingress


[править] Удлинённая маска сравнения полей пакетов (Wide Key ACLs)

Это функция делает возможным подвергать анализу и сравнению 362 бита от пакета, вместо стандартных 181 бита. Это позволяет добавить больше условий совпадения в ACL, а так же сравнивать полные адреса источника и назначения IPv6. Новых условий для сравнений она не добавляет. Для подробного изучения особенностей данной функции нужно читать Consepts Guide.

configure access-list width {double | single} [slot <slotNo> | all ]
show access-list width [slot <slotNo> | all ]

Если режим изменён, то для применения этой настройки требуется перезагрузка.

[править] Перечень возможных действий над трафиком и модификаторов

Действия:

  • permit - передать пакет;
  • deny - сбросить пакет;
  • deny-cpu - не пропускать пакеты, которые скоммутированны для CPU, в control-plane коммутатора. При этом их обработка в data-plane не затрагивается. Например, это действие может быть полезно, чтобы оградить CPU от получения бродкаст-пакетов при этом позволяя им распространяться во все порты, куда выходит влан. Так же можно оградить CPU от получения STP BPDU, а пересылать такие пакеты через порты. Так, коммутатор становится прозрачным для STP BPDU.
  • copy-cpu-and-drop - пакеты, удовлетворяющие критерию правила, перенаправляются к CPU и никуда больше не пересылаются.

Модификаторы действий:

  • count <COUNTER-NAMR> - увеличить указанный счётчик. Ingress и Egress ACL.
  • byte-count <BYTE-COUNTER-NAME> - увеличить указанный счётчик байтов. Ingress ACL.
  • packet-count <PACKET-COUNTER-NAME> - увеличить указанный счётчик пакетов. Ingress ACL.
  • log - записать заголовок пакета в журнал.
  • log-raw - записать заголовок пакета в журнал в hex-формате.
  • meter <metername> - обработать трафик согласно указанному полисеру. Ingress ACL (на Summit).
  • mirror - послать копию пакета в мониторинговый порт. Ingress ACL.
  • mirror-cpu - послать копию пакета в CPU чтобы можно было внести его в журнал. Ingress ACL.
  • qosprofile <qpX> - обработать пакет согласно правилам указанного QoS-профайла. Ingress и Egress ACL.
  • traffic-queue <queue> - поместить пакет в указанную traffic-queue (доступно только на BD 12800 и BD 20800);
  • redirect <ipv4-address> - переопределить routing-decision, послав пакет на указанный адрес шлюза. При этом IP-заголовок не изменяется. Для указанного IP-адреса назначения должна существовать запись в ARP-таблице. Используется для PBR.
  • redirect-port <port> - переопределить forwarding-decision, послав пакет через указанный исходящий интерфейс (порт). Если порт является частью портгруппы, к пакету будет применён алгоритм распределения нагрузки, принятый в портгруппе.
  • redirect-port-no-sharing <port> - то же, что redirect-port, только пакет будет послан строго через указанный интерфейс, без учёта возможного его присутствия в портгруппе.
  • replace-dscp - заменить значение поля DSCP в IP-пакете на определённое для QoS-профайла, в котором обрабатывается пакет. Ingress и Egress ACL.
  • replace-dot1p - заменить значение поля 802.1p CoS на определённое для QoS-профайла, в котором обрабатывается пакет. Ingress и Egress ACL.
  • replace-dot1p-value <value> - заменить значение поля 802.1p CoS на указанное явно в этом модификаторе. Ingress и Egress ACL.
  • replace-ethernet-destination-address <MAC> - заменить в пакете MAC-адрес назначения. Применяется только к коммутируемому на L2-трафику.

[править] Практика

[править] Применение обновлённых ACL после редактирования

ACL задаются в текстовых файлах, лежащих на flash коммутатора. Чтобы применить изменения после редактирования этих файлов, используйте последовательность команд

check policy <PNAME>
refresh policy <PNAME>

В короткий момент времени, когда обновлённый ACL заносится в ASIC, все пакеты на интерфейсе сбрасываются (по-умолчанию). Можно управлять этим поведением командой

{enable | disable} access-list refresh blackhole

Если применить команду, начинающуюся с disable, то в момент обновления ACL на ASIC интерфейса все пакеты, пришедшие на порт, будут приниматься. Если это не магистральный порт, то на него могут придти нежелательные BPDU, что опасно в случае использования STP. В ситуациях, когда указанный риск существует, рекомендуется оставлять настройку с enable (по-умолчанию).

[править] Пример: аналог BPDU-filter на портах

entry BPDUfilter1 {
    if {
        ethernet-destination-address 01:00:0c:cc:cc:cd;
    } then {
        deny;
    }
}
entry BPDUfilter2 {
    if {
        ethernet-destination-address 01:80:C2:00:00:00;
    } then {
        deny;
    }
}

[править] Сервисные фичи

[править] Время

configure timezone 420 noautodst
configure sntp-client primary 195.49.169.1 vr "VR-Default"
enable sntp-client

[править] Баннеры

configure banner { after-login | { before-login } { acknowledge } }

[править] Таймаут простоя консоли

conf idletimeout <min>

[править] Мирроринг

[править] Настройка зеркалирование трафика в один мониторинговый порт

enable mirroring to port 4				- включает мирроринг в 4 порт.
configure mirroring add port 8 [ingress]		- мирорит весь [входящий] трафик порта 8 на порт 4
configure mirroring add vlan red			- мирорить трафик влана red на порт 4
configure mirroring add vlan red port 5			- мирорить трафик влана red на порту 5 в порт 4

[править] Настройка зеркалирование трафика в несколько мониторинговых портов

Следующий пример демонстрирует как зеркалировать трафик в более чем один мониторинговый порт (порты 5, 6, 7). Для этого необходимо назначить какой-нибудь свободный порт (в примере 1) как loopback-port. После настройки этот loopback порт не может быть использован для передачи трафика, но т.к. его ресурсы используются для зеркалирования, на нём горит линк независимо от присутствия провода.

enable mirroring to port-list 5-7 loopback-port 1
configure mirroring add port 10 ingress

[править] QoS

Концептуально, реализация политики QoS на оборудовании Extreme Networks осуществляется в 3 этапа.

  • Создание и определение параметров нужного количества QoS-профайлов.
    QoS-профайл - это отдельная реализованная аппаратно очередь с
    • заданным относительно других QoS-профайлов приоритетом (в случае Strict Priority), либо весом очереди (в случае WRR);
    • заданным режимом планировщика (Strict Priority или WRR);
    • заданными параметрами гарантированной (CIR) и максимально возможной (PR) исходящей полосы пропускания на каждом интерфейсе;
    • заданными величинами буферного пространства на каждом отдельном интерфейсе;
    • заданными порогами WRED;
    • ассоциированными метками 802.1p CoS и DiffServ DSCP, которые могут устанавливаться на трафик, попадающий в этот QoS-профайл, пришедший с заданных портов.
  • Создание трафик-групп, выделяющих приходящий на коммутатор трафик по одному или нескольким критериям и формирующих на основе этих критериев группы.
  • Применение политики QoS путём установления соответствия настроенным трафик-группам QoS-профайлов с желаемыми параметрами обработки для той или иной группы.

[править] Классификация (формирование трафик-групп)

Набор критериев, выделяющий трафик из общего потока определяет трафик-группу. Пакеты на основе критериев

  • имеющихся меток 802.1p и DSCP;
  • входящего порта;
  • ingress ACL на портах;
  • VLAN ID;

могут распределяться по разным трафик-группам, которые позже назначаются на обработку QoS-профайлам.

Если входящий пакет подпадает под критерии сразу нескольких трафик-групп, то окончательный выбор трафик-группы осуществляется согласно следующему приоритету критериев (в порядке от наибольшего приоритета к наименьшему, для платформы Summit и SummitStack).

  1. ACL на основе IP-адресов;
  2. ACL на основе MAC-адресов;
  3. метка 802.1p CoS;
  4. входящий порт (QoS-профайл по-умолчанию на порту);
  5. VLAN ID;
  6. метка DSCP DiffServ.

[править] Задание трафик-групп на основе ACL

  1. Создать файл политики ACL и добавить в него правила.
    1. использовать условия match для выделения трафика в группу;
    2. к выделенному трафику применить следующие возможные модификаторы действия permit:
      • qosprofile <qpX> - определить QoS-профайл в который попадает трафик. Возможен в ingress и egress ACL.
      • replace-dscp - заменить метку DSCP в пакете на заданную в QoS-профайле. Возможен в ingress и egress ACL.
      • replace-dot1p - заменить метку 802.1p CoS в пакете на заданную в QoS-профайле. Возможен в ingress и egress ACL.
      • replace-dot1p-value <value> - заменить метку 802.1p CoS в пакете на указанную. Возможен в ingress и egress ACL.
      • meter <name> - применить к трафик-группе полисинг. На Summit и SummitStack возможен только в ingress ACL.
  2. Применить созданный и отредактированный файл политики ACL к портам, где нужно выделять трафик-группы. Возможно применить к определённым портам, всем портам или всем портам во влане.

[править] Задание трафик-групп на основе 802.1p CoS

Конфигурация коммутатора по-умолчанию уже определяет эти трафик-группы. Можно указать, использовать ли на портах критерий 802.1p CoS для распределения трафика по QoS-профайлам, и правила мапинга CoS -> QoS-профайл.

{enable | disable} dot1p examination ports {<portlist> | all}           - на указанных портах распределять ли входящие фреймы по QoS-профайлам исходя из значения меток 802.1p;
{enable | disable} dot1p examination inner-tag ports {<portlist> | all} - на указанных портах учитывать ли внутренний тег QinQ при распределении входящих фреймов по QoS-профайлам;
configure dot1p type <CoS> qosprofile <qpX>                             - задание правил мапинга входящих меток 802.1p CoS в QoS-профайлы;
show dot1p                                                              - посмотреть существующий мапинг 802.1p CoS -> QoS-профайл.

[править] Задание трафик-групп на основе DiffServ DSCP

Конфигурация коммутатора по-умолчанию уже определяет эти трафик-группы. Можно указать, использовать ли на портах критерий DiffServ DSCP для распределения трафика по QoS-профайлам, и правила мапинга DSCP -> QoS-профайл. На платформах Summit, SummitStack включение на 1G-портах классификации на основе DSCP (diffserv examination) неизбежно приводит к включению перебива меток 802.1p CoS.

{enable | disable} diffserv examination ports {<portlist> | all}          - на указанных портах распределять ли входящие пакеты по QoS-профайлам исходя из значений меток DSCP (так же приводит к включению перебива меток 802.1p);
configure diffserv examination code-point <DSCP> qosprofile <qpX>         - задание првил мапинга входящих меток DSCP в QoS-профайлы;
unconfigure diffserv examination ports [<port_list> | all]                - вернуть мапинг по-умолчанию;
show diffserv examination                                                 - посмотреть существующий мапинг DSCP -> QoS-профайл.

[править] Задание трафик-групп на основе входящего порта

configure ports <port> qosprofile qp<X>                              - назначение входящего трафика порта в QoS-профайл с нужными параметрами маркировки 

Пример:

create qosprofile qp<X>                                              - создание нового qos-профайла (если ещё не создан)
configure diffserv replacement qosprofile qp<X> code-point <dscp>    - трафик, попадающий в qos-профайл, метить указанным кодом DSCP
configure ports <port> qosprofile qp<X>                              - назначение входящего трафика порта в QoS-профайл с нужными параметрами маркировки 
enable diffserv replacement ports <port>                             - разрешить на указанном порту перебив меток DSCP
enable dot1p replacement ports <port>                                - разрешить на указанном порту перебив меток 802.1p CoS
  • Замечание: значения меток CoS dot1p, которыми метятся фреймы в том или ином qos-профайле настройке не поддаются. Посмотреть, какое значение соответствует применяемому qos-профайлу, можно в таблице 2.

[править] Задание трафик-групп на основе VLAN

configure vlan <vlan_name> qosprofile <qpX>

[править] Резюме

Вот команды, которые управляют проверкой/перемаркировкой меток 802.1p и DSCP

{enable | disable} diffserv examination ports {<portlist> | all}          - на указанных портах распределять ли входящие пакеты по QoS-профайлам исходя из значений меток DSCP (так же приводит к включению перебива меток 802.1p);
{enable | disable} dot1p    examination ports {<portlist> | all}          - на указанных портах распределять ли входящие фреймы по QoS-профайлам исходя из значения меток 802.1p.
{enable | disable} dot1p    examination inner-tag ports {<portlist> | all}- на указанных портах учитывать ли внутренний тег QinQ при распределении входящих фреймов по QoS-профайлам.
{enable | disable} diffserv replacement ports {<portlist> | all}          - разрешать ли замену меток DSCP у пакетов, пришедших на указанные порты.
{enable | disable} dot1p    replacement ports {<portlist> | all}          - разрешать ли замену меток 802.1p у пакетов, пришедших на указанные порты.
show ports information                                                    - посмотреть настроенные параметры классификации/перемаркировки на портах.
                                                                             o - замена 802.1p разрешена
                                                                             s - замена DSCP разрешена
                                                                             n - классификация на основе DSCP разрешена (заменяет классификацию по 802.1p).

Подробнее определения политик перемаркировки освещаются в следующих подразделах.

[править] Перемаркировка

[править] Замена меток CoS 802.1p

  • для ACL-групп трафика: Использовать действие replace-dot1p, чтобы поставить метку выходного QoS-профайла, либо действие replace-dot1p-value, чтобы указать конкретное значение.
  • не для ACL'ных группах трафика: Можно разрешить или запретить перебивку 802.1p для трафика на определённых входящих портах. Если разрешено, то перебивка происходит в значение по умолчанию для того QoS-профайла, куда попадает фрейм.
enable dot1p replacement ports [<ingr_port_list> | all]                                   - активизация перебивки 802.1p для групп трафика на указанных входящих портах.
configure dot1p replacement qosprofile <qosprofile> priority <CoS> {ports <port_list>} - работает только на 20800 серии. На Summit целевая метка dot1p в qos-профайле не может быть изменена.

И ещё раз: значения меток CoS 802.1p, устанавливаемые при обработке трафика в QoS-профайлах, на платформе Summit и SummitStack перенастройке не поддаются и определяются следующей таблицей:

Таблица 1. Значения dot1p перебиваемые в QoS-профайлах.
QoS-профайл значение dot1p
QP1 0
QP2 1
QP3 2
QP4 3
QP5 4
QP6 5
QP7 6
QP8 7
  • Замечание 1: Если на коммутаторе существуют только группы трафика на основе CoS 802.1p, невозможно отключить перебивку dot1p. Если же существуют только группы трафика на основе DiffServ, тогда перебивка dot1p будет происходить только у тегированных фреймов, переносящих протокол, отличный от IP.
  • Замечание 2: На платформах BlackDiamond 8800, SummitStack, и Summit по-умолчанию существуют QoS-профайлы QP1 и QP8. Чтобы возможность перебивки в нужные значения dot1p была задействована, необходимо создать недостающие qos-профайлы QP2 - QP7.
  • Замечание 3: На платформах BlackDiamond 8800, SummitStack, и Summit когда на портах 1Гб/сек включена проверка DiffServ (diffserv examination), перебивка dot1p работает и не может быть выключена. Замена происходит на dot1p, заданный по-умолчанию для исходящего QoS-профайла.
show dot1p replacement  - посмотреть политику перебивки.

[править] Замена меток DSCP

  • для ACL-групп трафика: Использовать действие replace-dscp чтобы перебить на занчение для выходного QoS-профайла. Это действие работает для IPv4 и IPv6. Extreme Networks рекомендует перебивку DSCP осуществлять с помощью ACL-групп трафика.
  • не для ACL'ных групп трафика: перебивка происходит у трафика, приходящего в указанные порты в соответствии с таблицей.
enable diffserv replacement ports [<port_list> | all]
Таблица 2. Перебив меток в QoS-профайлах по-умолчанию
QP dot1p DSCP
1 0 0
2 1 8
3 2 16
4 3 24
5 4 32
6 5 40
7 6 48
8 7 56
[править] Задание мапинга перебивки DiffServ
configure diffserv replacement [{qosprofile} <qosprofile> | priority <priority>] code-point <code_point>
unconfigure diffserv replacement                - восстановить умолчательные значения.
show diffserv replacement                       - посмотреть текущий мапинг перебива QoS-профайл -> DSCP.
[править] Пример: установка DSCP на основе ACL
configure access-list qp3sub any
---
entry QP3-subnet {
       if {
               source-address 10.1.2.0/24
       } then {
               Qosprofile qp3;
               replace-dscp;
}
---
enable diffserv examination ports all           - на других коммутаторах сети учитывать DSCP на всех входящих портах при выборе исходящего QoS-профайла.
  • Замечание: Свич будет изучать DSCP только если трафик не соответствует ACL. Иначе установки в ACL переопределяют настройки DiffServ.
[править] Пример: маркировка некоторого трафика, приходящего на порт с помощью ACL
entry MARK-COS-5-DSCP-EF {
       if match any {
               ethernet-source-address 5a:00:3b:00:45:5f;
       } then {
               qosprofile qp6;
               replace-dscp;
               replace-dot1p;
               permit;
       }
}

После установки файла с этой политикой на порту в направлении ingress, трафик от мака 5a:00:3b:00:45:5f будет маркироваться в соответствии с настройками QP6 (CoS и DSCP).

[править] Определение алгоритма работы планировщика очередей

В настоящее время ExtremeXOS поддерживает дисциплины обработки очередей strict-priority, weighted-round-robin и weighted-deficit-round-robin. На платформах Summit доступны только strict-priority и weighted-round-robin. По-умолчанию используется strict-priority.

configure qosscheduler [strict-priority | weighted-round-robin] - для всего коммутатора.
configure qosprofile   <qosprofile> use-strict-priority         - задать дисциплину strict-priority отдельно для нужного QoS-профайла.
show qosscheduler                                               - какая дисциплина используется в данный момент для всего коммутатора.
show qosprofile                                                 - для каких qos-профайлов переопределена дисциплина в strict-priority.

Можно задать режим weighted-round-robin для всего коммутатора, и при этом нужным QoS-профайлам вместо веса указать use-strict-priority. Тогда планировщик будет посылать пакеты из этих очередей в соответствии с дисциплиной strict-priority, и только когда там станет пусто, перейдёт к обработке остальных QoS-профайлов по алгоритму WRR.

[править] Настройка WRED в QoS-профайлах

  • Примечание. Подробно о механизме WRED можно прочитать в книге Вегешна Шринивас. Качество обслуживания в сетях IP. : Пер. с англ. - М. : Издательский дом "Вильямс", 2003. ISBN 5-8459-0404-8 (рус.)
configure qosprofile <qpX> [wred [{color [tcp [green | red] | non-tcp [any|red]] [{min-threshold <%>} {max-threshold <%>} {max-drop-rate <%>}]} | avg-weight <avg_weight>]] ports <port-list>
unconfigure qosprofile wred [ports <port_list>]
show wredprofile [ports <port-list>]

[править] Соображения о выборе значений avg-weight

WRED в своей работе ориентируется на среднюю глубину очереди. Она определяется по формуле

Dсредн = (1 - 1/(2n))*Dсредн.предыдущее + (1/2n)*Dтекущее

Видно, что текущая средняя глубина составляется из текущей глубины Dтекущее и предыдущего значения средней глубины Dсредн.предыдущее с некоторыми весовыми коэффициентами, зависящими от показателя степени двойки n. Параметр avg-weight в команде настройки WRED задаёт значение n в этой формуле. n может задаваться в диапазоне 1 - 15. Расчёт получающихся весовых коэффициентов в зависимости от значения n приведён в этом файле.

Если n мало, то основной вклад в текущую среднюю глубину составляет значение текущей глубины Dтекущее. Это значит, что Dсредн сильно подвержено флуктуациям заполненности очереди и сброс WRED производится довольно интенсивно. Если n велико, то основной вклад в текущую среднюю грубину составляет значение текущего среднего, рассчитанного в прошлый раз Dсредн.предыдущее. А в прошлом значении, в свою очередь, велико влияние позапрошлого. Т.е. при больших n значение Dсредн очень слабо реагирует на текущие флуктуации размера очереди, и изменяется плавно. Это может привести к недостаточно интенсивному сбросу пакетов, что грозит переполнением очереди и отбрасыванию не поместившихся в неё пакетов без учёта их приоритета (Tail Drop). В ExtremeXOS значением n по-умолчанию выбрано число 4. Cisco Systems на своём оборудовании рекомендует значение 9.

[править] Настройка гарантированной и максимально допустимой исходящей полосы для QoS-профайлов

CIR - уровень гарантированной полосы, которая выделяется для QoS-профайла на исходящем порту. Трафик в этой полосе метится зелёным. Значение CIR при настройке QoS-профайлов можно задавать как в виде % от скорости интерфейса (minbw), так и в виде значения скорости (committed_rate).
PR - уровень, превышающий CIR, до которого передача трафика QoS-профайла осуществляется при условии наличия свободной полосы, не занятой зелёным трафиком других профайлов. Если из других профайлов идёт уже НЕ гарантированный трафик (тоже больше CIR, но меньше PR), то обслуживание будет по алгоритму best effort вместе с трафиком других профайлов. Если же исходящий трафик QoS-профайла на порту превышает значение PR, то он отбрасывается. Значение PR при настройке QoS-профайлов можно задавать как в виде % от скорости интерфейса (maxbw), так и в виде значения скорости (peak_rate).

create/delete qosprofile [QP2| QP3 | QP4 | QP5 | QP6 | QP7]     - создавать/удалять дополнительные QoS-профайлы.

Определение параметров гарантии/шейпинга:
configure qosprofile egress <qpX> [{minbw <%>} {maxbw <%>} | {peak_rate <peak_bps> [K|M]}] [ports <port_list>]
configure qosprofile <qpX> [{minbw <%>} {maxbw <%>} | {{committed_rate <bps> [K|M]} {peak_rate <bps> [K|M]} | [ports <port_list>]

Задание максимальных значений заполняемости буфера и весов QoS-профайлов на определённых портах:
configure qosprofile <qpX> [[{maxbuffer <%>} {weight <1-16> | use-strict-priority}] | [maxbuffer <%> ports <port-list>]]
configure port <list> shared-packet-buffer <1-100>      - задать % разделяемого буферного пространства (общего), которое может использовать порт для буферизации пакетов.
show qosprofile [ports <port_list>]   - посмотреть, как настроено.

Настройка Egress Port Rate Limits

configure ports <port_list> rate-limit egress [no-limit | <cir-rate> [Kbps | Mbps | Gbps] {max-burst-size <burst-size> [Kb | Mb]}]

Механизм полисинга Meter

На Summit-X480 meter может быть применён только к входящему трафику. На Summit-X650 и Summit-X670 - к входящему и исходящему.

Создание и настройка.

create meter <metername>
delete meter <metername>
show meter <metername>
configure meter <metername> {committed-rate <cir> [Gbps | Mbps | Kbps]} {max-burst-size <burst-size> [Kb | Mb]} {out-actions [drop | set-drop-precedence {dscp [none | <dscp-value>]}}

Применение к трафику в ACL.

entry meter-traffic {
       if {
               ...
       } then {
              meter <metername>;
       }
}

[править] Диагностика

show ports [port-list] qosmonitor [congestion]- статистика распределения исходящих пакетов по QoS-профайлам на портах [сброшенным из-за перегрузки].
show qosprofile [ports {all | <port_list>}]   - посмотреть, как настроены QoS-профайлы.
show diffserv replacement                     - посмотреть, какое значение DSCP ставят у исходящего трафика QoS-профайлы. 
show diffserv examination                     - посмотреть таблицу соответствия кодов DSCP входящего трафика QoS-профайлам.
show dot1p                                    - посмотреть таблицу соответствия маркеров CoS 802.1p входящего трафика QoS-профайлам. 
show dot1p replacement                        - посмотреть, какие значения CoS 802.1p ставят у исходящего трафика QoS-профайлы (изменить невозможно).
show wredprofile {ports [<port-list> | all]}  - посмотреть параметры WRED.
show ports <port_list> wred {no-refresh}      - посмотреть статистику сброса WRED по портам.
clear counters wred                           - сбросить статистику wred.

[править] Virtural Routers (VR's)

VR'ы - это виртуальные маршрутизаторы в пределах одного устройства, обладающие каждый своей собственной таблицей маршрутизации. Каждый влан и ip-интерфейс во влане может существовать (быть созданным) лишь в одном VR'e одновременно. Возможно до 63 VR'ов на свич.

В каждом VR'e может быть создано ещё несколько VRF'ов. Они тоже имеют свои отдельные таблицы маршрутизации. Но не все протоколы маршрутизации могут фунцкионировать в VRF'ах. В релизе ExtremeXOS 12.6 в VRF'aх может работать только статическая маршрутизация. VRF'ов может быть довольно много (сколько точно, зависит от платформы).

Наиболее частое использование VR'ов - отделение таблицы маршрутизации с префиксами клиентских сетей от таблицы маршрутизации сети управления оборудованием. Это позволяет перенастраивать маршрутизацию клиентского трафика не влияя на маршруты сетей управления и не теряя связь до самого устройства.

На свиче всегда существует, как минимум, 3 системных VR'a. Они не могут быть удалены.

  • VR-Mgmt - VR, относящийся к специальному ethernet-порту управления. Этот порт существует для нужд управления и не может использоваться для передачи клиентского трафика.
  • VR-Control - VR, для внутрисистемных нужд.
  • VR-Default - VR, в котором по-умолчанию присутствуют все порты и все создаваемые вланы.

Создаваемые пользовательские VR'ы должны иметь имена отличные от существующих системных, а так же не совпадающие с именами вланов.

[править] Создание

create virtual-router <VR-NAME> {{type vrf} {vr <parent-vr>}}  - создание пользовательского VR'a {или VRF'a в VR'e}
delete virtual-router <VR-NAME>                                - удаление пользовательского VR'a (или VRFa}. Все вланы и порты в VRe должны быть удалены.
enable  virtual-router <VRF-NAME>                              - включить использование созданого VRF'a.
disable virtual-router <VRF-NAME>                              - отключить (не удаляя) использование VRF'a
configure vr <NAME> description <string>                       - задать описание VR'a.
unconfigure vr <NAME> description                              - удалить описание VR'a.
virtual-router <vr-name>                                       - переключиться в контекст нужного VR'a (чтобы давать команды в нём).

[править] Протоколы маршрутизации в VR'ах

Чтобы использовать протоколы маршрутизации в VR'ах, их нужно добавить. Это следует сделать перед тем, как создавать вланы в VR-е, назначать ему порты и использовать его для передачи трафика. Всего во всех VR'ах на свиче может существовать 64 протокола.
В это число входит:

  • 7 экземпляров основных протоколов в VR-Default (RIP, OSPF, BGP, PIM, ISIS, OSPFv3, RIPng). Они существуют всегда, их нельзя выключить.
  • 1 экземпляр протокола MPLS на все VR'ы. Тоже существует всегда.
  • 56 дополнительных экземпляров протоколов для пользовательских VR-ов, которые можно создавать и удалять по необходимости.
configure vr <NAME> add protocol <protocol-name>                - добавить протокол в VR.
configure vr <NAME> delete protocol <protocol-name>             - удалить протокол из VR.

После того, как пользовательский VR создан, в нём включена работа всех необходимых протоколов маршрутизации, можно добавлять в него порты и вланы.

[править] Работа с VR'ами

create vlan <VLAN_NAME> {vr <VR_NAME>}       - создание влана в нужном VR'e. Если vr <VR_NAME> пропущена, влан создаётся в VR'e текущего контекста.

По-умолчанию, все порты данных на свиче находятся в VR-Default эксклюзивно. Если порт находится в VR'е эксклюзивно, то в него не может быть выброшен влан, принадлежащий другому VR'у.

configure vr <NAME> delete ports <port-list>                    - удалить эксклюзивный VR с портов. Перед этим с портов должны быть удалены все вланы.
configure vr <NAME> add ports <port-list>                       - добавить эксклюзивно порты в один определённый VR.

Чтобы добавить порт во множество VR-ов надо удалить из него эксклюзивный VR, а потом просто выкинуть в порт вланы, принадлежащие разным VR'ам.

[править] Диагностика

show virtual-router {<NAME>}                                    - показать инфу по VR'ам, или конкретному VR'у.
show vlan {virtual-router <NAME>}                               - показать вланы в нужном VR'e.

[править] Маршрутизация L3

[править] Ресурсы устройства обеспечивающие эффективную маршрутизацию

Таблицы маршрутизации заполняются информацией в результате работы протоколов динамической маршрутизации и исходя из настроек статических маршрутов. Чтобы эффективно обрабатывать и форвардить пакеты, устройства снабжены специализированными микросхемами (ASIC's). В своей работе эти микросхемы используют чипы особого вида памяти, которая называется Content Addressable Memory (CAM). Как следует из названия, адресация информации происходит на основе содержащихся данных. Другими словами, по хешу данных (ip-адресу/маске), можно сразу же адресоваться к месту, где содержится MAC-адрес следующего перехода. Это обеспечивает форвардинг пакетов на скоростях wired-speed. Т.к. CAM реализован на специализированном железе, его объём ограничен и может перераспределяться в зависимости от задачи. Если количество маршрутов превышает возможности CAM, то CPU вынужден участвовать в обработке части трафика, что с одной стороны гораздо медленнее, с другой создаёт нагрузку на процессор. На свичах от Extreme Networks CAM представлен следующими таблицами: Internal LPM (Longest Prefix Match), External LPM, L3-Hash Table и Next-Hop Table.

Внешние таблицы LPM (External LPM) доступны только на BlackDiamond 8900xl и Summit-X480 и могут быть использованы для хранения маршрутов IPv4, arp-записей (local-hosts), мультикаст групп и активных ACL. Каким из этих ресурсов отдавать приоритет, зависит от настройки. Соответственно, настройка должна отражать потребности, которые обслуживает устройство.

Кроме внешних таблиц LPM существуют ещё внутренние (Internal LPM). Распределение ресурсов во внутренних почти не поддаётся настройке. На платформах Summit-x480 и BlackDiamond-8900xl в практически-значимых режимах внутренние таблицы могут содержать только IPv6-маршруты.

Ещё существуют таблицы L3-Hash и Next-Hop. Размер этих таблиц фиксирован. На большинстве платформ L3-Hash - единственное место, где могут храниться мультикаст записи IPv4 и локальные хосты IPv6 (аналог ARP-таблицы для IPv6). В Next-Hop содержится информация об адресах следующих переходов и на её значения ссылаются записи в таблицах LPM и L3-Hash.

Пространство записей в таблицах Internal-LPM и External-LPM разделяется на зарезервированное и незарезервированное. Зарезервированное пространство используется исключительно для хранения L3-маршрутов (префиксов). Незарезервированное пространство доступно для local-host записей (arp-таблица). в External-LPM объём зарезервированного пространства может настраиваться.

Ресурсы таблиц на платформе Summit-X480 в различных режимах распределения CAM
Internal-LPM External-LPM L3-Hash Next-Hops
l2-only, acl-only, none 16 352 N/A 16 384 16 384
l2-and-l3-and-acl 8 192 (b) 131 040 16 384 16 384
l2-and-l3-and-ipmc 8 192 (b) 131 040 16 384 16 384
l2-and-l3 8 192 (b) 262 112 16 384 16 384
l3-only 8 192 (b) 524 256 16 384 16 384

(b) - записи могут содержать только IPv6 маршруты.

[править] Настройка

configure forwarding external-tables [ l3-only | l2-only | acl-only | l2-and-l3 | l2-and-l3-and-acl | l2-and-l3-and-ipmc | none ]

Эта команда определяет режим распределения памяти CAM. Для применения изменений необходима перезагрузка.

configure iproute reserved-entries [ <num_routes_needed> | maximum | default ]

Определяет количество записей в таблице External LPM, которые зарезервированы для хранения L3-маршрутов. Оставшиеся записи доступны для хранения arp-таблицы.

Анализ задач, которые могут ставится перед объединённым ядром сети показывает, что имеет смысл оставить настройку по-умолчанию.

configure iproute reserved-entries 65000
configure forwarding external-tables l2-and-l3          (после изменения режима нужен reboot)

При этом надо держать в голове, что максимальное количество маршрутов на ядре не должно превышать 65000.
Если в ходе работы видно, что количество arp-записей не превышает значения Max_LPM_Entries - Reserved_L3_Entries, и при этом есть необходимость в увеличении количества L3-маршрутов на устройствах, значение reserved-entries можно повысить. Это возможно сделать без перезагрузки.

Важное замечание: Если свич Summit участвует в работе MSTP и в топологии присутствуют Cisco Catalyst, то необходимо защищать не-STP-шные порты ACL, фильтрующими BPDU типа PVST, которые могут придти от клиентов (см. подробнее разделы об STP). Правила этого ACL основаны на критерии мак-адреса назначения. В режиме форвардинга l2-and-l3-and-acl критерий мак-адреса источника/назначения в ACL недоступен, поэтому настроенные ранее фильтры действовать не будут. В рабочем ядре это рано или поздно приведёт к появлению в STP-топологии BPDU типа PVST, и свичи Cisco Catalyst, работающие в режиме MSTP, переведут ядерные порты, откуда прилетят такие фреймы, в состояние PVST-Inconsistency и заблокируют их. Поэтому на свичах, где используются фильтрующие BPDU ACL, режим l2-and-l3-and-acl устанавливать не стоит.

[править] Диагностика

show iproute reserved-entries [statistics]
show forwarding configuration

Эти команды позволяют узнать текущий и настроенный режим распределения CAM, степень заполнения ёмкостей таблиц существующими маршрутами, а так же теоретические максимумы в различных режимах распределения CAM.

Привет вывода:

switch # show iproute reserved-entries
                        IPv4       # Reserved Routes            Minimum #
Slot  Type              Routes      IPv4   (or IPv6)            IPv4 Hosts
----  ----------------  --------   ------  ------------------   ----------
1     X650-24x(SSns)    Internal    12240  (  6120) [default]           16

Maximum supported # IPv4 (or IPv6) Reserved Routes:
X440                    Internal       32  (    16)
"e"-series              Internal      480  (   240)
"a"-series              Internal    12256  (  6128)
X650, E4G-200           Internal    12256  (  6128)
X460, E4G-400           Internal    12256  (  6128)
X670 series             Internal    16352  (  8176)
X480(40G4X)             Internal    16352  (  8176)
X480                    Internal   262112  (  int.)

Note:  IPv4 Hosts can occupy unused HW Route table space,
       unless # Reserved Routes is "maximum".

[править] Базовая настройка маршрутизации на свичах от Extreme Networks

Порядок настройки:

  • Создать и настроить 2 или более вланов.
  • Для каждого влана, который участвует в маршрутизации ip, назначить ip-адрес:
configure vlan <name> ipaddress <ip/mask> | ipv6-link-local | eui64 <ipv6_address_mask>
configure vlan <name> add secondary-ipaddress <ip/<mask>                   - добавление дополнительных ip-адресов во влане.
  • Настроить дефолт
configure iproute add default <GW> {<metric>} {multicast | multicast-only | unicast | unicast-only} {vr <NAME>}
  • Включить маршрутизацию ip на нужных вланах, или на всех.
enable ipforwarding {ipv4 | broadcast | ignore-broadcast | fast-direct-broadcast} vlan <name>
  • Если требуется, настроить протокол маршрутизации.

Фичи:

configure iproute add <network/mask> <GW> {bfd} {metric} {multicast|multicast-only|unicast|unicast-only} {vr <NAME>}
                                                               - настройка статического маршрута.
configure iproute {ipv4} priority [источник] <num> {vr <NAME>}
                                                               - настройка приоритетов источников маршрутной информации
                                                                 (аналог Administrative Distance у Cisco).
enable/disable iproute compression {vr <name>}                 - настройка компрессии маршрутов (см. ExtremeXOS ConceptsGuide).
enable/disable icmp ...                                        - настройка параметров работы устройства с ICMP:

[править] Настройка максимального количество шлюзов для Equal Cost MultiPath (ECMP)

configure iproute sharing max-gateways <num>
enable iproute sharing

При значении количества маршрутов, приближающихся к максимуму для выбранного режима CAM, злоупотребление высокими значениями (>2) может привести к нехватке пространства в LPM-таблицах. При нехватке возможностей LPM, лучше отключить эту фичу совсем.

[править] Диагностика

show ipconfig
show iproute ...
show iparp ...
show iparp stats ...
show configuration rtmgr        - показать конфигурация модуля Route Manager (RTMGR).

[править] OSPF

Описаны только процедуры конфигурации протокола на ExtremeXOS. Теоретические концепции работы протокола не затрагиваются.

[править] Настройка основных режимов работы протокола

configure ospf routerid <IP>                               - назначение Router-ID маршрутизатору.
configure ospf metric-table 10M 1000 100M 100 1G 10 10G 1 40G 1 - задание стоимости интерфейсов на основе их скорости.
configure ospf ase-limit <number> {timeout <seconds>}      - ограничение на количество External LSA. При достижении значения коммутатор
                                                             переходит в режим overflow на timeout секунд.
<enable | disable> ospf capability opaque-lsa              - Если включены, желательно чтобы на всех устройствах c OSPF.
configure ospf restart [none | planned | unplanned | both] - в каких случаях маршрутизатор выполняет graceful restart.
configure ospf restart grace-period <seconds>              - время которое маршрутизатор просит у helper-ов для выполнения graceful restart.
configure ospf [vlan <name> | area <ID> | virtual-link <router-id> <area-id>] restart-helper [none | planned | unplanned | both] - в каких случаях
                                                             маршрутизатор должен выполнять роль HELPER-а при graceful-рестарт'е соседа.
disable ospf [vlan <name> | area <ID> | virtual-link <router-id> <area-id>] restart-helper-lsa-check - будучи в роли HELPER'a не прекращать процедуру
                                                                                                       graceful-restart для соседа при появлении LSA,
                                                                                                       которое нужно передать перезапускающемуся соседу.
configure ospf add virtual-link <router-id> <area-id>      - настройка Virtual Link'a в транзитной зоне на ABR'aх.
enable iproute sharing                                     - разрешение одновременное использование и балансирование нагрузки между маршрутами
                                                             с одинаковой стоимостью.
enable loopback-mode vlan <name>                           - пометить SVI влана как loopback-интерфейс (для имитации подключенного маршрута).

[править] Настройка зон

create ospf area <ID>                                               - создание новой зоны (зона 0 существует всегда, создавать не нужно).
configure ospf area <ID> stub [summary | nosummary] stub-default-cost <cost>             - определение зоны как STUB.
configure ospf area <ID> nssa [summary | nosummary] stub-default-cost <cost> {translate} - определение зоны как NSSA.
                                                                      опция translate определяет, переводить ли LSA type 7
                                                                      в LSA type 5. Может включаться только на ABR'ах. Включение на IR'ах
                                                                      может привести к ошибкам маршрутизации. Если не включён нигде,
                                                                      автоматически выбирается 1 ABR на котором происходит перевод.
configure ospf add vlan <name> area <ID> {passive|link-type ...}    - назначение ip-интерфейса влана определённой зоне.
configure ospf vlan <name> authentication md5 <key-id> <key-string> - аутентификация MD5 для ip-интерфейса влана.
configure ospf vlan <name> area <ID>
configure ospf vlan <name> priority <0-255>                         - назначение приоритета маршрутизатора на интерфейсе влана. По-умолчанию 1.

Внимание! Перед удалением ip-адреса из ip-интерфейса влана, который добавлен в OSPF, необходимо сначала убрать этот интерфейс из OSPF. Правильный порядок таков:

configure ospf delete vlan <name>
unconfigure vlan <name> ipaddress

Если не следовать этому правилу, то иногда (в ~20% случаев) при снятии ip-адреса из влана рушится процесс OSPF, что приводит к перезагрузке всего коммутатора. Это справедливо по крайней мере для ExtremeXOS 12.6.

[править] Таймеры

configure ospf vlan <vlan_name> timer <retransmit-interval> <transit-delay> <hello-interval> <dead-interval> {<wait-timer-interval>}
configure ospf area <ID>        timer <retransmit-interval> <transit-delay> <hello-interval> <dead-interval> {<wait-timer-interval>}
configure ospf virtual-link <router-id> <area-ID> timer <retransmit-interval> <transit-delay> <hello-interval> <dead-interval>
  • Retransmit interval - время перед повторной отправкой LSA, получение которой не было подтверждено соседом (ACK не был получен).
  • Transit delay - время необходимое для передачи LSA через инетрфейс. Должно быть больше 0.
  • Hello interval - интервал отправки HELLO. По-умолчанию 10 сек для broadcast сети.
  • Dead Interval - время отсутствия HELLO от соседа, после которого считается, что сосед отключился. По-умолчанию, 4 * Hello.
  • Wait Timer Interval - время между поднятием интерфейса и началом процедуры выбора DR и BDR. Должно быть больше Hello.

[править] Суммирование

configure ospf area <ID> add range <network>/<mask> advertise type-3    - суммирование маршрутов между зонами.
configure ospf ase-summary add <network>/<mask> cost <cost>             - суммирование маршрутов при редистрибуции из внешних источников.

[править] Редистрибуция маршрутов в домен маршрутизации OSPF

enable ospf export [bgp|direct|e-bgp|i-bgp|rip|static|isis|isis-level-1|isis-level-1-external|isis-level-2|isis-level-2-external] [cost <cost> type [ase-type-1|ase-type-2] {tag <number>} | <policy-map>]
                                                                        - включение редистрибуции из нужного внешнего источника.
disable ospf export [bgp|direct|e-bgp|i-bgp|rip|static|isis|isis-level-1|isis-level-1-external|isis-level-2|isis-level-2-external]
                                                                        - выключение редистрибуции.
Пример:
enable ospf export direct cost 1000 type ase-type-2                     - редистрибуция маршрутов к сетям подключенных интерфейсов.

[править] Фильтрация маршрутов

По крайней мере в ExtremeXOS v12.6.1.3 включение фильтрации по ACL приводит к глюкам в распространении маршрутов.

[править] Пример фильтрации маршрутов между зонами

1) В текстовом редакторе или на свиче создаём файл interblk.pol следующего содержания:

entry interfil {
       if match any {
               nlri 10.50.3.0/24;
       } then {
               deny;
       }
}
entry permit_all {
       if {
       } then {
               permit;
       }
}

2) Заливаем файл на свич и проверяем, что он там:

ls
show policy interblk

3) Проверяем синтаксис

check policy interblk

4) Применяем фильтр на ABR'e:

configure ospf area 0.0.0.0 interarea-filter interblk          - применение
configure ospf area 0.0.0.0 interarea-filter none              - отключение фильтрации

5) Проверяем, что применено:

show ospf area 0.0.0.0
show policy
[править] Пример фильтрации маршрутов при редистрибуции

1) В текстовом редакторе или на свиче создаём файл extfil.pol следующего содержания:

entry exfil_1 {
       if match any {
               nlri 10.20.2.0/24;
       } then {
               cost-type ase-type-1;
       }
}
entry exfil_2 {
       if match any {
               nlri 10.30.2.0/24;
       } then {
               cost-type ase-type-2;
       }
}
entry permit_all {
       if {
       } then {
               permit;
       }
}

2) Заливаем файл на свич и проверяем, что он там:

ls
show policy extfil

3) Проверяем синтаксис

check policy extfil

4) Вешаем политику на редистрибуцию подключенных маршрутов в домен OSPF:

enable ospf export direct extfil

5) Проверяем

show policy
show iproute
show ospf lsdb detail

[править] Пример настройки резервирования в зоне NSSA

На основном коммутаторе:

configure vlan vlan_743 ipaddress 10.128.24.154/29
enable ipforwarding vlan_743
create ospf area 10.128.24.152
configure ospf area 10.128.24.152 nssa nosummary stub-default-cost 10 translate
configure ospf add vlan vlan_743 area 10.128.24.152
configure ospf vlan vlan_743 cost 10
configure ospf vlan vlan_743 timer 5 1 1 4 4
configure ospf vlan_743 priority 0
configure ospf vlan vlan_743 authentication md5 1 <pass>

На резервном коммутаторе:

configure vlan vlan_743 ipaddress 10.128.24.153/29
enable ipforwarding vlan_743
create ospf area 10.128.24.152
configure ospf area 10.128.24.152 nssa nosummary stub-default-cost 20
configure ospf add vlan vlan_743 area 10.128.24.152
configure ospf vlan vlan_743 cost 20
configure ospf vlan vlan_743 timer 5 1 1 4 4
configure ospf vlan_743 priority 0
configure ospf vlan vlan_743 authentication md5 1 <pass>

[править] Диагностика

show configuration ospf
show iproute [origin ospf]
show iproute <ip-address> <range-by-mask>
show ipconfig
show ospf
show ospf area detail
show ospf interfaces detail
show ospf lsdb [all] [detail]
show ospf virtual-lin

[править] Скриптование

show management				- показывает разрешен ли cli-scripting, постоянны ли даваемые скриптами команды, режим обработки ошибок.
enable cli scripting [permanent]		- включает режим скриптования. permanent - и для новых сессий.
enable cli mode [persistent|non-persistent]	- делать ли выполненные в скриптах команды постоянной частью общего конфига, или же хранить их лишь до
						  перезагрузки. По-умолчанию non-persistent.
configure cli mode scripting [abort-on-errors|ignore-errors] - настройка режима обработки ошибок. По-умолчанию ignore errors.
enable|disable cli scripting output		- если disable отображаются только команды show vars. Если enable - все команды и результат выполнения.

Каждая сессия имеет свой набор переменных и их занчений. Можно сохранять до 5 переменных за раз перед их заменой, чтобы потом восстановить их значения.

save var key <keyID> [<var1> <var2> <var3>..]	- сохранить до 5 значений в keyID.
load var key <keyID> [<var1> <var2> <var3>..]	- восстановить до 5 сохранённых в keyID значений в переменные.
delete var key <keyID>				- удалить сохранённый набор значений.

[править] Создание скриптов

Существуют 2 режима создания скриптов:

  • просто создаём файл скрипта с командами - если нужно запускать скрипт вручную. Создаём и редактируем скрипт в ASCII-формате любым текстовым редактором, затем заливаем его на свич (tftp, ssh).
  • создание скрипта с Universal Port - если нунжо запускать сприпт автоматически по какому-либо событию. Точно так же как и в 1), только с использованием universal port profile.
# - символ коментария строки

[править] Выполнение скриптов

Осуществляется ручной загрузкой и стартом скрипта, либо с помощью Universal Port. Для ручного выполнения скрипта его надо загрузить на свич и выполнить команду:

load script <filename> {arg1} {arg2} ... {arg9}

Скрипты Universal Port называются профайлами и запускаются при возникновении определённых тригерных событий. Например, обнаружение устройства на порту, потеря устройства на порту, пользовательская аутентификация и разлогинивание.

Варианты отмена выполнения скрипта.

  • нажать CTRL-C во время выполнения скрипта;
  • настроить отмену выполнения при возникновении ошибок: configure cli mode scripting abort-on-error
  • в тексте ввести команду return <statusCode> чтобы прекратить выполнение и поместить код возврата в $STATUS.

[править] Переменные

[править] Список предопределённых переменных (доступны во всех скриптах)

$STATUS - результат выполнения последней команды.
          Значения от -100 до 100 зарезервированы и устанавливаются автоматически.
          Можно переопределить значение командой return <statusCode>
		 0   - успешное завершение команды;
		-53 - переменная не найдена;
		-57 - превышена глубина WHILE;
		-78 - script timeout.
$CLI.USER		- имя пользователя, который запустил родительский CLI.
$CLI.SESSION_TYPE	- тип сессии пользователя.
$CLI.SCRIPT_TIME_REMAINING - создаётся если дана команда configure cli script timeout <sec>
			- если скрипт не запущен, содержит значение из настроенного таймаута.
			- если скрипт прерван по таймауту, содержит 0.
			- если скрипт завершился сам до таймаута, содержит число оставшихся секунд.
$CLI.SCRIPT_TIMEOUT	- создаётся если дана команда команда configure cli script timeout <sec>.
			  Возвращает текущее значение таймаута. Если нет запущенных скриптов, возвращает настроенное значение таймаута.
$CLI.OUT		- содержит вывод последней команды show.
			  Перед использованием необходима инициализация (set var CLI.OUT 0).
			  После использования необходимо удаление (delete var CLI.OUT).

[править] Определение собственных переменных

set var <name> <expression>

Примеры:

set var x 100
set var x ($x + 2)
set var y ($x - 100)
show var [<varname>]	- посмотреть все переменные, или значение определённой переменной.

При работе с переменными надо помнить следующее:

  • имена чувствительны к регистру, ограничены 32 символами.
  • имя переменной должно быть уникально.
  • ссылаться на значение переменной можно так: $X или $(X)
  • если переменная уже существует, её значение переписывается. Ошибок не выдаётся.
  • <expression> может быть константой, другой переменной, комбинацией с использованием операторов и функций.
  • только команда set var поддерживает вычисление выражений.
  • если переменная содержит специальные символы (+-/*), то должна быть помещена в круглые скобки. - set var z ( ($x) + 100 ).
  • если переменная со спец.символами используется в TCL-функции, она должна быть заключена в фигурные скобки: set var $TCL(string length ${CLI.USER})
  • eсли нужно использовать специальные символы ($" итд) как обычные, их требуется экранировать: \$, \".
set var variname \$<vname>
set var $CLI.USER "Robert \"Bob\" Smith"

[править] Операнды

Поддерживаемые операции в выражениях (в порядке убывания приоритета):

  • - (унарный минус)
  • + (унарный плюс)
  • ~ побитовое НЕ
  •  ! логическое НЕ
  • * умножение
  • / деление
  •  % остаток
  • + плюс
  • - минус
  • << смещение влево (только для целочисленных операндов)
  • >> смещение вправо
  • < булево меньше
  • > булево больше
  • <= меньше или равно
  • >= больше или равно
  • == равно
  •  != не равно
  • & побитовое И
  • ^ побитовое эксклюзивное ИЛИ
  • | побитовое ИЛИ
  • || логическое ИЛИ
  • && логическое И
  • x?y:z if-then-elst (как в C)

[править] Управляющие структуры

Вложение возможно до 5 уровней. CTRL-C прерывает все циклы.

IF (<expression>) THEN
     <statements>
ELSE
    <statements>
ENDIF
WHILE(<expresson>) DO
    <statements>
ENDWHILE

[править] Встроенные функции

$MATCH(string1, string2)	- сравнивает 2 строки. Возвращает
				  -1	string1 меньше string2
				  0 	string1 равна string2
				  1 	string1 больше string2
$READ(prompt)			- отображает prompt и ожидает пользовательского ввода.
$UPPERCASE(string)		- возвращает строку в верхнем регистре.
$VAREXISTS(varname)		- 0 - если переменная существует, не 0 если переменной не существует.

$TCL(function args)		- запуск TCL-функции.

[править] Список поддерживаемых tcl-функций

after		- системная функция. Запускает команду после временной задержки.
append		- обработка строк. Добавляет к переменной.
binary		- обработка строк. Вставляет и выделяет поля из бинарных строк.
clock		- системная функция. Получает и управляет временем.
concat		- обработка списков. Объединяет списки вместе.
expr		- математика. Вычисляет выражение.
join		- обработка списков. Возвращает строку, являющуюся объединением строк списка.
lappend 	- обработка списков. Добавляет элементы списка в переменную.
lindex		- обработка списков. Получает элемент из списка.
linsert 	- обработка списков. Вставляет элемент в список.
list		- обработка списков. Создаёт список.
llength 	- обработка списков. Возвращает число элементов списка.
lrange		- обработка списков. Возвращает один или более соседних элементов списка.
lreplace	- обработка списков. Замещает элементы списка новыми.
lsearch		- обработка списков. Посмотреть, содержит ли список определённый элемент.
lsort		- обработка списков. Сортирует элементы списка.
regexp		- обработка строк. Сопоставляет строку с регулярным выражением.
regsub		- обработка строк. Выполнение подстановки на основе соответствия регулярному выражению.
re_syntax	- обработка строк. Синтаксис регулярного выражения TCL.
split		- обработка списков. Разбивает строку на элементы TCL-списка.
string		- обработка строк. Манипуляция строками.

[править] Вложенные скрипты

ExtremeXOS поддерживает 3 уровня вложенности скриптов. Пример вложенности:

sitch# load script x1.xsf

содержание скрипта x1.xsf:

Cmd 1
Cmd 2
load script x2.xsf
Cmd 3
Cmd 4

содержание скрипта x2.xsf:

Cmd 1
Cmd 2
load script x3.xsf

[править] UNIVERSAL PORT MANAGEMENT

Профайлы можно получать на сайте Extreme Networks, от разработчиков или создавать самому.

На свиче может быть много профайлов, но одновременно может быть запущенным только один.

Профайлы бывают статические и динамические.

  • Статические не запускаются по каким-то событиям. Только вручную или из других скриптов. Не применяются к индивидуальным портам, устройствам или пользователям. Могут делать общеситсемные изменения конфигурации. Изменения, сделанные в статических профайлах являются постоянными, записываются в конфиг и сохраняются при перезагрузках. Применяются в основном для автоматизации начального конфигурирования свичей, либо для ручного применения каких-то конфигурационных шаблонов.
  • Настройки сделанные в динамических профайлах являются временными, не добавляются в конфиг и не переживают перезагрузки. Это поведение настраивается.
    Динамические профайлы запускаются по возникновению следующих событий:
    • обнаружение или отключение устройства.
    • аутентификация и разлогинивание пользователя.
    • время дня.
    • сообщения от Event Management System (EMS).

Правила написания профайлов:

  • максимум 5000 символов в профайле;
  • максимум 128 профайлов на свич;
  • профайлы хранятся как часть файла конфигурации свича;
  • copy/past - единственный метод для перемещения данных профайла с помощью CLI.
  • по-умолчанию статические профайлы всегда persistent а динамические - non-persistent.

[править] Триггеры запуска профайлов

  • Device Triggers
    Запускаются, когда устройства подключается (device-detect type) или отключается(device undetect type) от порта. Используются для подготовки настроек порта. Для работы на порту должен быть включён LLDP. На порту может быть один device-detect и один device-undetect профайл.
  • User authentication Triggers
    Активируется, когда пользователь или устройство логинится в сети используя фичу Network Login. Для Network Login нужен RADIUS. Так же аутентификация может быть по маку или на основе веба.
  • Time Triggers
    Запускают профайлы на основе времени дня или с заданным периодом.
  • EMS Triggers
    Обычно используются для изменения настроек свича в ответ на событие свича или сети. События на которые нужно реагировать задаются фильтром. Формат component.subcomponent.condition. Все компоненты и подкомпоненты, для которых можно фильтровать события показываются по команде
show log components
show log enents all - отображает все условия и события которые можно фильтровать. 

[править] Команды конфигурации категории Non-Persistent-Capable

ACL

configure access-list add <dynamic_rule> [ [[first | last] {priority <p_number>} {zone <zone>} ] | [[before|after] <rule>] | [ priority <p_number> {zone <zone>} ]] [ any | vlan <vlanname> | ports <portlist> ] {ingress | egress}
configure access-list delete <ruleName> [ any | vlan <vlanname> | ports <portlist> | all] {ingress | egress}

LLDP

configure lldp ports <portlist> [advertise|don't-advertise]...

PORT

disable port [<port-list>|all]
enable port [<port_list> | all]
disable jumbo-frame ports [<port-list>|all] 
enable jumbo-frame ports [<port-list>|all] 

PoE

configure inline-power label <string> ports <port_list>
configure inline-power operator-limit <milliwatts> ports [all |<port_list>]
configure inline-power priority [critical | high | low] ports <port_list>
disable inline-power
enable inline-power
disable inline-power ports [all | <port_list>]
enable inline-power ports [all | <port_list>]
disable inline-power slot <slot>
enable inline-power slot <slot>
unconfigure inline-power priority ports [all | <port_list>]

VLAN

configure {vlan} <vlan_name> add ports [<port_list> |all] {tagged | untagged} {{stpd} <stpd_name>} {dot1d | emistp | pvst-plus}}
configure ip-mtu <mtu> vlan <vlan_name>

QoS/RateLimit

configure ports <port_list> {qosprofile} <qosprofile>

[править] Universal Port Variables

[править] Общие переменные (доступны во всех скриптах)

$STATUS			- статус выполнения последней команды
$CLI.USER		- имя пользователя, который запустил CLI.
$CLI.SESSION_ID		- Этот идентификатор доступен для обратного события, когда девайс или юзер отваливается по таймауту.
$CLI.SESSION_TYPE	- тип сессии (telnet, ssh...)
$EVENT.NAME		- событие, которое активировало этот профайл.
$EVENT.TIME		- время, когда произошло событие (с начала unix-эпохи?)
$EVENT.TIMER_TYPE	- тип таймера (периодичный и непериодичный)
$EVENT.TIMER_NAME	- имя таймера, который вызывает Universial Port.
$EVENT.TIMER_LATE_SECS	- разница между временем, когда тикнул таймер и когда запустился профайл (в секундах)
$EVENT.PROFILE		- имя профайла, который сейчас запущен.

[править] Переменные пользовательских профайлов

$EVENT.USERNAME		- имя аутентифицированного пользователя. Содержит мак-адрес в случае доступа на основе мака.
$EVENT.NUMUSERS		- количество аутентифицированных посетителей на порту, после того, как случилось событие.
$EVENT.USER_MAC		- мак-адрес пользователя.
$EVENT.USER_PORT	- порт, ассоциированный с этим событием.
$EVENT.USER_VLAN	- влан, ассоциированный с этим событием или пользователем.
$EVENT.USER_ALL_VLANS	- когда пользователь аутентифицирован во множество вланов, эта переменная содержит их список.
$EVENT.USER_IP		- ip-адрес пользователя (если применим). Если нет, эта переменная пуста.

[править] Переменные профайлов устройств (device-profile)

$EVENT.DEVICE		- Device identification string. Возможные занчения:
			  AVAYA_PHONE, GEN_TEL_PHONE, ROUTER, BRIDGE, REPEATER, WLAN_ACCESS_PT, DOCSIS_CABLE_SER, STATION_ONLY, OTHER.
$EVENT.DEVICE_IP	- ip-адрес девайса (если доступен). Если нет, пусто.
$EVENT.DEVICE_MAC	- мак-адрес девайса.
$EVENT.DEVICE_POWER	- мощьность девайса в миливаттах. Пусто, если не доступна.
$EVENT.DEVICE_MANUFACTURER_NAME - производитель устройства.
$EVENT.DEVICE_MODEL_NAME - модель устройства.
$EVENT.USER_PORT	- порт, соответствующий событию.

[править] Переменные профайлов EMS

$EVENT.NAME		- сообщение события.
$EVENT.LOG_DATE		- дата события.
$EVENT.LOG_TIME		- время события.
$EVENT.LOG_COMPONENT_SUBCOMPONENT - компонент и подкомпонент события, которые отображаются в show log components
$EVENT.LOG_EVENT	- состояние события, из списка show log events
$EVENT.LOG_FILTER_NAME	- EMS-фильтр, который активировал профайл.
$EVENT.LOG_SEVERITY	- уровень северити этого события, который определён в EMS.
$EVENT.LOG_MESSAGE	- сообщение о событии с аргументами в формате %1%
$EVENT.LOG_PARAM_0 to _9 - аргументы события.

[править] Настройка Universal Port

show upm event <event-type>		- посмотреть, какие события соответствуют каким профайлам.
show upm profile <name>			- посмотреть содержимое профайла.
show upm timers				- посмотреть список таймеров.
show upm history {profile <profile-name> | event <upm-event> | status [pass | fail] | timer <timer-name> | detail} - история запуска.
show upm history exec-id <number>
configure upm profile <profile-name> maximum execution-time <seconds>	- создать и настроить новый профайл.
edit upm profile <name>			- редактирование профайла.
disable upm profile <profile-name>	- выключение/включение профайла.
enable upm profile <profile-name>
delete upm profile <profile-name>	- удаление профайла.
configure upm event <upm-event> profile <profile-name> ports <port_list> - настройка device-event-trigger, где <upm-envent> может быть
									   device-detect или device-undetect
create upm timer <timer-name>						 - создание таймера upm.
configure upm timer <timer-name> after <time-in-secs> [every <seconds>]	 - настройка таймера upm.
configure upm timer <timer-name> at <month> <day> <year> <hour> <min> <sec> [every <seconds>]
configure upm timer <timer-name> profile <profile-name>			 - настройка триггера по таймеру.
delete upm timer <timer-name>						 - удаление таймера upm.
create log filter <name> {copy <filter-name>}			 - создание фильтра журнальных событий EMS
configure log filter <name> [add|delete] {exclude} events [<event-condition> | [all | <event-component>] {severity <severity> {only}}]
configure log filter <name> [add|delete] {exclude} events [<event-condition> | [all | <event-component>] {severity <severity> {only}}] [match | strict-match] <type> <value>	- его настройка.
create log target upm {<upm_profile_name>}			 - создание журнальной цели для получения сообщения о событии
delete log target upm {<upm_profile_name>}			 - удаление журнальной цели (триггера).
configure log target upm {<upm_profile_name>} filter <filter-name> {severity [[<severity>] {only}]}
configure log target upm {<upm_profile_name>} match {any | <regex>}
enable log target upm {<upm_profile_name>}			 - после завершения настроек включение работы триггера.
unconfigure upm event <upm-event> profile <profile-name> ports <port_list> - удаление триггера устройства или пользователя.
unconfigure upm timer <timerName> profile <profileName>		   - удаление триггера времени.
run upm profile <profile-name> {event <event-name>} {variables <variable-string>} - ручной запуск профайла для теста.
run upm profile afterhours

[править] Примеры скриптов

[править] Пример 1

Создание 100 вланов с ip-адресами 10.1.1.1/16 - 10.100.1.1/16

enable cli scripting
set var count 1
while ($conut < 101) do
create vlan v$count
configure vlan v$count tag $count
configure vlan v$count ipaddress 10.$(count).1.1/16
set var count ($count + 1)
endwhile
show vlan

[править] Пример 2

Осуществление 60-секундной задержки перед продолжением выполнения.

set var temp $TCL(after [expr 60*1000])

[править] Пример 3

Отображение даты и времени.

set var CLI.OUT 0
show switch
set var date $TCL(lrange ${CLI.OUT} 27 29)
set var year $TCL(lrange ${CLI.OUT} 31 31)
set var date $TCL(linsert $date 3 $year)
set var time $TCL(lrange ${CLI.OUT} 30 30)
show var date
show var time

[править] Пример 4

Сортировка FDB в сторону уменьшения.

set var CLI.OUT 0
show fdb
set var x1 $TCL(split ${CLI.OUT} "\n")
set var x2 $TCL(lsort -decreasing $x1)
set var output $TCL(join $x2 "\n")
show var ouput

[править] Пример 5

Получение fdb age маков.

set var CLI.OUT 0
show fdb
set var input $TCL(split ${CLI.OUT} "\n")
set var y1 $TCL(lsearch -glob $input *age*)
set var y2 $TCL(lindex $input $y1)
set var y3 $TCL(split $y2 " ")
set var y4 $TCL(lindex $y3 0)
show var y4

[править] Пример 6

Контрль широковещательных штормов.
Эта фича экспериментальная, пока не доработана в продакшене не используем.

config port 1-23 rate-limit flood broadcast 5000	- установка порога (в пакетах в секунду), при превышении которого блочить порт.
create upm profile bcast_rt_lim_pdown		- формируем профайл следующего содержания:
enable cli scripting
disable clipaging
set var CLI.OUT " "
show ports 1-24 rate-limit flood no-refresh
set var rlf_strings $TCL(split ${CLI.OUT} "\n")
set var num_strings_rlf $TCL(llength $rlf_strings)
set var count 4
while ($count < ($num_strings_rlf-4)) do
    set var rate_exceeded $TCL(lindex $rlf_strings $count)
    set var rate_exceeded $TCL(string range $rate_exceeded 69 81)
        if ($rate_exceeded != "0") then
            set var numprt ($count-3)
            disable port $numprt
            create log entry "STORM_CONTROL_SCRIPT: disable port $numprt by flood rate-limit"
            clear counters ports
            delete var numprt
        endif
        set var count ($count+1)
endwhile
delete var CLI.OUT
delete var rlf_strings
delete var num_strings_rlf
delete var count
delete var rate_exceeded
.
create upm timer bcast_rt_lim_pdown_timer						- создаём таймер.
configure upm timer bcast_rt_lim_pdown_timer profile bcast_rt_lim_pdown		- делаем таймер тригером профайла.
configure upm timer bcast_rt_lim_pdown_timer after 10 every 10			- запускаем таймер через 10 сек с отсчётами в 10с.
configure log filter "DefaultFilter" add exclude events UPM.Msg.upmMsgExshLaunch	- чтобы не засорять лог сообщениям о запуске.

[править] Пример 7

Скрипт createVlanAddPort.xsf создаёт вланы из диапазона и разбрасывает их на указанные порты. Имена вланов соответствуют шаблону vlan_<x>, где <x> - номер влана. Использование:

load script createVlanAddPort.xsf <VLANS> <PORTS>
    пример:
load script createVlanAddPort.xsf 500-599,650-657,310  4,12-15,8    - создаёт вланы 310 и все в диапазонах от 500 до 599 и с 650 до 657
                                                                      и разбрасывает их в порты 4, с 12 по 15, и в 8.

текст:

#
# Usage:
# load script createVlanAddPort.xsf $VLANS $PORTS
#
set var i 0
set var vlanId 0
set var vlanList $TCL(split ${CLI.ARGV1} ",")
set var vlanListLength $TCL(llength ${vlanList})
set var portList $TCL(split ${CLI.ARGV2} ",")
set var rangeMark "\-"
set var vlanId $TCL(lindex ${vlanList} $i)
while ($i < $vlanListLength) do
        set var rangeMatch $TCL(regexp -all ${rangeMark} ${vlanId})
        if ($rangeMatch > 0) then
                set var vlanIdRange $TCL(split ${vlanId} "-")
                set var vlanIdStart $TCL(lindex ${vlanIdRange} 0)
                set var vlanIdEnd $TCL(lindex ${vlanIdRange} 1)
                set var vlanId $vlanIdStart
                while ($vlanId < $vlanIdEnd+1) do
                        create vlan vlan_$vlanId
                        configure vlan vlan_$vlanId tag $vlanId
                        configure vlan vlan_$vlanId add port $portList tag
                        set var vlanId ($vlanId + 1)
                endwhile
        else
                create vlan vlan_$vlanId
                configure vlan_$vlanId tag $vlanId
                configure vlan vlan_$vlanId add port $portList tag
        endif
        set var i ($i + 1)
        set var vlanId $TCL(lindex ${vlanList} $i)
endwhile

[править] Пример 8

Скрипт addVlanPortToMsti.xsf назначает указанные вланы на нужных портах в определённый инстанс MSTP. Использование:

load script addVlanPortToMsti.xsf <VLANS> <PORTS> <MSTI_name>
    пример:
load script addVlanPortToMsti.xsf 2-199 25-26 mst5 - к MSTI инстансу с именем mst5 на портах 25-26 привызяваются вланы 2-199.

текст:

set var i 0
set var vlanId 0
set var vlanList $TCL(split ${CLI.ARGV1} ",")
set var vlanListLength $TCL(llength ${vlanList})
set var portList $TCL(split ${CLI.ARGV2} ",")
set var rangeMark "\-"
set var vlanId $TCL(lindex ${vlanList} $i)
set var msti $CLI.ARGV3
while ($i < $vlanListLength) do
        set var rangeMatch $TCL(regexp -all ${rangeMark} ${vlanId})
        if ($rangeMatch > 0) then
                set var vlanIdRange $TCL(split ${vlanId} "-")
                set var vlanIdStart $TCL(lindex ${vlanIdRange} 0)
                set var vlanIdEnd $TCL(lindex ${vlanIdRange} 1)
                set var vlanId $vlanIdStart
                while ($vlanId < $vlanIdEnd+1) do
                        configure stpd $msti add vlan vlan_$vlanId ports $portList dot1d
                        set var vlanId ($vlanId + 1)
                endwhile
        else
                configure stpd $msti add vlan vlan_$vlanId ports $portList dot1d
        endif
        set var i ($i + 1)
        set var vlanId $TCL(lindex ${vlanList} $i)
endwhile

[править] Пример 9

Скрипт setupVlansToPorts.xsf добавляет или удаляет указанные существующие вланы с/на указанные порты. Использование:

load script setupVlansToPorts.xsf <VLANS> <PORTS> <add | delete>
    пример:
load script setupVlansToPorts.xsf 300-600 9,17-20 add    - добавляет вланы 300-600 на порты 9,17,18,19,20
load script setupVlansToPorts.xsf 100-150 19,11 delete   - удаляет вланы 100-150 с портов 11 и 19.

текст:

#
# USAGE: load script setupVlansToPorts.xsf <vlans> <ports> <add|delete>
# EXAMPLE: load script setupVlansToPorts.xsf 250-251 11-12 add
#
set var i 0
set var vlanId 0
set var vlanList $TCL(split ${CLI.ARGV1} ",")
set var vlanListLength $TCL(llength ${vlanList})
set var portList $TCL(split ${CLI.ARGV2} ",")
set var ACTION $(CLI.ARGV3)
set var rangeMark "\-"
set var vlanId $TCL(lindex ${vlanList} $i)
while ($i < $vlanListLength) do
        set var rangeMatch $TCL(regexp -all ${rangeMark} ${vlanId})
        if ($rangeMatch > 0) then
                set var vlanIdRange $TCL(split ${vlanId} "-")
                set var vlanIdStart $TCL(lindex ${vlanIdRange} 0)
                set var vlanIdEnd $TCL(lindex ${vlanIdRange} 1)
                set var vlanId $vlanIdStart
                while ($vlanId < $vlanIdEnd+1) do
                        if ("$(ACTION)" == "add") then
                                configure vlan vlan_$vlanId add port $portList tag
                        endif
                        if ("$(ACTION)" == "delete") then
                                configure vlan vlan_$vlanId delete port $portList
                        endif
                        set var vlanId ($vlanId + 1)
                endwhile
        else
                if ("$(ACTION)" == "add") then
                        configure vlan vlan_$vlanId add port $portList tag
                endif
                if ("$(ACTION)" == "delete") then
                        configure vlan vlan_$vlanId delete port $portList
                endif
        endif
        set var i ($i + 1)
        set var vlanId $TCL(lindex ${vlanList} $i)
endwhile

[править] Пример 10

Скрипт clearport.xsf удаляет все VLAN, включая Default с указанного порта (или sharing group)
Note: Скрипт протестирован на прошивках версии 12.х
Использование:

load script clearport.xsf <PORT>
    пример:
load script clearport.xsf 3:1 - Удаляет все VLAN с порта(или sharing group) 3:1

Тело скрипта:

set var CLI.OUT 0
show ports $CLI.ARGV1 information detail
set var info_strings $TCL(split ${CLI.OUT} "\n")
set var num_strings $TCL(llength $info_strings)
set var count 10
while ($count < $num_strings) do
    set var str $TCL(lindex $info_strings $count)
    set var vlinfo $TCL(split ${str} ",")
    set var vlnameinfo $TCL(lindex $vlinfo 0)
    set var vlname $TCL(split ${vlnameinfo} ":")
    set var t $TCL(lindex $vlname 0)
    set var vlan $TCL(lindex $vlname 1)
    set var string1 "Name"
    set var string2 $TCL(string trim $t)
    set var compres $TCL(string compare $string1 $string2)
    if ($compres == 0) then
        configure $vlan delete ports $CLI.ARGV1
    endif
    set var count ($count+1)
endwhile
delete var info_strings
delete var num_strings
delete var count
delete var str
delete var vlinfo
delete var vlnameinfo
delete var vlname
delete var t
delete var vlan
delete var string1
delete var string2
delete var compres
delete var CLI.OUT

[править] Стекирование

Порядок формирования и процедуры настройки стековых топологий описан в статье Стекирование SummitStack.


Источник — «http://5.9.243.178:81/wiki/ExtremeXOS»