четверг, 7 октября 2010 г.

Борьба с петлями. ELRP.

Хочется избежать ситуаций, когда из-за нерадивого клиента ложится несколько свитчей в сети оператора. Даже если не ложится, все равно, петли - это плохо =)
Во всех коммутаторах серии summit, кроме 150-х, есть такая фича - UPM (Universal Port Management). Крайне полезная вещь, а если есть задатки программирования, то вообще можно горы свернуть. В общем почему-то Extreme предлагает при обнаружении в сети петли (с помощью протокола ELRP - Extreme Loop Recognition Protocol) блокировать ingress port. Иногда им становится uplink, что не очень хорошо и приводит к выпадению коммутатора из сети. Мы будем блокировать egress port. Тем самым отключая только клиента, который петляет.
Собственно скрипт взят с форума  http://ethernation.net, спасибо dudekm. В задачу так же входила рассылка оповещений о петле. Реализовано это через EPICenter.

create log filter ELRP_Loop_Detect
# Создаем лог-фильтр для парсинга логов на предмет петли

create log filter ELRP_Disable_Alarm
# Лог-фильтр для отправки брошенных в консоль сообщений на EPICenter

configure log filter ELRP_Loop_Detect add events ELRP.Report.Message match string "LOOP DETECTED"
# кофигурим парсинг лога

configure log filter ELRP_Disable_Alarm add events UPM.Msg.exshLaunchStsFailLoop
configure log filter ELRP_Disable_Alarm add events System.userComment

# Конфигурим парсинг лога для отправки сообщений на эпицентр

create log target upm Disable_Looped_Port
enable log target upm Disable_Looped_Port
configure log target upm Disable_Looped_Port filter ELRP_Loop_Detect severity Info
configure log target upm Disable_Looped_Port match Any

# Создаем лог-таргет, кот. говорит, что при обнаружении в логе 

# срабатываний по фильтру elrploop нужно запустить скрипт Disable_Looped_Port

create upm profile Disable_Looped_Port
disable port $EVENT.LOG_PARAM_7

create snmp trap severity info event ELRP_Loop_Port_Disabled "Port $EVENT.LOG_PARAM_7 disabled because of ELRP loop detected."

create log entry "Port $EVENT.LOG_PARAM_7 disabled because of ELRP loop detected. Someday I will be the most powerlful jedi ever!"
# создаем скрипт, который выключает порт, посылает snmp trap и записывает инфу в лог


enable syslog
# включаем syslog
conf syslog add xx.xxx.xx.x:514 vr "VR-Mgmt" local0
# Добавлям syslog server

configure log target syslog xx.xxx.xx.x:514 vr VR-Mgmt local0 filter ELRP_Disable_Alarm severity Info
enable log target syslog xx.xxx.xx.x:514 vr VR-Mgmt local0
# "create log entry" создает запись в логе с severity = info, отправляем эту запись в эпицентр

enable elrp-client
включаем ELRP



Далее на сервере EPICentr настраиваем alarm, который, при получении от коммутатора через syslog сообщения с severity info, отправит e-mail на определенные адреса. 
И вообще, syslog в скрипте используется как костыль для уведомления сервера EPICenter о срабатывании скрипта. Красивее конечно использовать snmp, но я пока не понял как на эпицентре ловить трап, созданный через create snmp trap

Комментариев нет:

Отправить комментарий