519 lines
24 KiB
Plaintext
519 lines
24 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
|
|
|