ネットワーク管理 コンフィギュレーション ガイド Cisco IOS Release 15.1S
TCL による Cisco IOS スクリプティング
TCL による Cisco IOS スクリプティング
発行日;2012/02/02 | 英語版ドキュメント(2011/09/20 版) | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 5MB) | フィードバック

目次

TCL による Cisco IOS スクリプティング

この章の構成

TCL による Cisco IOS スクリプティングの前提条件

TCL による Cisco IOS スクリプティングの制約事項

TCL による Cisco IOS スクリプティングについて

Cisco IOS ソフトウェアの TCL シェル

TCL プリコンパイラ

SNMP MIB オブジェクト アクセス

TCL による Cisco IOS スクリプティングの設定方法

TCL シェルをイネーブルにし CLI を使用したコマンドの入力

TCL シェルにおけるカスタム拡張

トラブルシューティングのヒント

TCL シェルを使用した SNMP MIB オブジェクトへのアクセス

TCL シェルにおける SNMP MIB カスタム拡張

前提条件

トラブルシューティングのヒント

定義済み TCL スクリプトの実行

前提条件

TCL による Cisco IOS スクリプティングの設定例

例:show interfaces コマンドを使用した TCL スクリプト

例:TCL スクリプトの SMTP サポート

例:TCL スクリプトの SNMP MIB アクセス

その他の参考資料

関連資料

規格

MIB

RFC

シスコのテクニカル サポート

TCL による Cisco IOS スクリプティングの機能情報

用語集

TCL による Cisco IOS スクリプティング

Tool Command Language(TCL; ツール コマンド言語)による Cisco IOS スクリプティング機能を使用すると、TCL バージョン 8.3.4 コマンドを Cisco IOS のコマンドライン インターフェイスから実行できます。

ご使用のソフトウェア リリースによっては、この章に記載されている機能の中に、一部サポートされていないものがあります。最新の機能情報と注意事項については、ご使用のプラットフォームとソフトウェア リリースに対応したリリース ノートを参照してください。この章に記載されている機能の詳細、および各機能がサポートされているリリースのリストについては、「TCL による Cisco IOS スクリプティングの機能情報」を参照してください。

Cisco Feature Navigator を使用すると、プラットフォーム、Cisco IOS ソフトウェア イメージ、および Cisco Catalyst OS ソフトウェア イメージの各サポート情報を検索できます。Cisco Feature Navigator には、 http://www.cisco.com/go/cfn からアクセスします。Cisco.com のアカウントは必要ありません。

TCL による Cisco IOS スクリプティングの前提条件

TCL プログラミングをよく理解している必要があります。

TCL コマンドは Cisco IOS CLI を使用して、TCL コンフィギュレーション モードから実行できます。TCL コンフィギュレーション モードには、特権 EXEC モードからアクセスします。特権 EXEC モードへのアクセスは、 enable コマンド パスワードを使用して制限する必要があります。

TCL による Cisco IOS スクリプティングの制約事項

TCL スクリプトで Cisco IOS コンフィギュレーション コマンドを使用する場合、サブモード コマンドはコンフィギュレーション コマンドと同じ行に引用符で囲んだ変数として入力する必要があります。

エラー メッセージが表示されますが、エラーにより TCL シェルが無限ループで実行される場合があるため、TCL コマンドが正常に実行されたかどうかを確認する必要があります。


注意 TCL サーバ ソケットを Telnet および FTP ポート(それぞれ 23 と 21)の受信に使用すると、Cisco IOS ソフトウェアにおけるこれらのポートの通常の処理のプリエンプションが生じます。

表 1 に、Cisco IOS ソフトウェア上では標準的な TCL の資料には記載されていない動作をする TCL コマンドおよびライブラリ コールを示します。

 

表 1 Cisco IOS ソフトウェア上で通常とは異なる動作をする TCL コマンド オプション

コマンド
キーワード
引数
サポート対象
説明

after

ms

script

一部

CLI tclsh コマンドが使用されると、同じルータで Embedded Syslog Manager(ESM)がアクティブになるまで、イベント ループが実装されません。 after を使用して入力されたコマンドは、 update コマンドを使用するまで実行されません。スリープ モード( after コマンド)は、 ms キーワード を指定した場合のみ機能します。

file

-time

atime

なし

ファイルへのアクセス時間を設定する、オプションの -time キーワードは、Cisco IOS ソフトウェアではサポートされていません。

file

-time

mtime

なし

ファイルの変更時間を設定する、オプションの -time キーワードは、Cisco IOS ソフトウェアではサポートされていません。

fileevent

一部

CLI tclsh コマンドが使用されると、同じルータで Embedded Syslog Manager(ESM)がアクティブになるまで、イベント ループが実装されません。 fileevent Tcl コマンドを使用して入力されたコマンドは、 update コマンド を使用するまで実行されません。

history

! n

一部

The ! n shortcut does not work in Cisco IOS software.Use the history Tcl コマンドは redo n キーワード と併用してください。

load

なし

CLI load コマンドを使用すると、「dynamic loading not available on this system」というエラー メッセージが表示されます。

TCL による Cisco IOS スクリプティングについて

TCL スクリプトを Cisco IOS ソフトウェアで使用するには、次に示す概念を理解する必要があります。

「Cisco IOS ソフトウェアの TCL シェル」

「TCL プリコンパイラ」

「SNMP MIB オブジェクト アクセス」

Cisco IOS ソフトウェアの TCL シェル

