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