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