Cisco IOS TCL シェルは、ユーザが Cisco IOS CLI プロンプトから直接 TCL コマンドを実行できるようにするために設計されました。Cisco IOS ソフトウェアには、mbedded Syslog Manager(ESM)や Interactive Voice Response(IVR; 音声自動応答装置)など、TCL インタープリタを実装の一部に使用するサブシステムが搭載されています。これらのサブシステムには、TCL シェルでは使用できない独自のコマンドおよびキーワードがあります。

Cisco IOS ソフトウェアで TCL スクリプトを構築し、実行する方法がいくつか開発されました。TCL シェルは有効化され、TCL コマンドを 1 行ずつ入力できます。TCL コマンドは入力されると TCL インタープリタに送信されます。コマンドが、有効な TCL であると認識された場合は実行され、その結果が TTY デバイスに送信されます。コマンドが TCL コマンドであると認識されない場合は、Cisco IOS CLI パーサーに送信されます。コマンドが TCL コマンドでも Cisco IOS コマンドでもない場合は、2 つのエラー メッセージが表示されます。定義済みの TCL スクリプトを Cisco IOS ソフトウェア以外で作成し、フラッシュ メモリ、またはディスクメモリに転送して Cisco IOS ソフトウェア上で実行することもできます。また、TCL スクリプトを作成して Cisco IOS ソフトウェアで実行する前に、コードをプリコンパイルすることも可能です。

同じルータ上の複数のユーザが、干渉なく同時に TCL コンフィギュレーション モードに入ることができます。これは、それぞれの TCL シェル セッションが個別のインタープリタおよび TCL サーバ セッションを起動するためです。TCL プロセスから割り振られる TTY インターフェイス番号は、サーバ プロセス名で表され、 show process CLI コマンドを使用すると表示できます。

TCL シェルを使用すると、Cisco IOS CLI EXEC コマンドを TCL スクリプトで実行できます。TCL シェルを使用して CLI コマンドを使用すると、初心者のユーザが反復的なタスクを自動化したり、 show コマンドの出力をカスタマイズしたりするタスクを支援するメニューを構築できます。

TCL プリコンパイラ

Cisco IOS TCL を実装することにより、TCLPro コンパイラでプリコンパイルされたスクリプトのロードする機能がサポートされます。プリコンパイルされたスクリプトは難読化されているため、セキュリティおよび一貫性の対策を許容します。

SNMP MIB オブジェクト アクセス

Simple Network Management Protocol(SNMP; 簡易ネットワーク管理プロトコル)MIB オブジェクトへのアクセスを容易にするために設計された、UNIX に似た SNMP コマンドのセットが作成されました。TCL シェルは手動でも TCL スクリプトを使用してもイネーブルにすることができ、MIB オブジェクト上で指定した get および set アクションを実行する新しいコマンドを入力できます。また、使いやすさを向上させるため、新しいコマンドには、UNIX SNMP アクセスで使用されるコマンドの名前と似た名前が付けられています。SNMP コマンドにアクセスする方法については、「TCL シェルを使用した SNMP MIB オブジェクトへのアクセス」 を参照してください。

TCL による Cisco IOS スクリプティングの設定方法

ここでは、次の作業について説明します。

「TCL シェルをイネーブルにし CLI を使用したコマンドの入力」(必須)

「TCL シェルを使用した SNMP MIB オブジェクトへのアクセス」(任意)

「定義済み TCL スクリプトの実行」(任意)

TCL シェルをイネーブルにし CLI を使用したコマンドの入力

インタラクティブ TCL シェルをイネーブルにし、Cisco IOS CLI プロンプトを使用して TCL コマンドを 1 行ずつ入力するには、次の作業を実行します。オプションの手順には、符号化ファイルのデフォルトの位置、および初期化スクリプトの指定が含まれます。

TCL シェルにおけるカスタム拡張

Cisco IOS における TCL シェルの実装には、いくつかのコマンド拡張が含まれます。これらの拡張機能は、TCL コンフィギュレーション モードでのみ動作します。 表 2 に、これらのコマンド拡張を示します。

 

表 2 Cisco IOS のカスタム TCL コマンド拡張

コマンド
説明

fconfigure - remote [ host port ] - broadcast boolean vrf [ vrf_table_name ]

チャネル内のオプションを指定し、これに Virtual Routing and Forwarding(VRF)テーブル名を関連付けられます。

ios_config

Cisco IOS CLI コンフィギュレーション コマンドを実行します。

log_user

TCL コンフィギュレーション モードでの TCL コマンドの出力を切り替えます。

socket - myvrf [ vrf_table_name ]

TCP ネットワーク接続を開き、これに VRF テーブル名を関連付けられます。

typeahead

ルータの標準入力(stdin)バッファ ファイルにテキストを入力します。

tclquit

TCL シェルを終了します( exit と同じ)。

udp_open - ipv6 port

User Datagram Protocol(UDP; ユーザ データグラム プロトコル)ソケットを開きます。

udp_peek sock -buffersize buffer-size

UDP ソケットを確認します。

手順の概要

1. enable

2. configure terminal

3. scripting tcl encdir location-url

4. scripting tcl init init-url

5. scripting tcl low-memory bytes

6. exit

7. tclsh

8. 必要な TCL コマンド言語構文を入力します。

9. ios_config " cmd " " cmd-option "

10. socket -myaddr addr -myport port -myvrf vrf-table-name host port

11. socket - server - myaddr addr - myvrf vrf-table-name port

