[BACK]Return to SNMPv2-TC.txt CVS log [TXT][DIR] Up to [local] / src / share / snmp

Annotation of src/share/snmp/SNMPv2-TC.txt, Revision 1.1

1.1     ! martijn     1: SNMPv2-TC DEFINITIONS ::= BEGIN
        !             2:
        !             3: IMPORTS
        !             4:     TimeTicks         FROM SNMPv2-SMI;
        !             5:
        !             6: -- definition of textual conventions
        !             7:
        !             8: TEXTUAL-CONVENTION MACRO ::=
        !             9:
        !            10: BEGIN
        !            11:     TYPE NOTATION ::=
        !            12:                   DisplayPart
        !            13:                   "STATUS" Status
        !            14:                   "DESCRIPTION" Text
        !            15:                   ReferPart
        !            16:                   "SYNTAX" Syntax
        !            17:
        !            18:     VALUE NOTATION ::=
        !            19:                    value(VALUE Syntax)      -- adapted ASN.1
        !            20:
        !            21:     DisplayPart ::=
        !            22:                   "DISPLAY-HINT" Text
        !            23:                 | empty
        !            24:
        !            25:     Status ::=
        !            26:                   "current"
        !            27:                 | "deprecated"
        !            28:                 | "obsolete"
        !            29:
        !            30:     ReferPart ::=
        !            31:                   "REFERENCE" Text
        !            32:                 | empty
        !            33:
        !            34:     -- a character string as defined in [2]
        !            35:     Text ::= value(IA5String)
        !            36:
        !            37:     Syntax ::=   -- Must be one of the following:
        !            38:                        -- a base type (or its refinement), or
        !            39:                        -- a BITS pseudo-type
        !            40:                   type
        !            41:                 | "BITS" "{" NamedBits "}"
        !            42:
        !            43:     NamedBits ::= NamedBit
        !            44:                 | NamedBits "," NamedBit
        !            45:
        !            46:     NamedBit ::=  identifier "(" number ")" -- number is nonnegative
        !            47:
        !            48: END
        !            49:
        !            50: DisplayString ::= TEXTUAL-CONVENTION
        !            51:     DISPLAY-HINT "255a"
        !            52:     STATUS       current
        !            53:     DESCRIPTION
        !            54:             "Represents textual information taken from the NVT ASCII
        !            55:
        !            56:             character set, as defined in pages 4, 10-11 of RFC 854.
        !            57:
        !            58:             To summarize RFC 854, the NVT ASCII repertoire specifies:
        !            59:
        !            60:               - the use of character codes 0-127 (decimal)
        !            61:
        !            62:               - the graphics characters (32-126) are interpreted as
        !            63:                 US ASCII
        !            64:
        !            65:               - NUL, LF, CR, BEL, BS, HT, VT and FF have the special
        !            66:                 meanings specified in RFC 854
        !            67:
        !            68:               - the other 25 codes have no standard interpretation
        !            69:
        !            70:               - the sequence 'CR LF' means newline
        !            71:
        !            72:               - the sequence 'CR NUL' means carriage-return
        !            73:
        !            74:               - an 'LF' not preceded by a 'CR' means moving to the
        !            75:                 same column on the next line.
        !            76:
        !            77:               - the sequence 'CR x' for any x other than LF or NUL is
        !            78:                 illegal.  (Note that this also means that a string may
        !            79:                 end with either 'CR LF' or 'CR NUL', but not with CR.)
        !            80:
        !            81:             Any object defined using this syntax may not exceed 255
        !            82:             characters in length."
        !            83:     SYNTAX       OCTET STRING (SIZE (0..255))
        !            84:
        !            85: PhysAddress ::= TEXTUAL-CONVENTION
        !            86:     DISPLAY-HINT "1x:"
        !            87:     STATUS       current
        !            88:     DESCRIPTION
        !            89:             "Represents media- or physical-level addresses."
        !            90:     SYNTAX       OCTET STRING
        !            91:
        !            92: MacAddress ::= TEXTUAL-CONVENTION
        !            93:     DISPLAY-HINT "1x:"
        !            94:     STATUS       current
        !            95:     DESCRIPTION
        !            96:             "Represents an 802 MAC address represented in the
        !            97:             `canonical' order defined by IEEE 802.1a, i.e., as if it
        !            98:             were transmitted least significant bit first, even though
        !            99:             802.5 (in contrast to other 802.x protocols) requires MAC
        !           100:             addresses to be transmitted most significant bit first."
        !           101:     SYNTAX       OCTET STRING (SIZE (6))
        !           102:
        !           103: TruthValue ::= TEXTUAL-CONVENTION
        !           104:     STATUS       current
        !           105:     DESCRIPTION
        !           106:             "Represents a boolean value."
        !           107:     SYNTAX       INTEGER { true(1), false(2) }
        !           108:
        !           109: TestAndIncr ::= TEXTUAL-CONVENTION
        !           110:     STATUS       current
        !           111:     DESCRIPTION
        !           112:             "Represents integer-valued information used for atomic
        !           113:             operations.  When the management protocol is used to specify
        !           114:             that an object instance having this syntax is to be
        !           115:             modified, the new value supplied via the management protocol
        !           116:             must precisely match the value presently held by the
        !           117:             instance.  If not, the management protocol set operation
        !           118:             fails with an error of `inconsistentValue'.  Otherwise, if
        !           119:             the current value is the maximum value of 2^31-1 (2147483647
        !           120:             decimal), then the value held by the instance is wrapped to
        !           121:             zero; otherwise, the value held by the instance is
        !           122:             incremented by one.  (Note that regardless of whether the
        !           123:             management protocol set operation succeeds, the variable-
        !           124:             binding in the request and response PDUs are identical.)
        !           125:
        !           126:             The value of the ACCESS clause for objects having this
        !           127:             syntax is either `read-write' or `read-create'.  When an
        !           128:             instance of a columnar object having this syntax is created,
        !           129:             any value may be supplied via the management protocol.
        !           130:
        !           131:             When the network management portion of the system is re-
        !           132:             initialized, the value of every object instance having this
        !           133:             syntax must either be incremented from its value prior to
        !           134:             the re-initialization, or (if the value prior to the re-
        !           135:             initialization is unknown) be set to a pseudo-randomly
        !           136:             generated value."
        !           137:     SYNTAX       INTEGER (0..2147483647)
        !           138:
        !           139: AutonomousType ::= TEXTUAL-CONVENTION
        !           140:     STATUS       current
        !           141:     DESCRIPTION
        !           142:             "Represents an independently extensible type identification
        !           143:             value.  It may, for example, indicate a particular sub-tree
        !           144:             with further MIB definitions, or define a particular type of
        !           145:             protocol or hardware."
        !           146:     SYNTAX       OBJECT IDENTIFIER
        !           147:
        !           148: InstancePointer ::= TEXTUAL-CONVENTION
        !           149:     STATUS       obsolete
        !           150:     DESCRIPTION
        !           151:             "A pointer to either a specific instance of a MIB object or
        !           152:             a conceptual row of a MIB table in the managed device.  In
        !           153:             the latter case, by convention, it is the name of the
        !           154:             particular instance of the first accessible columnar object
        !           155:             in the conceptual row.
        !           156:
        !           157:             The two uses of this textual convention are replaced by
        !           158:             VariablePointer and RowPointer, respectively."
        !           159:     SYNTAX       OBJECT IDENTIFIER
        !           160:
        !           161: VariablePointer ::= TEXTUAL-CONVENTION
        !           162:     STATUS       current
        !           163:     DESCRIPTION
        !           164:             "A pointer to a specific object instance.  For example,
        !           165:             sysContact.0 or ifInOctets.3."
        !           166:     SYNTAX       OBJECT IDENTIFIER
        !           167:
        !           168: RowPointer ::= TEXTUAL-CONVENTION
        !           169:     STATUS       current
        !           170:     DESCRIPTION
        !           171:             "Represents a pointer to a conceptual row.  The value is the
        !           172:             name of the instance of the first accessible columnar object
        !           173:             in the conceptual row.
        !           174:
        !           175:             For example, ifIndex.3 would point to the 3rd row in the
        !           176:             ifTable (note that if ifIndex were not-accessible, then
        !           177:             ifDescr.3 would be used instead)."
        !           178:     SYNTAX       OBJECT IDENTIFIER
        !           179:
        !           180: RowStatus ::= TEXTUAL-CONVENTION
        !           181:     STATUS       current
        !           182:     DESCRIPTION
        !           183:             "The RowStatus textual convention is used to manage the
        !           184:             creation and deletion of conceptual rows, and is used as the
        !           185:             value of the SYNTAX clause for the status column of a
        !           186:             conceptual row (as described in Section 7.7.1 of [2].)
        !           187:
        !           188:             The status column has six defined values:
        !           189:
        !           190:                  - `active', which indicates that the conceptual row is
        !           191:                  available for use by the managed device;
        !           192:
        !           193:                  - `notInService', which indicates that the conceptual
        !           194:                  row exists in the agent, but is unavailable for use by
        !           195:                  the managed device (see NOTE below); 'notInService' has
        !           196:                  no implication regarding the internal consistency of
        !           197:                  the row, availability of resources, or consistency with
        !           198:                  the current state of the managed device;
        !           199:
        !           200:                  - `notReady', which indicates that the conceptual row
        !           201:                  exists in the agent, but is missing information
        !           202:                  necessary in order to be available for use by the
        !           203:                  managed device (i.e., one or more required columns in
        !           204:                  the conceptual row have not been instanciated);
        !           205:
        !           206:                  - `createAndGo', which is supplied by a management
        !           207:                  station wishing to create a new instance of a
        !           208:                  conceptual row and to have its status automatically set
        !           209:                  to active, making it available for use by the managed
        !           210:                  device;
        !           211:
        !           212:                  - `createAndWait', which is supplied by a management
        !           213:                  station wishing to create a new instance of a
        !           214:                  conceptual row (but not make it available for use by
        !           215:                  the managed device); and,
        !           216:                  - `destroy', which is supplied by a management station
        !           217:                  wishing to delete all of the instances associated with
        !           218:                  an existing conceptual row.
        !           219:
        !           220:             Whereas five of the six values (all except `notReady') may
        !           221:             be specified in a management protocol set operation, only
        !           222:             three values will be returned in response to a management
        !           223:             protocol retrieval operation:  `notReady', `notInService' or
        !           224:             `active'.  That is, when queried, an existing conceptual row
        !           225:             has only three states:  it is either available for use by
        !           226:             the managed device (the status column has value `active');
        !           227:             it is not available for use by the managed device, though
        !           228:             the agent has sufficient information to attempt to make it
        !           229:             so (the status column has value `notInService'); or, it is
        !           230:             not available for use by the managed device, and an attempt
        !           231:             to make it so would fail because the agent has insufficient
        !           232:             information (the state column has value `notReady').
        !           233:
        !           234:                                      NOTE WELL
        !           235:
        !           236:                  This textual convention may be used for a MIB table,
        !           237:                  irrespective of whether the values of that table's
        !           238:                  conceptual rows are able to be modified while it is
        !           239:                  active, or whether its conceptual rows must be taken
        !           240:                  out of service in order to be modified.  That is, it is
        !           241:                  the responsibility of the DESCRIPTION clause of the
        !           242:                  status column to specify whether the status column must
        !           243:                  not be `active' in order for the value of some other
        !           244:                  column of the same conceptual row to be modified.  If
        !           245:                  such a specification is made, affected columns may be
        !           246:                  changed by an SNMP set PDU if the RowStatus would not
        !           247:                  be equal to `active' either immediately before or after
        !           248:                  processing the PDU.  In other words, if the PDU also
        !           249:                  contained a varbind that would change the RowStatus
        !           250:                  value, the column in question may be changed if the
        !           251:                  RowStatus was not equal to `active' as the PDU was
        !           252:                  received, or if the varbind sets the status to a value
        !           253:                  other than 'active'.
        !           254:
        !           255:             Also note that whenever any elements of a row exist, the
        !           256:             RowStatus column must also exist.
        !           257:
        !           258:             To summarize the effect of having a conceptual row with a
        !           259:             status column having a SYNTAX clause value of RowStatus,
        !           260:             consider the following state diagram:
        !           261:
        !           262:                                          STATE
        !           263:               +--------------+-----------+-------------+-------------
        !           264:               |      A       |     B     |      C      |      D
        !           265:               |              |status col.|status column|
        !           266:               |status column |    is     |      is     |status column
        !           267:     ACTION    |does not exist|  notReady | notInService|  is active
        !           268: --------------+--------------+-----------+-------------+-------------
        !           269: set status    |noError    ->D|inconsist- |inconsistent-|inconsistent-
        !           270: column to     |       or     |   entValue|        Value|        Value
        !           271: createAndGo   |inconsistent- |           |             |
        !           272:               |         Value|           |             |
        !           273: --------------+--------------+-----------+-------------+-------------
        !           274: set status    |noError  see 1|inconsist- |inconsistent-|inconsistent-
        !           275: column to     |       or     |   entValue|        Value|        Value
        !           276: createAndWait |wrongValue    |           |             |
        !           277: --------------+--------------+-----------+-------------+-------------
        !           278: set status    |inconsistent- |inconsist- |noError      |noError
        !           279: column to     |         Value|   entValue|             |
        !           280: active        |              |           |             |
        !           281:               |              |     or    |             |
        !           282:               |              |           |             |
        !           283:               |              |see 2   ->D|see 8     ->D|          ->D
        !           284: --------------+--------------+-----------+-------------+-------------
        !           285: set status    |inconsistent- |inconsist- |noError      |noError   ->C
        !           286: column to     |         Value|   entValue|             |
        !           287: notInService  |              |           |             |
        !           288:               |              |     or    |             |      or
        !           289:               |              |           |             |
        !           290:               |              |see 3   ->C|          ->C|see 6
        !           291: --------------+--------------+-----------+-------------+-------------
        !           292: set status    |noError       |noError    |noError      |noError   ->A
        !           293: column to     |              |           |             |      or
        !           294: destroy       |           ->A|        ->A|          ->A|see 7
        !           295: --------------+--------------+-----------+-------------+-------------
        !           296: set any other |see 4         |noError    |noError      |see 5
        !           297: column to some|              |           |             |
        !           298: value         |              |      see 1|          ->C|          ->D
        !           299: --------------+--------------+-----------+-------------+-------------
        !           300:
        !           301:             (1) goto B or C, depending on information available to the
        !           302:             agent.
        !           303:
        !           304:             (2) if other variable bindings included in the same PDU,
        !           305:             provide values for all columns which are missing but
        !           306:             required, and all columns have acceptable values, then
        !           307:             return noError and goto D.
        !           308:
        !           309:             (3) if other variable bindings included in the same PDU,
        !           310:             provide legal values for all columns which are missing but
        !           311:             required, then return noError and goto C.
        !           312:
        !           313:             (4) at the discretion of the agent, the return value may be
        !           314:             either:
        !           315:
        !           316:                  inconsistentName:  because the agent does not choose to
        !           317:                  create such an instance when the corresponding
        !           318:                  RowStatus instance does not exist, or
        !           319:
        !           320:                  inconsistentValue:  if the supplied value is
        !           321:                  inconsistent with the state of some other MIB object's
        !           322:                  value, or
        !           323:
        !           324:                  noError: because the agent chooses to create the
        !           325:                  instance.
        !           326:
        !           327:             If noError is returned, then the instance of the status
        !           328:             column must also be created, and the new state is B or C,
        !           329:             depending on the information available to the agent.  If
        !           330:             inconsistentName or inconsistentValue is returned, the row
        !           331:             remains in state A.
        !           332:
        !           333:             (5) depending on the MIB definition for the column/table,
        !           334:             either noError or inconsistentValue may be returned.
        !           335:
        !           336:             (6) the return value can indicate one of the following
        !           337:             errors:
        !           338:
        !           339:                  wrongValue: because the agent does not support
        !           340:                  notInService (e.g., an agent which does not support
        !           341:                  createAndWait), or
        !           342:
        !           343:                  inconsistentValue: because the agent is unable to take
        !           344:                  the row out of service at this time, perhaps because it
        !           345:                  is in use and cannot be de-activated.
        !           346:
        !           347:             (7) the return value can indicate the following error:
        !           348:
        !           349:                  inconsistentValue: because the agent is unable to
        !           350:                  remove the row at this time, perhaps because it is in
        !           351:                  use and cannot be de-activated.
        !           352:
        !           353:             (8) the transition to D can fail, e.g., if the values of the
        !           354:             conceptual row are inconsistent, then the error code would
        !           355:             be inconsistentValue.
        !           356:
        !           357:             NOTE: Other processing of (this and other varbinds of) the
        !           358:             set request may result in a response other than noError
        !           359:             being returned, e.g., wrongValue, noCreation, etc.
        !           360:
        !           361:                               Conceptual Row Creation
        !           362:
        !           363:             There are four potential interactions when creating a
        !           364:             conceptual row:  selecting an instance-identifier which is
        !           365:             not in use; creating the conceptual row; initializing any
        !           366:             objects for which the agent does not supply a default; and,
        !           367:             making the conceptual row available for use by the managed
        !           368:             device.
        !           369:
        !           370:             Interaction 1: Selecting an Instance-Identifier
        !           371:
        !           372:             The algorithm used to select an instance-identifier varies
        !           373:             for each conceptual row.  In some cases, the instance-
        !           374:             identifier is semantically significant, e.g., the
        !           375:             destination address of a route, and a management station
        !           376:             selects the instance-identifier according to the semantics.
        !           377:
        !           378:             In other cases, the instance-identifier is used solely to
        !           379:             distinguish conceptual rows, and a management station
        !           380:             without specific knowledge of the conceptual row might
        !           381:             examine the instances present in order to determine an
        !           382:             unused instance-identifier.  (This approach may be used, but
        !           383:             it is often highly sub-optimal; however, it is also a
        !           384:             questionable practice for a naive management station to
        !           385:             attempt conceptual row creation.)
        !           386:
        !           387:             Alternately, the MIB module which defines the conceptual row
        !           388:             might provide one or more objects which provide assistance
        !           389:             in determining an unused instance-identifier.  For example,
        !           390:             if the conceptual row is indexed by an integer-value, then
        !           391:             an object having an integer-valued SYNTAX clause might be
        !           392:             defined for such a purpose, allowing a management station to
        !           393:             issue a management protocol retrieval operation.  In order
        !           394:             to avoid unnecessary collisions between competing management
        !           395:             stations, `adjacent' retrievals of this object should be
        !           396:             different.
        !           397:
        !           398:             Finally, the management station could select a pseudo-random
        !           399:             number to use as the index.  In the event that this index
        !           400:
        !           401:             was already in use and an inconsistentValue was returned in
        !           402:             response to the management protocol set operation, the
        !           403:             management station should simply select a new pseudo-random
        !           404:             number and retry the operation.
        !           405:
        !           406:             A MIB designer should choose between the two latter
        !           407:             algorithms based on the size of the table (and therefore the
        !           408:             efficiency of each algorithm).  For tables in which a large
        !           409:             number of entries are expected, it is recommended that a MIB
        !           410:             object be defined that returns an acceptable index for
        !           411:             creation.  For tables with small numbers of entries, it is
        !           412:             recommended that the latter pseudo-random index mechanism be
        !           413:             used.
        !           414:
        !           415:             Interaction 2: Creating the Conceptual Row
        !           416:
        !           417:             Once an unused instance-identifier has been selected, the
        !           418:             management station determines if it wishes to create and
        !           419:             activate the conceptual row in one transaction or in a
        !           420:             negotiated set of interactions.
        !           421:
        !           422:             Interaction 2a: Creating and Activating the Conceptual Row
        !           423:
        !           424:             The management station must first determine the column
        !           425:             requirements, i.e., it must determine those columns for
        !           426:             which it must or must not provide values.  Depending on the
        !           427:             complexity of the table and the management station's
        !           428:             knowledge of the agent's capabilities, this determination
        !           429:             can be made locally by the management station.  Alternately,
        !           430:             the management station issues a management protocol get
        !           431:             operation to examine all columns in the conceptual row that
        !           432:             it wishes to create.  In response, for each column, there
        !           433:             are three possible outcomes:
        !           434:
        !           435:                  - a value is returned, indicating that some other
        !           436:                  management station has already created this conceptual
        !           437:                  row.  We return to interaction 1.
        !           438:
        !           439:                  - the exception `noSuchInstance' is returned,
        !           440:                  indicating that the agent implements the object-type
        !           441:                  associated with this column, and that this column in at
        !           442:                  least one conceptual row would be accessible in the MIB
        !           443:                  view used by the retrieval were it to exist. For those
        !           444:                  columns to which the agent provides read-create access,
        !           445:                  the `noSuchInstance' exception tells the management
        !           446:                  station that it should supply a value for this column
        !           447:                  when the conceptual row is to be created.
        !           448:
        !           449:                  - the exception `noSuchObject' is returned, indicating
        !           450:                  that the agent does not implement the object-type
        !           451:                  associated with this column or that there is no
        !           452:                  conceptual row for which this column would be
        !           453:                  accessible in the MIB view used by the retrieval.  As
        !           454:                  such, the management station can not issue any
        !           455:                  management protocol set operations to create an
        !           456:                  instance of this column.
        !           457:
        !           458:             Once the column requirements have been determined, a
        !           459:             management protocol set operation is accordingly issued.
        !           460:             This operation also sets the new instance of the status
        !           461:             column to `createAndGo'.
        !           462:
        !           463:             When the agent processes the set operation, it verifies that
        !           464:             it has sufficient information to make the conceptual row
        !           465:             available for use by the managed device.  The information
        !           466:             available to the agent is provided by two sources:  the
        !           467:             management protocol set operation which creates the
        !           468:             conceptual row, and, implementation-specific defaults
        !           469:             supplied by the agent (note that an agent must provide
        !           470:             implementation-specific defaults for at least those objects
        !           471:             which it implements as read-only).  If there is sufficient
        !           472:             information available, then the conceptual row is created, a
        !           473:             `noError' response is returned, the status column is set to
        !           474:             `active', and no further interactions are necessary (i.e.,
        !           475:             interactions 3 and 4 are skipped).  If there is insufficient
        !           476:             information, then the conceptual row is not created, and the
        !           477:             set operation fails with an error of `inconsistentValue'.
        !           478:             On this error, the management station can issue a management
        !           479:             protocol retrieval operation to determine if this was
        !           480:             because it failed to specify a value for a required column,
        !           481:             or, because the selected instance of the status column
        !           482:             already existed.  In the latter case, we return to
        !           483:             interaction 1.  In the former case, the management station
        !           484:             can re-issue the set operation with the additional
        !           485:             information, or begin interaction 2 again using
        !           486:             `createAndWait' in order to negotiate creation of the
        !           487:             conceptual row.
        !           488:
        !           489:                                      NOTE WELL
        !           490:
        !           491:                  Regardless of the method used to determine the column
        !           492:                  requirements, it is possible that the management
        !           493:                  station might deem a column necessary when, in fact,
        !           494:                  the agent will not allow that particular columnar
        !           495:                  instance to be created or written.  In this case, the
        !           496:                  management protocol set operation will fail with an
        !           497:                  error such as `noCreation' or `notWritable'.  In this
        !           498:                  case, the management station decides whether it needs
        !           499:                  to be able to set a value for that particular columnar
        !           500:                  instance.  If not, the management station re-issues the
        !           501:                  management protocol set operation, but without setting
        !           502:                  a value for that particular columnar instance;
        !           503:                  otherwise, the management station aborts the row
        !           504:                  creation algorithm.
        !           505:
        !           506:             Interaction 2b: Negotiating the Creation of the Conceptual
        !           507:             Row
        !           508:
        !           509:             The management station issues a management protocol set
        !           510:             operation which sets the desired instance of the status
        !           511:             column to `createAndWait'.  If the agent is unwilling to
        !           512:             process a request of this sort, the set operation fails with
        !           513:             an error of `wrongValue'.  (As a consequence, such an agent
        !           514:             must be prepared to accept a single management protocol set
        !           515:             operation, i.e., interaction 2a above, containing all of the
        !           516:             columns indicated by its column requirements.)  Otherwise,
        !           517:             the conceptual row is created, a `noError' response is
        !           518:             returned, and the status column is immediately set to either
        !           519:             `notInService' or `notReady', depending on whether it has
        !           520:             sufficient information to (attempt to) make the conceptual
        !           521:             row available for use by the managed device.  If there is
        !           522:             sufficient information available, then the status column is
        !           523:             set to `notInService'; otherwise, if there is insufficient
        !           524:             information, then the status column is set to `notReady'.
        !           525:             Regardless, we proceed to interaction 3.
        !           526:
        !           527:             Interaction 3: Initializing non-defaulted Objects
        !           528:
        !           529:             The management station must now determine the column
        !           530:             requirements.  It issues a management protocol get operation
        !           531:             to examine all columns in the created conceptual row.  In
        !           532:             the response, for each column, there are three possible
        !           533:             outcomes:
        !           534:
        !           535:                  - a value is returned, indicating that the agent
        !           536:                  implements the object-type associated with this column
        !           537:                  and had sufficient information to provide a value.  For
        !           538:                  those columns to which the agent provides read-create
        !           539:                  access (and for which the agent allows their values to
        !           540:                  be changed after their creation), a value return tells
        !           541:                  the management station that it may issue additional
        !           542:                  management protocol set operations, if it desires, in
        !           543:                  order to change the value associated with this column.
        !           544:
        !           545:                  - the exception `noSuchInstance' is returned,
        !           546:                  indicating that the agent implements the object-type
        !           547:                  associated with this column, and that this column in at
        !           548:                  least one conceptual row would be accessible in the MIB
        !           549:                  view used by the retrieval were it to exist. However,
        !           550:                  the agent does not have sufficient information to
        !           551:                  provide a value, and until a value is provided, the
        !           552:                  conceptual row may not be made available for use by the
        !           553:                  managed device.  For those columns to which the agent
        !           554:                  provides read-create access, the `noSuchInstance'
        !           555:                  exception tells the management station that it must
        !           556:                  issue additional management protocol set operations, in
        !           557:                  order to provide a value associated with this column.
        !           558:
        !           559:                  - the exception `noSuchObject' is returned, indicating
        !           560:                  that the agent does not implement the object-type
        !           561:                  associated with this column or that there is no
        !           562:                  conceptual row for which this column would be
        !           563:                  accessible in the MIB view used by the retrieval.  As
        !           564:                  such, the management station can not issue any
        !           565:                  management protocol set operations to create an
        !           566:                  instance of this column.
        !           567:
        !           568:             If the value associated with the status column is
        !           569:             `notReady', then the management station must first deal with
        !           570:             all `noSuchInstance' columns, if any.  Having done so, the
        !           571:             value of the status column becomes `notInService', and we
        !           572:             proceed to interaction 4.
        !           573:
        !           574:             Interaction 4: Making the Conceptual Row Available
        !           575:
        !           576:             Once the management station is satisfied with the values
        !           577:             associated with the columns of the conceptual row, it issues
        !           578:             a management protocol set operation to set the status column
        !           579:             to `active'.  If the agent has sufficient information to
        !           580:             make the conceptual row available for use by the managed
        !           581:             device, the management protocol set operation succeeds (a
        !           582:             `noError' response is returned).  Otherwise, the management
        !           583:             protocol set operation fails with an error of
        !           584:             `inconsistentValue'.
        !           585:
        !           586:                                      NOTE WELL
        !           587:
        !           588:                  A conceptual row having a status column with value
        !           589:                  `notInService' or `notReady' is unavailable to the
        !           590:                  managed device.  As such, it is possible for the
        !           591:                  managed device to create its own instances during the
        !           592:                  time between the management protocol set operation
        !           593:                  which sets the status column to `createAndWait' and the
        !           594:                  management protocol set operation which sets the status
        !           595:                  column to `active'.  In this case, when the management
        !           596:                  protocol set operation is issued to set the status
        !           597:                  column to `active', the values held in the agent
        !           598:                  supersede those used by the managed device.
        !           599:
        !           600:             If the management station is prevented from setting the
        !           601:             status column to `active' (e.g., due to management station
        !           602:             or network failure) the conceptual row will be left in the
        !           603:             `notInService' or `notReady' state, consuming resources
        !           604:             indefinitely.  The agent must detect conceptual rows that
        !           605:             have been in either state for an abnormally long period of
        !           606:             time and remove them.  It is the responsibility of the
        !           607:             DESCRIPTION clause of the status column to indicate what an
        !           608:             abnormally long period of time would be.  This period of
        !           609:             time should be long enough to allow for human response time
        !           610:             (including `think time') between the creation of the
        !           611:             conceptual row and the setting of the status to `active'.
        !           612:             In the absence of such information in the DESCRIPTION
        !           613:             clause, it is suggested that this period be approximately 5
        !           614:             minutes in length.  This removal action applies not only to
        !           615:             newly-created rows, but also to previously active rows which
        !           616:             are set to, and left in, the notInService state for a
        !           617:             prolonged period exceeding that which is considered normal
        !           618:             for such a conceptual row.
        !           619:
        !           620:                              Conceptual Row Suspension
        !           621:
        !           622:             When a conceptual row is `active', the management station
        !           623:             may issue a management protocol set operation which sets the
        !           624:             instance of the status column to `notInService'.  If the
        !           625:             agent is unwilling to do so, the set operation fails with an
        !           626:             error of `wrongValue' or `inconsistentValue'.  Otherwise,
        !           627:             the conceptual row is taken out of service, and a `noError'
        !           628:             response is returned.  It is the responsibility of the
        !           629:             DESCRIPTION clause of the status column to indicate under
        !           630:             what circumstances the status column should be taken out of
        !           631:             service (e.g., in order for the value of some other column
        !           632:             of the same conceptual row to be modified).
        !           633:
        !           634:                               Conceptual Row Deletion
        !           635:
        !           636:             For deletion of conceptual rows, a management protocol set
        !           637:             operation is issued which sets the instance of the status
        !           638:             column to `destroy'.  This request may be made regardless of
        !           639:             the current value of the status column (e.g., it is possible
        !           640:             to delete conceptual rows which are either `notReady',
        !           641:             `notInService' or `active'.)  If the operation succeeds,
        !           642:             then all instances associated with the conceptual row are
        !           643:             immediately removed."
        !           644:     SYNTAX       INTEGER {
        !           645:                      -- the following two values are states:
        !           646:                      -- these values may be read or written
        !           647:                      active(1),
        !           648:                      notInService(2),
        !           649:                      -- the following value is a state:
        !           650:                      -- this value may be read, but not written
        !           651:                      notReady(3),
        !           652:                      -- the following three values are
        !           653:                      -- actions: these values may be written,
        !           654:                      --   but are never read
        !           655:                      createAndGo(4),
        !           656:                      createAndWait(5),
        !           657:                      destroy(6)
        !           658:                  }
        !           659:
        !           660: TimeStamp ::= TEXTUAL-CONVENTION
        !           661:     STATUS       current
        !           662:     DESCRIPTION
        !           663:             "The value of the sysUpTime object at which a specific
        !           664:             occurrence happened.  The specific occurrence must be
        !           665:
        !           666:             defined in the description of any object defined using this
        !           667:             type.
        !           668:
        !           669:             If sysUpTime is reset to zero as a result of a re-
        !           670:             initialization of the network management (sub)system, then
        !           671:             the values of all TimeStamp objects are also reset.
        !           672:             However, after approximately 497 days without a re-
        !           673:             initialization, the sysUpTime object will reach 2^^32-1 and
        !           674:             then increment around to zero; in this case, existing values
        !           675:             of TimeStamp objects do not change.  This can lead to
        !           676:             ambiguities in the value of TimeStamp objects."
        !           677:     SYNTAX       TimeTicks
        !           678:
        !           679: TimeInterval ::= TEXTUAL-CONVENTION
        !           680:     STATUS       current
        !           681:     DESCRIPTION
        !           682:             "A period of time, measured in units of 0.01 seconds."
        !           683:     SYNTAX       INTEGER (0..2147483647)
        !           684:
        !           685: DateAndTime ::= TEXTUAL-CONVENTION
        !           686:     DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"
        !           687:     STATUS       current
        !           688:     DESCRIPTION
        !           689:             "A date-time specification.
        !           690:
        !           691:             field  octets  contents                  range
        !           692:             -----  ------  --------                  -----
        !           693:               1      1-2   year*                     0..65536
        !           694:               2       3    month                     1..12
        !           695:               3       4    day                       1..31
        !           696:               4       5    hour                      0..23
        !           697:               5       6    minutes                   0..59
        !           698:               6       7    seconds                   0..60
        !           699:                            (use 60 for leap-second)
        !           700:               7       8    deci-seconds              0..9
        !           701:               8       9    direction from UTC        '+' / '-'
        !           702:               9      10    hours from UTC*           0..13
        !           703:              10      11    minutes from UTC          0..59
        !           704:
        !           705:             * Notes:
        !           706:             - the value of year is in network-byte order
        !           707:             - daylight saving time in New Zealand is +13
        !           708:
        !           709:             For example, Tuesday May 26, 1992 at 1:30:15 PM EDT would be
        !           710:             displayed as:
        !           711:
        !           712:                              1992-5-26,13:30:15.0,-4:0
        !           713:
        !           714:             Note that if only local time is known, then timezone
        !           715:             information (fields 8-10) is not present."
        !           716:     SYNTAX       OCTET STRING (SIZE (8 | 11))
        !           717:
        !           718: StorageType ::= TEXTUAL-CONVENTION
        !           719:     STATUS       current
        !           720:     DESCRIPTION
        !           721:             "Describes the memory realization of a conceptual row.  A
        !           722:             row which is volatile(2) is lost upon reboot.  A row which
        !           723:             is either nonVolatile(3), permanent(4) or readOnly(5), is
        !           724:             backed up by stable storage.  A row which is permanent(4)
        !           725:             can be changed but not deleted.  A row which is readOnly(5)
        !           726:             cannot be changed nor deleted.
        !           727:
        !           728:             If the value of an object with this syntax is either
        !           729:             permanent(4) or readOnly(5), it cannot be written.
        !           730:             Conversely, if the value is either other(1), volatile(2) or
        !           731:             nonVolatile(3), it cannot be modified to be permanent(4) or
        !           732:             readOnly(5).  (All illegal modifications result in a
        !           733:             'wrongValue' error.)
        !           734:
        !           735:             Every usage of this textual convention is required to
        !           736:             specify the columnar objects which a permanent(4) row must
        !           737:             at a minimum allow to be writable."
        !           738:     SYNTAX       INTEGER {
        !           739:                      other(1),       -- eh?
        !           740:                      volatile(2),    -- e.g., in RAM
        !           741:                      nonVolatile(3), -- e.g., in NVRAM
        !           742:                      permanent(4),   -- e.g., partially in ROM
        !           743:                      readOnly(5)     -- e.g., completely in ROM
        !           744:                  }
        !           745:
        !           746: TDomain ::= TEXTUAL-CONVENTION
        !           747:     STATUS       current
        !           748:     DESCRIPTION
        !           749:           "Denotes a kind of transport service.
        !           750:
        !           751:           Some possible values, such as snmpUDPDomain, are defined in
        !           752:           the SNMPv2-TM MIB module.  Other possible values are defined
        !           753:           in other MIB modules."
        !           754:     REFERENCE    "The SNMPv2-TM MIB module is defined in RFC 1906."
        !           755:     SYNTAX       OBJECT IDENTIFIER
        !           756:
        !           757: TAddress ::= TEXTUAL-CONVENTION
        !           758:     STATUS       current
        !           759:     DESCRIPTION
        !           760:           "Denotes a transport service address.
        !           761:
        !           762:           A TAddress value is always interpreted within the context of a
        !           763:           TDomain value.  Thus, each definition of a TDomain value must
        !           764:           be accompanied by a definition of a textual convention for use
        !           765:           with that TDomain.  Some possible textual conventions, such as
        !           766:           SnmpUDPAddress for snmpUDPDomain, are defined in the SNMPv2-TM
        !           767:           MIB module.  Other possible textual conventions are defined in
        !           768:           other MIB modules."
        !           769:     REFERENCE    "The SNMPv2-TM MIB module is defined in RFC 1906."
        !           770:     SYNTAX       OCTET STRING (SIZE (1..255))
        !           771:
        !           772: END