SNMPv2-SMI DEFINITIONS ::= BEGIN

– the path to the root

org OBJECT IDENTIFIER ::= { iso 3 } – “iso” = 1 dod OBJECT IDENTIFIER ::= { org 6 } internet OBJECT IDENTIFIER ::= { dod 1 }

directory OBJECT IDENTIFIER ::= { internet 1 }

mgmt OBJECT IDENTIFIER ::= { internet 2 } mib-2 OBJECT IDENTIFIER ::= { mgmt 1 } transmission OBJECT IDENTIFIER ::= { mib-2 10 }

experimental OBJECT IDENTIFIER ::= { internet 3 }

private OBJECT IDENTIFIER ::= { internet 4 } enterprises OBJECT IDENTIFIER ::= { private 1 }

security OBJECT IDENTIFIER ::= { internet 5 }

snmpV2 OBJECT IDENTIFIER ::= { internet 6 }

– transport domains snmpDomains OBJECT IDENTIFIER ::= { snmpV2 1 }

– transport proxies snmpProxys OBJECT IDENTIFIER ::= { snmpV2 2 }

– module identities snmpModules OBJECT IDENTIFIER ::= { snmpV2 3 }

– Extended UTCTime, to allow dates with four-digit years – (Note that this definition of ExtUTCTime is not to be IMPORTed – by MIB modules.) ExtUTCTime ::= OCTET STRING(SIZE(11 | 13))

-- format is YYMMDDHHMMZ or YYYYMMDDHHMMZ

--   where: YY   - last two digits of year (only years
--                 between 1900-1999)
--          YYYY - last four digits of the year (any year)
--          MM   - month (01 through 12)
--          DD   - day of month (01 through 31)
--          HH   - hours (00 through 23)
--          MM   - minutes (00 through 59)
--          Z    - denotes GMT (the ASCII character Z)
--
-- For example, "9502192015Z" and "199502192015Z" represent
-- 8:15pm GMT on 19 February 1995. Years after 1999 must use
-- the four digit year format. Years 1900-1999 may use the
-- two or four digit format.

– definitions for information modules

MODULE-IDENTITY MACRO ::= BEGIN

TYPE NOTATION ::=
              "LAST-UPDATED" value(Update ExtUTCTime)
              "ORGANIZATION" Text
              "CONTACT-INFO" Text
              "DESCRIPTION" Text
              RevisionPart

VALUE NOTATION ::=
              value(VALUE OBJECT IDENTIFIER)

RevisionPart ::=
              Revisions
            | empty
Revisions ::=
              Revision
            | Revisions Revision
Revision ::=
              "REVISION" value(Update ExtUTCTime)
              "DESCRIPTION" Text

-- a character string as defined in section 3.1.1
Text ::= value(IA5String)

END

OBJECT-IDENTITY MACRO ::= BEGIN

TYPE NOTATION ::=
              "STATUS" Status
              "DESCRIPTION" Text

              ReferPart

VALUE NOTATION ::=
              value(VALUE OBJECT IDENTIFIER)

Status ::=
              "current"
            | "deprecated"
            | "obsolete"

ReferPart ::=
              "REFERENCE" Text
            | empty

-- a character string as defined in section 3.1.1
Text ::= value(IA5String)

END

– names of objects – (Note that these definitions of ObjectName and NotificationName – are not to be IMPORTed by MIB modules.)

ObjectName ::=

OBJECT IDENTIFIER

NotificationName ::=

OBJECT IDENTIFIER

– syntax of objects

– the “base types” defined here are: – 3 built-in ASN.1 types: INTEGER, OCTET STRING, OBJECT IDENTIFIER – 8 application-defined types: Integer32, IpAddress, Counter32, – Gauge32, Unsigned32, TimeTicks, Opaque, and Counter64

ObjectSyntax ::=

CHOICE {
    simple
        SimpleSyntax,
      -- note that SEQUENCEs for conceptual tables and
      -- rows are not mentioned here...

    application-wide
        ApplicationSyntax
}

– built-in ASN.1 types

SimpleSyntax ::=

CHOICE {
    -- INTEGERs with a more restrictive range
    -- may also be used
    integer-value               -- includes Integer32
        INTEGER (-2147483648..2147483647),
    -- OCTET STRINGs with a more restrictive size
    -- may also be used
    string-value
        OCTET STRING (SIZE (0..65535)),
    objectID-value
        OBJECT IDENTIFIER
}