12. fconfigure channelname - remote [ host port ] - broadcast boolean vrf [ vrf_table_name ]

13. udp_open - ipv6 port

14. udp_peek sock buffersize

15. exec " exec-cmd "

16. exit

手順の詳細

コマンドまたはアクション
目的

ステップ 1

enable

 

Router> enable

特権 EXEC モードをイネーブルにします。

プロンプトが表示されたら、パスワードを入力します。

ステップ 2

configure terminal

 

Router# configure terminal

(任意)グローバル コンフィギュレーション モードを開始します。

符号化ファイル、初期化スクリプトのいずれか、または両方を使用している場合は、ステップ 2 からステップ 6 までを実行します。

ステップ 3

scripting tcl encdir location-url

 

Router(config)# scripting tcl encdir tftp://10.18.117.23/enctcl/

(任意)TCL encoding コマンドで使用される外部符号化コマンドのデフォルトの位置を指定します。

ステップ 4

scripting tcl init init-url

 

Router(config)# scripting tcl init ftp://user:password@172.17.40.3/tclscript/initfiles3.tcl

(任意)TCL シェルがイネーブルの場合に実行される初期化スクリプトを指定します。

ステップ 5

scripting tcl low-memory bytes

 

Router(config)# scripting tcl low-memory 33117513

(任意)TCL ベースのアプリケーションに対するメモリの空き容量の最低水準点を指定します。メモリのしきい値は 0 ~ 4294967295 バイトの間で任意の値に設定できます。

(注) メモリの最低空き容量がしきい値を下回ると、TCL は実行しているスクリプトを中断します。これにより、TCL インタープリタがメモリを過剰に割り当て、ルータがクラッシュすることを防ぎます。

ステップ 6

exit

 

Router(config)# exit

(任意)グローバル コンフィギュレーション モードを終了し、特権 EXEC モードに戻ります。

ステップ 7

tclsh

 

Router# tclsh

インタラクティブ TCL シェルをイネーブルにし、TCL コンフィギュレーション モードを開始します。

ステップ 8

必要な TCL コマンド言語構文を入力します。

 

Router(tcl)# proc get_bri {}

TCL コンフィギュレーション モードで入力されたコマンドが、まずインタラクティブ TCL インタープリタに送信されます。コマンドが有効な TCL コマンドではない場合は CLI パーサーに送信されます。

ステップ 9

ios_config “ cmd ” “ cmd-option

 

Router(tcl)# ios_config “interface Ethernet 2/0” “no keepalive”

(任意)CLI コマンドおよびオプションを使用して TCL コマンド ios_config を指定し、TCL スクリプトを使用してルータ設定を変更します。すべての引数およびサブモード コマンドを、CLI コンフィギュレーション コマンドの同じ行に入力する必要があります。

この例では、引用符で囲まれた最初の引数がイーサネット インターフェイスを設定し、インターフェイス コンフィギュレーション モードを開始します。引用符で囲まれた 2 番目の引数は、キープアライブ オプションを設定します。これらの 2 つの CLI 文が TCL コマンドの別々の行に入力されると、この設定は機能しません。

ステップ 10

socket -myaddr addr -myport port -myvrf vrf-table-name host port

 

Router(tcl)# socket -myaddr 10.4.9.34 -myport 12345 -myvrf testvrf 12346

クライアント ソケットを指定し、TCL インタープリタの TCP over IPv4/IPv6 を経由した接続を可能にし、TCP ネットワーク接続を開きます。接続するポートおよびホストを指定できます。このポート上で接続を受け入れるサーバが必要です。

-myaddr addr :接続に必要なクライアント側ネットワーク インターフェイスのドメイン名、または IP アドレスの数値です。特にクライアントのマシンに複数のネットワーク インターフェイスがある場合はこのオプションを使用します。

-myport port :クライアントの接続に必要なポート番号です。

-myvrf [ vrf_table_name ]:VRF テーブル名を指定します。VRF テーブル名を設定しない場合、コマンドにより TCL _ERROR が返されます。

ステップ 11

socket - server - myaddr addr - myvrf vrf-table-name port

 

Router(tcl)# socket -server test -myvrf testvrf 12348

サーバ ソケットを指定し、TCL インタープリタの TCP over IPv4/IPv6 を経由した接続を可能にし、TCP ネットワーク接続を開きます。ポートがゼロの場合 Cisco IOS は、 fconfigure command to read the - sock0 引数を使用して空いているポートをサーバ ソケットに割り当てます。

-myaddr addr :接続に必要なクライアント側ネットワーク インターフェイスのドメイン名、または IP アドレスの数値です。特にクライアントのマシンに複数のネットワーク インターフェイスがある場合はこのオプションを使用します。

-myvrf vrf :VRF テーブル名を指定します。VRF テーブル名を設定しない場合、コマンドにより TCL _ERROR が返され、インタープリタの結果に「Cannot obtain VRF Table ID for VRF_table_name」というメッセージが加えられます。

ステップ 12

fconfigure channelname - remote [ host port ] - broadcast boolean - vrf [ vrf_table_name ]

 

Router(tcl)# fconfigure sock1 -vrf vrf1 -remote [list 10.4.9.37 56009] -broadcast 1

チャネル内のオプションを指定します。

udp_open を使用して作成された UDP ソケットの場合は、 fconfigure コマンドを使用して、UDP ソケットを VRF にマッピングできます。

このコマンドは、チャネルのプロパティの表示にも使用できます。

