mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	
		
			
	
	
		
			519 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			519 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								RADLAN-SNMPv2 DEFINITIONS ::= BEGIN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								IMPORTS
							 | 
						||
| 
								 | 
							
								    MODULE-IDENTITY, Counter32              FROM SNMPv2-SMI
							 | 
						||
| 
								 | 
							
								    TEXTUAL-CONVENTION                      FROM SNMPv2-TC;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TruthValue ::= INTEGER {
							 | 
						||
| 
								 | 
							
								     true (1),
							 | 
						||
| 
								 | 
							
								     false (2)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								RowStatus ::= TEXTUAL-CONVENTION
							 | 
						||
| 
								 | 
							
								    STATUS       current
							 | 
						||
| 
								 | 
							
								    DESCRIPTION
							 | 
						||
| 
								 | 
							
								            "The RowStatus textual convention is used to manage the
							 | 
						||
| 
								 | 
							
								            creation and deletion of conceptual rows, and is used as the
							 | 
						||
| 
								 | 
							
								            value of the SYNTAX clause for the status column of a
							 | 
						||
| 
								 | 
							
								            conceptual row (as described in Section 7.7.1 of [2].)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            The status column has six defined values:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 - `active', which indicates that the conceptual row is
							 | 
						||
| 
								 | 
							
								                 available for use by the managed device;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 - `notInService', which indicates that the conceptual
							 | 
						||
| 
								 | 
							
								                 row exists in the agent, but is unavailable for use by
							 | 
						||
| 
								 | 
							
								                 the managed device (see NOTE below); 'notInService' has
							 | 
						||
| 
								 | 
							
								                 no implication regarding the internal consistency of
							 | 
						||
| 
								 | 
							
								                 the row, availability of resources, or consistency with
							 | 
						||
| 
								 | 
							
								                 the current state of the managed device;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 - `notReady', which indicates that the conceptual row
							 | 
						||
| 
								 | 
							
								                 exists in the agent, but is missing information
							 | 
						||
| 
								 | 
							
								                 necessary in order to be available for use by the
							 | 
						||
| 
								 | 
							
								                 managed device (i.e., one or more required columns in
							 | 
						||
| 
								 | 
							
								                 the conceptual row have not been instanciated);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 - `createAndGo', which is supplied by a management
							 | 
						||
| 
								 | 
							
								                 station wishing to create a new instance of a
							 | 
						||
| 
								 | 
							
								                 conceptual row and to have its status automatically set
							 | 
						||
| 
								 | 
							
								                 to active, making it available for use by the managed
							 | 
						||
| 
								 | 
							
								                 device;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 - `createAndWait', which is supplied by a management
							 | 
						||
| 
								 | 
							
								                 station wishing to create a new instance of a
							 | 
						||
| 
								 | 
							
								                 conceptual row (but not make it available for use by
							 | 
						||
| 
								 | 
							
								                 the managed device); and,
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 - `destroy', which is supplied by a management station
							 | 
						||
| 
								 | 
							
								                 wishing to delete all of the instances associated with
							 | 
						||
| 
								 | 
							
								                 an existing conceptual row.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            Whereas five of the six values (all except `notReady') may
							 | 
						||
| 
								 | 
							
								            be specified in a management protocol set operation, only
							 | 
						||
| 
								 | 
							
								            three values will be returned in response to a management
							 | 
						||
| 
								 | 
							
								            protocol retrieval operation: `notReady', `notInService' or
							 | 
						||
| 
								 | 
							
								            `active'.  That is, when queried, an existing conceptual row
							 | 
						||
| 
								 | 
							
								            has only three states: it is either available for use by the
							 | 
						||
| 
								 | 
							
								            managed device (the status column has value `active'); it is
							 | 
						||
| 
								 | 
							
								            not available for use by the managed device, though the
							 | 
						||
| 
								 | 
							
								            agent has sufficient information to attempt to make it so
							 | 
						||
| 
								 | 
							
								            (the status column has value `notInService'); or, it is not
							 | 
						||
| 
								 | 
							
								            available for use by the managed device, and an attempt to
							 | 
						||
| 
								 | 
							
								            make it so would fail because the agent has insufficient
							 | 
						||
| 
								 | 
							
								            information (the state column has value `notReady').
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                     NOTE WELL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 This textual convention may be used for a MIB table,
							 | 
						||
| 
								 | 
							
								                 irrespective of whether the values of that table's
							 | 
						||
| 
								 | 
							
								                 conceptual rows are able to be modified while it is
							 | 
						||
| 
								 | 
							
								                 active, or whether its conceptual rows must be taken
							 | 
						||
| 
								 | 
							
								                 out of service in order to be modified.  That is, it is
							 | 
						||
| 
								 | 
							
								                 the responsibility of the DESCRIPTION clause of the
							 | 
						||
| 
								 | 
							
								                 status column to specify whether the status column must
							 | 
						||
| 
								 | 
							
								                 not be `active' in order for the value of some other
							 | 
						||
| 
								 | 
							
								                 column of the same conceptual row to be modified.  If
							 | 
						||
| 
								 | 
							
								                 such a specification is made, affected columns may be
							 | 
						||
| 
								 | 
							
								                 changed by an SNMP set PDU if the RowStatus would not
							 | 
						||
| 
								 | 
							
								                 be equal to `active' either immediately before or after
							 | 
						||
| 
								 | 
							
								                 processing the PDU.  In other words, if the PDU also
							 | 
						||
| 
								 | 
							
								                 contained a varbind that would change the RowStatus
							 | 
						||
| 
								 | 
							
								                 value, the column in question may be changed if the
							 | 
						||
| 
								 | 
							
								                 RowStatus was not equal to `active' as the PDU was
							 | 
						||
| 
								 | 
							
								                 received, or if the varbind sets the status to a value
							 | 
						||
| 
								 | 
							
								                 other than 'active'.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            Also note that whenever any elements of a row exist, the
							 | 
						||
| 
								 | 
							
								            RowStatus column must also exist.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            To summarize the effect of having a conceptual row with a
							 | 
						||
| 
								 | 
							
								            status column having a SYNTAX clause value of RowStatus,
							 | 
						||
| 
								 | 
							
								            consider the following state diagram:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                                         STATE
							 | 
						||
| 
								 | 
							
								              +--------------+-----------+-------------+-------------
							 | 
						||
| 
								 | 
							
								              |      A       |     B     |      C      |      D
							 | 
						||
| 
								 | 
							
								              |              |status col.|status column|
							 | 
						||
| 
								 | 
							
								              |status column |    is     |      is     |status column
							 | 
						||
| 
								 | 
							
								    ACTION    |does not exist|  notReady | notInService|  is active
							 | 
						||
| 
								 | 
							
								--------------+--------------+-----------+-------------+-------------
							 | 
						||
| 
								 | 
							
								set status    |noError    ->D|inconsist- |inconsistent-|inconsistent-
							 | 
						||
| 
								 | 
							
								column to     |       or     |   entValue|        Value|        Value
							 | 
						||
| 
								 | 
							
								createAndGo   |inconsistent- |           |             |
							 | 
						||
| 
								 | 
							
								              |         Value|           |             |
							 | 
						||
| 
								 | 
							
								--------------+--------------+-----------+-------------+-------------
							 | 
						||
| 
								 | 
							
								set status    |noError  see 1|inconsist- |inconsistent-|inconsistent-
							 | 
						||
| 
								 | 
							
								column to     |       or     |   entValue|        Value|        Value
							 | 
						||
| 
								 | 
							
								createAndWait |wrongValue    |           |             |
							 | 
						||
| 
								 | 
							
								--------------+--------------+-----------+-------------+-------------
							 | 
						||
| 
								 | 
							
								set status    |inconsistent- |inconsist- |noError      |noError
							 | 
						||
| 
								 | 
							
								column to     |         Value|   entValue|             |
							 | 
						||
| 
								 | 
							
								active        |              |           |             |
							 | 
						||
| 
								 | 
							
								              |              |     or    |             |
							 | 
						||
| 
								 | 
							
								              |              |           |             |
							 | 
						||
| 
								 | 
							
								              |              |see 2   ->D|see 8     ->D|          ->D
							 | 
						||
| 
								 | 
							
								--------------+--------------+-----------+-------------+-------------
							 | 
						||
| 
								 | 
							
								set status    |inconsistent- |inconsist- |noError      |noError   ->C
							 | 
						||
| 
								 | 
							
								column to     |         Value|   entValue|             |
							 | 
						||
| 
								 | 
							
								notInService  |              |           |             |
							 | 
						||
| 
								 | 
							
								              |              |     or    |             |      or
							 | 
						||
| 
								 | 
							
								              |              |           |             |
							 | 
						||
| 
								 | 
							
								              |              |see 3   ->C|          ->C|see 6
							 | 
						||
| 
								 | 
							
								--------------+--------------+-----------+-------------+-------------
							 | 
						||
| 
								 | 
							
								set status    |noError       |noError    |noError      |noError   ->A
							 | 
						||
| 
								 | 
							
								column to     |              |           |             |      or
							 | 
						||
| 
								 | 
							
								destroy       |           ->A|        ->A|          ->A|see 7
							 | 
						||
| 
								 | 
							
								--------------+--------------+-----------+-------------+-------------
							 | 
						||
| 
								 | 
							
								set any other |see 4         |noError    |noError      |see 5
							 | 
						||
| 
								 | 
							
								column to some|              |           |             |
							 | 
						||
| 
								 | 
							
								value         |              |      see 1|          ->C|          ->D
							 | 
						||
| 
								 | 
							
								--------------+--------------+-----------+-------------+-------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (1) goto B or C, depending on information available to the
							 | 
						||
| 
								 | 
							
								    agent.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (2) if other variable bindings included in the same PDU,
							 | 
						||
| 
								 | 
							
								    provide values for all columns which are missing but
							 | 
						||
| 
								 | 
							
								    required, and all columns have acceptable values, then
							 | 
						||
| 
								 | 
							
								    return noError and goto D.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (3) if other variable bindings included in the same PDU,
							 | 
						||
| 
								 | 
							
								    provide legal values for all columns which are missing but
							 | 
						||
| 
								 | 
							
								    required, then return noError and goto C.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (4) at the discretion of the agent, the return value may be
							 | 
						||
| 
								 | 
							
								    either:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         inconsistentName: because the agent does not choose to
							 | 
						||
| 
								 | 
							
								         create such an instance when the corresponding
							 | 
						||
| 
								 | 
							
								         RowStatus instance does not exist, or
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         inconsistentValue: if the supplied value is
							 | 
						||
| 
								 | 
							
								         inconsistent with the state of some other MIB object's
							 | 
						||
| 
								 | 
							
								         value, or
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         noError: because the agent chooses to create the
							 | 
						||
| 
								 | 
							
								         instance.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    If noError is returned, then the instance of the status
							 | 
						||
| 
								 | 
							
								    column must also be created, and the new state is B or C,
							 | 
						||
| 
								 | 
							
								    depending on the information available to the agent.  If
							 | 
						||
| 
								 | 
							
								    inconsistentName or inconsistentValue is returned, the row
							 | 
						||
| 
								 | 
							
								    remains in state A.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (5) depending on the MIB definition for the column/table,
							 | 
						||
| 
								 | 
							
								    either noError or inconsistentValue may be returned.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (6) the return value can indicate one of the following
							 | 
						||
| 
								 | 
							
								    errors:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         wrongValue: because the agent does not support
							 | 
						||
| 
								 | 
							
								         notInService (e.g., an agent which does not support
							 | 
						||
| 
								 | 
							
								         createAndWait), or
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         inconsistentValue: because the agent is unable to take
							 | 
						||
| 
								 | 
							
								         the row out of service at this time, perhaps because it
							 | 
						||
| 
								 | 
							
								         is in use and cannot be de-activated.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (7) the return value can indicate the following error:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         inconsistentValue: because the agent is unable to
							 | 
						||
| 
								 | 
							
								         remove the row at this time, perhaps because it is in
							 | 
						||
| 
								 | 
							
								         use and cannot be de-activated.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    (8) the transition to D can fail, e.g., if the values of the
							 | 
						||
| 
								 | 
							
								    conceptual row are inconsistent, then the error code would
							 | 
						||
| 
								 | 
							
								    be inconsistentValue.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    NOTE: Other processing of (this and other varbinds of) the
							 | 
						||
| 
								 | 
							
								    set request may result in a response other than noError
							 | 
						||
| 
								 | 
							
								    being returned, e.g., wrongValue, noCreation, etc.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                      Conceptual Row Creation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    There are four potential interactions when creating a
							 | 
						||
| 
								 | 
							
								    conceptual row: selecting an instance-identifier which is
							 | 
						||
| 
								 | 
							
								    not in use; creating the conceptual row; initializing any
							 | 
						||
| 
								 | 
							
								    objects for which the agent does not supply a default; and,
							 | 
						||
| 
								 | 
							
								    making the conceptual row available for use by the managed
							 | 
						||
| 
								 | 
							
								    device.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Interaction 1: Selecting an Instance-Identifier
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    The algorithm used to select an instance-identifier varies
							 | 
						||
| 
								 | 
							
								    for each conceptual row.  In some cases, the instance-
							 | 
						||
| 
								 | 
							
								    identifier is semantically significant, e.g., the
							 | 
						||
| 
								 | 
							
								    destination address of a route, and a management station
							 | 
						||
| 
								 | 
							
								    selects the instance-identifier according to the semantics.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    In other cases, the instance-identifier is used solely to
							 | 
						||
| 
								 | 
							
								    distinguish conceptual rows, and a management station
							 | 
						||
| 
								 | 
							
								    without specific knowledge of the conceptual row might
							 | 
						||
| 
								 | 
							
								    examine the instances present in order to determine an
							 | 
						||
| 
								 | 
							
								    unused instance-identifier.  (This approach may be used, but
							 | 
						||
| 
								 | 
							
								    it is often highly sub-optimal; however, it is also a
							 | 
						||
| 
								 | 
							
								    questionable practice for a naive management station to
							 | 
						||
| 
								 | 
							
								    attempt conceptual row creation.)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Alternately, the MIB module which defines the conceptual row
							 | 
						||
| 
								 | 
							
								    might provide one or more objects which provide assistance
							 | 
						||
| 
								 | 
							
								    in determining an unused instance-identifier.  For example,
							 | 
						||
| 
								 | 
							
								    if the conceptual row is indexed by an integer-value, then
							 | 
						||
| 
								 | 
							
								    an object having an integer-valued SYNTAX clause might be
							 | 
						||
| 
								 | 
							
								    defined for such a purpose, allowing a management station to
							 | 
						||
| 
								 | 
							
								    issue a management protocol retrieval operation.  In order
							 | 
						||
| 
								 | 
							
								    to avoid unnecessary collisions between competing management
							 | 
						||
| 
								 | 
							
								    stations, `adjacent' retrievals of this object should be
							 | 
						||
| 
								 | 
							
								    different.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Finally, the management station could select a pseudo-random
							 | 
						||
| 
								 | 
							
								    number to use as the index.  In the event that this index
							 | 
						||
| 
								 | 
							
								    was already in use and an inconsistentValue was returned in
							 | 
						||
| 
								 | 
							
								    response to the management protocol set operation, the
							 | 
						||
| 
								 | 
							
								    management station should simply select a new pseudo-random
							 | 
						||
| 
								 | 
							
								    number and retry the operation.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    A MIB designer should choose between the two latter
							 | 
						||
| 
								 | 
							
								    algorithms based on the size of the table (and therefore the
							 | 
						||
| 
								 | 
							
								    efficiency of each algorithm).  For tables in which a large
							 | 
						||
| 
								 | 
							
								    number of entries are expected, it is recommended that a MIB
							 | 
						||
| 
								 | 
							
								    object be defined that returns an acceptable index for
							 | 
						||
| 
								 | 
							
								    creation.  For tables with small numbers of entries, it is
							 | 
						||
| 
								 | 
							
								    recommended that the latter pseudo-random index mechanism be
							 | 
						||
| 
								 | 
							
								    used.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Interaction 2: Creating the Conceptual Row
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Once an unused instance-identifier has been selected, the
							 | 
						||
| 
								 | 
							
								    management station determines if it wishes to create and
							 | 
						||
| 
								 | 
							
								    activate the conceptual row in one transaction or in a
							 | 
						||
| 
								 | 
							
								    negotiated set of interactions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Interaction 2a: Creating and Activating the Conceptual Row
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    The management station must first determine the column
							 | 
						||
| 
								 | 
							
								    requirements, i.e., it must determine those columns for
							 | 
						||
| 
								 | 
							
								    which it must or must not provide values.  Depending on the
							 | 
						||
| 
								 | 
							
								    complexity of the table and the management station's
							 | 
						||
| 
								 | 
							
								    knowledge of the agent's capabilities, this determination
							 | 
						||
| 
								 | 
							
								    can be made locally by the management station.  Alternately,
							 | 
						||
| 
								 | 
							
								    the management station issues a management protocol get
							 | 
						||
| 
								 | 
							
								    operation to examine all columns in the conceptual row that
							 | 
						||
| 
								 | 
							
								    it wishes to create.  In response, for each column, there
							 | 
						||
| 
								 | 
							
								    are three possible outcomes:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         - a value is returned, indicating that some other
							 | 
						||
| 
								 | 
							
								         management station has already created this conceptual
							 | 
						||
| 
								 | 
							
								         row.  We return to interaction 1.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         - the exception `noSuchInstance' is returned,
							 | 
						||
| 
								 | 
							
								         indicating that the agent implements the object-type
							 | 
						||
| 
								 | 
							
								         associated with this column, and that this column in at
							 | 
						||
| 
								 | 
							
								         least one conceptual row would be accessible in the MIB
							 | 
						||
| 
								 | 
							
								         view used by the retrieval were it to exist. For those
							 | 
						||
| 
								 | 
							
								         columns to which the agent provides read-create access,
							 | 
						||
| 
								 | 
							
								         the `noSuchInstance' exception tells the management
							 | 
						||
| 
								 | 
							
								         station that it should supply a value for this column
							 | 
						||
| 
								 | 
							
								         when the conceptual row is to be created.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         - the exception `noSuchObject' is returned, indicating
							 | 
						||
| 
								 | 
							
								         that the agent does not implement the object-type
							 | 
						||
| 
								 | 
							
								         associated with this column or that there is no
							 | 
						||
| 
								 | 
							
								         conceptual row for which this column would be
							 | 
						||
| 
								 | 
							
								         accessible in the MIB view used by the retrieval.  As
							 | 
						||
| 
								 | 
							
								         such, the management station can not issue any
							 | 
						||
| 
								 | 
							
								         management protocol set operations to create an
							 | 
						||
| 
								 | 
							
								         instance of this column.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Once the column requirements have been determined, a
							 | 
						||
| 
								 | 
							
								    management protocol set operation is accordingly issued.
							 | 
						||
| 
								 | 
							
								    This operation also sets the new instance of the status
							 | 
						||
| 
								 | 
							
								    column to `createAndGo'.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    When the agent processes the set operation, it verifies that
							 | 
						||
| 
								 | 
							
								    it has sufficient information to make the conceptual row
							 | 
						||
| 
								 | 
							
								    available for use by the managed device.  The information
							 | 
						||
| 
								 | 
							
								    available to the agent is provided by two sources: the
							 | 
						||
| 
								 | 
							
								    management protocol set operation which creates the
							 | 
						||
| 
								 | 
							
								    conceptual row, and, implementation-specific defaults
							 | 
						||
| 
								 | 
							
								    supplied by the agent (note that an agent must provide
							 | 
						||
| 
								 | 
							
								    implementation-specific defaults for at least those objects
							 | 
						||
| 
								 | 
							
								    which it implements as read-only).  If there is sufficient
							 | 
						||
| 
								 | 
							
								    information available, then the conceptual row is created, a
							 | 
						||
| 
								 | 
							
								    `noError' response is returned, the status column is set to
							 | 
						||
| 
								 | 
							
								    `active', and no further interactions are necessary (i.e.,
							 | 
						||
| 
								 | 
							
								    interactions 3 and 4 are skipped).  If there is insufficient
							 | 
						||
| 
								 | 
							
								    information, then the conceptual row is not created, and the
							 | 
						||
| 
								 | 
							
								    set operation fails with an error of `inconsistentValue'.
							 | 
						||
| 
								 | 
							
								    On this error, the management station can issue a management
							 | 
						||
| 
								 | 
							
								    protocol retrieval operation to determine if this was
							 | 
						||
| 
								 | 
							
								    because it failed to specify a value for a required column,
							 | 
						||
| 
								 | 
							
								    or, because the selected instance of the status column
							 | 
						||
| 
								 | 
							
								    already existed.  In the latter case, we return to
							 | 
						||
| 
								 | 
							
								    interaction 1.  In the former case, the management station
							 | 
						||
| 
								 | 
							
								    can re-issue the set operation with the additional
							 | 
						||
| 
								 | 
							
								    information, or begin interaction 2 again using
							 | 
						||
| 
								 | 
							
								    `createAndWait' in order to negotiate creation of the
							 | 
						||
| 
								 | 
							
								    conceptual row.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                             NOTE WELL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         Regardless of the method used to determine the column
							 | 
						||
| 
								 | 
							
								         requirements, it is possible that the management
							 | 
						||
| 
								 | 
							
								         station might deem a column necessary when, in fact,
							 | 
						||
| 
								 | 
							
								         the agent will not allow that particular columnar
							 | 
						||
| 
								 | 
							
								         instance to be created or written.  In this case, the
							 | 
						||
| 
								 | 
							
								         management protocol set operation will fail with an
							 | 
						||
| 
								 | 
							
								         error such as `noCreation' or `notWritable'.  In this
							 | 
						||
| 
								 | 
							
								         case, the management station decides whether it needs
							 | 
						||
| 
								 | 
							
								         to be able to set a value for that particular columnar
							 | 
						||
| 
								 | 
							
								         instance.  If not, the management station re-issues the
							 | 
						||
| 
								 | 
							
								         management protocol set operation, but without setting
							 | 
						||
| 
								 | 
							
								         a value for that particular columnar instance;
							 | 
						||
| 
								 | 
							
								         otherwise, the management station aborts the row
							 | 
						||
| 
								 | 
							
								         creation algorithm.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Interaction 2b: Negotiating the Creation of the Conceptual
							 | 
						||
| 
								 | 
							
								    Row
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    The management station issues a management protocol set
							 | 
						||
| 
								 | 
							
								    operation which sets the desired instance of the status
							 | 
						||
| 
								 | 
							
								    column to `createAndWait'.  If the agent is unwilling to
							 | 
						||
| 
								 | 
							
								    process a request of this sort, the set operation fails with
							 | 
						||
| 
								 | 
							
								    an error of `wrongValue'.  (As a consequence, such an agent
							 | 
						||
| 
								 | 
							
								    must be prepared to accept a single management protocol set
							 | 
						||
| 
								 | 
							
								    operation, i.e., interaction 2a above, containing all of the
							 | 
						||
| 
								 | 
							
								    columns indicated by its column requirements.) Otherwise,
							 | 
						||
| 
								 | 
							
								    the conceptual row is created, a `noError' response is
							 | 
						||
| 
								 | 
							
								    returned, and the status column is immediately set to either
							 | 
						||
| 
								 | 
							
								    `notInService' or `notReady', depending on whether it has
							 | 
						||
| 
								 | 
							
								    sufficient information to (attempt to) make the conceptual
							 | 
						||
| 
								 | 
							
								    row available for use by the managed device.  If there is
							 | 
						||
| 
								 | 
							
								    sufficient information available, then the status column is
							 | 
						||
| 
								 | 
							
								    set to `notInService'; otherwise, if there is insufficient
							 | 
						||
| 
								 | 
							
								    information, then the status column is set to `notReady'.
							 | 
						||
| 
								 | 
							
								    Regardless, we proceed to interaction 3.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Interaction 3: Initializing non-defaulted Objects
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    The management station must now determine the column
							 | 
						||
| 
								 | 
							
								    requirements.  It issues a management protocol get operation
							 | 
						||
| 
								 | 
							
								    to examine all columns in the created conceptual row.  In
							 | 
						||
| 
								 | 
							
								    the response, for each column, there are three possible
							 | 
						||
| 
								 | 
							
								    outcomes:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         - a value is returned, indicating that the agent
							 | 
						||
| 
								 | 
							
								         implements the object-type associated with this column
							 | 
						||
| 
								 | 
							
								         and had sufficient information to provide a value.  For
							 | 
						||
| 
								 | 
							
								         those columns to which the agent provides read-create
							 | 
						||
| 
								 | 
							
								         access (and for which the agent allows their values to
							 | 
						||
| 
								 | 
							
								         be changed after their creation), a value return tells
							 | 
						||
| 
								 | 
							
								         the management station that it may issue additional
							 | 
						||
| 
								 | 
							
								         management protocol set operations, if it desires, in
							 | 
						||
| 
								 | 
							
								         order to change the value associated with this column.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         - the exception `noSuchInstance' is returned,
							 | 
						||
| 
								 | 
							
								         indicating that the agent implements the object-type
							 | 
						||
| 
								 | 
							
								         associated with this column, and that this column in at
							 | 
						||
| 
								 | 
							
								         least one conceptual row would be accessible in the MIB
							 | 
						||
| 
								 | 
							
								         view used by the retrieval were it to exist. However,
							 | 
						||
| 
								 | 
							
								         the agent does not have sufficient information to
							 | 
						||
| 
								 | 
							
								         provide a value, and until a value is provided, the
							 | 
						||
| 
								 | 
							
								         conceptual row may not be made available for use by the
							 | 
						||
| 
								 | 
							
								         managed device.  For those columns to which the agent
							 | 
						||
| 
								 | 
							
								         provides read-create access, the `noSuchInstance'
							 | 
						||
| 
								 | 
							
								         exception tells the management station that it must
							 | 
						||
| 
								 | 
							
								         issue additional management protocol set operations, in
							 | 
						||
| 
								 | 
							
								         order to provide a value associated with this column.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         - the exception `noSuchObject' is returned, indicating
							 | 
						||
| 
								 | 
							
								         that the agent does not implement the object-type
							 | 
						||
| 
								 | 
							
								         associated with this column or that there is no
							 | 
						||
| 
								 | 
							
								         conceptual row for which this column would be
							 | 
						||
| 
								 | 
							
								         accessible in the MIB view used by the retrieval.  As
							 | 
						||
| 
								 | 
							
								         such, the management station can not issue any
							 | 
						||
| 
								 | 
							
								         management protocol set operations to create an
							 | 
						||
| 
								 | 
							
								         instance of this column.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    If the value associated with the status column is
							 | 
						||
| 
								 | 
							
								    `notReady', then the management station must first deal with
							 | 
						||
| 
								 | 
							
								    all `noSuchInstance' columns, if any.  Having done so, the
							 | 
						||
| 
								 | 
							
								    value of the status column becomes `notInService', and we
							 | 
						||
| 
								 | 
							
								    proceed to interaction 4.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Interaction 4: Making the Conceptual Row Available
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Once the management station is satisfied with the values
							 | 
						||
| 
								 | 
							
								    associated with the columns of the conceptual row, it issues
							 | 
						||
| 
								 | 
							
								    a management protocol set operation to set the status column
							 | 
						||
| 
								 | 
							
								    to `active'.  If the agent has sufficient information to
							 | 
						||
| 
								 | 
							
								    make the conceptual row available for use by the managed
							 | 
						||
| 
								 | 
							
								    device, the management protocol set operation succeeds (a
							 | 
						||
| 
								 | 
							
								    `noError' response is returned).  Otherwise, the management
							 | 
						||
| 
								 | 
							
								    protocol set operation fails with an error of
							 | 
						||
| 
								 | 
							
								    `inconsistentValue'.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                             NOTE WELL
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								         A conceptual row having a status column with value
							 | 
						||
| 
								 | 
							
								         `notInService' or `notReady' is unavailable to the
							 | 
						||
| 
								 | 
							
								         managed device.  As such, it is possible for the
							 | 
						||
| 
								 | 
							
								         managed device to create its own instances during the
							 | 
						||
| 
								 | 
							
								         time between the management protocol set operation
							 | 
						||
| 
								 | 
							
								         which sets the status column to `createAndWait' and the
							 | 
						||
| 
								 | 
							
								         management protocol set operation which sets the status
							 | 
						||
| 
								 | 
							
								         column to `active'.  In this case, when the management
							 | 
						||
| 
								 | 
							
								         protocol set operation is issued to set the status
							 | 
						||
| 
								 | 
							
								         column to `active', the values held in the agent
							 | 
						||
| 
								 | 
							
								         supersede those used by the managed device.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    If the management station is prevented from setting the
							 | 
						||
| 
								 | 
							
								    status column to `active' (e.g., due to management station
							 | 
						||
| 
								 | 
							
								    or network failure) the conceptual row will be left in the
							 | 
						||
