A value expressed as a percentage, interpreted by the meter as an indication of how full the flow table should be before it should take some action to avoid running out of resources to handle new flows, as discussed in section 4.6 (Handling Increasing Traffic Levels) of the RTFM Architecture RFC [RTFM-ARC].
Values of 0% or 100% disable the checking represented by this variable.
flowInactivityTimeout
1.3.6.1.2.1.40.1.6
Integer32
The time in seconds since the last packet seen, after which
a flow becomes 'idle.' Note that although a flow may be
idle, it will not be discarded (and its memory recovered) until after its data has been collected by all the meter readers registered for its RuleSet.
flowActiveFlows
1.3.6.1.2.1.40.1.7
Integer32
The number of flows which are currently in use.
flowMaxFlows
1.3.6.1.2.1.40.1.8
Integer32
The maximum number of flows allowed in the meter's flow table. At present this is determined when the meter is first started up.
flowFloodMode
1.3.6.1.2.1.40.1.9
TruthValue1 = true2 = falseRepresents a boolean value. · Integer32
Indicates that the meter has passed its FloodMark and is not running in its normal mode.
When the manager notices this it should take action to remedy the problem which caused the flooding. It should then monitor flowActiveFlows so as to determine when the flood has receded. At that point the manager may set flowFloodMode to false(2) to resume normal operation.
Table details
flowRuleSetInfoTable
1.3.6.1.2.1.40.1.1
Index: flowRuleInfoIndex
An array of information about the RuleSets held in the meter.
Any manager may configure a new RuleSet for the meter by creating a row in this table with status active(1), and setting values for all the objects in its rules. At this stage the new RuleSet is available but not 'running', i.e. it is not being used by the meter to produce entries in the flow table.
To actually 'run' a RuleSet a manager must create a row in the flowManagerInfoTable, set it's flowManagerStatus to active(1), and set either its CurrentRuleSet or StandbyRuleSet to point to the RuleSet to be run.
Once a RuleSet is running a manager may not change any of the objects within the RuleSet itself. Any attempt to do so should result in a notWritable(17) SNMP error-status for such objects.
A manager may stop a RuleSet running by removing all references to it in the flowManagerInfoTable (i.e. by setting CurrentRuleSet and StandbyRuleSet values to 0). This provides a way to stop RuleSets left running if a manager fails. For example, when a manager is started, it could search the meter's flowManager table and stop all RuleSets having a specified value of flowRuleInfoOwner.
To prevent a manager from interfering with variables belonging to another manager, the meter should use MIB views [RFC2575] so as to limit each manager's access to the meter's variables, effectively dividing the single meter into several virtual meters, one for each independent manager.
flowRuleInfoIndex
1.3.6.1.2.1.40.1.1.1.1
Integer32 (1..2147483647)
An index which selects an entry in the flowRuleSetInfoTable. Each such entry contains control information for a particular RuleSet which the meter may run.
flowRuleInfoSize
1.3.6.1.2.1.40.1.1.1.2
Integer32
Number of rules in this RuleSet. Setting this variable will cause the meter to allocate space for these rules.
flowRuleInfoOwner
1.3.6.1.2.1.40.1.1.1.3
UTF8OwnerStringAn administratively assigned name for the owner of a resource, conceptually the same as OwnerString in the RMON MIB [RMON-MIB].
To facilitate internationalisation, this name information is represented using the ISO/IEC IS 10646-1 character set, encoded as an octet string using the UTF-8 transformation format described in the UTF-8 standard [UTF-8]. SIZE (0..127) · OCTET STRING · hint 127t
Identifies the manager which 'owns' this RuleSet. A manager must set this variable when creating a row in this table.
flowRuleInfoTimeStamp
1.3.6.1.2.1.40.1.1.1.4
TimeStampThe value of the sysUpTime object at which a specific occurrence happened. The specific occurrence must be
defined in the description of any object defined using this type.
If sysUpTime is reset to zero as a result of a re- initialization of the network management (sub)system, then the values of all TimeStamp objects are also reset. However, after approximately 497 days without a re- initialization, the sysUpTime object will reach 2^^32-1 and then increment around to zero; in this case, existing values of TimeStamp objects do not change. This can lead to ambiguities in the value of TimeStamp objects. · TimeTicks
Time this row's associated RuleSet was last changed.
flowRuleInfoStatus
1.3.6.1.2.1.40.1.1.1.5
RowStatus1 = active2 = notInService3 = notReady4 = createAndGo5 = createAndWait6 = destroyThe 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. · Integer32
The status of this flowRuleSetInfoEntry. If this value is not active(1) the meter must not attempt to use the row's associated RuleSet. Once its value has been set to active(1) a manager may not change any of the other variables in the row, nor the contents of the associated RuleSet. Any attempt to do so should result in a notWritable(17) SNMP error-status for such variables or objects.
To download a RuleSet, a manger could: - Locate an open slot in the RuleSetInfoTable. - Create a RuleSetInfoEntry by setting the status for this open slot to createAndWait(5). - Set flowRuleInfoSize and flowRuleInfoName as required. - Download the rules into the row's rule table. - Set flowRuleInfoStatus to active(1).
The RuleSet would then be ready to run. The manager is not allowed to change the value of flowRuleInfoStatus from active(1) if the associated RuleSet is being referenced by any of the entries in the flowManagerInfoTable.
Setting RuleInfoStatus to destroy(6) destroys the associated RuleSet together with any flow data collected by it.
flowRuleInfoName
1.3.6.1.2.1.40.1.1.1.6
OCTET STRING SIZE (0..127)
An alphanumeric identifier used by managers and readers to identify a RuleSet. For example, a manager wishing to run a RuleSet named WWW-FLOWS could search the flowRuleSetInfoTable to see whether the WWW-FLOWS RuleSet is already available on the meter.
Note that references to RuleSets in the flowManagerInfoTable use indexes for their flowRuleSetInfoTable entries. These may be different each time the RuleSet is loaded into a meter.
flowRuleInfoRulesReady
1.3.6.1.2.1.40.1.1.1.7
TruthValue1 = true2 = falseRepresents a boolean value. · Integer32
Indicates whether the rules for this row's associated RuleSet are ready for use. The meter will refuse to 'run' the RuleSet unless this variable has been set to true(1). While RulesReady is false(2), the manager may modify the RuleSet, for example by downloading rules into it.
flowRuleInfoFlowRecords
1.3.6.1.2.1.40.1.1.1.8
Integer32
The number of entries in the flow table for this RuleSet. These may be current (waiting for collection by one or more meter readers) or idle (waiting for the meter to recover their memory).
flowInterfaceTable
1.3.6.1.2.1.40.1.2
Index: ifIndex
An array of information specific to each meter interface.
InterfaceIndexA unique value, greater than zero, for each interface or interface sub-layer in the managed system. It is recommended that values are assigned contiguously starting from 1. The value for each interface sub-layer must remain constant at least from one re-initialization of the entity's network management system to the next re-initialization. (1..2147483647) · Integer32 · hint d
A unique value, greater than zero, for each interface. It is recommended that values are assigned contiguously starting from 1. The value for each interface sub-layer must remain constant at least from one re-initialization of the entity's network management system to the next re- initialization.
flowInterfaceSampleRate
1.3.6.1.2.1.40.1.2.1.1
Integer32
The parameter N for statistical counting on this interface. Set to N to count 1/Nth of the packets appearing at this interface. A sampling rate of 1 counts all packets. A sampling rate of 0 results in the interface being ignored by the meter.
A meter should choose its own algorithm to introduce variance into the sampling so that exactly every Nth packet is counted. The IPPM Working Group's RFC 'Framework for IP Performance Metrics' [IPPM-FRM] explains why this should be done, and sets out an algorithm for doing it.
flowInterfaceLostPackets
1.3.6.1.2.1.40.1.2.1.2
Counter32
The number of packets the meter has lost for this interface. Such losses may occur because the meter has been unable to keep up with the traffic volume.
flowReaderInfoTable
1.3.6.1.2.1.40.1.3
Index: flowReaderIndex
An array of information about meter readers which have registered their intent to collect flow data from this meter.
flowReaderIndex
1.3.6.1.2.1.40.1.3.1.1
Integer32 (1..2147483647)
An index which selects an entry in the flowReaderInfoTable.
flowReaderTimeout
1.3.6.1.2.1.40.1.3.1.2
Integer32
Specifies the maximum time (in seconds) between flow data collections for this meter reader. If this time elapses without a collection, the meter should assume that this meter reader has stopped collecting, and delete this row from the table. A value of zero indicates that this row should not be timed out.
flowReaderOwner
1.3.6.1.2.1.40.1.3.1.3
UTF8OwnerStringAn administratively assigned name for the owner of a resource, conceptually the same as OwnerString in the RMON MIB [RMON-MIB].
To facilitate internationalisation, this name information is represented using the ISO/IEC IS 10646-1 character set, encoded as an octet string using the UTF-8 transformation format described in the UTF-8 standard [UTF-8]. SIZE (0..127) · OCTET STRING · hint 127t
Identifies the meter reader which created this row.
flowReaderLastTime
1.3.6.1.2.1.40.1.3.1.4
TimeStampThe value of the sysUpTime object at which a specific occurrence happened. The specific occurrence must be
defined in the description of any object defined using this type.
If sysUpTime is reset to zero as a result of a re- initialization of the network management (sub)system, then the values of all TimeStamp objects are also reset. However, after approximately 497 days without a re- initialization, the sysUpTime object will reach 2^^32-1 and then increment around to zero; in this case, existing values of TimeStamp objects do not change. This can lead to ambiguities in the value of TimeStamp objects. · TimeTicks
Time this meter reader began its most recent data collection.
This variable should be written by a meter reader as its first step in reading flow data. The meter will set this LastTime value to its current Uptime, and set its PreviousTime value
(below) to the old LastTime. This allows the meter to
recover flows which have been inactive since PreviousTime, for these have been collected at least once.
If the meter reader fails to write flowLastReadTime, collection may still proceed but the meter may not be able to recover inactive flows until the flowReaderTimeout has been reached for this entry.
flowReaderPreviousTime
1.3.6.1.2.1.40.1.3.1.5
TimeStampThe value of the sysUpTime object at which a specific occurrence happened. The specific occurrence must be
defined in the description of any object defined using this type.
If sysUpTime is reset to zero as a result of a re- initialization of the network management (sub)system, then the values of all TimeStamp objects are also reset. However, after approximately 497 days without a re- initialization, the sysUpTime object will reach 2^^32-1 and then increment around to zero; in this case, existing values of TimeStamp objects do not change. This can lead to ambiguities in the value of TimeStamp objects. · TimeTicks
Time this meter reader began the collection before last.
flowReaderStatus
1.3.6.1.2.1.40.1.3.1.6
RowStatus1 = active2 = notInService3 = notReady4 = createAndGo5 = createAndWait6 = destroyThe 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. · Integer32
The status of this FlowReaderInfoEntry. A value of active(1) implies that the associated reader should be collecting data from the meter. Once this variable has been set to active(1) a manager may only change this row's flowReaderLastTime and flowReaderTimeout variables.
flowReaderRuleSet
1.3.6.1.2.1.40.1.3.1.7
Integer32 (1..2147483647)
An index to the array of RuleSets. Specifies a set of rules of interest to this meter reader. The reader will attempt to collect any data generated by the meter for this RuleSet, and the meter will not recover the memory of any of the RuleSet's flows until this collection has taken place. Note that a reader may have entries in this table for several RuleSets.
flowManagerInfoTable
1.3.6.1.2.1.40.1.4
Index: flowManagerIndex
An array of information about managers which have registered their intent to run RuleSets on this meter.
flowManagerIndex
1.3.6.1.2.1.40.1.4.1.1
Integer32 (1..2147483647)
An index which selects an entry in the flowManagerInfoTable.
flowManagerCurrentRuleSet
1.3.6.1.2.1.40.1.4.1.2
Integer32
Index to the array of RuleSets. Specifies which set of rules is the 'current' one for this task. The meter will be 'running' the current RuleSet if this row's flowManagerRunningStandby value is false(2).
When the manager sets this variable the meter will stop using the task's old current RuleSet and start using the new one. Specifying RuleSet 0 (the empty set) stops flow measurement for this task.
flowManagerStandbyRuleSet
1.3.6.1.2.1.40.1.4.1.3
Integer32
Index to the array of RuleSets. After reaching HighWaterMark (see below) the manager will switch to using the task's StandbyRuleSet in place of its CurrentRuleSet. For this to be effective the designated StandbyRuleSet should have a coarser reporting granularity then the CurrentRuleSet. The manager may also need to decrease the meter reading interval so that the meter can recover flows measured by this task's CurrentRuleSet.
flowManagerHighWaterMark
1.3.6.1.2.1.40.1.4.1.4
Integer32 (0..100)
A value expressed as a percentage, interpreted by the meter as an indication of how full the flow table should be before it should switch to the standby RuleSet (if one has been specified) for this task. Values of 0% or 100% disable the checking represented by this variable.
flowManagerCounterWrap
1.3.6.1.2.1.40.1.4.1.5
INTEGER1 = wrap2 = scale · Integer32
Specifies whether PDU and octet counters should wrap when they reach the top of their range (normal behaviour for Counter64 objects), or whether their scale factors should be used instead. The combination of counter and scale factor allows counts to be returned as non-negative binary floating point numbers, with 64-bit mantissas and 8-bit exponents.
flowManagerOwner
1.3.6.1.2.1.40.1.4.1.6
UTF8OwnerStringAn administratively assigned name for the owner of a resource, conceptually the same as OwnerString in the RMON MIB [RMON-MIB].
To facilitate internationalisation, this name information is represented using the ISO/IEC IS 10646-1 character set, encoded as an octet string using the UTF-8 transformation format described in the UTF-8 standard [UTF-8]. SIZE (0..127) · OCTET STRING · hint 127t
Identifies the manager which created this row.
flowManagerTimeStamp
1.3.6.1.2.1.40.1.4.1.7
TimeStampThe value of the sysUpTime object at which a specific occurrence happened. The specific occurrence must be
defined in the description of any object defined using this type.
If sysUpTime is reset to zero as a result of a re- initialization of the network management (sub)system, then the values of all TimeStamp objects are also reset. However, after approximately 497 days without a re- initialization, the sysUpTime object will reach 2^^32-1 and then increment around to zero; in this case, existing values of TimeStamp objects do not change. This can lead to ambiguities in the value of TimeStamp objects. · TimeTicks
Time this row was last changed by its manager.
flowManagerStatus
1.3.6.1.2.1.40.1.4.1.8
RowStatus1 = active2 = notInService3 = notReady4 = createAndGo5 = createAndWait6 = destroyThe 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. · Integer32
The status of this row in the flowManagerInfoTable. A value of active(1) implies that this task may be activated, by setting its CurrentRuleSet and StandbyRuleSet variables. Its HighWaterMark and RunningStandby variables may also be changed.
flowManagerRunningStandby
1.3.6.1.2.1.40.1.4.1.9
TruthValue1 = true2 = falseRepresents a boolean value. · Integer32
Set to true(1) by the meter to indicate that it has switched to runnning this task's StandbyRuleSet in place of its CurrentRuleSet. To switch back to the CurrentRuleSet, the manager may simply set this variable to false(2).
Value of this flow data record's index within the meter's flow table.
flowDataTimeMark
1.3.6.1.2.1.40.2.1.1.2
TimeFilterTo be used for the index to a table. Allows an application to download only those rows changed since a particular time.
Note that this is not a history mechanism. Only current values of underlying objects are returned; saved instance values associated with particular values of sysUpTime are not.
An entry is considered changed if the value of any object in the entry changes, if the row is created, or if any object in the entry is created or deleted. Note that deleted entries cannot be detected or downloaded.
A time-filtered conceptual table is created by inserting a single object of SYNTAX TimeFilter as the first INDEX component in a copy of an existing basic conceptual table (i.e., any SEQUENCE without a TimeFilter INDEX component). Thus, for each conceptual entry 'I' in the basic table, there exists N conceptual entries in the time-filtered version, indexed N.I, where 'N' is equal to the value of sysUpTime.
When an application retrieves conceptual instances from a time-filtered table, and an INDEX value is provided for the TimeFilter INDEX component 'N', the agent will only consider returning basic conceptual entries (e.g., 'fooColumn.N.I') if any column within the basic conceptual entry has changed since sysUpTime 'N'. If not, the basic conceptual entry will be ignored for the particular retrieval operation.
When sysUpTime is equal to zero, this table shall be empty.
One conceptual entry exists for each past value of sysUpTime, except that the whole table is purged should sysUpTime wrap.
As an entry in a time-filtered table is updated (i.e., one of the columns in the basic conceptual table is changed), new conceptual entries are also created in the time-filtered version (which still shares the now updated object values with all other instances). The number of unique time-filtered instances that are created is determined by the value of sysUpTime at which the basic entry was last updated. One unique instance will exist for each value of sysUpTime at the last update time for the row. However, a new TimeFilter index instance is created for each new sysUpTime value. The TimeFilter index values not associated with entry updates are called duplicate time-filtered instances.
After some deployment experience, it has been determined that a time-filtered table is more efficient if the agent stops a MIB walk operation by skipping over rows with a TimeFilter index value higher than the value in the received GetNext/GetBulk request. That is, instead of incrementing a TimeFilter index value, the agent will continue to the next object or table. As a consequence, GetNext or GetBulk operations will provide only one pass through a time-filtered table.
It is suggested that an agent implement a time-filtered table in this manner to improve performance and avoid a MIB walk getting stuck in time-filtered tables. It is, however, still acceptable for an agent to implement a time-filtered table in the traditional manner (i.e., every conceptual time-filtered instance is returned in GetNext and GetBulk PDU responses), and management applications must be able to deal with such traditional implementations.
See the appendix for further discussion of this textual convention.
The following example is provided to demonstrate TimeFilter behavior:
Consider the following basic conceptual table, basicFooTable. (Note that the basic version of a time-filtered table may not actually be defined.)
basicFooTable:
basicFooTable ... INDEX { fooIndex }
BasicFooEntry {
fooIndex Integer32,
fooCounts Counter32
}
For this example, the basicFooTable contains two static conceptual entries (fooIndex equals '1' and '2'), created at time zero. It also contains one dynamic conceptual entry (fooIndex equals '3'), which is created at time '3' and deleted at time '7'.
The time-filtered version of the basicFooTable could be defined as follows:
FooTable:
fooTable ... INDEX { fooTimeMark, fooIndex }
FooEntry {
fooTimeMark TimeFilter,
fooIndex Integer32,
fooCounts Counter32
}
Note that entries exist in the time-filtered conceptual table only if they actually exist in the underlying (basic) table.
For this example, the fooTable will have three underlying basic entries (fooIndex == 1, 2, and 3), with the following activity (for sysUpTime equal 0 to 9):
- fooEntry.N.1 is created at time '0' and most recently updated at time '6' to the value '5'. - fooEntry.N.2 is created at time '0' and most recently updated at time '8' to the value '9'. - fooEntry.N.3 is created at time '3', updated at time '5' to the value '17', and deleted at time '7'.
The following tables show the values that would be returned for MIB walk operations with various TimeFilter values, done at different times. An application issues a retrieval request at time 'T', with a TimeFilter value, 'N' (typically set to a lower value, such as the value of sysUpTime at the last polling cycle).
The following values would be returned in a MIB walk of fooCounts.N if T equals '0' and N equals '0':
fooCounts.N.I Value
==========================
fooCounts.0.1 0
fooCounts.0.2 0
Note that nothing is returned for fooCounts.0.3, since that entry does not exist at sysUpTime equals '0'.
The following values would be returned in a full (traditional) MIB walk of fooCounts.N if T equals '3' and N equals '0':
fooCounts.N.I Value
=======================
fooCounts.0.1 0
fooCounts.0.2 0
fooCounts.0.3 0
fooCounts.1.3 0
fooCounts.2.3 0
fooCounts.3.3 0
Note that there are no instances for T equals 1 or 2 for the first two values of N, as these entries did not change since they were created at time '0'.
Note that the current value for 'fooCounts.N.3' is returned here, even for values of N less than '3' (when the entry was created). The agent only considers the current existence of an entry in the TimeFilter algorithm, not the time when the entry was created.
Note that the instances 'fooCounts.0.3', 'fooCounts.1.3', and 'fooCounts.2.3' are duplicates and can be suppressed by the agent in a MIB walk.
The following values would be returned in a full (traditional) MIB walk of fooCounts.N if T equals '6' and N equals '3':
fooCounts.N.I Value
=======================
fooCounts.3.1 5
fooCounts.3.3 17
fooCounts.4.1 5
fooCounts.4.3 17
fooCounts.5.1 5
fooCounts.5.3 17
fooCounts.6.1 5
Note that no instances for entry 'fooCounts.N.2' are returned, since it has not changed since time '3'.
Note that all instances except 'fooCounts.5.3' and 'fooCounts.6.1' are duplicates and can be suppressed by the agent in a MIB walk.
The following values would be returned in a full (traditional) MIB walk of fooCounts.N if T equals '9' and N equals '6':
fooCounts.N.I Value
=======================
fooCounts.6.1 5
fooCounts.6.2 9
fooCounts.7.2 9
fooCounts.8.2 9
Note that no instances for entry 'fooCounts.N.3' are returned, since it was deleted at time '7'.
Note that instances 'fooCounts.6.2' and 'fooCounts.7.2' are duplicates and can be suppressed by the agent in a MIB walk. · TimeTicks
A TimeFilter for this entry. Allows GetNext and GetBulk to find flow table rows which have changed since a specified value of the meter's Uptime.
flowDataStatus
1.3.6.1.2.1.40.2.1.1.3
INTEGER1 = inactive2 = current · Integer32
Status of this flow data record.
flowDataSourceInterface
1.3.6.1.2.1.40.2.1.1.4
Integer32
Index of the interface associated with the source address for this flow. It's value is one of those contained in the ifIndex field of the meter's interfaces table.
flowDataSourceAdjacentType
1.3.6.1.2.1.40.2.1.1.5
AdjacentType1 = ip3 = nsap7 = ethernet9 = tokenring11 = ipx12 = appletalk13 = decnet15 = fddiIndicates the type of an adjacent address. May be a medium type or (if metering is taking place inside a tunnel) a PeerType (see above).
The values used for IEEE 802 medium types are from the 'Network Management Parameters (ifType definitions)' section of the Assigned Numbers RFC [ASG-NBR]. Other medium types may also be used, provided only that they are identified by their assigned ifType numbers. · Integer32
Adjacent address type of the source for this flow.
If metering is being performed at the network level, AdjacentType will indicate the medium for the interface on which the flow was observed and AdjacentAddress will be the MAC address for that interface. This is the usual case.
If traffic is being metered inside a tunnel, AdjacentType will be the peer type of the host at the end of the tunnel and AdjacentAddress will be the peer address for that host.
flowDataSourceAdjacentAddress
1.3.6.1.2.1.40.2.1.1.6
AdjacentAddressSpecifies the value of an adjacent address. May be a Medium Access Control (MAC) address or (if metering is taking place inside a tunnel) a PeerAddress (see above).
MAC Address format depends on the actual medium, as follows:
Ethernet: ethernet(7)
6-octet 802.3 MAC address in 'canonical' order
Token Ring: tokenring(9)
6-octet 802.5 MAC address in 'canonical' order
FDDI: fddi(15)
FddiMACLongAddress, i.e. a 6-octet MAC address
in 'canonical' order (defined in [FDDI-MIB]) SIZE (3..20) · OCTET STRING
Address of the adjacent device on the path for the source for this flow.
flowDataSourceAdjacentMask
1.3.6.1.2.1.40.2.1.1.7
AdjacentAddressSpecifies the value of an adjacent address. May be a Medium Access Control (MAC) address or (if metering is taking place inside a tunnel) a PeerAddress (see above).
MAC Address format depends on the actual medium, as follows:
Ethernet: ethernet(7)
6-octet 802.3 MAC address in 'canonical' order
Token Ring: tokenring(9)
6-octet 802.5 MAC address in 'canonical' order
FDDI: fddi(15)
FddiMACLongAddress, i.e. a 6-octet MAC address
in 'canonical' order (defined in [FDDI-MIB]) SIZE (3..20) · OCTET STRING
1-bits in this mask indicate which bits must match when comparing the adjacent source address for this flow.
flowDataSourcePeerType
1.3.6.1.2.1.40.2.1.1.8
PeerType1 = ipv42 = ipv63 = nsap11 = ipx12 = appletalk13 = decnetIndicates the type of a PeerAddress (see below). The values used are from the 'Address Family Numbers' section of the Assigned Numbers RFC [ASG-NBR]. Peer types from other address families may also be used, provided only that they are identified by their assigned Address Family numbers. · Integer32
Peer address type of the source for this flow.
flowDataSourcePeerAddress
1.3.6.1.2.1.40.2.1.1.9
PeerAddressSpecifies the value of a peer address for various network protocols. Address format depends on the actual protocol, as indicated below:
IPv4: ipv4(1)
4-octet IpAddress (defined in the SNMPv2 SMI [RFC2578])
IPv6: ipv6(2)
16-octet IpAddress (defined in the
IPv6 Addressing RFC [V6-ADDR])
CLNS: nsap(3)
NsapAddress (defined in the SNMPv2 SMI [RFC2578])
Novell: ipx(11)
4-octet Network number, 6-octet Host number (MAC address)
AppleTalk: appletalk(12)
2-octet Network number (sixteen bits), 1-octet Host number (eight bits)
DECnet: decnet(13)
1-octet Area number (in low-order six bits), 2-octet Host number (in low-order ten bits) SIZE (3..20) · OCTET STRING
Address of the peer device for the source of this flow.
flowDataSourcePeerMask
1.3.6.1.2.1.40.2.1.1.10
PeerAddressSpecifies the value of a peer address for various network protocols. Address format depends on the actual protocol, as indicated below:
IPv4: ipv4(1)
4-octet IpAddress (defined in the SNMPv2 SMI [RFC2578])
IPv6: ipv6(2)
16-octet IpAddress (defined in the
IPv6 Addressing RFC [V6-ADDR])
CLNS: nsap(3)
NsapAddress (defined in the SNMPv2 SMI [RFC2578])
Novell: ipx(11)
4-octet Network number, 6-octet Host number (MAC address)
AppleTalk: appletalk(12)
2-octet Network number (sixteen bits), 1-octet Host number (eight bits)
DECnet: decnet(13)
1-octet Area number (in low-order six bits), 2-octet Host number (in low-order ten bits) SIZE (3..20) · OCTET STRING
1-bits in this mask indicate which bits must match when comparing the source peer address for this flow.
flowDataSourceTransType
1.3.6.1.2.1.40.2.1.1.11
TransportTypeIndicates the type of a TransportAddress (see below). Values will depend on the actual protocol; for IP they will be those
given in the 'Protocol Numbers' section of the Assigned Numbers
RFC [ASG-NBR], including icmp(1), tcp(6) and udp(17). (1..255) · Integer32
Transport address type of the source for this flow. The value of this attribute will depend on the peer address type.
flowDataSourceTransAddress
1.3.6.1.2.1.40.2.1.1.12
TransportAddressSpecifies the value of a transport address for various network protocols. Format as follows:
IP: 2-octet UDP or TCP port number
Other protocols: 2-octet port number SIZE (2) · OCTET STRING
Transport address for the source of this flow.
flowDataSourceTransMask
1.3.6.1.2.1.40.2.1.1.13
TransportAddressSpecifies the value of a transport address for various network protocols. Format as follows:
IP: 2-octet UDP or TCP port number
Other protocols: 2-octet port number SIZE (2) · OCTET STRING
1-bits in this mask indicate which bits must match when comparing the transport source address for this flow.
flowDataDestInterface
1.3.6.1.2.1.40.2.1.1.14
Integer32
Index of the interface associated with the dest address for this flow. This value is one of the values contained in the ifIndex field of the interfaces table.
flowDataDestAdjacentType
1.3.6.1.2.1.40.2.1.1.15
AdjacentType1 = ip3 = nsap7 = ethernet9 = tokenring11 = ipx12 = appletalk13 = decnet15 = fddiIndicates the type of an adjacent address. May be a medium type or (if metering is taking place inside a tunnel) a PeerType (see above).
The values used for IEEE 802 medium types are from the 'Network Management Parameters (ifType definitions)' section of the Assigned Numbers RFC [ASG-NBR]. Other medium types may also be used, provided only that they are identified by their assigned ifType numbers. · Integer32
Adjacent address type of the destination for this flow.
flowDataDestAdjacentAddress
1.3.6.1.2.1.40.2.1.1.16
AdjacentAddressSpecifies the value of an adjacent address. May be a Medium Access Control (MAC) address or (if metering is taking place inside a tunnel) a PeerAddress (see above).
MAC Address format depends on the actual medium, as follows:
Ethernet: ethernet(7)
6-octet 802.3 MAC address in 'canonical' order
Token Ring: tokenring(9)
6-octet 802.5 MAC address in 'canonical' order
FDDI: fddi(15)
FddiMACLongAddress, i.e. a 6-octet MAC address
in 'canonical' order (defined in [FDDI-MIB]) SIZE (3..20) · OCTET STRING
Address of the adjacent device on the path for the destination for this flow.
flowDataDestAdjacentMask
1.3.6.1.2.1.40.2.1.1.17
AdjacentAddressSpecifies the value of an adjacent address. May be a Medium Access Control (MAC) address or (if metering is taking place inside a tunnel) a PeerAddress (see above).
MAC Address format depends on the actual medium, as follows:
Ethernet: ethernet(7)
6-octet 802.3 MAC address in 'canonical' order
Token Ring: tokenring(9)
6-octet 802.5 MAC address in 'canonical' order
FDDI: fddi(15)
FddiMACLongAddress, i.e. a 6-octet MAC address
in 'canonical' order (defined in [FDDI-MIB]) SIZE (3..20) · OCTET STRING
1-bits in this mask indicate which bits must match when comparing the adjacent destination address for this flow.
flowDataDestPeerType
1.3.6.1.2.1.40.2.1.1.18
PeerType1 = ipv42 = ipv63 = nsap11 = ipx12 = appletalk13 = decnetIndicates the type of a PeerAddress (see below). The values used are from the 'Address Family Numbers' section of the Assigned Numbers RFC [ASG-NBR]. Peer types from other address families may also be used, provided only that they are identified by their assigned Address Family numbers. · Integer32
Peer address type of the destination for this flow.
flowDataDestPeerAddress
1.3.6.1.2.1.40.2.1.1.19
PeerAddressSpecifies the value of a peer address for various network protocols. Address format depends on the actual protocol, as indicated below:
IPv4: ipv4(1)
4-octet IpAddress (defined in the SNMPv2 SMI [RFC2578])
IPv6: ipv6(2)
16-octet IpAddress (defined in the
IPv6 Addressing RFC [V6-ADDR])
CLNS: nsap(3)
NsapAddress (defined in the SNMPv2 SMI [RFC2578])
Novell: ipx(11)
4-octet Network number, 6-octet Host number (MAC address)
AppleTalk: appletalk(12)
2-octet Network number (sixteen bits), 1-octet Host number (eight bits)
DECnet: decnet(13)
1-octet Area number (in low-order six bits), 2-octet Host number (in low-order ten bits) SIZE (3..20) · OCTET STRING
Address of the peer device for the destination of this flow.
flowDataDestPeerMask
1.3.6.1.2.1.40.2.1.1.20
PeerAddressSpecifies the value of a peer address for various network protocols. Address format depends on the actual protocol, as indicated below:
IPv4: ipv4(1)
4-octet IpAddress (defined in the SNMPv2 SMI [RFC2578])
IPv6: ipv6(2)
16-octet IpAddress (defined in the
IPv6 Addressing RFC [V6-ADDR])
CLNS: nsap(3)
NsapAddress (defined in the SNMPv2 SMI [RFC2578])
Novell: ipx(11)
4-octet Network number, 6-octet Host number (MAC address)
AppleTalk: appletalk(12)
2-octet Network number (sixteen bits), 1-octet Host number (eight bits)
DECnet: decnet(13)
1-octet Area number (in low-order six bits), 2-octet Host number (in low-order ten bits) SIZE (3..20) · OCTET STRING
1-bits in this mask indicate which bits must match when comparing the destination peer type for this flow.
flowDataDestTransType
1.3.6.1.2.1.40.2.1.1.21
TransportTypeIndicates the type of a TransportAddress (see below). Values will depend on the actual protocol; for IP they will be those
given in the 'Protocol Numbers' section of the Assigned Numbers
RFC [ASG-NBR], including icmp(1), tcp(6) and udp(17). (1..255) · Integer32
Transport address type of the destination for this flow. The value of this attribute will depend on the peer address type.
flowDataDestTransAddress
1.3.6.1.2.1.40.2.1.1.22
TransportAddressSpecifies the value of a transport address for various network protocols. Format as follows:
IP: 2-octet UDP or TCP port number
Other protocols: 2-octet port number SIZE (2) · OCTET STRING
Transport address for the destination of this flow.
flowDataDestTransMask
1.3.6.1.2.1.40.2.1.1.23
TransportAddressSpecifies the value of a transport address for various network protocols. Format as follows:
IP: 2-octet UDP or TCP port number
Other protocols: 2-octet port number SIZE (2) · OCTET STRING
1-bits in this mask indicate which bits must match when comparing the transport destination address for this flow.
flowDataPDUScale
1.3.6.1.2.1.40.2.1.1.24
Integer32 (0..255)
The scale factor applied to this particular flow. Indicates the number of bits the PDU counter values should be moved left to obtain the actual values.
flowDataOctetScale
1.3.6.1.2.1.40.2.1.1.25
Integer32 (0..255)
The scale factor applied to this particular flow. Indicates the number of bits the octet counter values should be moved left to obtain the actual values.
flowDataRuleSet
1.3.6.1.2.1.40.2.1.1.26
Integer32 (1..255)
The RuleSet number of the RuleSet which created this flow. Allows a manager to use GetNext or GetBulk requests to find flows belonging to a particular RuleSet.
flowDataToOctets
1.3.6.1.2.1.40.2.1.1.27
Counter64 (0..18446744073709551615)
The count of octets flowing from source to destination for this flow.
flowDataToPDUs
1.3.6.1.2.1.40.2.1.1.28
Counter64 (0..18446744073709551615)
The count of packets flowing from source to destination for this flow.
flowDataFromOctets
1.3.6.1.2.1.40.2.1.1.29
Counter64 (0..18446744073709551615)
The count of octets flowing from destination to source for this flow.
flowDataFromPDUs
1.3.6.1.2.1.40.2.1.1.30
Counter64 (0..18446744073709551615)
The count of packets flowing from destination to source for this flow.
flowDataFirstTime
1.3.6.1.2.1.40.2.1.1.31
TimeStampThe value of the sysUpTime object at which a specific occurrence happened. The specific occurrence must be
defined in the description of any object defined using this type.
If sysUpTime is reset to zero as a result of a re- initialization of the network management (sub)system, then the values of all TimeStamp objects are also reset. However, after approximately 497 days without a re- initialization, the sysUpTime object will reach 2^^32-1 and then increment around to zero; in this case, existing values of TimeStamp objects do not change. This can lead to ambiguities in the value of TimeStamp objects. · TimeTicks
The time at which this flow was first entered in the table
flowDataLastActiveTime
1.3.6.1.2.1.40.2.1.1.32
TimeStampThe value of the sysUpTime object at which a specific occurrence happened. The specific occurrence must be
defined in the description of any object defined using this type.
If sysUpTime is reset to zero as a result of a re- initialization of the network management (sub)system, then the values of all TimeStamp objects are also reset. However, after approximately 497 days without a re- initialization, the sysUpTime object will reach 2^^32-1 and then increment around to zero; in this case, existing values of TimeStamp objects do not change. This can lead to ambiguities in the value of TimeStamp objects. · TimeTicks
The last time this flow had activity, i.e. the time of arrival of the most recent PDU belonging to this flow.
flowDataSourceSubscriberID
1.3.6.1.2.1.40.2.1.1.33
OCTET STRING SIZE (4..20)
Subscriber ID associated with the source address for this flow. A Subscriber ID is an unspecified text string, used to ascribe traffic flows to individual users. At this time the means by which a Subscriber ID may be associated with a flow is unspecified.
flowDataDestSubscriberID
1.3.6.1.2.1.40.2.1.1.34
OCTET STRING SIZE (4..20)
Subscriber ID associated with the destination address for this flow. A Subscriber ID is an unspecified text string, used to ascribe traffic flows to individual users. At this time the means by which a Subscriber ID may be associated with a flow is unspecified.
flowDataSessionID
1.3.6.1.2.1.40.2.1.1.35
OCTET STRING SIZE (4..10)
Session ID for this flow. Such an ID might be allocated by a network access server to distinguish a series of sessions between the same pair of addresses, which would otherwise appear to be parts of the same accounting flow.
flowDataSourceClass
1.3.6.1.2.1.40.2.1.1.36
Integer32 (1..255)
Source class for this flow. Determined by the rules, set by a PushRule action when this flow was entered in the table.
flowDataDestClass
1.3.6.1.2.1.40.2.1.1.37
Integer32 (1..255)
Destination class for this flow. Determined by the rules, set by a PushRule action when this flow was entered in the table.
flowDataClass
1.3.6.1.2.1.40.2.1.1.38
Integer32 (1..255)
Class for this flow. Determined by the rules, set by a PushRule action when this flow was entered in the table.
flowDataSourceKind
1.3.6.1.2.1.40.2.1.1.39
Integer32 (1..255)
Source kind for this flow. Determined by the rules, set by a PushRule action when this flow was entered in the table.
flowDataDestKind
1.3.6.1.2.1.40.2.1.1.40
Integer32 (1..255)
Destination kind for this flow. Determined by the rules, set by a PushRule action when this flow was entered in the table.
flowDataKind
1.3.6.1.2.1.40.2.1.1.41
Integer32 (1..255)
Class for this flow. Determined by the rules, set by a PushRule action when this flow was entered in the table.
Index into the Flow Table. Allows a meter reader to retrieve a list containing the flow table indexes of flows which were last active at or after a given time, together with the values of a specified attribute for each such flow.
Specifies the attribute for which values are required from active flows.
flowColumnActivityTime
1.3.6.1.2.1.40.2.2.1.2
TimeFilterTo be used for the index to a table. Allows an application to download only those rows changed since a particular time.
Note that this is not a history mechanism. Only current values of underlying objects are returned; saved instance values associated with particular values of sysUpTime are not.
An entry is considered changed if the value of any object in the entry changes, if the row is created, or if any object in the entry is created or deleted. Note that deleted entries cannot be detected or downloaded.
A time-filtered conceptual table is created by inserting a single object of SYNTAX TimeFilter as the first INDEX component in a copy of an existing basic conceptual table (i.e., any SEQUENCE without a TimeFilter INDEX component). Thus, for each conceptual entry 'I' in the basic table, there exists N conceptual entries in the time-filtered version, indexed N.I, where 'N' is equal to the value of sysUpTime.
When an application retrieves conceptual instances from a time-filtered table, and an INDEX value is provided for the TimeFilter INDEX component 'N', the agent will only consider returning basic conceptual entries (e.g., 'fooColumn.N.I') if any column within the basic conceptual entry has changed since sysUpTime 'N'. If not, the basic conceptual entry will be ignored for the particular retrieval operation.
When sysUpTime is equal to zero, this table shall be empty.
One conceptual entry exists for each past value of sysUpTime, except that the whole table is purged should sysUpTime wrap.
As an entry in a time-filtered table is updated (i.e., one of the columns in the basic conceptual table is changed), new conceptual entries are also created in the time-filtered version (which still shares the now updated object values with all other instances). The number of unique time-filtered instances that are created is determined by the value of sysUpTime at which the basic entry was last updated. One unique instance will exist for each value of sysUpTime at the last update time for the row. However, a new TimeFilter index instance is created for each new sysUpTime value. The TimeFilter index values not associated with entry updates are called duplicate time-filtered instances.
After some deployment experience, it has been determined that a time-filtered table is more efficient if the agent stops a MIB walk operation by skipping over rows with a TimeFilter index value higher than the value in the received GetNext/GetBulk request. That is, instead of incrementing a TimeFilter index value, the agent will continue to the next object or table. As a consequence, GetNext or GetBulk operations will provide only one pass through a time-filtered table.
It is suggested that an agent implement a time-filtered table in this manner to improve performance and avoid a MIB walk getting stuck in time-filtered tables. It is, however, still acceptable for an agent to implement a time-filtered table in the traditional manner (i.e., every conceptual time-filtered instance is returned in GetNext and GetBulk PDU responses), and management applications must be able to deal with such traditional implementations.
See the appendix for further discussion of this textual convention.
The following example is provided to demonstrate TimeFilter behavior:
Consider the following basic conceptual table, basicFooTable. (Note that the basic version of a time-filtered table may not actually be defined.)
basicFooTable:
basicFooTable ... INDEX { fooIndex }
BasicFooEntry {
fooIndex Integer32,
fooCounts Counter32
}
For this example, the basicFooTable contains two static conceptual entries (fooIndex equals '1' and '2'), created at time zero. It also contains one dynamic conceptual entry (fooIndex equals '3'), which is created at time '3' and deleted at time '7'.
The time-filtered version of the basicFooTable could be defined as follows:
FooTable:
fooTable ... INDEX { fooTimeMark, fooIndex }
FooEntry {
fooTimeMark TimeFilter,
fooIndex Integer32,
fooCounts Counter32
}
Note that entries exist in the time-filtered conceptual table only if they actually exist in the underlying (basic) table.
For this example, the fooTable will have three underlying basic entries (fooIndex == 1, 2, and 3), with the following activity (for sysUpTime equal 0 to 9):
- fooEntry.N.1 is created at time '0' and most recently updated at time '6' to the value '5'. - fooEntry.N.2 is created at time '0' and most recently updated at time '8' to the value '9'. - fooEntry.N.3 is created at time '3', updated at time '5' to the value '17', and deleted at time '7'.
The following tables show the values that would be returned for MIB walk operations with various TimeFilter values, done at different times. An application issues a retrieval request at time 'T', with a TimeFilter value, 'N' (typically set to a lower value, such as the value of sysUpTime at the last polling cycle).
The following values would be returned in a MIB walk of fooCounts.N if T equals '0' and N equals '0':
fooCounts.N.I Value
==========================
fooCounts.0.1 0
fooCounts.0.2 0
Note that nothing is returned for fooCounts.0.3, since that entry does not exist at sysUpTime equals '0'.
The following values would be returned in a full (traditional) MIB walk of fooCounts.N if T equals '3' and N equals '0':
fooCounts.N.I Value
=======================
fooCounts.0.1 0
fooCounts.0.2 0
fooCounts.0.3 0
fooCounts.1.3 0
fooCounts.2.3 0
fooCounts.3.3 0
Note that there are no instances for T equals 1 or 2 for the first two values of N, as these entries did not change since they were created at time '0'.
Note that the current value for 'fooCounts.N.3' is returned here, even for values of N less than '3' (when the entry was created). The agent only considers the current existence of an entry in the TimeFilter algorithm, not the time when the entry was created.
Note that the instances 'fooCounts.0.3', 'fooCounts.1.3', and 'fooCounts.2.3' are duplicates and can be suppressed by the agent in a MIB walk.
The following values would be returned in a full (traditional) MIB walk of fooCounts.N if T equals '6' and N equals '3':
fooCounts.N.I Value
=======================
fooCounts.3.1 5
fooCounts.3.3 17
fooCounts.4.1 5
fooCounts.4.3 17
fooCounts.5.1 5
fooCounts.5.3 17
fooCounts.6.1 5
Note that no instances for entry 'fooCounts.N.2' are returned, since it has not changed since time '3'.
Note that all instances except 'fooCounts.5.3' and 'fooCounts.6.1' are duplicates and can be suppressed by the agent in a MIB walk.
The following values would be returned in a full (traditional) MIB walk of fooCounts.N if T equals '9' and N equals '6':
fooCounts.N.I Value
=======================
fooCounts.6.1 5
fooCounts.6.2 9
fooCounts.7.2 9
fooCounts.8.2 9
Note that no instances for entry 'fooCounts.N.3' are returned, since it was deleted at time '7'.
Note that instances 'fooCounts.6.2' and 'fooCounts.7.2' are duplicates and can be suppressed by the agent in a MIB walk. · TimeTicks
This variable is a copy of flowDataLastActiveTime in the flow data record identified by the flowColumnActivityIndex value of this flowColumnActivityTable entry.
flowColumnActivityIndex
1.3.6.1.2.1.40.2.2.1.3
Integer32 (1..2147483647)
Index of a flow table entry which was active at or after a specified flowColumnActivityTime.
flowColumnActivityData
1.3.6.1.2.1.40.2.2.1.4
OCTET STRING SIZE (3..1000)
Collection of attribute data for flows active after flowColumnActivityTime. Within the OCTET STRING is a sequence of { flow index, attribute value } pairs, one for each active flow. The end of the sequence is marked by a flow index value of 0, indicating that there are no more rows in this column.
The format of objects inside flowColumnFlowData is as follows. All numbers are unsigned. Numbers and strings appear with their high-order bytes leading. Numbers are fixed size, as specified by their SYNTAX in the flow table (above), i.e. one octet for flowAddressType and small constants, and four octets for Counter and TimeStamp. Strings are variable-length, with the length given in a single leading octet.
The following is an attempt at an ASN.1 definition of flowColumnActivityData:
flowColumnActivityData ::= SEQUENCE flowRowItemEntry flowRowItemEntry ::= SEQUENCE {
flowRowNumber Integer32 (1..65535),
-- 0 indicates the end of this column
flowDataValue flowDataType -- Choice depends on attribute
} flowDataType ::= CHOICE {
flowByteValue Integer32 (1..255),
flowShortValue Integer32 (1..65535),
flowLongValue Integer32,
flowStringValue OCTET STRING -- Length (n) in first byte,
-- n+1 bytes total length, trailing zeroes truncated }
Index into the Flow Table. Allows a meter reader to retrieve a sequence containing the values of a specified set of attributes for a flow which came from a specified RuleSet and which was last active at or after a given time.
flowPackageSelector
1.3.6.1.2.1.40.2.3.1.1
OCTET STRING
Specifies the attributes for which values are required from an active flow. These are encoded as a sequence of octets each containing a FlowAttribute number, preceded by an octet giving the length of the sequence (not including the length octet). For a flowPackageSelector to be valid, it must contain at least one attribute.
flowPackageRuleSet
1.3.6.1.2.1.40.2.3.1.2
Integer32 (1..255)
Specifies the index (in the flowRuleSetInfoTable) of the rule set which produced the required flow.
flowPackageTime
1.3.6.1.2.1.40.2.3.1.3
TimeFilterTo be used for the index to a table. Allows an application to download only those rows changed since a particular time.
Note that this is not a history mechanism. Only current values of underlying objects are returned; saved instance values associated with particular values of sysUpTime are not.
An entry is considered changed if the value of any object in the entry changes, if the row is created, or if any object in the entry is created or deleted. Note that deleted entries cannot be detected or downloaded.
A time-filtered conceptual table is created by inserting a single object of SYNTAX TimeFilter as the first INDEX component in a copy of an existing basic conceptual table (i.e., any SEQUENCE without a TimeFilter INDEX component). Thus, for each conceptual entry 'I' in the basic table, there exists N conceptual entries in the time-filtered version, indexed N.I, where 'N' is equal to the value of sysUpTime.
When an application retrieves conceptual instances from a time-filtered table, and an INDEX value is provided for the TimeFilter INDEX component 'N', the agent will only consider returning basic conceptual entries (e.g., 'fooColumn.N.I') if any column within the basic conceptual entry has changed since sysUpTime 'N'. If not, the basic conceptual entry will be ignored for the particular retrieval operation.
When sysUpTime is equal to zero, this table shall be empty.
One conceptual entry exists for each past value of sysUpTime, except that the whole table is purged should sysUpTime wrap.
As an entry in a time-filtered table is updated (i.e., one of the columns in the basic conceptual table is changed), new conceptual entries are also created in the time-filtered version (which still shares the now updated object values with all other instances). The number of unique time-filtered instances that are created is determined by the value of sysUpTime at which the basic entry was last updated. One unique instance will exist for each value of sysUpTime at the last update time for the row. However, a new TimeFilter index instance is created for each new sysUpTime value. The TimeFilter index values not associated with entry updates are called duplicate time-filtered instances.
After some deployment experience, it has been determined that a time-filtered table is more efficient if the agent stops a MIB walk operation by skipping over rows with a TimeFilter index value higher than the value in the received GetNext/GetBulk request. That is, instead of incrementing a TimeFilter index value, the agent will continue to the next object or table. As a consequence, GetNext or GetBulk operations will provide only one pass through a time-filtered table.
It is suggested that an agent implement a time-filtered table in this manner to improve performance and avoid a MIB walk getting stuck in time-filtered tables. It is, however, still acceptable for an agent to implement a time-filtered table in the traditional manner (i.e., every conceptual time-filtered instance is returned in GetNext and GetBulk PDU responses), and management applications must be able to deal with such traditional implementations.
See the appendix for further discussion of this textual convention.
The following example is provided to demonstrate TimeFilter behavior:
Consider the following basic conceptual table, basicFooTable. (Note that the basic version of a time-filtered table may not actually be defined.)
basicFooTable:
basicFooTable ... INDEX { fooIndex }
BasicFooEntry {
fooIndex Integer32,
fooCounts Counter32
}
For this example, the basicFooTable contains two static conceptual entries (fooIndex equals '1' and '2'), created at time zero. It also contains one dynamic conceptual entry (fooIndex equals '3'), which is created at time '3' and deleted at time '7'.
The time-filtered version of the basicFooTable could be defined as follows:
FooTable:
fooTable ... INDEX { fooTimeMark, fooIndex }
FooEntry {
fooTimeMark TimeFilter,
fooIndex Integer32,
fooCounts Counter32
}
Note that entries exist in the time-filtered conceptual table only if they actually exist in the underlying (basic) table.
For this example, the fooTable will have three underlying basic entries (fooIndex == 1, 2, and 3), with the following activity (for sysUpTime equal 0 to 9):
- fooEntry.N.1 is created at time '0' and most recently updated at time '6' to the value '5'. - fooEntry.N.2 is created at time '0' and most recently updated at time '8' to the value '9'. - fooEntry.N.3 is created at time '3', updated at time '5' to the value '17', and deleted at time '7'.
The following tables show the values that would be returned for MIB walk operations with various TimeFilter values, done at different times. An application issues a retrieval request at time 'T', with a TimeFilter value, 'N' (typically set to a lower value, such as the value of sysUpTime at the last polling cycle).
The following values would be returned in a MIB walk of fooCounts.N if T equals '0' and N equals '0':
fooCounts.N.I Value
==========================
fooCounts.0.1 0
fooCounts.0.2 0
Note that nothing is returned for fooCounts.0.3, since that entry does not exist at sysUpTime equals '0'.
The following values would be returned in a full (traditional) MIB walk of fooCounts.N if T equals '3' and N equals '0':
fooCounts.N.I Value
=======================
fooCounts.0.1 0
fooCounts.0.2 0
fooCounts.0.3 0
fooCounts.1.3 0
fooCounts.2.3 0
fooCounts.3.3 0
Note that there are no instances for T equals 1 or 2 for the first two values of N, as these entries did not change since they were created at time '0'.
Note that the current value for 'fooCounts.N.3' is returned here, even for values of N less than '3' (when the entry was created). The agent only considers the current existence of an entry in the TimeFilter algorithm, not the time when the entry was created.
Note that the instances 'fooCounts.0.3', 'fooCounts.1.3', and 'fooCounts.2.3' are duplicates and can be suppressed by the agent in a MIB walk.
The following values would be returned in a full (traditional) MIB walk of fooCounts.N if T equals '6' and N equals '3':
fooCounts.N.I Value
=======================
fooCounts.3.1 5
fooCounts.3.3 17
fooCounts.4.1 5
fooCounts.4.3 17
fooCounts.5.1 5
fooCounts.5.3 17
fooCounts.6.1 5
Note that no instances for entry 'fooCounts.N.2' are returned, since it has not changed since time '3'.
Note that all instances except 'fooCounts.5.3' and 'fooCounts.6.1' are duplicates and can be suppressed by the agent in a MIB walk.
The following values would be returned in a full (traditional) MIB walk of fooCounts.N if T equals '9' and N equals '6':
fooCounts.N.I Value
=======================
fooCounts.6.1 5
fooCounts.6.2 9
fooCounts.7.2 9
fooCounts.8.2 9
Note that no instances for entry 'fooCounts.N.3' are returned, since it was deleted at time '7'.
Note that instances 'fooCounts.6.2' and 'fooCounts.7.2' are duplicates and can be suppressed by the agent in a MIB walk. · TimeTicks
This variable is a copy of flowDataLastActiveTime in the flow data record identified by the flowPackageIndex value of this flowPackageTable entry.
flowPackageIndex
1.3.6.1.2.1.40.2.3.1.4
Integer32 (1..2147483647)
Index of a flow table entry which was active at or after a specified flowPackageTime.
flowPackageData
1.3.6.1.2.1.40.2.3.1.5
OCTET STRING
A collection of attribute values for a single flow, as specified by this row's indexes. The attribute values are contained within a BER-encoded sequence [ASN-1, ASN-BER], in the order they appear in their flowPackageSelector.
For example, to retrieve a flowPackage containing values for attributes 11, 18 and 29, for a flow in RuleSet 7, with flow index 3447, one would GET the package whose Object Identifier (OID) is flowPackageData . 3.11.18.29 . 7. 0 . 3447
To get a package for the next such flow which had been active since time 12345 one would GETNEXT the package whose Object Identifier (OID) is flowPackageData . 3.11.18.29 . 7. 12345 . 3447
flowRuleTable
1.3.6.1.2.1.40.3.1
Index: flowRuleSet · flowRuleIndex
Contains all the RuleSets which may be used by the meter.
flowRuleSet
1.3.6.1.2.1.40.3.1.1.1
Integer32 (1..2147483647)
Selects a RuleSet from the array of RuleSets.
flowRuleIndex
1.3.6.1.2.1.40.3.1.1.2
Integer32 (1..2147483647)
The index into the Rule table. N.B: These values will normally be consecutive, given the fall-through semantics of processing the table.
flowRuleSelector
1.3.6.1.2.1.40.3.1.1.3
RuleAttributeNumber0 = null4 = sourceInterface5 = sourceAdjacentType6 = sourceAdjacentAddress8 = sourcePeerType9 = sourcePeerAddress11 = sourceTransType12 = sourceTransAddress14 = destInterface15 = destAdjacentType16 = destAdjacentAddress18 = destPeerType19 = destPeerAddress21 = destTransType22 = destTransAddress33 = sourceSubscriberID34 = destSubscriberID35 = sessionID36 = sourceClass37 = destClass38 = flowClass39 = sourceKind40 = destKind41 = flowKind50 = matchingStoD51 = v152 = v253 = v354 = v455 = v5Uniquely identifies an attribute which may be tested in a rule. These include attributes whose values come directly from (or are computed from) the flow's packets, and the five 'meter' variables used to hold an Attribute Number. · Integer32
Indicates the attribute to be matched.
null(0) is a special case; null rules always succeed. matchingStoD(50) is set by the meter's Packet Matching Engine. Its value is true(1) if the PME is attempting to match the packet with its addresses in Source-to-Destination order (i.e. as they appear in the packet), and false(2) otherwise. Details of how packets are matched are given in the 'Traffic Flow Measurement: Architecture' document [RTFM-ARC]. v1(51), v2(52), v3(53), v4(54) and v5(55) select meter variables, each of which can hold the name (i.e. selector value) of an address attribute. When one of these is used as a selector, its value specifies the attribute to be tested. Variable values are set by an Assign action.
flowRuleMask
1.3.6.1.2.1.40.3.1.1.4
RuleAddressSpecifies the value of an address. Is a superset of MediumAddress, PeerAddress and TransportAddress. SIZE (2..20) · OCTET STRING
The initial mask used to compute the desired value. If the mask is zero the rule's test will always succeed.
flowRuleMatchedValue
1.3.6.1.2.1.40.3.1.1.5
RuleAddressSpecifies the value of an address. Is a superset of MediumAddress, PeerAddress and TransportAddress. SIZE (2..20) · OCTET STRING
The resulting value to be matched for equality. Specifically, if the attribute chosen by the flowRuleSelector logically ANDed with the mask specified by the flowRuleMask equals the value specified in the flowRuleMatchedValue, then continue processing the table entry based on the action specified by the flowRuleAction entry. Otherwise, proceed to the next entry in the rule table.
flowRuleAction
1.3.6.1.2.1.40.3.1.1.6
ActionNumber1 = ignore2 = noMatch3 = count4 = countPkt5 = return6 = gosub7 = gosubAct8 = assign9 = assignAct10 = goto11 = gotoAct12 = pushRuleTo13 = pushRuleToAct14 = pushPktTo15 = pushPktToAct16 = popTo17 = popToActUniquely identifies the action of a rule, i.e. the Pattern Matching Engine's opcode number. Details of the opcodes are given in the 'Traffic Flow Measurement: Architecture' document [RTFM-ARC]. · Integer32
The action to be taken if this rule's test succeeds, or if the meter's 'test' flag is off. Actions are opcodes for the meter's Packet Matching Engine; details are given in the 'Traffic Flow Measurement: Architecture' document [RTFM-ARC].
flowRuleParameter
1.3.6.1.2.1.40.3.1.1.7
Integer32 (1..65535)
A parameter value providing extra information for this rule's action. Most of the actions use the parameter value to specify which rule to execute after this rule's test has failed; details are given in the 'Traffic Flow Measurement: Architecture' document [RTFM-ARC].