-broadcast :ブロードキャスティングをイネーブルまたはディセーブルにします。

ステップ 13

udp_open - ipv6 port

 

Router(tcl)# udp_open -ipv6 56005

UDP ソケットを開きます。

ポートが指定されている場合、UDP ソケットはそのポート上で開かれます。それ以外の場合は、システムによりポートが選択され、必要に応じて fconfigure コマンドを使用してポート番号を取得できます。- ipv6 引数が指定されている場合、ソケットは AF_INET6 プロトコル ファミリを指定して開かれます。

ステップ 14

udp_peek sock -buffersize buffer-size

 

Router(tcl)# udp_peek sock0 -buffersize 100

UDP ソケットを確認します。

-buffersize buffer-size :バッファサイズを指定します。

ステップ 15

exec “ exec-cmd

 

Router(tcl)# exec “show interfaces”

(任意)TCL コマンド EXEC を CLI コマンドで指定して、Cisco IOS CLI EXEC モード コマンドを TCL スクリプトから実行します。

この例では、ルータのインターフェイス情報が表示されています。

ステップ 16

exit

 

Router(tcl)# exit

TCL コンフィギュレーション モードを終了し、特権 EXEC モードに戻ります。

次に、ルータ上のイーサネット インターフェイス 0 についての情報を示す出力例(一部)を示します。TCL コンフィギュレーション モードで、 show interfaces コマンドが実行された場合の例です。

Router# tclsh
Router(tcl)# exec “show interfaces”
 
Ethernet 0 is up, line protocol is up
Hardware is MCI Ethernet, address is 0000.0c00.750c (bia 0000.0c00.750c)
Internet address is 10.108.28.8, subnet mask is 255.255.255.0
MTU 1500 bytes, BW 10000 Kbit, DLY 100000 usec, rely 255/255, load 1/255
Encapsulation ARPA, loopback not set, keepalive set (10 sec)
ARP type: ARPA, ARP Timeout 4:00:00
Last input 0:00:00, output 0:00:00, output hang never
Last clearing of "show interface" counters 0:00:00
Output queue 0/40, 0 drops; input queue 0/75, 0 drops
Five minute input rate 0 bits/sec, 0 packets/sec
Five minute output rate 2000 bits/sec, 4 packets/sec
1127576 packets input, 447251251 bytes, 0 no buffer
Received 354125 broadcasts, 0 runts, 0 giants, 57186* throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
5332142 packets output, 496316039 bytes, 0 underruns
0 output errors, 432 collisions, 0 interface resets, 0 restarts
.
.
.

トラブルシューティングのヒント

コマンド実行をトレースするには、TCL スクリプト内で TCL puts コマンドを使用します。

TCL シェルを使用した SNMP MIB オブジェクトへのアクセス

インタラクティブ TCL シェルをイネーブルにし、TCL コマンドを入力して MIB オブジェクト上でアクションを実行するには、次の作業を実行します。

TCL シェルにおける SNMP MIB カスタム拡張

Cisco IOS における TCL シェルの実装には、SNMP MIB オブジェクト アクセスのコマンド拡張がいくつか含まれます。これらの拡張機能は、TCL コンフィギュレーション モードでのみ動作します。 表 3 に、これらのコマンド拡張を示します。

 

表 3 Cisco IOS における SNMP MIB アクセスのカスタム TCL コマンド拡張

コマンド
説明

snmp_getbulk

MIB テーブルの大規模なセクションを取得します。このコマンドは、SNMP getbulk コマンドと類似しています。構文のフォーマットは次のとおりです。

snmp_getbulk community-string non-repeaters max-repetitions oid [ oid2 oid3 ...]

オブジェクトを取得する SNMP コミュニティを指定するには、 community-string 引数を使用します。

get-next 操作で取得するオブジェクトの数を指定するには、 non-repeaters 引数を使用します。

残りのオブジェクトを取得する間に試行する get-next 操作の最大回数を指定するには、 max-repetitions 引数を使用します。

取得するオブジェクト ID(複数可)を指定するには、 oid 引数を使用します。

snmp_getid

ルータ上の SNMP エンティティから、次の変数を取得します。

sysDescr.0

sysObjectID.0

sysUpTime.0

sysContact.0

sysName.0

sysLocation.0

このコマンドは、SNMP getid コマンドと類似しています。構文のフォーマットは次のとおりです。

snmp_getid community-string

snmp_getnext

ルータ上の SNMP エンティティから、個別の変数を 1 セット取得します。このコマンドは、SNMP getnext コマンドと類似しています。構文のフォーマットは次のとおりです。

snmp_getnext community-string oid [ oid2 oid3 ...]

snmp_getone

ルータ上の SNMP エンティティから、個別の変数を 1 セット取得します。このコマンドは、SNMP getone コマンドと類似しています。構文のフォーマットは次のとおりです。

snmp_getone community-string oid [ oid2 oid3 ...]

snmp_setany

指定された変数の現在の値を取得し、変数で set 要求を実行します。このコマンドは、SNMP setany コマンドと類似しています。構文のフォーマットは次のとおりです。

snmp_setany community-string oid type val [ oid2 type2 val2 ...]

取得するオブジェクトのタイプを指定するには、 type 引数を使用します。指定する type は、次のうちいずれかになります。

-i :Integer。管理対象オブジェクトのコンテキスト内の番号が付けられたタイプを指定する場合は、32 ビットの数字が使用されます。たとえば、ルータ インターフェイスの操作ステータスを設定するには、1 がアップ、2 がダウンを表します。

