UTILIZE A PESQUISA!

TCL shell - CISCO IOS - programando um roteador

Gostaria de apresentar, para quem ainda não conhece, uma das ferramentas mais versáteis disponível para o engenheiro de rede no IOS CISCO: O TCL (Tool Command Language) shell.

Essa shell foi criada para permitir a execução de scripts TCL diretamente no IOS CISCO.

Estes scripts, claro, usam e interagem diretamente com os comandos disponíveis no IOS.

Existe também a possibilidade de criar o script e depois pré-compilar os mesmos, salvando-os na memória FLASH ou disco. Além disto, podem ser compartilhados por múltiplos usuários no mesmo roteador e ao mesmo tempo.

Um exemplo do uso dessa shell aparece na prova prática da CCIE RS onde, usualmente, pede-se conectividade total entre os equipamentos , isto é, cada IP da rede deve ser capaz de pingar qualquer outro IP.

Agora imaginem, testar conectividade de 10 equipamentos repletos de interfaces e IPs?
Pingar cada IP de cada equipamento, de dentro de cada equipamento?
E ainda verificar o que falhou e ir atrás do problema?

Tarefa complicada que o seguinte TCL script simplifica e muito. Basicamente, ele serve para filtrar a resposta do comando PING, e apenas imprimir na tela os IPs que não responderem com um ICMP echo-reply.

foreach -> cria uma loop de iteraçao com os IPs listados
[exec ping $ips timeout 3 ] -> pinga cada IP da lista e usa um timeout de 3 seg
string first "!!!" -> verifica se na string de saída do comando "ping IP" encontramos "!!!"
$result == -1 } { puts ".. $ips "}} verifica se o resultado for negativo (sem resposta do ping) imprimi na tela dois pontos (..) e o IP que não respondeu.

r1#tclsh
r1(tcl)#proc pingall {} {
+>(tcl)#foreach ips {
+>(tcl)#155.1.1.1
+>(tcl)#155.4.4.4
+>(tcl)#155.6.6.6}
+>(tcl)#{ set result [ string first "!!!" [exec ping $ips timeout 3 ] ]
+>(tcl)#if { $result == -1 } { puts ".. $ips " } }
+>(tcl)#}

r1(tcl)#pingall
.. 155.4.4.4
.. 155.6.6.6



Somente para relembrar a saída tipica de um ping e entender melhor o exemplo:

r1#ping 155.1.1.1 timeout 3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 155.1.1.1, timeout is 3 seconds:
!!!!!
Success rate is 100 percent (5/5)


Assim como o script verificou os "!!!" na saída do comando, nada foi impresso na tela

E para um ping que não recebeu resposta:

r1#ping 155.4.4.4 timeout 3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 155.4.4.4, timeout is 3 seconds:
.U.U.
Success rate is 0 percent (0/5)

O script não encontra "!!!" e imprime na tela ".. e o IP"

TCL SCRIPT:

tclsh
proc pingall {} {
foreach ips {
172.16.16.1
172.16.123.1
172.16.14.1
172.16.50.25} { set result [ string first "!!!" [ exec ping $ips ] ]
if { $result == -1 } { puts ".. $ips " } }
}

Nenhum comentário:

Postar um comentário