ALMA MATER STUDIORUM - UNIVERSITA' DI BOLOGNA FACOLTA' DI INGEGNERIA - SEDE DI CESENA LABORATORIO DI INFORMATICA Network Management 5. Structure of Management Information (SMIv2) 5.1. ASN.1, rappresentazione dell’informazione e statement correlati Claudio Salati Copyright © 2001 by Claudio Salati 1 ASN.1 e Internet Management Framework • Tipi semplici • INTEGER [ma con range finito:(-2147483648 .. 2147483647)] • OCTET STRING • e' introdotto il costrutto BITS che si mappa su una OCTET STRING • OBJECT IDENTIFIER [lunghezza128, ogni intero componente nel range 0 .. 232-1] • Tipi strutturati • SEQUENCE [non e' possibile definire campi DEFAULT o OPTIONAL] • SEQUENCE OF • Tipi tag-ati esplicitamente • Solo di classe APPLICATION • Solo IMPLICIT • Sotto-tipi 2 ASN.1 e Internet Management Framework (RFC 1902) Tipi semplici -- syntax of simple objects (consentiti da SMI) -- simple objects are not allowed to be of a constructed type -- tutti gli oggetti accessibili (read/write) in una MIB-istanza sono -- di tipo ASN.1 semplice ObjectSyntax ::= CHOICE { simple SimpleSyntax, -- tipi semplici di ASN.1 consentiti da SMI application-wide ApplicationSyntax -- tipi semplici predefiniti da SMI } -- SEQUENCEs for conceptual tables and rows not mentioned here -- continue in next page 3 ASN.1 e Internet Management Framework (RFC 1902) Tipi semplici SimpleSyntax ::= CHOICE { integer-value INTEGER (-2147483648..2147483647), string-value OCTET STRING, objectID-value OBJECT IDENTIFIER } Integer32 ::= [UNIVERSAL 2] INTEGER (-2147483648..2147483647) -- re-defines INTEGER: same tag! -- continue in next page 4 ASN.1 e Internet Management Framework (RFC 1902) Tipi semplici predefiniti dal framework di gestione (da SMI) ApplicationSyntax ::= CHOICE { ipAddress-value counter-value gauge-value timeticks-value arbitrary-value big-counter-value IpAddress, Counter32, Gauge32, TimeTicks, Opaque, Counter64} IpAddress ::= [APPLICATION 0] IMPLICIT OCTET STRING (SIZE (4)) -- IP address in network byte order Counter32 ::= [APPLICATION 1] IMPLICIT INTEGER (0..4294967295) -- modulo 2**32 counter; to make sense of it the manager must -- read 2 values and compute the delta -- continue in next page 5 ASN.1 e Internet Management Framework (RFC 1902) Gauge32 ::= [APPLICATION 2] IMPLICIT INTEGER (0..4294967295) -- a non-negative value in the range indicated; doesn't wrap -- if real value exceeds MAX, MAX is returned Unsigned32 ::= [APPLICATION 2] IMPLICIT INTEGER (0..4294967295) -- a non-negative value that fits in 32 bits -- same tag as Gauge32! TimeTicks ::= [APPLICATION 3] IMPLICIT INTEGER (0..4294967295) -- time indication, in hundredth of seconds since an epoch -- an object of this type must specify the epoch that is used -- continue in next page 6 ASN.1 e Internet Management Framework (RFC 1902) Opaque ::= [APPLICATION 4] IMPLICIT OCTET STRING -- should be defined as ::= [APPLICATION 4] ANY -- for backward compatibility Counter64 ::= [APPLICATION 6] IMPLICIT INTEGER (0..18446744073709551615) -- similar to Counter32, to be used only when a Counter32 would -- wrap in less than 1 hour 7 ASN.1 e Internet Management Framework (RFC 1902) • Viene introdotto il costrutto BITS • E' sintatticamente equivalente ad una BIT STRING ASN.1 in cui i bit sono esplicitamente denominati e.g. BITS { read (0), write (1), execute (2) } • Viene pero' mappata, a livello di transfer syntax, come una OCTET STRING (cosi' da rientrare tra i tipi semplici ammessi da SNMP) • Pertanto e' come una BIT STRING octet aligned 8 ASN.1 e Internet Management Framework Tipi strutturati • Il loro utilizzo e' strettamente limitato e disciplinato • SEQUENCE e' utilizzato per definire il tipo di un oggetto riga • Un oggetto riga e' costituito da una sequenza eterogenea di oggetti semplici i campi della SEQUENCE devono essere di tipi ASN.1 semplici • Ogni campo della SEQUENCE deve essere denominato con una label univoca • Ogni label deve essere definita come un oggetto (objecttype) semplice (in realta’ colonna), dello stesso tipo di quello del campo corrispondente della SEQUENCE • Il nome (OBJECT IDENTIFIER) di ciascun oggetto semplice (cioe' del relativo OBJECT-TYPE) e' correlato al nome dell'oggetto riga (cioe' del relativo OBJECT-TYPE) di cui e' un componente 9 ASN.1 e Internet Management Framework Tipi strutturati • SEQUENCE OF e' utilizzato per definire il tipo di un oggetto tabella • Un oggetto tabella e' costituito da una sequenza omogenea di oggetti riga: il tipo base del tipo SEQUENCE OF di un oggetto tabella deve • essere definito come un object-type riga, e quindi • essere definito come un tipo SEQUENCE • Il nome (OBJECT IDENTIFIER) di ciascun oggetto riga (cioe' del relativo OBJECT-TYPE) e' correlato al nome dell'oggetto tabella (cioe' del relativo OBJECT-TYPE) di cui e' un componente • Un oggetto tabella rappresenta evidentemente una struttura dati bi-dimensionale 10 ASN.1 e Internet Management Framework Tipi strutturati: tabelle concettuali Categoria di object-type Tipo ASN.1 (conceptual) table SEQUENCE OF Row (conceptual) row Row ::= SEQUENCE { … columnk TypeOfColumnk, … } column: columnk TypeOfColumnk 11 ASN.1 e Internet Management Framework Tipi strutturati • SEQUENCE e SEQUENCE OF sono utilizzati anche nella definizione del PDU del protocollo SNMP • nella definizione del PDU del protocollo SNMP vengono anche utilizzati • Il meta-tipo CHOICE • Tag espliciti contestuali (comunque IMPLICIT) 12 ASN.1 e Internet Management Framework Sotto-Tipi • Sono consentiti 3 metodi di sotto-tipizzazione, il cui uso e' comunque ulteriormente disciplinato (vedi RFC 2578 sez. 9 e app. A: ci sono differenze con RFC 1902) • E' anche disciplinato dove puo' essere utilizzata la sottotipizzazione: e.g. nella clausola SYNTAX degli statement • OBJECT-TYPE • TEXTUAL-CONVENTION 1. Range refinement • Applicabile a: INTEGER, Integer32, Unsigned32, Gauge32 • Limita il range dei valori ammessi dal sotto-tipo • Esempio: INTEGER (0 .. 59) Unsigned32 (0 .. 59 | 100 .. 159) • E’ formalmente ammessa anche la forma (0 | 2 | 4 | 6 | 8) che pero’ non e’ usata 13 ASN.1 e Internet Management Framework Sotto-Tipi 2. Enumeration refinement • Applicabile a: INTEGER, BITS • Enumera e denomina esplicitamente i valori ammessi • Esempio: INTEGER { ten2theZero (1), ten2theOne (10), ten2theTwo (100), ten2theThree (1000) } 3. Size refinement • Applicabile a: OCTET STRING • Limita la lunghezza minima e massima di una stringa • Esempio: OCTET STRING (SIZE (0..255)) OCTET STRING (SIZE (20)) OCTET STRING (SIZE (14 | 20)) 14 ASN.1 e Internet Management Framework Sotto-Tipi • Altre forme di sottotipizzazione sono esprimibili solo in linguaggio naturale nelle opportune clausole (clausola DESCRIPTION) degli statement SMI e.g. (secondo RFC 2578) repertoire refinement, come • (FROM ("1", "2", "X")) • A differenza di quanto previsto dal linguaggio e da quanto accade nei normali sistemi di programmazione ASN.1 nel Management Framework SNMP si richiede che i vincoli di sottotipizzazione siano sottoposti a controllo run-time • • • per quanto consentito dalla informazione trasportata dalla transfer syntax cio' puo' essere fatto a livello di presentazione altrimenti, nel caso di valori di sottotipi, cio' deve essere fatto a livello di sistema di programmazione SMI (o, alternativamente, di programma utente) Notare che il tag del sotto-tipo e' identico al tag del tipo base (e cosi' la sua sintassi di trasferimento!) 15 ASN.1 e Internet Management Framework Sotto-Tipi - TEXTUAL-CONVENTION • Lo statement TEXTUAL-CONVENTION (RFC 1903) consente di definire • Tipi sinonimi dei tipi semplici definiti dal framework • Sottotipi dei tipi semplici definiti dal framework che pero' sono dotati di caratteristiche semantiche particolari. • Queste caratteristiche semantiche particolari sono descrivibili in linguaggio naturale in una opportuna clausola dello statement • Una textual convention puo' quindi essere usata come un tipo semplice ASN.1 • Il management framework pre-definisce un insieme significativo di textual convention 16 TEXTUAL CONVENTION (RFC 1903) • When designing a MIB module, it is often useful to define new types similar to those defined in the SMI. • In comparison to a type defined in the SMI, each of these new types has • a different name, • a similar syntax, but • a more precise semantics. • These newly defined types are termed textual conventions, and are used for the convenience of humans reading the MIB module. In realta' la definizione semantica specifica e' ovviamente utilizzata anche dall'applicazione di gestione • Objects defined using a textual convention are always encoded by means of the rules that define their primitive type. • However, textual conventions often have special semantics associated with them. 17 TEXTUAL-CONVENTION TcASN.1-typeID ::= TEXTUAL-CONVENTION [ DISPLAY-HINT ""-delimited-string ] STATUS <status> DESCRIPTION ""-delimited-string [ REFERENCE ""-delimited-string ] SYNTAX <ASN.1-type-denotation> -- or the BITS construct <status> current | deprecated | obsolete -- nell'ordine <ASN.1-type-denotation> ASN.1-typeID | ASN.1-subtype-denotation 18 Notazione grammaticale -- commento, come in ASN.1 [ clausola opzionale ] { clausola opzionale ripetibile } SIMBOLO-TERMINALE simbolo-terminale ::= simbolo terminale, indica “e’ definito come” {}, simboli terminali: punteggiatura <meta-simbolo> o simbolo non terminale simbolo-terminale variabile istanza per istanza, la cui forma e’ indicata dall’identificatore del simbolo indicatore di produzione | alternativa nel lato destro di una produzione 19 TEXTUAL-CONVENTION • DISPLAY-HINT formato di visualizzazione di un valore della textual convention • STATUS indicazione dello stato di utilizzabilita' della textual convention • DESCRIPTION una descrizione in linguaggio naturale della textual convention, e in particolare della sua semantica specifica • REFERENCE se la textual convention e' in qualche modo correlata ad un'altra textual convention, questa clausola consente di riferirla tramite una indicazione in linguaggio naturale • SYNTAX tipo ASN.1 di cui la textual convention definisce un identificatore sinonimo (TcASN.1-typeID) 20 CLAUSOLA STATUS • presente in tutti gli statement SMI • i valori ammissibili sono cosi' definiti (e.g. in RFC 1902) The values "current", and "obsolete" are self-explanatory. The "deprecated" value indicates that the definition is obsolete, but that an implementor may wish to support that object to foster interoperability with older implementations. 21 CLAUSOLA DISPLAY-HINT • non e' una stringa amorfa, ma una indicazione di formato, come il parametro format di una printf() del C • vedi RFC 1903 per il dettaglio dei formati ammessi • la definizione di un formato di display per un tipo di dato (per un ADT!) consente di definire un look&feel omogeneo per le diverse implementazioni di applicazioni manager: • questo rappresenta in realta' un vantaggio fondamentale! Case study: esistono 3 maniere "standard" di identificare i timeslot di una trama multiplata SDH (a livello LO), oltre ad altre possibili maniere peculiari: formato k-l-m coppia: signal rate + posizione nell'albero di contenimento coppia: signal rate + posizione nella trama 22 Predefined SNMPv2 textual conventions (RFC 1903) TruthValue ::= TEXTUAL-CONVENTION STATUS current DESCRIPTION "Represents a boolean value." SYNTAX INTEGER { true(1), false(2) } MacAddress ::= TEXTUAL-CONVENTION DISPLAY-HINT "1x:" STATUS current DESCRIPTION "Represents an 802 MAC address represented in the canonical order defined by IEEE 802.1a, i.e., as if it were transmitted least significant bit first. DISPLAY-HINT 1x: interpreted as: print each octet of the value as a hex number, and separate each value with a colon." SYNTAX OCTET STRING (SIZE (6)) 23 Predefined SNMPv2 textual conventions (RFC 1903) PhysAddress ::= TEXTUAL-CONVENTION DISPLAY-HINT "1x:" STATUS current DESCRIPTION "Represents media- or physical-level addresses." SYNTAX OCTET STRING TimeStamp ::= TEXTUAL-CONVENTION STATUS current DESCRIPTION "The value of the sysUpTime object at which a specific occurrence happened. The specific occurrence must be defined in the description of any object defined using this type." -- la semantica e' specifica perche' e' definita una epoch ben precisa SYNTAX TimeTicks 24 Predefined SNMPv2 textual conventions (RFC 1903) VariablePointer ::= TEXTUAL-CONVENTION STATUS current DESCRIPTION "A pointer to a specific object instance. For example, sysContact.0 or ifInOctets.3." SYNTAX OBJECT IDENTIFIER RowPointer ::= TEXTUAL-CONVENTION STATUS current DESCRIPTION "Represents a pointer to a conceptual row. The value is the name of the instance of the first accessible columnar object in the conceptual row. For example, ifIndex.3 would point to the 3rd row in the ifTable (note that if ifIndex were not-accessible, then ifDescr.3 would be used instead)." SYNTAX OBJECT IDENTIFIER 25 Predefined SNMPv2 textual conventions DateAndTime ::= TEXTUAL-CONVENTION DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d" STATUS current DESCRIPTION "A date-time specification. field -----1 2 3 4 5 6 octets --------1-2 3 4 5 6 7 7 8 9 10 8 9 10 11 contents range ------------------year 0..65536 month 1..12 day 1..31 hour 0..23 minutes 0..59 seconds 0..60 (use 60 for leap-second) deci-seconds 0..9 direction from UTC '+' / '-' hours from UTC 0..11 minutes from UTC 0..59 26 Predefined SNMPv2 textual conventions -- DateAndTime continue For example, Tuesday May 26, 1992 at 1:30:15 PM EDT would be displayed as: 1992-5-26,13:30:15.0,-4:0 Note that if only local time is known, then timezone information (fields 8-10) is not present." -- l'indicizzazione dei caratteri nella stringa parte da 0 SYNTAX OCTET STRING (SIZE (8 | 11)) 27 ASN.1 e Internet Management Framework Valori OBJECT IDENTIFIER - OBJECT-IDENTITY • Lo statement OBJECT-IDENTITY (RFC 1902) consente di definire il significato di un OBJECT IDENTIFIER • Considerando ad esempio la textual convention predefinita (usata nella MIB Interfacce per consentire l'estensione proprietaria della gestione delle interfacce del sistema gestito) AutonomousType ::= TEXTUAL-CONVENTION STATUS current DESCRIPTION "Represents an independently extensible type identification value. It may, for example, indicate a particular sub-tree with further MIB definitions, or define a particular type of protocol or hardware." SYNTAX OBJECT IDENTIFIER I suoi valori devono essere definiti usando lo statement OBECTIDENTITY 28 OBJECT-IDENTITY ASN.1-valueID OBJECT-IDENTITY STATUS <status> DESCRIPTION ""-delimited-string [ REFERENCE ""-delimited-string ] ::= object-identifier <status> current | deprecated | obsolete -- nell'ordine 29 OBJECT-IDENTITY • STATUS indicazione dello stato di utilizzabilita' del valore OBJECT IDENTIFIER • DESCRIPTION una descrizione in linguaggio naturale del significato del valore OBJECT IDENTIFIER • REFERENCE se l’OBJECT IDENTIFIER e' in qualche modo correlato ad un altro OBJECT IDENTIFIER , questa clausola consente di riferirlo tramite una indicazione in linguaggio naturale • ASN.1-valueID identificatore ASN.1 del valore OBJECT IDENTIFIER che si definisce • object-identifier valore OBJECT IDENTIFIER assegnato dalla definizione 30 ESEMPIO D’USO DI OBJECT-IDENTITY (RFC 2268) RFC 2268: MAUs MIB dot3MauTypeAUI OBJECT-IDENTITY STATUS current DESCRIPTION "no internal MAU, view from AUI" ::= { dot3MauType 1 } dot3MauType10Base2 OBJECT-IDENTITY STATUS current DESCRIPTION "thin coax MAU (per 802.3 section 10)" ::= { dot3MauType 4 } 31 ESEMPIO D’USO DI OBJECT-IDENTITY (RFC 2268) dot3MauType10BaseT OBJECT-IDENTITY STATUS current DESCRIPTION "UTP MAU (per 802.3 section 14). Note that it is strongly recommended that agents return either dot3MauType10BaseTHD or dot3MauType10BaseTFD if the duplex mode is known. However, management applications should be prepared to receive this MAU type value from older agent implementations." ::= { dot3MauType 5 } dot3MauType10BaseTHD OBJECT-IDENTITY STATUS current DESCRIPTION "UTP MAU (per 802.3 section 14), half duplex mode" ::= { dot3MauType 10 } dot3MauType10BaseTFD OBJECT-IDENTITY STATUS current DESCRIPTION "UTP MAU (per 802.3 section 14), full duplex mode" ::= { dot3MauType 11 } 32 ESEMPIO D’USO DI OBJECT-IDENTITY (RFC 2268) dot3MauType1000BaseLXHD OBJECT-IDENTITY STATUS current DESCRIPTION "Fiber over long-wavelength laser (per 802.3 section 38), half duplex mode" ::= { dot3MauType 23 } dot3MauType1000BaseLXFD OBJECT-IDENTITY STATUS current DESCRIPTION "Fiber over long-wavelength laser (per 802.3 section 38), full duplex mode" ::= { dot3MauType 24 } dot3MauType1000BaseSXHD OBJECT-IDENTITY STATUS current DESCRIPTION "Fiber over short-wavelength laser (per 802.3 section 38), half duplex mode" ::= { dot3MauType 25 } dot3MauType1000BaseSXFD OBJECT-IDENTITY ... 33 ESEMPIO D’USO DI OBJECT-IDENTITY (RFC 1902) fizbin69 OBJECT-IDENTITY STATUS current DESCRIPTION "The authoritative identity of the Fizbin 69 chipset." ::= { fizbinChipSets 1 } 34 ASN.1 e Internet Management Framework Moduli SMI/ASN.1 – MODULE-IDENTITY • Poiche’ la SMI e’ formalmente un insieme di macro ASN.1 che riferisce definizioni di tipi e valori ASN.1, un testo SMI (e.g. una MIB) e’ costituito da un modulo ASN.1 • ASN.1 definisce una sua sintassi che consente di (ma non obbliga ad) assegnare un nome OBJECT IDENTIFIER ad un modulo: SMI pero’ non utilizza questa sintassi • Per assegnare un nome OBJECT IDENTIFIER ad un modulo SMI definisce uno statement esplicito: MODULE-IDENTITY • Lo statement MODULE-IDENTITY deve comparire una e una sola volta in testa ad ogni modulo SMI 35 MODULE-IDENTITY ASN.1-valueID MODULE-IDENTITY LAST-UPDATED ASN.1-UTCTime-value -- non millennium compliant! ORGANIZATION ""-delimited-string CONTACT-INFO ""-delimited-string DESCRIPTION ""-delimited-string { REVISION ASN.1-UTCTime-value -- non millennium compliant! DESCRIPTION ""-delimited-string } ::= object-identifier 36 MODULE-IDENTITY • LAST-UPDATED istante dell’ultima modifica effettuata al modulo come valore di tipo ASN.1 UTCTime • ORGANIZATION organizzazione responsabile per lo sviluppo del modulo • CONTACT-INFO nome, indirizzo postale, telefono e indirizzo e-mail della persona cui richiedere informazioni sul modulo • DESCRIPTION descrizione sommaria del contenuto del modulo, o della modifica effettuata • REVISION istante di effettuazione della modifica come valore di tipo ASN.1 UTCTime • ASN.1-valueID identificatore ASN.1 del valore OBJECT IDENTFIER che identifica il modulo • object-identifier valore OBJECT IDENTIFIER che identifica il modulo 37 MODULE-IDENTITY: esempio da RFC 1907, MIB for SNMPv2 snmpMIB MODULE-IDENTITY LAST-UPDATED "9511090000Z” -- non millennium compliant! ORGANIZATION "IETF SNMPv2 Working Group" CONTACT-INFO " Postal: Marshall T. Rose Dover Beach Consulting, Inc. 420 Whisman Court Mountain View, CA 94043-2186 US Tel: +1 415 968 1052 E-mail: [email protected]" DESCRIPTION "The MIB module for SNMPv2 entities." REVISION "9304010000Z” DESCRIPTION -- non millennium compliant! "The initial revision of this MIB module was published as RFC1450." ::= { snmpModules 1 } 38 MODULE-IDENTITY: esempio da RFC 1573 ifMIB MODULE-IDENTITY LAST-UPDATED "9311082155Z" ORGANIZATION "IETF Interfaces MIB Working Group" CONTACT-INFO “ Postal: Keith McCloghrie Hughes LAN Systems 1225 Charleston Road, Mountain View, CA 94043 Tel: +1 415 966 7934 E-Mail: [email protected] Frank Kastenholz Postal: FTP Software 2 High Street, North Andover, MA 01845 Tel: +1 508 685 4000 E-Mail: [email protected]" DESCRIPTION "The MIB module to describe generic objects for network interface sub-layers. This MIB is an updated version of MIB-II's ifTable, and incorporates the extensions defined in RFC 1229." ::= { mib-2 31 } 39