-u :Unsigned32。0 ~ 2 32 - 1 の範囲の 10 進数を表す場合に使用される 32 ビットの数字。

-c :Counter32。最小値 0 ~ 最大値 2 32 - 1 の 32 ビットの数字。最大値に到達すると、カウンタが 0 にリセットされ、そこから再び開始されます。

-g :Gauge。最小値 0 ~ 最大値 2 32 - 1 の 32 ビットの数字。任意に増減できる数字。たとえば、ルータ上のインターフェイスの速度は、Gauge オブジェクト タイプを使用して計測されます。

-o :Octet string。16 進数表記のオクテット文字列は、物理アドレスを表す場合に使用されます。

-d :Display string。テキスト表記のオクテット文字列は、テキスト文字列の表記に使用されます。

-ipv4 :IPv4 のアドレス。

-oid :オブジェクト ID。

取得するオブジェクト ID(複数可)の値を指定するには、 val 引数を使用します。

前提条件

SNMP コミュニティ設定は、ルータの実行コンフィギュレーションに含める必要があります。

手順の概要

1. enable

2. configure terminal

3. scripting tcl encdir location-url

4. scripting tcl init init-url

5. exit

6. tclsh

7. 必要な TCL コマンド言語構文を入力します。

8. snmp_getbulk community-string non-repeaters max-repetitions oid [ oid2 oid3... ]

9. snmp_getid community-string

10. snmp_getnext community-string oid [ oid2 oid3... ]

11. snmp_getone community-string oid [ oid2 oid3... ]

12. snmp_setany community-string oid type val [ oid2 type2 val2... ]

13. exit

手順の詳細

コマンドまたはアクション
目的

ステップ 1

enable

 

Router> enable

特権 EXEC モードをイネーブルにします。

プロンプトが表示されたら、パスワードを入力します。

ステップ 2

configure terminal

 

Router# configure terminal

(任意)グローバル コンフィギュレーション モードを開始します。

符号化ファイル、初期化スクリプトのいずれか、または両方を使用している場合は、ステップ 2 からステップ 5 までを実行します。

ステップ 3

scripting tcl encdir location-url

 

Router(config)# scripting tcl encdir tftp://10.18.117.23/enctcl/

(任意)TCL encoding コマンドで使用される外部符号化コマンドのデフォルトの位置を指定します。

ステップ 4

scripting tcl init init-url

 

Router(config)# scripting tcl init ftp://user:password@172.17.40.3/tclscript/initfiles3.tcl

(任意)TCL シェルがイネーブルの場合に実行される初期化スクリプトを指定します。

ステップ 5

exit

 

Router(config)# exit

(任意)グローバル コンフィギュレーション モードを終了し、特権 EXEC モードに戻ります。

ステップ 6

tclsh

 

Router# tclsh

インタラクティブ TCL シェルをイネーブルにし、TCL コンフィギュレーション モードを開始します。

ステップ 7

必要な TCL コマンド言語構文を入力します。

 

Router(tcl)# proc get_bri {}

TCL コンフィギュレーション モードで入力されたコマンドが、まずインタラクティブ TCL インタープリタに送信されます。コマンドが有効な TCL コマンドではない場合は CLI パーサーに送信されます。

ステップ 8

snmp_getbulk community-string non-repeaters max-repetitions oid [ oid2 oid3... ]

 

Router(tcl)# snmp_getbulk public 1 3 1.3.6.1.2.1.1.1 1.3.6.1.2.1.10.18.8.1.1

(任意)MIB テーブルの大規模なセクションを取得します。

オブジェクトを取得する SNMP コミュニティを指定するには、 community-string 引数を使用します。

get-next 操作で取得するオブジェクトの数を指定するには、 non-repeaters 引数を使用します。

残りのオブジェクトを取得する間に試行する get-next 操作の最大回数を指定するには、 max-repetitions 引数を使用します。

取得するオブジェクト ID(複数可)を指定するには、 oid 引数を使用します。

ステップ 9

snmp_getid community-string

 

Router(tcl)# snmp_getid private

(任意)ルータ上の SNMP エンティティから、次の変数を取得します。sysDesrc.0、sysObjectID.0、sysUpTime.0、sysContact.0、sysName.0、および sysLocation.0。

オブジェクトを取得する SNMP コミュニティを指定するには、 community-string 引数を使用します。

ステップ 10

snmp_getnext community-string oid [ oid2 oid3... ]

 

Router(tcl)# snmp_getnext public 1.3.6.1.2.1.1.1.0 1.3.6.1.2.1.1.2.0

(任意)MIB テーブルから個別の変数のセットを取得します。

オブジェクトを取得する SNMP コミュニティを指定するには、 community-string 引数を使用します。

取得するオブジェクト ID(複数可)を指定するには、 oid 引数を使用します。

ステップ 11

snmp_getone community-string oid [ oid2 oid3... ]

 

Router(tcl)# snmp_getone public 1.3.6.1.2.1.1.1.0 1.3.6.1.2.1.1.2.0

(任意)MIB テーブルから個別の変数のセットを取得します。

オブジェクトを取得する SNMP コミュニティを指定するには、 community-string 引数を使用します。

取得するオブジェクト ID(複数可)を指定するには、 oid 引数を使用します。

ステップ 12

snmp_setany community-string oid type val [ oid2 type2 val2... ]

 

