The Interfaces Group MIB using SMIv2
obsoleted by
- rfc-2863 — The Interfaces Group MIB
obsoletes
- rfc-1573 — Evolution of the Interfaces Group of MIB-II
Extracted elements (31)
Connection-oriented sub-layers (Frame Relay, X.25) are strongly recommended NOT to create one ifTable row per virtual circuit, to avoid row proliferation with redundant information. An exception is warranted only in unusual cases (e.g., PPP over an X.25 VC), and requires compelling rationale in the media-specific MIB.
ifHighSpeed reports speed in Mbps units rather than as a 64-bit gauge because the current SMI does not allow 64-bit gauges, and 1 Mbps granularity provides approximately 0.02% error at 4 Gbps — considered acceptable. Splitting into high/low 32-bit objects was rejected as overly complex.
ifSpecific is deprecated because no single definition could be made both explicit and universally applicable: implementations varied between pointing to the MIB module OID, a table/entry OID, or an instance OID. The only unambiguous definition reduces ifSpecific to redundancy with ifType.
ifTable deliberately omits RowStatus and does not support interface creation/deletion. Interfaces that can be dynamically created are managed via their media-specific MIB's RowStatus object; the corresponding ifTable row appears or disappears as a side effect, with the agent choosing the ifIndex value.
ifType syntax was changed from an in-module enumeration to the IANAifType textual convention defined in a separate document. This allows new interface type values to be added by IANA without reissuing this MIB, which historically took several years per revision.
The non-unicast packet counters (ifInNUcastPkts, ifOutNUcastPkts) are deprecated in favor of separate multicast and broadcast counters introduced by RFC 1229. The output non-unicast counters in RFC 1229 also counted errors, creating definitional inconsistency that the new per-type counters correct.
The solution adopted assigns each interface sub-layer its own conceptual row in ifTable, with a new ifStackTable to identify superior/subordinate relationships via integer pointers. This supports upward and downward multiplexing (e.g., MLP, PPP over X.25), avoids requiring enumerated ifType values for every sub-layer combination, and allows IANAifType to map each sub-layer to its media-specific MIB independently.
Trap generation was defined to fire on transitions into/out of the down state (excluding notPresent) rather than into/out of the up state. The latter was rejected because demand interfaces oscillating between up and dormant would produce asymmetric trap storms (many linkUps, no linkDowns), and a single-interface node transitioning to dormant would incorrectly generate a linkDown.
The MIB retains the same OBJECT IDENTIFIER values as MIB-II for the original ifTable objects and preserves BER ('on the wire') encodings unchanged, so existing agents conforming to MIB-II and the ifExtensions MIB (RFC 1229) generally require no rewrite.
The restriction that ifIndex values must be less than ifNumber has been removed. Some management applications break as a result, but this is considered preferable to requiring changes to all agent implementations and the many existing media-specific MIBs. ifIndex values should still be assigned as small contiguous integers starting from 1 for user-friendliness.
A media-specific MIB MUST completely and unambiguously specify the layering model used, including each sub-layer, the ifStackTable portrayal of sub-layer relationships, whether virtual circuits are assigned ifTable entries, and the applicability of ifRcvAddressTable. It MUST NOT change semantics, DESCRIPTION, or applicability where the interfaces MIB is already specific.
A previously unused ifIndex value MUST be assigned to a dynamically added interface when an agent has no knowledge of whether the interface is the 'same' or 'different' from a previously incarnated interface, to prevent management stations from incorrectly calculating counter differences.
An agent MUST NOT instantiate an object with an incorrect value when the true value is unknown; it MUST respond with the appropriate error or exception (e.g., noSuchInstance for SNMPv2). Reporting a zero counter when occurrences cannot be counted would misinform management applications.
For interfaces operating at 20 Mbps or less, 32-bit byte and packet counters MUST be used. For interfaces between 20 Mbps and 650 Mbps, 32-bit packet counters MUST be used and 64-bit octet counters MUST be used. For interfaces at 650 Mbps or faster, 64-bit packet AND 64-bit octet counters MUST be used.
Management applications MUST be able to cope with responses revealing that some columnar objects within a conceptual ifTable row are missing or not available, as agents may omit objects whose values are not yet known.
When 64-bit counters are in use, the corresponding 32-bit counters MUST still be available and MUST report the low 32 bits of the associated 64-bit count (e.g., ifInOctets reports the least significant 32 bits of ifHCInOctets). This requirement enhances interoperability with existing implementations.
ifCounterDiscontinuityTime records the sysUpTime value of the last counter discontinuity on an interface. Management applications must discard any calculated counter difference when this value differs between successive polls, in addition to checking sysUpTime for agent re-initialization.
ifHighSpeed reports the interface's current bandwidth in units of 1,000,000 bits/second (±500,000 bps precision), as a replacement for ifSpeed when ifSpeed would saturate at its maximum value of 4,294,967,295 bps (approximately 4.3 Gbps).
ifLinkUpDownTrapEnable (enabled/disabled) controls per-sub-layer generation of linkUp/linkDown traps. The default behavior is to generate traps only for the lowest sub-layer of each interface stack to limit trap proliferation from cascading state changes.
ifName contains the device's local console name for the interface (e.g., 'wan1'), which may be shared across multiple sub-layer ifTable entries representing components of the same interface. ifAlias is a non-volatile manager-assigned name that persists across reboots even if ifIndex is reassigned.
ifRcvAddressTable (indexed by ifIndex and ifRcvAddressAddress) records media-level addresses at which this interface receives packets, including unicast, multicast, and broadcast addresses. ifRcvAddressStatus (RowStatus) and ifRcvAddressType (other/volatile/nonVolatile) control lifecycle.
ifStackTable (indexed by ifStackHigherLayer and ifStackLowerLayer, both InterfaceIndex) defines the relationships between interface sub-layers. A row with ifStackHigherLayer=0 identifies the top of a stack; ifStackLowerLayer=0 identifies the bottom. ifStackStatus (RowStatus) controls row creation/deletion.
ifTable (ifEntry indexed by ifIndex) is the core MIB-II interfaces table; each conceptual row represents one interface sub-layer and contains ifIndex, ifDescr, ifType, ifMtu, ifSpeed, ifPhysAddress, ifAdminStatus, ifOperStatus, ifLastChange, packet/octet counters, and deprecated objects (ifInNUcastPkts, ifOutNUcastPkts, ifOutQLen, ifSpecific).
ifXTable (augmenting ifEntry) contains extension objects added by this memo: ifName, ifInMulticastPkts, ifInBroadcastPkts, ifOutMulticastPkts, ifOutBroadcastPkts, ifHCInOctets, ifHCInUcastPkts, ifHCInMulticastPkts, ifHCInBroadcastPkts, ifHCOutOctets, ifHCOutUcastPkts, ifHCOutMulticastPkts, ifHCOutBroadcastPkts, ifLinkUpDownTrapEnable, ifHighSpeed, ifPromiscuousMode, ifConnectorPresent, ifAlias, and ifCounterDiscontinuityTime.
InterfaceIndex textual convention (Integer32, 1..2147483647) encapsulates the semantics of ifIndex and is intended to be imported by other MIB modules that need to reference interface sub-layers. InterfaceIndexOrZero extends it to permit zero for object-specific uses such as 'no interface' or 'all interfaces'.
LinkUp trap is generated just after ifOperStatus leaves the down state; linkDown trap is generated just before ifOperStatus enters the down state. Transitions to/from the notPresent state never generate linkUp/linkDown traps. Agents SHOULD rate-limit trap generation during interface 'flapping'.
Three high-capacity counter object groups are defined: ifHCFixedLengthGroup (64-bit octet counters for character/fixed-length interfaces), ifHCPacketGroup (64-bit octet counters for packet interfaces), and ifVHCPacketGroup (64-bit octet and packet counters for highest-speed packet interfaces).
The interfaces group MIB includes writable objects (notably ifAdminStatus and ifAlias) whose unauthorized modification could disrupt network connectivity or mislead management applications. Implementations should apply appropriate SNMP access controls to prevent unauthorized writes to these objects.
For a non-lowest interface in an interface stack: ifOperStatus is 'up' if any lower interface is up; may be 'up' or 'dormant' if one or more lower interfaces are dormant and all others are non-up; and is 'lowerLayerDown' only when all lower interfaces are down, notPresent, lowerLayerDown, or testing.
ifOperStatus has seven states: up(1) — passing packets; down(2) — not passing packets, possibly fault; testing(3) — no operational packets; unknown(4) — state indeterminate; dormant(5) — operable but awaiting external event; notPresent(6) — hardware component missing; lowerLayerDown(7) — down because a lower-layer interface is down. Transitions are driven by ifAdminStatus changes, hardware presence, and lower-layer state.
When ifAdminStatus transitions to up, ifOperStatus MUST transition to: up if ready to send/receive; lowerLayerDown if blocked by a lower-layer interface; dormant if operable but awaiting external events; down if a fault is detected; unknown if state cannot be determined; testing if tests are in progress; or remain notPresent if hardware components are missing.