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

目次

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

機能情報の検索

目次

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

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

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

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

TCL プリコンパイラ

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

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

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

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

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

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

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

前提条件

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

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

前提条件

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

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

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

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

その他の参考資料

関連資料

規格

MIB

RFC

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

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

用語集

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

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

機能情報の検索

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

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

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

TCL プログラミングと Cisco IOS XE コマンドをよく理解していること。

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

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

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

エラー メッセージが表示されますが、エラーによって TCL シェルが無限ループで動作する可能性があるため、TCL スクリプトが正常に動作していることを確認する必要があります。


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

表 1 に、Cisco IOS XE ソフトウェアでは、標準的な TCL ドキュメントの説明とは動作が異なる TCL コマンドとライブラリ コールを示します。

 

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

コマンド
キーワード
引数
サポートの有無
説明

after

ms

script

一部

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

file

-time

atime

なし

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

file

-time

mtime

なし

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

fileevent

一部

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

history

! n

一部

! n ショートカットは Cisco IOS XE ソフトウェアでは動作しません。 history Tcl コマンドは redo n キーワード と併用してください。

load

なし

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

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

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

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

「TCL プリコンパイラ」

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

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

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

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

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

TCL シェルを使用すると、Cisco IOS XE CLI EXEC コマンドを TCL スクリプトで実行できます。TCL シェルを使用して CLI コマンドを実行すると、初心者ユーザに手順を説明するメニューの作成、繰り返し作業の自動化、 show コマンドのカスタム出力の作成などを実行できます。

TCL プリコンパイラ

Cisco IOS XE 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 XE スクリプティングの設定方法

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

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

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

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

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

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

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

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

 

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

コマンド
説明

ios_config

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

log_user

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

typeahead

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

tclquit

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

手順の概要

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. exec " exec-cmd "

11. 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 インタープリタが割り当てる RAM が多すぎて、ルータがクラッシュすることを防止できます。

ステップ 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

exec “ exec-cmd

 

Router(tcl)# exec “show interfaces”

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

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

ステップ 11

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 XE での TCL シェルの実装には、SNMP MIB オブジェクトへのアクセスのためのいくつかのカスタム コマンド拡張が含まれます。これらの拡張は TCL コンフィギュレーション モードのみで動作します。 表 3 に、これらのコマンド拡張を示します。

 

表 3 SNMP MIB アクセスのための Cisco IOS XE カスタム 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 :整数。管理対象オブジェクトのコンテキスト内の番号が付けられたタイプを指定する場合は、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 :オクテット文字列。16 進数表記のオクテット文字列は、物理アドレスを表す場合に使用されます。

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

-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 XE ソフトウェアで定義済み TCL スクリプトを実行するには、次の任意の作業を実行します。

前提条件

次の作業を実行する前に、Cisco IOS XE ソフトウェアで実行する TCL スクリプトを生成する必要があります。TCL スクリプトは、Cisco IOS XE ファイル システム(IFS)でサポートされる TFTP、FTP、および rcp などのファイル システムを使用して、内部フラッシュ メモリに転送できます。また、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 XE スクリプティングの設定例

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

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

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

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

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
}

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

次の 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
}
}

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

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

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

次の例では、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 XE(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 XE(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 コマンド拡張を使用して、ルータの設定を変更する例を示します。この例では、ルータのホスト名が TCLSNMP-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 XE スクリプティング機能に関連する参考資料を示します。

関連資料

関連項目
参照先

Embedded Syslog Manager

Embedded Syslog Manager 」の章

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

Cisco IOS Network Management Command Reference

規格

規格
タイトル

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

--

MIB

MIB
MIB リンク

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

選択したプラットフォーム、Cisco IOS XE リリース、および機能セットの 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/en/US/support/index.html

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

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

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

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


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


 

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

機能名
リリース
機能情報

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

Cisco IOS XE

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

この機能は、Cisco IOS XE Release 2.1 で、Cisco ASR 1000 シリーズ集約サービス ルータに導入されました。

scripting tcl encdir、scripting tcl init、scripting tcl low-memory、tclquit、tclsh の各コマンドが導入または変更されました。

TCL SNMP MIB アクセス

Cisco IOS XE

TCL SNMP MIB アクセス機能では、Simple Network Management Protocol(SNMP; 簡易ネットワーク管理プロトコル)MIB オブジェクトに簡単にアクセスするための UNIX ライクな SNMP コマンドのセットが導入されました。

詳細については、次の各項を参照してください。

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

用語集

ESM :Embedded Syslog Manager。

IVR :Interactive Voice Response(IVR; 音声自動応答装置)。

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

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

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


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