Router(tcl)# snmp_setany private 1.3.6.1.2.1.1.5.0 -d TCL-SNMP_TEST

(任意)指定された変数の現在の値を MIB テーブルから取得し、変数で set 要求を実行します。

オブジェクトの値を取得して設定する SNMP コミュニティを指定するには、 community-string 引数を使用します。

取得して設定するオブジェクト ID(複数可)を指定するには、 oid 引数を使用します。

取得して設定するオブジェクトのタイプを指定するには、 type 引数を使用します。

取得して設定するオブジェクトの値を指定するには、 val 引数を使用します。

ステップ 13

exit

 

Router(tcl)# exit

TCL コンフィギュレーション モードを終了し、特権 EXEC モードに戻ります。

トラブルシューティングのヒント

コマンド実行をトレースするには、TCL スクリプト内で TCL puts コマンドを使用します。

定義済み TCL スクリプトの実行

Cisco IOS ソフトウェアで定義済み TCL スクリプトを実行するには、次の任意の作業を実行します。

前提条件

次の作業を実行する前に、Cisco IOS ソフトウェアで実行する TCL スクリプトを生成する必要があります。TCL スクリプトは TFTP、FTP、および rcp を含む Cisco IOS ファイル システム(IFS)がサポートするファイル システムを使用して、内部のフラッシュメモリに転送できます。TCL スクリプトはリモートの場所からソースを取得することもできます。

手順の概要

1. enable

2. tclsh

3. ファイル名とパスを指定して TCL source コマンドを入力します。

4. exit

手順の詳細

コマンドまたはアクション
目的

ステップ 1

enable

 

Router> enable

特権 EXEC モードをイネーブルにします。

プロンプトが表示されたら、パスワードを入力します。

ステップ 2

tclsh

 

Router# tclsh

インタラクティブ TCL シェルをイネーブルにし、TCL コンフィギュレーション モードを開始します。

ステップ 3

ファイル名とパスを指定して TCL source コマンドを入力します。

 

Router(tcl)# source slot0:test.tcl

TCL コンフィギュレーション モードで入力されたコマンドが、まずインタラクティブ TCL インタープリタに送信されます。コマンドが有効な TCL コマンドではない場合は CLI パーサーに送信されます。

ステップ 4

exit

 

Router(tcl)# exit

TCL コンフィギュレーション モードを終了し、特権 EXEC モードに戻ります。

TCL による Cisco IOS スクリプティングの設定例

ここでは、次の設定例について説明します。

「例:show interfaces コマンドを使用した TCL スクリプト」

「例:TCL スクリプトの SMTP サポート」

「例:TCL スクリプトの SNMP MIB アクセス」

例:show interfaces コマンドを使用した TCL スクリプト

TCL 正規表現エンジンを使用して、スクリプトは show コマンドから特定の情報をフィルタリングし、カスタム フォーマットで表示できます。次に、 show interfaces コマンドの出力をフィルタリングし、ルータ上の BRI インターフェイスをカンマで区切ったリストに表示する例を示します。

tclsh
proc get_bri {} {
set check ""
set int_out [exec "show interfaces"]
foreach int [regexp -all -line -inline "(^BRI\[0-9]/\[0-9])" $int_out] {
if {![string equal $check $int]} {
if {[info exists bri_out]} {
append bri_out "," $int
} else {
set bri_out $int
}
set check $int
}
}
return $bri_out
}

例:TCL スクリプトの SMTP サポート

次に示す TCL スクリプトは、ルータから E メール メッセージを送信する場合に使用すると便利です。

##
## Place required comments here!!!
##
 
package provide sendmail 2.0
 
# Sendmail procedure for Support
 
namespace eval ::sendmail {
 
namespace export initialize configure sendmessage sendfile
 
array set ::sendmail::sendmail {
smtphost mailhub
from ""
friendly ""
}
 
proc configure {} {}
 
proc initialize {smtphost from friendly} {
 
variable sendmail
 
if {[string length $smtphost]} then {
set sendmail(smtphost) $smtphost
}
if {[string length $from]} then {
set sendmail(from) $from
}
if {[string length $friendly]} then {
set sendmail(friendly) $friendly
}
}
 
proc sendmessage {toList subject body {tcl_trace 0}} {
 
variable sendmail
 
set smtphost $sendmail(smtphost)
set from $sendmail(from)
set friendly $sendmail(friendly)
 
if {$trace} then {
puts stdout "Connecting to $smtphost:25"
}
 
set sockid [socket $smtphost 25]
 
## DEBUG
set status [catch {
 
puts $sockid "HELO $smtphost"
flush $sockid
set result [gets $sockid]
 
if {$trace} then {
puts stdout "HELO $smtphost\n\t$result"
}
 
puts $sockid "MAIL From:<$from>"
flush $sockid
set result [gets $sockid]
 
if {$trace} then {
puts stdout "MAIL From:<$from>\n\t$result"
}
 
foreach to $toList {
puts $sockid "RCPT To:<$to>"
flush $sockid
}
 
set result [gets $sockid]
if {$trace} then {
puts stdout "RCPT To:<$to>\n\t$result"
}
 
puts $sockid "DATA "
flush $sockid
set result [gets $sockid]
 
if {$trace} then {
puts stdout "DATA \n\t$result"
}
 
puts $sockid "From: $friendly <$from>"
foreach to $toList {
puts $sockid "To:<$to>"
}
puts $sockid "Subject: $subject"
puts $sockid "\n"
 
foreach line [split $body "\n"] {
puts $sockid " $line"
}
 
puts $sockid "."
puts $sockid "QUIT"
flush $sockid
set result [gets $sockid]
 
if {$trace} then {
puts stdout "QUIT\n\t$result"
}
} result]
 
catch {close $sockid }
if {$status} then {
return -code error $result
}
return
}
 
proc sendfile {toList filename subject {tcl_trace 0}} {
 
set fd [open $filename r]
 
sendmessage $toList $subject [read $fd] $trace
return
}
 
}