– indistinguishable from INTEGER, but never needs more than – 32-bits for a two's complement representation Integer32 ::=

INTEGER (-2147483648..2147483647)

– application-wide types

ApplicationSyntax ::=

CHOICE {
    ipAddress-value
        IpAddress,
    counter-value
        Counter32,
    timeticks-value
        TimeTicks,
    arbitrary-value
        Opaque,
    big-counter-value
        Counter64,
    unsigned-integer-value  -- includes Gauge32
        Unsigned32
}

– in network-byte order

– (this is a tagged type for historical reasons) IpAddress ::=

[APPLICATION 0]
    IMPLICIT OCTET STRING (SIZE (4))

– this wraps Counter32 ::=

[APPLICATION 1]
    IMPLICIT INTEGER (0..4294967295)

– this doesn't wrap Gauge32 ::=

[APPLICATION 2]
    IMPLICIT INTEGER (0..4294967295)

– an unsigned 32-bit quantity – indistinguishable from Gauge32 Unsigned32 ::=

[APPLICATION 2]
    IMPLICIT INTEGER (0..4294967295)

– hundredths of seconds since an epoch TimeTicks ::=

[APPLICATION 3]
    IMPLICIT INTEGER (0..4294967295)

– for backward-compatibility only Opaque ::=

[APPLICATION 4]
    IMPLICIT OCTET STRING

– for counters that wrap in less than one hour with only 32 bits Counter64 ::=

[APPLICATION 6]
    IMPLICIT INTEGER (0..18446744073709551615)

– definition for objects

OBJECT-TYPE MACRO ::= BEGIN

TYPE NOTATION ::=
              "SYNTAX" Syntax
              UnitsPart
              "MAX-ACCESS" Access
              "STATUS" Status
              "DESCRIPTION" Text
              ReferPart

              IndexPart
              DefValPart

VALUE NOTATION ::=
              value(VALUE ObjectName)

Syntax ::=   -- Must be one of the following:
                   -- a base type (or its refinement),
                   -- a textual convention (or its refinement), or
                   -- a BITS pseudo-type
               type
            | "BITS" "{" NamedBits "}"

NamedBits ::= NamedBit
            | NamedBits "," NamedBit

NamedBit ::=  identifier "(" number ")" -- number is nonnegative

UnitsPart ::=
              "UNITS" Text
            | empty

Access ::=
              "not-accessible"
            | "accessible-for-notify"
            | "read-only"
            | "read-write"
            | "read-create"

Status ::=
              "current"
            | "deprecated"
            | "obsolete"

ReferPart ::=
              "REFERENCE" Text
            | empty

IndexPart ::=
              "INDEX"    "{" IndexTypes "}"
            | "AUGMENTS" "{" Entry      "}"
            | empty
IndexTypes ::=
              IndexType
            | IndexTypes "," IndexType
IndexType ::=
              "IMPLIED" Index
            | Index

Index ::=
                -- use the SYNTAX value of the
                -- correspondent OBJECT-TYPE invocation
              value(ObjectName)
Entry ::=
                -- use the INDEX value of the
                -- correspondent OBJECT-TYPE invocation
              value(ObjectName)

DefValPart ::= "DEFVAL" "{" Defvalue "}"
            | empty

Defvalue ::=  -- must be valid for the type specified in
              -- SYNTAX clause of same OBJECT-TYPE macro
              value(ObjectSyntax)
            | "{" BitsValue "}"

BitsValue ::= BitNames
            | empty

BitNames ::=  BitName
            | BitNames "," BitName

BitName ::= identifier

-- a character string as defined in section 3.1.1
Text ::= value(IA5String)

END

– definitions for notifications

NOTIFICATION-TYPE MACRO ::= BEGIN

TYPE NOTATION ::=
              ObjectsPart
              "STATUS" Status
              "DESCRIPTION" Text
              ReferPart

VALUE NOTATION ::=
              value(VALUE NotificationName)

ObjectsPart ::=
              "OBJECTS" "{" Objects "}"
            | empty
Objects ::=
              Object

            | Objects "," Object
Object ::=
              value(ObjectName)

Status ::=
              "current"
            | "deprecated"
            | "obsolete"

ReferPart ::=
              "REFERENCE" Text
            | empty

-- a character string as defined in section 3.1.1
Text ::= value(IA5String)

END

– definitions of administrative identifiers

zeroDotZero OBJECT-IDENTITY

STATUS     current
DESCRIPTION
        "A value used for null identifiers."
::= { 0 0 }

END