| 
								 | 
							
								    `notInService' or `notReady' state, consuming resources
							 | 
						||
| 
								 | 
							
								    indefinitely.  The agent must detect conceptual rows that
							 | 
						||
| 
								 | 
							
								    have been in either state for an abnormally long period of
							 | 
						||
| 
								 | 
							
								    time and remove them.  It is the responsibility of the
							 | 
						||
| 
								 | 
							
								    DESCRIPTION clause of the status column to indicate what an
							 | 
						||
| 
								 | 
							
								    abnormally long period of time would be.  This period of
							 | 
						||
| 
								 | 
							
								    time should be long enough to allow for human response time
							 | 
						||
| 
								 | 
							
								    (including `think time') between the creation of the
							 | 
						||
| 
								 | 
							
								    conceptual row and the setting of the status to `active'.
							 | 
						||
| 
								 | 
							
								    In the absence of such information in the DESCRIPTION
							 | 
						||
| 
								 | 
							
								    clause, it is suggested that this period be approximately 5
							 | 
						||
| 
								 | 
							
								    minutes in length.  This removal action applies not only to
							 | 
						||
| 
								 | 
							
								    newly-created rows, but also to previously active rows which
							 | 
						||
| 
								 | 
							
								    are set to, and left in, the notInService state for a
							 | 
						||
| 
								 | 
							
								    prolonged period exceeding that which is considered normal
							 | 
						||
| 
								 | 
							
								    for such a conceptual row.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                     Conceptual Row Suspension
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    When a conceptual row is `active', the management station
							 | 
						||
| 
								 | 
							
								    may issue a management protocol set operation which sets the
							 | 
						||
| 
								 | 
							
								    instance of the status column to `notInService'.  If the
							 | 
						||
| 
								 | 
							
								    agent is unwilling to do so, the set operation fails with an
							 | 
						||
| 
								 | 
							
								    error of `wrongValue' or `inconsistentValue'.  Otherwise,
							 | 
						||
| 
								 | 
							
								    the conceptual row is taken out of service, and a `noError'
							 | 
						||
| 
								 | 
							
								    response is returned.  It is the responsibility of the
							 | 
						||
| 
								 | 
							
								    DESCRIPTION clause of the status column to indicate under
							 | 
						||
| 
								 | 
							
								    what circumstances the status column should be taken out of
							 | 
						||
| 
								 | 
							
								    service (e.g., in order for the value of some other column
							 | 
						||
| 
								 | 
							
								    of the same conceptual row to be modified).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                      Conceptual Row Deletion
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    For deletion of conceptual rows, a management protocol set
							 | 
						||
| 
								 | 
							
								    operation is issued which sets the instance of the status
							 | 
						||
| 
								 | 
							
								    column to `destroy'.  This request may be made regardless of
							 | 
						||
| 
								 | 
							
								    the current value of the status column (e.g., it is possible
							 | 
						||
| 
								 | 
							
								    to delete conceptual rows which are either `notReady',
							 | 
						||
| 
								 | 
							
								    `notInService' or `active'.) If the operation succeeds, then
							 | 
						||
| 
								 | 
							
								    all instances associated with the conceptual row are
							 | 
						||
| 
								 | 
							
								    immediately removed."
							 | 
						||
| 
								 | 
							
								SYNTAX       INTEGER {
							 | 
						||
| 
								 | 
							
								                 -- the following two values are states:
							 | 
						||
| 
								 | 
							
								                 -- these values may be read or written
							 | 
						||
| 
								 | 
							
								                 active(1),
							 | 
						||
| 
								 | 
							
								                 notInService(2),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 -- the following value is a state:
							 | 
						||
| 
								 | 
							
								                 -- this value may be read, but not written
							 | 
						||
| 
								 | 
							
								                 notReady(3),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                 -- the following three values are
							 | 
						||
| 
								 | 
							
								                 -- actions: these values may be written,
							 | 
						||
| 
								 | 
							
								                 --   but are never read
							 | 
						||
| 
								 | 
							
								                 createAndGo(4),
							 | 
						||
| 
								 | 
							
								                 createAndWait(5),
							 | 
						||
| 
								 | 
							
								                 destroy(6)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								RowPointer ::= TEXTUAL-CONVENTION
							 | 
						||
| 
								 | 
							
								    STATUS       current
							 | 
						||
| 
								 | 
							
								    DESCRIPTION
							 | 
						||
| 
								 | 
							
								        "Represents a pointer to a conceptual row.  The value is the
							 | 
						||
| 
								 | 
							
								         name of the instance of the first accessible columnar object
							 | 
						||
| 
								 | 
							
								         in the conceptual row.
							 | 
						||
| 
								 | 
							
								         For example, ifIndex.3 would point to the 3rd row in the
							 | 
						||
| 
								 | 
							
								         ifTable (note that if ifIndex were not-accessible, then
							 | 
						||
| 
								 | 
							
								         ifDescr.3 would be used instead)."
							 | 
						||
| 
								 | 
							
								    SYNTAX  OBJECT IDENTIFIER
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--Counter64  ::= Counter32
							 | 
						||
| 
								 | 
							
								-- Unsigned32 ::= INTEGER
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								-- zeroDotZero OBJECT-IDENTITY
							 | 
						||
| 
								 | 
							
								--     STATUS      current
							 | 
						||
| 
								 | 
							
								--     DESCRIPTION
							 | 
						||
| 
								 | 
							
								--         "A value used for null identifiers."
							 | 
						||
| 
								 | 
							
								-- ::= { 0 0 }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								END
							 | 
						||
| 
								 | 
							
								
							 |