Simple Network Management Protocol(SNMP)オブジェクトをポーリングする場合、ポーリング内容を正確に理解することが必要となることがあります。これを完全に理解するためには、ポーリングされるオブジェクトを、ポーリングする必要がある内容と関連付ける方法を把握しておく必要があります。このドキュメントでは、SNMP でインデックスを使用してオブジェクトをテーブルにグループ化する基本的な方法について説明します。
このドキュメントの読者は次のトピックについての専門知識を有している必要があります。
SNMP に関する一般的な知識
SNMP を介して Cisco デバイスをクエリーするために使用されるソフトウェア
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
UCD SNMP バージョン 4.2
Cisco IOS®ソフトウェアリリース5.5(7)が稼働するCisco Catalyst 5509
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。対象のネットワークが実稼働中である場合には、どのようなコマンドについても、その潜在的な影響について確実に理解しておく必要があります。
ドキュメント表記の詳細は、「シスコ テクニカル ティップスの表記法」を参照してください。
SNMP を扱う際に最初に理解することの 1 つが、ifIndex です。これはすべてのオブジェクトの主キーです。すべてのインターフェイス(物理および論理)が分割され、値が割り当てられる方法としてこれを認識します。この値は、デバイスのブート中に割り当てられ、変更できない場合があります。この特定のインターフェイスに情報をポーリングする必要がある場合、その割り当てられた値が使用される必要があります。
IfIndex は IF-MIB(RFC 1213)で次のように定義されています。
InterfaceIndex ::= TEXTUAL-CONVENTION DISPLAY-HINT "d" STATUS current DESCRIPTION "A unique value, greater than zero, for each interface or interface sub-layer in the managed system. It is recommended that values are assigned contiguously starting from 1. The value for each interface sub- layer must remain constant at least from one re- initialization of the entity's network management system to the next re-initialization." SYNTAX Integer32 (1..2147483647)
MIB の場合、どのインデックスによってテーブルが構成されているのかをすばやく判断する方法は、テーブル エントリを確認する方法です。
ifEntry OBJECT-TYPE SYNTAX IfEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "An entry containing management information applicable to a particular interface." INDEX { ifIndex } ::= { ifTable 1 }
MIB とテーブル エントリにより、どのようにテーブルにインデックスが付けられているのかを判断できます。次のセクションでは、ifIndex の例を説明しています。
スイッチ上のポート 7/4 の ifIndex ベース オブジェクト(ifName)をポーリングするために snmpwalk コマンドを発行すると、次の出力が表示されます。
sj-cse-568: snmpwalk 172.16.99.60 public ifname ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.1 = sc0 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.2 = sl0 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.3 = VLAN-1 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.4 = VLAN-1002 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.5 = VLAN-1004 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.6 = VLAN-1005 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.7 = VLAN-1003 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.8 = 7/1 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.9 = 7/2 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.10 = 7/3 !--- This is the relevant line: ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.11 = 7/4 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.12 = 7/5 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.13 = 7/6 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.14 = 7/7 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.15 = 7/8 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.16 = 7/9 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.17 = 7/10 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.18 = 7/11 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.19 = 7/12 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.20 = ATM8/0 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.22 = /A ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.23 = /B ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.24 = Nu0 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.25 = LEC/ATM8/0.10 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.532 = 3/1 ifMIB.ifMIBObjects.ifXTable.ifXEntry.ifName.533 = 3/2 !--- Output suppressed.
ifName(ルータ上の ifDescr)のポーリングからの出力内で、ifName の後に、各行に割り当てられている番号があることに注意してください。これは、同じ行内の実際のインターフェイスに割り当てられている ifIndex です。つまり、ポーリングの2行目であるポート7/4にifIndex11が割り当てられます。ifIndexedオブジェクトからポート7/4に関する情報を得るには、インデックス11を使用します。つまり、MIBオブジェクト識別子(OID)の末尾に。11を追加します値。
場合によっては、BRIDGE-MIB など、テーブルに ifIndex によるインデックスが付けられていません。次の出力では、インデックスがどのように付けられているのかを調べます。
dot1dBasePortEntry OBJECT-TYPE SYNTAX Dot1dBasePortEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "A list of information for each port of the bridge." REFERENCE "IEEE 802.1D-1990: Section 6.4.2, 6.6.1" INDEX { dot1dBasePort } ::= { dot1dBasePortTable 1 }
この出力は、dot1dBasePortEntry に dot1dBasePort によってインデックスが付けられていることを示しています。これは次のように ifIndex に戻されます。BRIDGE-MIB が dot1dBasePortIfIndex と呼ばれるオブジェクトにアクセスします。オブジェクトは次のように定義されています。
dot1dBasePortIfIndex OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory DESCRIPTION "The value of the instance of the ifIndex object, defined in MIB-II, for the interface corresponding to this port." ::= { dot1dBasePortEntry 2 }
この出力には、BRIDGE-MIB から IF-MIB に関連付ける方法が示されています。次の例には、これらすべてがどのように構成されるのかが示されています。
注:BRIDGE-MIBはVLANごとに構築されているため、非VLAN1環境ではコミュニティ「public@vlan-id」を使用する必要があります。
BRIDGE-MIB で snmpwalk を発行すると、インデックスに関して次の出力例が表示されます。これを ifIndex にマッピングするには、dot1dBasePortIfIndex(.1.3.6.1.2.1.17.1.4.1.2)を使用します。ifIndex を取得したら、ifIndex に基づく他のオブジェクトをポーリングするためにその ifIndex を使用します。
sj-cse-568: snmpwalk 172.16.99.60 public .1.3.6.1.2.1.17.1.4.1.2 17.1.4.1.2.203 = 671 17.1.4.1.2.204 = 672 17.1.4.1.2.205 = 673 17.1.4.1.2.206 = 674 17.1.4.1.2.207 = 675 17.1.4.1.2.208 = 676 17.1.4.1.2.209 = 677 17.1.4.1.2.210 = 678 17.1.4.1.2.211 = 679 17.1.4.1.2.212 = 680 17.1.4.1.2.213 = 681 17.1.4.1.2.214 = 682 17.1.4.1.2.215 = 683 17.1.4.1.2.216 = 684 17.1.4.1.2.257 = 581 17.1.4.1.2.385 = 8 17.1.4.1.2.386 = 9 17.1.4.1.2.387 = 10 17.1.4.1.2.388 = 11 17.1.4.1.2.389 = 12 17.1.4.1.2.390 = 13 17.1.4.1.2.391 = 14 17.1.4.1.2.392 = 15 17.1.4.1.2.393 = 16 17.1.4.1.2.394 = 17 17.1.4.1.2.395 = 18 17.1.4.1.2.396 = 19 17.1.4.1.2.449 = 22
太字のテキスト行(17.1.4.1.2.388 = 11)は .388 がインデックスであることを示しています。BRIDGE-MIB から dot1dBasePortIfIndex オブジェクトをポーリングしているため、.388 が dot1dBasePortIfIndex です。出力行の 11 が実際の ifIndex です。このポーリングと上述のポーリングから情報を収集する場合、ポート 7/4 には 11 の ifIndex および .388 の dot1dBasePortIfIndex(BRIDGE-MIB のインデックス)があるものと判断できます。