RFC1155-SMI DEFINITIONS ::= BEGIN

EXPORTS – EVERYTHING

       internet, directory, mgmt,
       experimental, private, enterprises,
       OBJECT-TYPE, ObjectName, ObjectSyntax, SimpleSyntax,
       ApplicationSyntax, NetworkAddress, IpAddress,
       Counter, Gauge, TimeTicks, Opaque;

-- the path to the root

internet      OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 }

directory     OBJECT IDENTIFIER ::= { internet 1 }

mgmt          OBJECT IDENTIFIER ::= { internet 2 }

experimental  OBJECT IDENTIFIER ::= { internet 3 }

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

-- definition of object types

OBJECT-TYPE MACRO ::=
BEGIN
    TYPE NOTATION ::= "SYNTAX" type (TYPE ObjectSyntax)
                      "ACCESS" Access
                      "STATUS" Status
    VALUE NOTATION ::= value (VALUE ObjectName)

    Access ::= "read-only"
                    | "read-write"
                    | "write-only"
                    | "not-accessible"
    Status ::= "mandatory"
                    | "optional"
                    | "obsolete"
END

   -- names of objects in the MIB

   ObjectName ::=
       OBJECT IDENTIFIER

   -- syntax of objects in the MIB

   ObjectSyntax ::=
       CHOICE {
           simple
               SimpleSyntax,
   -- note that simple SEQUENCEs are not directly
   -- mentioned here to keep things simple (i.e.,
   -- prevent mis-use).  However, application-wide
   -- types which are IMPLICITly encoded simple
   -- SEQUENCEs may appear in the following CHOICE

           application-wide
               ApplicationSyntax
       }

      SimpleSyntax ::=
          CHOICE {
              number
                  INTEGER,
              string
                  OCTET STRING,
              object
                  OBJECT IDENTIFIER,
              empty
                  NULL
          }

      ApplicationSyntax ::=
          CHOICE {
              address
                  NetworkAddress,
              counter
                  Counter,
              gauge
                  Gauge,
              ticks
                  TimeTicks,
              arbitrary
                  Opaque

      -- other application-wide types, as they are
      -- defined, will be added here
          }

      -- application-wide types

      NetworkAddress ::=
          CHOICE {
              internet
                  IpAddress
          }

      IpAddress ::=
          [APPLICATION 0]          -- in network-byte order
              IMPLICIT OCTET STRING (SIZE (4))

      Counter ::=
          [APPLICATION 1]
              IMPLICIT INTEGER (0..4294967295)

      Gauge ::=
          [APPLICATION 2]
              IMPLICIT INTEGER (0..4294967295)

      TimeTicks ::=
          [APPLICATION 3]
              IMPLICIT INTEGER (0..4294967295)

      Opaque ::=
          [APPLICATION 4]          -- arbitrary ASN.1 value,
              IMPLICIT OCTET STRING   --   "double-wrapped"

      END