Questo documento spiega come utilizzare CISCO-BULK-FILE-MIB e trasferire i file creati da tale Management Information Base (MIB) utilizzando CISCO-FTP-CLIENT-MIB.
A partire dal software Cisco IOS® versione 12.0, Cisco ha implementato un modo per memorizzare un oggetto o una tabella SNMP (Simple Network Management Protocol) come file sul dispositivo. È quindi possibile recuperare il file con CISCO-FTP-CLIENT-MIB. Questa tecnologia consente di trasferire grandi quantità di dati utilizzando un metodo di trasporto affidabile.
Prima di provare la configurazione, verificare che siano soddisfatti i seguenti requisiti:
Su un dispositivo Cisco è in esecuzione il software Cisco IOS® versione 12.0 o successive. Controllare lo strumento MIB Locator per verificare che CISCO-BULK-FILE-MIB sia supportato per il dispositivo. Un collegamento allo strumento è disponibile nella pagina degli strumenti MIB di Cisco IOS.
Nota: questo MIB non è supportato sui dispositivi Catalyst OS.
Il protocollo SNMP deve essere configurato sul dispositivo con le stringhe della community di sola lettura e di lettura/scrittura. Argomento non trattato nel presente documento. Per informazioni sulla configurazione del protocollo SNMP sui dispositivi IOS®, consultare il documento sulla configurazione delle stringhe della community SNMP su router, switch XL, RSM, MSFC e switch Catalyst basati su software Cisco IOS.
Le informazioni fornite in questo documento si basano sulle seguenti versioni software e hardware:
CISCO-BULK-FILE-MIB per archiviare l'ifTable da un router 7507 con versione 12.1(12) in un file, quindi usare CISCO-FTP-CLIENT-MIB per trasferire il file dal router a un server FTP.
La suite di comandi net-snmp SNMP installata in UNIX o Windows.
I MIB utilizzati sono:
SNMPv2-TC
SNMPv2-SMI
SNMPv2-CONF
SNMPv2-MIB
IANAifType-MIB
IF-MIB
CISCO-SMI
CISCO-TC
CISCO-BULK-FILE-MIB
CISCO-FTP-CLIENT-MIB
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.
Accertarsi di avere caricato i MIB in questa tabella nella piattaforma di gestione. In questo modo è possibile utilizzare i nomi e i valori degli oggetti elencati in precedenza anziché gli identificatori di oggetto (OID) numerici. In generale, questo documento fa riferimento ai nomi degli oggetti e non agli OID.
Nell'esempio, l'oggetto ifTable viene acquisito da un router e memorizzato in un file bulk. Tuttavia, è possibile utilizzare qualsiasi oggetto o tabella MIB.
Usare la versione net-snmp di snmpset. L'indirizzo IP del router è 14.32.8.2. La stringa della community di lettura/scrittura è privata. La stringa della community di sola lettura è pubblica.
Ogni volta che si crea una nuova operazione per i file in blocco, scegliere due numeri casuali per l'istanza di riga. Possono essere numeri compresi tra 1 e 4294967295 inclusi. Per questo esempio, utilizzare 333 e 444.
Per creare un'operazione BULK-FILE, attenersi alla seguente procedura:
Impostare il file da creare.
$ snmpset -c private 14.32.8.2 cbfDefineFileEntryStatus.333 i 5 $ snmpset -c private 14.32.8.2 cbfDefineFileName.333 s ifTable.txt $ snmpset -c private 14.32.8.2 cbfDefineFileFormat.333 i bulkASCII
Specificare l'oggetto MIB da acquisire.
L'oggetto richiede due indici per il corretto funzionamento. Il 333 è il 333 della tabella di creazione dei file riportata sopra. Il valore 444 è un nuovo numero casuale utilizzato per l'indice primario in cbfDefineObjectTable.
In questo esempio viene illustrato l'utilizzo di un nome di oggetto per cbfDefineObjectID (ifTable). È possibile utilizzare anche un OID completo.
$ snmpset -c private 14.32.8.2 cbfDefineObjectID.333.444 o ifTable
Attivate le nuove righe create.
È necessario disporre di entrambi gli indici per la riga cbfDefineObjectTable.
$ snmpset -c private 14.32.8.2 cbfDefineObjectEntryStatus.333.444 i 1 $ snmpset -c private 14.32.8.2 cbfDefineFileEntryStatus.333 i 1
Creare il file.
$ snmpset -c private 14.32.8.2 cbfDefineFileNow.333 i 3
Viene creato il file ausiliario.
Verificare che il file sia stato creato correttamente utilizzando snmpget sull'oggetto cbfStatusFileState.
Questo oggetto richiede due indici. Il primo indice è il numero casuale scelto per la tabella File (333 in questo esempio). Il secondo indice dipende dal numero di file creati nel router. Poiché si tratta del primo file, l'indice è 1. Utilizzare quindi il comando:
$ snmpget -c public 14.32.8.2 cbfStatusFileState.333.1
Il valore running(1) indica che il file è in fase di creazione. Il valore ready(2) indica che il file è stato creato correttamente ed è in attesa di essere letto.
Tuttavia, questo file non è accessibile direttamente dal router. Utilizzare CISCO-FTP-CLIENT-MIB per leggere questo file.
Per ogni operazione del client FTP, è necessario selezionare un numero casuale per l'istanza della riga. È possibile utilizzare uno degli stessi numeri casuali utilizzati in precedenza. In questo esempio viene utilizzato 555.
Per trasferire il file con un CISCO-FTP-CLIENT-MIB, attenersi alla seguente procedura:
Creare un'istanza di riga del client FTP.
$ snmpset -c private 14.32.8.2 cfcRequestEntryStatus.555 i 5
Immettere i parametri richiesti. LocalFile deve avere lo stesso nome del file creato in precedenza. Utilizzare putASCII per trasferire file BulkASCII.
Se si imposta cbfDefineFileFormat su bulkBinary, è necessario impostare cfcRequestOperation su putBinary.
$ snmpset -c private 14.32.8.2 cfcRequestOperation.555 i putASCII $ snmpset -c private 14.32.8.2 cfcRequestLocalFile.555 s ifTable.txt $ snmpset -c private 14.32.8.2 cfcRequestRemoteFile.555 s /home/Marcus/ifTable.txt $ snmpset -c private 14.32.8.2 cfcRequestServer.555 s 172.18.123.33 $ snmpset -c private 14.32.8.2 cfcRequestUser.555 s Marcus $ snmpset -c private 14.32.8.2 cfcRequestPassword.555 s marcus123
Iniziare il trasferimento impostando la riga su attiva.
$ snmpset -c private 14.32.8.2 cfcRequestEntryStatus.555 i 1
Il trasferimento FTP ha inizio. Al termine, il file viene salvato in /home/Marcus/ifTable.txt.
Per ottenere lo stato del trasferimento FTP, utilizzare nuovamente snmpget sull'oggetto cfcRequestResult.
Questo oggetto utilizza lo stesso indice utilizzato con gli altri oggetti FTP.
$ snmpget -c public 14.32.8.2 cfcRequestResult.555
Il valore pending(1) indica che il file è ancora in fase di trasferimento. Il valore success(2) indica che il file è stato trasferito correttamente. Qualsiasi altro valore è un errore.
Al termine del trasferimento del file, provare a eseguire di nuovo lo snmpget dell'oggetto cbfStatusFileState. Ora ha un valore diverso.
$ snmpget -c public 14.32.8.2 cbfStatusFileState.333.1 enterprises.cisco.ciscoMgmt.ciscoBulkFileMIB.ciscoBulkFileMIBObjects.cbfStatus. cbfStatusFileTable.cbfStatusFileEntry.cbfStatusFileState.333.1 = emptied(3)
Il valore di svuotato(3) indica che il file è stato letto correttamente. Impossibile trasferire di nuovo il file.
È ora possibile eliminare il file eliminando la riga di stato del file. L'oggetto utilizza gli stessi indici dell'oggetto cbfStatusFileState precedente.
$ snmpset -c private 14.32.8.2 cbfStatusFileEntryStatus.333.1 i 6
Una volta eliminato il file, eliminare le righe Object e File corrispondenti.
$ snmpset -c private 14.32.8.2 cbfDefineObjectEntryStatus.333.444 i 6 $ snmpset -c private 14.32.8.2 cbfDefineFileEntryStatus.333 i 6
In questo modo, è possibile utilizzare CISCO-FTP-CLIENT-MIB per trasferire qualsiasi file dal router utilizzando l'FTP.
In questa sezione vengono illustrati alcuni passaggi della sintassi del file.
La prima riga è la riga del prefisso. Per l'esempio di ifTable, è:
prefix 1.3.6.1.2.1.2.2.1
Corrisponde all'OID dell'oggetto ifEntry. L'ifTable è composto da uno o più ifEntries.
La riga successiva elenca il numero di oggetti nella tabella. La riga è costituita dalla tabella delle parole chiave seguita dal numero di oggetti nella tabella, seguito dall'indice di ciascun oggetto.
Ad esempio:
table 22 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Questa riga indica che la tabella contiene 22 oggetti e che ogni oggetto ha un indice incrementale. Questi oggetti sono tratti dall'esempio ifTable:
ifIndex ifDescr ifType ifSpeed ...
Dopo questa riga sono presenti più voci di riga. Nell'esempio ifTable, ogni riga corrisponde a un'interfaccia. Le righe iniziano con la riga della parola chiave, seguita dal relativo identificatore di indice e dagli oggetti enumerati dalla voce di tabella precedente.
Ad esempio:
row 1 1 546F6B656E52696E67302F30 9 4464 16000000 0008B0851800 2 2 6551 0 0 0 0 0 0 0 0 0 0 0 0 0.0
La quarta voce è ifDescr per l'interfaccia 1. Tuttavia, si tratta di ifDescr in caratteri ASCII con codifica esadecimale.
Per tradurre questa riga in un formato più leggibile, utilizzare questo comando Perl:
$ perl -e 'print pack("H*", "546F6B656E52696E67302F30")' TokenRing0/0
Questa voce corrisponde all'interfaccia TokenRing0/0. Tutti gli oggetti che normalmente sono stringhe vengono visualizzati come caratteri ASCII con codifica esadecimale nei file ausiliari. È possibile utilizzare questo comando Perl per convertire qualsiasi stringa ASCII esadecimale in testo leggibile. Se Perl non è disponibile, utilizzare questa tabella di caratteri ASCII per tradurre la stringa.
Alcune voci contengono caratteri ~ per i valori. Ciò significa che il valore dell'oggetto è NULL. In altre parole, l'oggetto non è istanziato sul dispositivo.
Ad esempio:
row 9 9 41544D312F302F302D61746D206C61796572 37 ~ 0 1 1 5971 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Corrisponde all'interfaccia di livello ATM1/0/0-atm. Si noti che ifMtu è NULL per questa interfaccia. Poiché si tratta di un'interfaccia virtuale, ha senso che non abbia una MTU. Se si preferisce, è possibile sostituire questi valori NULL con 0 aggiungendo questo comando alla configurazione del dispositivo:
Router(config)#no snmp-server sparse-table
Quando si esegue il polling dell'oggetto cbfStatusFileState, se si riceve un valore diverso da running(1), ready(2) o empted(3), si è verificato un errore. Le cause degli errori sono le seguenti:
noSpace no data due to insufficient file space badName no data due to a name or path problem writeErr no data due to fatal file write error noMem no data due to insufficient dynamic memory buffErr implementation buffer too small aborted short terminated by operator command
Se il numero di oggetti nel file è inferiore al previsto, cbfDefineMaxObjects di CISCO-BULK-FILE-MIB potrebbe essere impostato su un valore troppo basso. Per determinare il valore corrente dell'oggetto, utilizzare snmpget.
$ snmpget -c public 14.32.8.2 cbfDefineMaxObjects.0
Il valore 0 indica che non è configurato alcun limite. Il valore può essere impostato su qualsiasi numero intero compreso tra 0 e 4294967295 inclusi. Per impostare il numero massimo di oggetti per file su 10, utilizzare il comando snmpset. L'indice per questo oggetto è sempre 0.
$ snmpset -c private 14.32.8.2 cbfDefineMaxObjects.0 u 10
Questo oggetto potrebbe non essere configurabile su tutte le piattaforme. Se l'operazione snmpset non riesce e viene restituito questo errore, l'oggetto non è configurabile sulla piattaforma in uso:
Error in packet. Reason: (noSuchName) There is no such variable name in this MIB. Failed object: enterprises.cisco.ciscoMgmt.ciscoBulkFileMIB.ciscoBulkFileMIBObjects.cbfDefine.cbfDefineMaxObjects.0
Durante il polling dell'oggetto cfcRequestResult, se si riceve un valore diverso da pending(1) o success(2), l'operazione FTP ha rilevato un errore. Le cause degli errori sono le seguenti:
aborted user aborted the transfer fileOpenFailLocal local bulk file was not found fileOpenFailRemote remote file could not be opened for writing badDomainName FTP server's hostname could not be resolved unreachableIpAddress route to the FTP server could not be found linkFailed connection could not be made to the remote server fileReadFailed local file could not be read fileWriteFailed remote file could not be written
Attualmente non è disponibile un metodo supportato per accedere direttamente ai file in blocco. Per leggere i file, occorre usare CISCO-FTP-CLIENT-MIB.
L'oggetto cbfDefineFileStorage definisce tre tipi: effimero, volatile e permanente. Al momento, l'unico tipo supportato in IOS è ephemeral. I file temporanei esistono in piccole quantità fino a quando non vengono letti.
Una volta letti, i file non possono essere riletti. Devono prima essere ricreati.
L'oggetto cbfDefineFileFormat definisce tre tipi: standardBER, bulkBinary e bulkASCII. Gli unici formati supportati sono bulkBinary e bulkASCII. Il formato predefinito è bulkBinary.
È noto che il server FTP Chameleon per Windows non funziona con CISCO-FTP-CLIENT-MIB, in quanto non restituisce codici di risultato corretti.