Примеры скриптов в ExtremeXOS

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

Перейти к: навигация, поиск

< ExtremeXOS

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


Содержание

[править] Пример 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


[править] Дополнительная информация

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