例:TCL スクリプトの SNMP MIB アクセス

TCL シェルおよび TCL コマンドを使用して MIB 上でアクションを実行できます。次に、SNMP へのアクセスを制限するコミュニティ アクセス文字列を設定する方法の例を示します。パブリック アクセスは読み取りのみですが、プライベート アクセスは読み取りと書き込みを許可する設定にします。次に、 snmp_getbulk TCL コマンド拡張を使用して、テーブルの大規模なセクションを一度に取得する方法の例を示します。

snmp_getbulk コマンドを発行する場合は、 non-repeaters および max-repetitions の 2 つの引数を設定する必要があります。 non-repeaters 引数は、始めにシンプルな snmp_getnext 操作で取得される N 個のオブジェクトを指定します。 max-repetitions 引数は、残りのオブジェクトを取得する際に試行される snmp_getnext 操作の最大試行回数 M 回を指定します。

次の例では、sysUpTime(1.3.6.1.2.1.1.2.0)、ifDescr(1.3.6.1.2.1.2.2.1.2)、および ifType(1.3.6.1.2.1.2.2.1.3)の 3 つのバインディングが使用されます。要求された変数バインディングの合計数は、N + (M * R) という数式で表せます。ここで、N は non-repeaters(この例では 1)、M は max-repetitions(この例では 5)、R は要求されたオブジェクト(この場合は 2、ifDescr および ifType)の各数値を表します。この数式を使用すると、1 + (5 * 2) = 11 になり、これが snmp_getbulk 要求コマンドを使用して取得できる変数バインディングの合計数になります。

個別の変数の例における結果には、sysUpTime.0 で取得された値が 1336090 として含まれています(単位はミリ秒)。ifDescr.1(最初のインターフェイスの説明)で取得された値は FastEthernet0/0、ifType.1(最初のインターフェイス タイプ)で取得された値は ethernetCsmacd に対応する 6 です。

snmp-server community public RO
snmp-server community private RW
tclsh
snmp_getbulk public 1 5 1.3.6.1.2.1.1.2.0 1.3.6.1.2.1.2.2.1.2 1.3.6.1.2.1.2.2.1.3
{<obj oid='sysUpTime.0' val='1336090'/>}
{<obj oid='ifDescr.1' val='FastEthernet0/0'/>}
{<obj oid='ifType.1' val='6'/>}
{<obj oid='ifDescr.2' val='FastEthernet1/0'/>}
{<obj oid='ifType.2' val='6'/>}
{<obj oid='ifDescr.3' val='Ethernet2/0'/>}
{<obj oid='ifType.3' val='6'/>}
{<obj oid='ifDescr.4' val='Ethernet2/1'/>}
{<obj oid='ifType.4' val='6'/>}
{<obj oid='ifDescr.5' val='Ethernet2/2'/>}
{<obj oid='ifType.5' val='6'/>}
 

次に、ルータ上の SNMP エンティティから snmp_getid TCL コマンド拡張を使用して、sysDescr.0、sysObjectID.0、sysUpTime.0、sysContact.0、sysName.0、および sysLocation.0 変数(この例では、system.1.0、system.2.0、system.3.0、system.4.0、system.5.0、および system.6.0 と表記)を取得する方法の例を示します。

