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
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
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
ASN.1 e Internet Management Framework (RFC 1902)
Tipi semplici predefiniti dal framework di gestione (da SMI)
ApplicationSyntax ::= CHOICE {
ipAddress-value IpAddress,
counter-value Counter32,
gauge-value Gauge32,
timeticks-value TimeTicks,
arbitrary-value Opaque,
big-counter-value 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
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
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
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
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 (object-type) 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
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
ASN.1 e Internet Management Framework
Tipi strutturati: tabelle concettuali
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)
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
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
ASN.1 e Internet Management Framework
Sotto-Tipi
Enumeration refinement
Applicabile a: INTEGER, BITS
Enumera e denomina esplicitamente i valori ammessi
Esempio: INTEGER { ten2theZero (1),
ten2theOne (10),
ten2theTwo (100), ten2theThree (1000) }
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))
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!)
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
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.
TEXTUAL-CONVENTION
TcASN.1-typeID ::= TEXTUAL-CONVENTION
[ DISPLAY-HINT ""-delimited-string ]
STATUS
DESCRIPTION ""-delimited-string
[ REFERENCE ""-delimited-string ]
SYNTAX
-- or the BITS construct
current | deprecated | obsolete -- nell'ordine
ASN.1-typeID | ASN.1-subtype-denotation
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
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
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)
Comments