Quando si esegue il polling di oggetti SNMP (Simple Network Management Protocol), a volte è necessario sapere esattamente cosa viene sottoposto a polling. Per comprendere appieno questa condizione, dovete sapere come correlare l'oggetto interpellato a quello che desiderate intervistare. In questo documento viene illustrato come utilizzare gli indici in SNMP per raggruppare gli oggetti in tabelle.
Questo documento è utile per conoscere i seguenti argomenti:
Conoscenze generali di SNMP
Software utilizzato per interrogare i dispositivi Cisco tramite SNMP
Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware:
UCD SNMP versione 4.2
Cisco Catalyst 5509 con software Cisco IOS® versione 5.5(7)
Le informazioni discusse in questo documento fanno riferimento a dispositivi usati in uno specifico ambiente di emulazione. Su tutti i dispositivi menzionati nel documento la configurazione è stata ripristinata ai valori predefiniti. Se la rete è operativa, valutare attentamente eventuali conseguenze derivanti dall'uso dei comandi.
Per ulteriori informazioni sulle convenzioni usate, consultare il documento Cisco sulle convenzioni nei suggerimenti tecnici.
Una delle prime cose da imparare, quando si tratta di SNMP, è ifIndex. Questa è una chiave primaria di tutti gli oggetti. Si consideri un modo per suddividere e assegnare un valore a tutte le interfacce (fisiche e logiche). Questo valore viene assegnato durante l'avvio di un dispositivo e non può essere modificato. Se è necessario eseguire il polling di informazioni per l'interfaccia specifica, è necessario utilizzare il valore assegnato.
IfIndex è definito in IF-MIB (RFC 1213 ) nel modo seguente:
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)
Per ogni MIB, un modo rapido per identificare l'indice che organizza una tabella consiste nell'esaminare la voce della tabella:
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 }
Dati un MIB e una voce di tabella, è possibile determinare la modalità di indicizzazione della tabella. Nella sezione successiva vengono forniti esempi di ifIndex.
Quando si esegue il comando snmpwalk per eseguire il polling di un oggetto basato su ifIndex (ifName) per la porta 7/4 sullo switch, viene visualizzato questo output:
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.
In questo output generato da un poll di ifName (ifDescr sui router), si noti che a ogni riga è associato un numero, dopo ifName. ifIndex assegnato all'interfaccia effettiva nella stessa riga. Ciò significa che alla seconda riga del polling, port 7/4, viene assegnato ifIndex il valore 11. Se si desidera ottenere informazioni sulla porta 7/4 da un oggetto ifIndexed, utilizzare un indice di 11. Ciò significa aggiungere .11 alla fine di un identificatore di oggetto MIB (OID) per recuperare l'istanza dell'oggetto corrispondente agli stessi valori ifIndex.
A volte le tabelle non vengono indicizzate da ifIndex, ad esempio con BRIDGE-MIB. In questo output viene esaminata la modalità di indicizzazione:
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 }
Tale output mostra che dot1dBasePortEntry è indicizzato in base a dot1dBasePort. Come si traduce tutto questo in ifIndex? BRIDGE-MIB accede a un oggetto denominato dot1dBasePortIfIndex. L'oggetto viene definito nel modo seguente:
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 }
Questo output mostra come correlare da BRIDGE-MIB a IF-MIB. Nell'esempio seguente viene illustrato l'adattamento di tutte le caratteristiche.
Nota: BRIDGE-MIB è stato creato per ciascuna vlan, quindi per gli ambienti non vlan1 deve essere utilizzato "public@vlan-id".
Quando si esegue una snmpwalk su BRIDGE-MIB, si ottiene l'output di esempio successivo per un indice. Utilizzare dot1dBasePortIfIndex (.1.3.6.1.2.1.17.1.4.1.2) per eseguirne il mapping a ifIndex. Una volta ottenuto ifIndex, utilizzarlo per eseguire il polling di altri oggetti in base a 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
La riga di testo in grassetto (17.1.4.1.2.388 = 11) indica che .388 è un indice. Poiché è stato eseguito il polling dell'oggetto dot1dBasePortIfIndex da BRIDGE-MIB, .388 è dot1dBasePortIfIndex. L'11 nella riga di output è in realtà l'ifIndex. Se si raccolgono le informazioni da questo e dal sondaggio precedente, è possibile determinare che la porta 7/4 ha un ifIndex di 11 e un dot1dBasePortIfIndex (Indice per BRIDGE-MIB) di 0,388.