tclsh
snmp_getid public
{<obj oid='system.1.0' val='Cisco Internetwork Operating System Software
Cisco IOS(tm) 7200 Software (C7200-IK9S-M), Experimental Version 12.3(20030507:225511)
[geotpi2itd1 124]
Copyright (c) 1986-2003 by Cisco Systems, Inc.
Compiled Wed 21-May-03 16:16 by engineer'/>}
{<obj oid='system.2.0' val='products.223'/>}
{<obj oid='sysUpTime.0' val='6664317'/>}
{<obj oid='system.4.0' val='1-800-553-2447 - phone the TAC'/>}
{<obj oid='system.5.0' val='c7200.myCompany.com'/>}
{<obj oid='system.6.0' val='Bldg 24, San Jose, CA'/>}
 

次に、 snmp_getnext TCL コマンド拡張を使用して、ルータ上の SNMP エンティティから個別の変数のセットを取得する方法の例を示します。

snmp_getnext public 1.3.6.1.2.1.1.1.0 1.3.6.1.2.1.1.2.0
{<obj oid='system.2.0' val='products.223'/>}
{<obj oid='sysUpTime.0' val='6683320'/>}
 

次に、 snmp_getone TCL コマンド拡張を使用して、ルータ上の SNMP エンティティから個別の変数のセットを取得する方法の例を示します。

snmp_getone public 1.3.6.1.2.1.1.1.0 1.3.6.1.2.1.1.2.0
{<obj oid='system.1.0' val='Cisco Internetwork Operating System Software
Cisco IOS(tm) 7200 Software (C7200-IK9S-M), Experimental Version 12.3(20030507:225511)
[geotpi2itd1 124]
Copyright (c) 1986-2003 by Cisco Systems, Inc.
Compiled Wed 21-May-03 16:16 by engineer'/>}
{<obj oid='system.2.0' val='products.223'/>}
 

次に、 snmp_setany TCL コマンド拡張を使用して、ルータの設定の一部を変更する方法の例を示します。この例では、ルータのホスト名が TCL SNMP-HOST に変更されています。

tclsh
snmp_setany private 1.3.6.1.2.1.1.5.0 -d TCLSNMP-HOST
{<obj oid='system.5.0' val='TCLSNMP-HOST'/>}

その他の参考資料

次の項では、TCL による Cisco IOS スクリプティング機能に関連する参考資料を示します。

関連資料

関連トピック
参照先

Embedded Syslog Manager

Embedded Syslog Manager 」の章

ネットワーク管理コマンド(Tcl コマンドおよび logging コマンドを含む):コマンド構文の詳細、デフォルト設定、コマンド モード、コマンド履歴、使用上の注意事項、および例

『Cisco IOS Network Management Command Reference』

規格

規格
タイトル

この機能では、新しい規格または変更された規格はサポートされていません。また、既存の規格に対するサポートに変更はありません。

--

MIB

MIB
MIB リンク

この機能では、新しい MIB または変更された MIB はサポートされていません。また、既存の MIB に対するサポートに変更はありません。

選択したプラットフォーム、Cisco IOS Release、およびフィーチャ セットの MIB を検索してダウンロードする場合は、次の URL にある Cisco MIB Locator を使用します。

http://www.cisco.com/go/mibs

RFC

RFC
タイトル

この機能では、新しい RFC または変更された RFC はサポートされていません。また、既存の RFC に対するサポートに変更はありません。

--

シスコのテクニカル サポート

説明
リンク

右の URL にアクセスして、シスコのテクニカル サポートを最大限に活用してください。

以下を含むさまざまな作業にこの Web サイトが役立ちます。
・テクニカル サポートを受ける
・ソフトウェアをダウンロードする
・セキュリティの脆弱性を報告する、またはシスコ製品のセキュリティ問題に対する支援を受ける
・ツールおよびリソースへアクセスする
- Product Alert の受信登録
- Field Notice の受信登録
- Bug Toolkit を使用した既知の問題の検索
・Networking Professionals(NetPro)コミュニティで、技術関連のディスカッションに参加する
・トレーニング リソースへアクセスする
・TAC Case Collection ツールを使用して、ハードウェアや設定、パフォーマンスに関する一般的な問題をインタラクティブに特定および解決する

この Web サイト上のツールにアクセスする際は、Cisco.com のログイン ID およびパスワードが必要です。

http://www.cisco.com/cisco/web/support/index.html

TCL による Cisco IOS スクリプティングの機能情報

表 4 に、この機能のリリース履歴を示します。

ご使用の Cisco IOS ソフトウェア リリースによっては、コマンドの中に一部使用できないものがあります。特定のコマンドに関するリリース情報については、コマンド リファレンス マニュアルを参照してください。

Cisco Feature Navigator を使用すると、プラットフォームおよびソフトウェア イメージの各サポート情報を検索できます。Cisco Feature Navigator により、どの Cisco IOS および Catalyst OS ソフトウェア イメージが特定のソフトウェア リリース、フィーチャ セット、またはプラットフォームをサポートするか調べることができます。Cisco Feature Navigator には、 http://www.cisco.com/go/cfn からアクセスします。Cisco.com のアカウントは必要ありません。


表 4 には、一連の Cisco IOS ソフトウェア リリースのうち、特定の機能が初めて導入された Cisco IOS ソフトウェア リリースだけが記載されています。その機能は、特に断りがない限り、それ以降の一連の Cisco IOS ソフトウェア リリースでもサポートされます。


 

表 4 TCL による Cisco IOS スクリプティングの機能情報

機能名
リリース
機能情報

TCL による Cisco IOS スクリプティング

12.3(2)T
12.3(7)T
12.2(25)S
12.2(33)SXH
12.2(33)SRC
12.2(33)SB
Cisco IOS XE 3.1.0SG

TCL による Cisco IOS スクリプティング機能を使用すると、TCL バージョン 8.3.4 コマンドを Cisco IOS のコマンドライン インターフェイスから実行できます。

次のコマンドが導入または変更されています。 scripting tcl encdir scripting tcl init scripting tcl low-memory tclquit tclsh

TCL SNMP MIB アクセス

12.3(7)T
12.2(25)S
12.2(33)SXH
12.2(33)SRC
12.2(33)SB
Cisco IOS XE 3.1.0SG

TCL SNMP MIB アクセス機能は、UNIX に似たコマンドのセットを導入し、SNMP MIB オブジェクトへのアクセスを容易にします。

次のセクションに、より詳細な情報を掲載しています。

「TCL シェルを使用した SNMP MIB オブジェクトへのアクセス」

TCL UDP および VRF サポート

15.1(1)T

TCL UDP および VRF 機能は、IOS TCL における UDP ソケットのサポートを提供します。

次のコマンドが導入または変更されました。 fconfigure、socket udp_open udp_peek

用語集

ESM :Embedded Syslog Manager。

IVR :IVR(音声自動応答装置)。

MIB :Management Information Base(管理情報ベース)。

SNMP :Simple Network Management Protocol(簡易ネットワーク管理プロトコル)。

TCL :Tool Command Language(ツールコマンド言語)。


) この用語集に記載されていない用語については、『Internetworking Terms and Acronyms』を参照してください。