Draft Interfaces Group Evolution June 1993 Evolution of the Interfaces Group of MIB-II 28 June 1993 Keith McCloghrie Hughes LAN Systems kzm@hls.com Frank J. Kastenholz FTP Software kasten@ftp.com Status of this Memo This document is an Internet Draft. Internet Drafts are working documents of the Internet Engineering Task Force (IETF), its Areas, and its Working Groups. Note that other groups may also distribute working documents as Internet Drafts. Internet Drafts are valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet Drafts as reference material or to cite them other than as a "work in progress". Expires December 1993 [Page 1] Draft Interfaces Group Evolution June 1993 1. Introduction MIB-II [4] is the core set of managed objects defined for use by network management of the Internet suite of protocols. MIB-II was defined using the SNMPv1 Network Management Framework. This memo discusses the 'interfaces' group of MIB-II, especially the experience gained from the definition of numerous media-specific MIB modules for use in conjunction with the 'interfaces' group for managing various sub-layers beneath the internetwork-layer. It proposes clarifications to, and extensions of, the architectural issues within the current model used for the 'interfaces' group. This memo also includes a MIB module. As well as including new MIB definitions to support the architectural extensions, this MIB module also re-specifies the 'interfaces' group of MIB-II in a manner which is both compliant to the SNMPv2 SMI and semantically-identical to the existing SNMPv1-based definitions. Expires December 1993 [Page 2] Draft Interfaces Group Evolution June 1993 2. The SNMPv2 Network Management Framework The SNMPv2 Network Management Framework consists of four major components. They are: o RFC 1442 which defines the SMI, the mechanisms used for describing and naming objects for the purpose of management. o RFC 1213 defines MIB-II, the core set of managed objects for the Internet suite of protocols. o RFC 1445 which defines the administrative and other architectural aspects of the framework. o RFC 1448 which defines the protocol used for network access to managed objects. The Framework permits new objects to be defined for the purpose of experimentation and evaluation. 2.1. Object Definitions Managed objects are accessed via a virtual information store, termed the Management Information Base or MIB. Objects in the MIB are defined using the subset of Abstract Syntax Notation One (ASN.1) defined in the SMI. In particular, each object object type is named by an OBJECT IDENTIFIER, an administratively assigned name. The object type together with an object instance serves to uniquely identify a specific instantiation of the object. For human convenience, we often use a textual string, termed the descriptor, to refer to the object type. Expires December 1993 [Page 3] Draft Interfaces Group Evolution June 1993 3. Experience with the Interfaces Group One of the strengths of internetwork-layer protocols such as IP [6] is that they are designed to run over any network interface. In achieving this, IP considers any and all protocols it runs over as a single "network interface" layer. A similar view is taken by other internetwork-layer protocols. This concept is represented in MIB-II by the 'interfaces' group which defines a generic set of managed objects such that any network interface can be managed in an interface- independent manner through these managed objects. The 'interfaces' group provides the means for additional managed objects specific to particular types of network interface (e.g., a specific medium such as Ethernet) to be defined as extensions to the 'interfaces' group for media-specific management. Since the standardization of MIB-II, many such media-specific MIB modules have been defined. Experience in defining these media-specific MIB modules has shown that the model defined by MIB-II is too simplistic and/or static for some types of media-specific management. As a result, some of these media-specific MIB modules have assumed an evolution/loosening of the model. This memo is a proposal to document/standardize the evolution of the model and to fill in the gaps caused by that evolution. A previous effort to extend the interfaces group resulted in the publication of RFC 1229 [7]. As part of defining the evolution of the interfaces group, this memo applies that evolution to, and thereby incorporates the RFC 1229 extensions. 3.1. Areas of Clarification/Revision There are seven areas for which experience indicates that clarification, revision, or extension of the model would be helpful. The next sections discuss these. 3.1.1. Interface Numbering MIB-II defines an object, ifNumber, whose value represents: "The number of network interfaces (regardless of their Expires December 1993 [Page 4] Draft Interfaces Group Evolution June 1993 current state) present on this system." Each interface is identified by a unique value of the ifIndex object, and the description of ifIndex constrains its value as follows: "Its value ranges between 1 and the value of ifNumber. The value for each interface must remain constant at least from one re-initialization of the entity's network management system to the next re-initialization." This constancy requirement on the value of ifIndex for a particular interface is vital for efficient management. However, an increasing number of devices allow for the dynamic addition/removal of network interfaces. One example of this is a dynamic ability to configure the use of SLIP/PPP over a character-oriented port. For such dynamic additions/removals, the combination of the constancy requirement and the restriction that the value of ifIndex is less than ifNumber is problematic. 3.1.2. Interface Sub-Layers Experience in defining media-specific management information has shown the need to distinguish between the multiple sub- layers beneath the internetwork-layer. In addition, there is a need to manage these sub-layers in devices (e.g., MAC-layer bridges) which are unaware of which, if any, internetwork protocols run over these sub-layers. As such, a model of having a single conceptual row in the interfaces table (MIB- II's ifTable) represent a whole interface underneath the internetwork-layer, and having a single associated media- specific MIB module (referenced by the ifSpecific object) is too simplistic. A further problem arises with the value of the ifType object which has enumerated values for each type of interface. Consider, for example, an interface with PPP running over an HDLC link which uses a RS232-like connector. Each of these sub-layers has its own media-specific MIB module. If all of this is represented by a single conceptual row in the ifTable, then an enumerated value for ifType is needed for that specific combination, and that row's ifSpecific variable can "point" to only one of the three media-specific MIB modules. Expires December 1993 [Page 5] Draft Interfaces Group Evolution June 1993 Furthermore, even if there was a convention for deciding which MIB module is referenced by ifSpecific then there is still a lack of a method to describe the relationship of all the sub- layers of the MIB stack. An associated problem is that of upward and downward multiplexing of the sub-layers. An example of upward multiplexing is MLP (Multi-Link) which provides load-sharing over several serial lines by appearing as a single point-to- point link to the sub-layer(s) above. An example of downward multiplexing would be several instances of PPP, each running over a Frame Relay virtual circuit, all of which run over the same ISDN B channel. The current MIB structure does not allow for these sorts of relationships to be described. 3.1.3. Virtual Circuits Several of the sub-layers for which media-specific MIB modules have been defined are connection oriented (e.g., Frame Relay, X.25). Experience has shown that each effort to define such a MIB module revisits the question of whether separate conceptual rows in the ifTable are needed for each virtual circuit. Most, if not all, of these efforts to date have decided to have all virtual circuits reference a single conceptual row in the ifTable. 3.1.4. Bit and Character Oriented Interfaces RS-232 is an example of a character-oriented sub-layer over which (e.g., through use of PPP) IP datagrams can be sent. Due to the packet-based nature of many of the objects in the ifTable, experience has shown that it is not appropriate to have a character-oriented sub-layer represented by a (whole) conceptual row in the ifTable. Experience has also shown that it is sometimes desirable to have some management information for bit-oriented interfaces, which are similarly difficult to represent by a (whole) conceptual row in the ifTable. For example, to manage the channels of a DS1 circuit, where only some of the channels are carrying packet-based data. Expires December 1993 [Page 6] Draft Interfaces Group Evolution June 1993 3.1.5. Counter Size As the speed of network media increase, the minimum time in which a 32 bit counter will wrap decreases. For example, on an Ethernet, a stream of back-to-back, full-size packets will cause ifInOctets to wrap in just over 57 minutes, for a T3 line, the minimum wrap-time is just over 12 minutes, and for FDDI, it will wrap in 5.7 minutes. For a 1-gigabit medium, the counter might wrap in as little as 34 seconds. Requiring that interfaces be polled frequently enough not to miss a counter wrap will be increasingly problematic. 3.1.6. Interface Speed Network speeds are increasing. IfSpeed is limited to reporting a maximum speed of (2**31)-1 bits/second, or approximately 2.2Gbs. SONET defines an OC-48 interface, which is defined at operating at 48 times 51 Mbs, which is a speed in excess of 2.4gbits. Thus, ifSpeed will be of diminishing utility over the next several years. 3.1.7. Multicast/Broadcast Counters The counters in the ifTable for packets addressed to a multicast or the broadcast address, are combined as counters of non-unicast packets. In contrast, the ifExtensions MIB [7] defines one set of counters for multicast, and a separate set for broadcast packets. With the separate counters, the original combined counters become redundant. 3.2. Clarifications/Revisions The following clarifications and/or revisions are proposed. 3.2.1. Interface Numbering One solution to the interface numbering problem would be to redefine ifNumber to be the largest value of ifIndex, but the utility of such an object is questionable, and such a re- definition would require ifNumber to be deprecated. Thus, an improvement would be to deprecate ifNumber and not replace it. Expires December 1993 [Page 7] Draft Interfaces Group Evolution June 1993 However, the deprecation of ifNumber would require a change to that portion of ifIndex's definition which refers to ifNumber. So, since the definition of ifIndex must be changed anyway in order to solve the problem, changes to ifNumber do not benefit the solution. The solution adopted in this memo is just to delete the requirement that the value of ifIndex must be less than the value of ifNumber, and to retain ifNumber with its current definition. It could be argued that this is a change in the semantics of ifIndex; however, all existing implementations conform to this new definition, and in the interests of not requiring changes in existing implementations and in the many existing media-specific MIBs, it is proposed that this change does not require ifIndex to be deprecated. This solution also results in the possibility of "holes" in the ifTable, i.e., the ifIndex values of conceptual rows in the ifTable are not necessarily contiguous, but SNMP's GetNext (and SNMPv2's GetBulk) operation easily deals with such holes. The value of ifNumber still represents the number of conceptual rows, which increases/decreases as new interfaces are dynamically added/removed. The vital constancy requirement is met by requiring that after an interface is dynamically removed, its ifIndex value is not re-used (by another dynamically added interface) until after the following re-initialization of the network management system. This avoids the need for a priori assignment of ifIndex values for all possible interfaces which might be added dynamically. Because of the restriction of the value of ifIndex to be less than ifNumber, interfaces have been numbered with small integer values. This has led to the ability by humans to use the ifIndex values as (somewhat) user-friendly names for network interfaces (e.g., "interface number 3"). With the relaxation of the restriction on the value of ifIndex, there is now the possibility that ifIndex values could be assigned as very large numbers (e.g., memory addresses). Such numbers would be much less user-friendly. Therefore, this memo recommends that ifIndex values still be assigned as small integer values starting at 1, even though the values in use at any one time are not necessarily contiguous. (Note that this makes it easy for agents which dynamically add new interfaces, to remember which values have been assigned.) Expires December 1993 [Page 8] Draft Interfaces Group Evolution June 1993 This proposed change introduces a new problem of its own. Previously, there usually was a simple, direct, mapping of interfaces to the physical ports on systems. This mapping would be based on the ifIndex value. However, by removing the previous restrictions on the values allowed for ifIndex, along with the interface sub-layer concept (see the following section), mapping from interfaces to physical ports becomes increasingly problematic. To address this issue, a new object, ifName, is added to the MIB. This object contains the host's name for the interface of which the relevant ifEntry is a component. For example, if a router has an interface named wan1, which is composed of PPP running over an RS-232 port, the ifName objects for the PPP and RS-232 ifEntrys will contain the string "wan1". 3.2.2. Interface Sub-Layers One possible but not recommended solution to the problem of representing multiple sub-layers would be to retain the concept of one conceptual row for all the sub-layers of an interface and have each media-specific MIB module identify its "superior" and "subordinate" sub-layers through OBJECT IDENTIFIER "pointers". The drawbacks of this scheme are: 1) that the superior/subordinate pointers are contained in the media-specific MIB modules, and thus, a manager could not learn the structure of an interface, without inspecting multiple pointers in different MIB modules; this is overly complex and only possible if the manager has knowledge of all the relevant media-specific MIB modules; 2) current MIB modules would all need to be retrofitted with these new "pointers"; 3) this scheme does not adequately address the problem of upward and downward multiplexing; and 4) enumerated values of ifType are needed for each combination of sub- layers. Another possible but not recommended scheme would be to retain the concept of one conceptual row for all the sub-layers of an interface and have a new separate MIB table to identify the "superior" and "subordinate" sub-layers and to contain OBJECT IDENTIFIER "pointers" to media-specific MIBs. Effectively, one conceptual row in the ifTable would represent each combination of sub-layers between the internetwork-layer and the wire. While this scheme has fewer drawbacks, it would Expires December 1993 [Page 9] Draft Interfaces Group Evolution June 1993 deprecate the use of ifSpecific and it still does not support downward multiplexing, such as PPP over MLP: since MLP makes two (or more) serial lines appear to the layers above as a single physical interface, PPP over MLP should appear to the internetwork-layer as a single interface; this scheme, however, would result in two (or more) conceptual rows in the ifTable, both of which the internetwork-layer would run over. This scheme also requires enumerated values of ifType for each combination of sub-layers. The solution adopted in this memo is to have an individual conceptual row in the ifTable to represent each sub-layer, and have a new separate MIB table (the ifStackTable, see section 4 of this memo) to identify the "superior" and "subordinate" sub-layers through INTEGER "pointers" to the appropriate conceptual rows in the ifTable. This solution supports both upward and downward multiplexing, allows the ifSpecific pointer in each conceptual row of the ifTable to point to the media-specific MIB module for that sub-layer, such that the new table need only be referenced to obtain information about layering, and it only requires enumerated values of ifType for each sub-layer, not for combinations of them. However, it does require that the descriptions of some objects in the ifTable (specifically, ifType, ifPhysAddress, ifInUcastPkts, and ifOutUcastPkts) be generalized so as to apply to any sub- layer (rather than only to a sub-layer immediately beneath the network layer, as at present), plus some (specifically, ifSpeed) which need to have appropriate values identified for use when a generalized definition does not apply to a particular sub-layer. In addition, this adopted solution makes no requirement that a device, in which a sub-layer is instrumented by a conceptual row of the ifTable, be aware of whether an internetwork protocol runs on top of (i.e., at some layer above) that sub- layer. The designer of a medium-specific MIB must decide whether to divide the interface into sub-layers or not, and if so, how to make the divisions. The following guidance is offered to assist the medium-specific MIB designer in these decisions. In general, the number of entries in the ifTable should be kept to the minimum required for network management. In particular, a group of related interfaces should be treated as Expires December 1993 [Page 10] Draft Interfaces Group Evolution June 1993 a single interface with one entry in the ifTable providing that: (1) None of the group of interfaces performs multiplexing for any other interface in the agent, (2) There is a meaningful and useful way for all of the ifTable's information (e.g., the counters, and the status variables), and all of the ifTable's capabilities (e.g., write access to ifAdminStatus), to apply to the group of interfaces as a whole. Under these circumstances, there should be one ifEntry for such a group of interfaces, and any internal structure which needs to be represented to network management should be captured in a MIB module specific to the particular type of interface. Note that application of bullet 2 above to the ifTable's ifSpecific and ifType objects requires that there is a meaningful medium- specific MIB and a meaningful ifType value which apply to the group of interfaces as a whole. For example, it is not appropriate to treat an HDLC sub-layer and an RS-232 sub-layer as a single ifTable entry when the medium-specific MIBs and the ifType values for HDLC and RS-232 are separate (rather than combined). These guidelines are just that, guidelines. The designer of a medium-specific MIB is free to lay out the MIB in whatever manner is desired. However, regardless of a medium-specific MIB's design, the designer of a medium-specific MIB must completely state the sub-layering model used for the MIB, and provide the assumptions, reasoning, and rationale used to develop that model. 3.2.3. Virtual Circuits This memo recommends that, in general, connection-oriented sub-layers do not have a conceptual row in the ifTable for each virtual circuit. This avoids the proliferation of conceptual rows, especially those which have considerable redundant information. (Note, as a comparison, that Expires December 1993 [Page 11] Draft Interfaces Group Evolution June 1993 connection-less sub-layers do not have conceptual rows for each remote address.) There may, however, be circumstances under which it is appropriate for a virtual circuit of a connection-oriented sub-layer to have its own conceptual row in the ifTable; an example of this might be PPP over a Frame Relay virtual circuit. The MIB in section 4 of this memo supports such circumstances. 3.2.4. Bit and Character Oriented Interfaces About half the objects in the ifTable are applicable to every type of interface: packet-oriented, character-oriented, and bit-oriented. Of the other half, two are applicable to both character-oriented and packet-oriented interfaces, and the rest are applicable only to packet-oriented interfaces. Thus, while it is desirable for consistency to be able to represent any/all types of interfaces in the ifTable, it is not possible to implement the full ifTable for bit- and character-oriented sub-layers. One possible but not recommended solution to this problem would be to split the ifTable into two (or more) new MIB tables, one of which would contain objects that are relevant only to packet-oriented interfaces (e.g. PPP), and another that may be used by all interfaces. This is highly undesirable since it would require changes in every agent implementing the ifTable (i.e., just about every existing SNMP agent). The solution adopted in this memo builds upon the fact that compliance statements in SNMPv2 (in contrast to SNMPv1) refer to object groups, where object groups are explicitly defined by listing the objects they contain. Thus, in SNMPv2, multiple compliance statements can be specified, one for all interfaces and additional ones for specific types of interfaces. The separate compliance statements can be based on separate object groups, where the object group for all interfaces can contain only those objects from the ifTable which are appropriate for every type of interfaces. Using this solution, every sub-layer can have its own conceptual row in the ifTable. Thus, the following section contains definitions of the objects of the existing 'interfaces' group of MIB-II, in a Expires December 1993 [Page 12] Draft Interfaces Group Evolution June 1993 manner which is both SNMPv2-compliant and semantically- equivalent to the existing MIB-II definitions. With equivalent semantics, and with the BER ("on the wire") encodings unchanged, these definitions retain the same OBJECT IDENTIFIER values as assigned by MIB-II. Thus, no rewrite of existing agents is required. Three new object groups are defined: the ifGeneralGroup containing those objects applicable to all types of network interfaces; the ifCharacterGroup containing those objects applicable to character-oriented (but not packet-oriented) network interfaces; and the ifPacketGroup containing those objects applicable only to packet-oriented network interfaces. 3.2.5. Counter Size Two approaches to addressing the shrinking minimum counter- wrap time problem were evaluated. Counters could be scaled, for example, ifInOctets could be changed to count received octets in, e.g., 1024 byte blocks. Alternatively, the size of the counter could be increased. Scaling the counters was rejected. While it provides acceptable performance at high count rates, at low rates it suffers. If there is little traffic on an interface, there might be a significant interval before enough counts occur to cause a counter to be incremented. Traffic would then appear to be very bursty, leading to incorrect conclusions of the network's performance. The alternative, which this memo adopts, is to provide expanded, 64 bit, counters. These counters are provided in two new groups, the "high capacity" packet counters group (ifHCPacketGroup) and byte counters group (ifHCCharacterGroup). These new groups provide new, 64 bit, counters for use as appropriate. The old, 32-bit, counters have not been deprecated. The 64- bit counters are to be used only the 32-bit counters do not provide enough capacity; that is, the 32 bit counters could wrap too fast. For interfaces that operate at 20,000,000 (20 million) bits per second or less, 32-bit counters should be used. For Expires December 1993 [Page 13] Draft Interfaces Group Evolution June 1993 interfaces that operate faster than 20,000,000 bits/second, 64-bit counters should be used. This speed was chosen as a reasonable compromise based on the following issues: (1) 64 bit counters are a new feature, introduced in SNMPv2. It is reasonable to expect that support for them will be spotty for the immediate future. Thus, we wish to limit them to as few systems as possible. This, in effect, means that 64-bit counters should be limited to higher speed interfaces. Ethernet (10,000,000 bps) and Token Ring (16,000,000 bps) are fairly wide-spread so it seems reasonable to not require 64-bit counters for these interfaces. (2) The minimum interval required for polling interfaces should be as long as possible. When running at full speed (i.e. back-to-back, maximum sized packets), for the following interfaces, the 32-bit ifxxxOctets counters will wrap in the stated times: - Ethernet will wrap in approximately 57 minutes, - Token Ring at 16 megabits will wrap in approximately 36 minutes, - A US T3 line, at 45 megabits, will wrap in approximately 12 minutes, - FDDI will wrap in approximately 5.7 minutes, and - A giga-bit link will wrap in about 34 seconds. (3) The required polling frequency should be somewhat higher than the counter wrap time. This is necessary in order to account for any possible packet transmission delays, as well as packet losses (including the attendant timeout and retransmission). We point out that, as network load goes up, the counters will count faster (thus reducing the time until the counter wraps) and transmission delays will increase. Based on these concerns, we have chosen 20,000,000 bits/second as a raw-link speed, below which 32-bit counters are Expires December 1993 [Page 14] Draft Interfaces Group Evolution June 1993 sufficient and above which, 64-bit counters should be used. This link speed will cause a 32-bit counter to wrap in just under 28 minutes. This provides an 8 minute margin of error when polling 16-megabit token ring. As an aside, a 1-terabit (1,000 gigabits) link will cause a 64 bit counter to wrap in just under 5 years. Conversely, an 81,000,000 terabit/second link is required to cause a 64-bit counter to wrap in 30 minutes. We believe that, while technology rapidly marches forward, this link speed will not be achieved for at least several years, by which time we can consider introducing 128 bit counters. 3.2.6. Interface Speed In order to deal with increasing interface speeds, we have added an ifHighSpeed object. This object reports the speed of the interface in 1,000,000 (1 million) bits/second units. Thus, the true speed of the interface will be the value reported by this object, plus or minus 500,000 bits/second. Other alternatives considered were: (1) Making the interface speed a 64-bit gauge. This was rejected since the current SMI and set of textual conventions do not include such an object. Therefore, such a textual convention would have to be defined, with the concomitant additional development efforts required. Furthermore, this path would require that an additional object be added to the MIB, replacing the current ifSpeed object. We would not be able to economize on MIB object counts. This path would also lead to confusion on the part of manager stations; some agents would have just ifSpeed, some would have just if64BitSpeed, and others would have both. Finally, this would require additional complexity in agents in that the instances in which 64-bit operations would be required would increase. Expires December 1993 [Page 15] Draft Interfaces Group Evolution June 1993 (2) We also considered making "high-32 bit" and "low-32-bit" objects which, when combined, would be a 64-bit value. This simply seemed overly complex for what we are trying to do. Furthermore, a full 64-bits of precision does not seem necessary. IfHighSpeed will be the only report of interface speed for interfaces that are faster than 2,147,483,647 bits per second. At this speed, the granularity of ifHighSpeed will be 1,000,000 bits per second, thus the error will be 1/2147, or about 0.05%. This seems reasonable. (3) Adding a "scale" object, which would define the units which ifSpeed's value is. This would require two additional objects; One for the scaling object and one to replace the current ifSpeed. This later object is required since the semantics of ifSpeed would be significantly altered, and manager stations which do not understand the new semantics would be confused. 3.2.7. Multicast/Broadcast Counters To avoid the redundancy of counting all non-unicast packets as well as having individual multicast and broadcast packet counters, we deprecate the use of the non-unicast counters, which can be derived from the values of the others. For the broadcast and multicast counters defined in RFC 1229, their definitions varied slightly from the packet counters in the ifTable, in that they did not count discarded packets. To align the definitions better, the old counters are deprecatedand replaced by new definitions. 64-bit versions of these counters are also needed as explained above. 4. Use of the Interface Test Table This section is a description of the use of the Interface Test Table mostly copied from section 4.2 of RFC 1229 [7]. The only change is the addition of ifExtnsTestContext. When the Interface Test Table is accessed via SNMPv2, Expires December 1993 [Page 16] Draft Interfaces Group Evolution June 1993 ifExtnsTestContext records the context used, and ifExtnsTestCommunity is set to the zero-length string; when the Interface Test Table is accessed via SNMPv1, ifExtnsTestCommunity records the community used, and ifExtnsTestContext is set to { 0 0 }. The Interface Test Table defines objects which allow a network manager to instruct an agent to test an interface for various faults. A few common types of tests are defined in this memo but most will be defined elsewhere dependent on the particular type of interface. After invoking a test, the object ifExtnsTestResult can be read to determine the outcome. If an agent can not perform the test, ifExtnsTestResult is set to so indicate. The object ifExtnsTestCode can be used to provide further test-specific or interface-specific (or even enterprise-specific) information concerning the outcome of the test. Only one test can be in progress on each interface at any one time. If one test is in progress when another test is invoked, the second test is rejected. Some agents may reject a test when a prior test is active on another interface. When a test is invoked, the identity of the originator of the request and the request-id are saved by the agent in the objects ifExtnsTestRequestId and either ifExtnsTestContext or ifExtnsTestCommunity. These values remain set until the next test is invoked. In the (rare) event that the invocation of tests by two network managers were to overlap, then there is a possibility that the first test's results might be overwritten by the second test's results prior to the first results being read. This unlikely circumstance can be detected by a network manager retrieving ifExtnsTestRequestId and either ifExtnsTestCommunity or ifExtnsTestContext, at the same time as the test results are retrieved, and ensuring that the results are for the desired request. In general, a Management station must not retransmit a request to invoke a test for which it does not receive a response; instead, it properly inspects an agent's MIB to determine if the invocation was successful. Only if the invocation was unsuccessful, is the invocation request retransmitted. Some tests may require the interface to be taken off-line in order to execute them, or may even require the agent to reboot after completion of the test. In these circumstances, communication with the management station invoking the test Expires December 1993 [Page 17] Draft Interfaces Group Evolution June 1993 may be lost until after completion of the test. The agent should make every effort to transmit a response to the request which invoked the test prior to losing communication. When the agent is restored to normal service, the results of the test are properly made available in the appropriate objects. Note that this requires that the ifIndex value assigned to an interface must be unchanged even if the test causes a reboot. An agent must reject any test for which it cannot, perhaps due to resource constraints, make available at least the minimum amount of information after that test completes. Expires December 1993 [Page 18] Draft Interfaces Group Evolution June 1993 5. Definitions IF-MIB DEFINITIONS ::= BEGIN IMPORTS MODULE-IDENTITY, OBJECT-TYPE, Counter32, Gauge32, Integer32, TimeTicks, experimental FROM SNMPv2-SMI DisplayString, PhysAddress, RowStatus FROM SNMPv2-TC MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF mib-2, interfaces FROM RFC-1213; -- from RFC 1239 ifExtensions OBJECT IDENTIFIER ::= { mib-2 12 } ifMIB MODULE-IDENTITY LAST-UPDATED "9306282355Z" ORGANIZATION "IETF Interfaces MIB Working Group" CONTACT-INFO " Keith McCloghrie Hughes LAN Systems 1225 Charleston Road Mountain View, Ca. 94043 Tel: 415-966-7934 Fax: 415-966-7980 E-mail: kzm@hls.com." DESCRIPTION "The MIB module to describe generic objects for network interface sub-layers. This MIB is an updated version of MIB-II's ifTable, and incorporates the extensions defined in RFC 1229." ::= { experimental xx } ifMIBObjects OBJECT IDENTIFIER ::= { ifMIB 1 } Expires December 1993 [Page 19] Draft Interfaces Group Evolution June 1993 -- the Interfaces group ifNumber OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of network interfaces (regardless of their current state) present on this system." ::= { interfaces 1 } -- the Interfaces table -- The Interfaces table contains information on the entity's -- interfaces. Each sub-layer below the internetwork-layer -- of a network interface is considered to be an interface. ifTable OBJECT-TYPE SYNTAX SEQUENCE OF IfEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "A list of interface entries. The number of entries is given by the value of ifNumber." ::= { interfaces 2 } ifEntry OBJECT-TYPE SYNTAX IfEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "An entry containing management information applicable to a particular interface." INDEX { ifIndex } ::= { ifTable 1 } IfEntry ::= SEQUENCE { ifIndex Integer32, ifDescr DisplayString, ifType INTEGER, ifMtu Integer32, ifSpeed Gauge32, ifPhysAddress PhysAddress, Expires December 1993 [Page 20] Draft Interfaces Group Evolution June 1993 ifAdminStatus INTEGER, ifOperStatus INTEGER, ifLastChange TimeTicks, ifInOctets Counter32, ifInUcastPkts Counter32, ifInNUcastPkts Counter32, ifInDiscards Counter32, ifInErrors Counter32, ifInUnknownProtos Counter32, ifOutOctets Counter32, ifOutUcastPkts Counter32, ifOutNUcastPkts Counter32, ifOutDiscards Counter32, ifOutErrors Counter32, ifOutQLen Gauge32, ifSpecific OBJECT IDENTIFIER, ifName DisplayString, ifInMulticastPkts Counter32, ifInBroadcastPkts Counter32, ifOutMulticastPkts Counter32, ifOutBroadcastPkts Counter32, ifHCInOctets Counter64, ifHCInUcastPkts Counter64, ifHCInMulticastPkts Counter64, ifHCInBroadcastPkts Counter64, ifHCInDiscards Counter64, ifHCInErrors Counter64, ifHCInUnknownProtos Counter64, ifHCOutOctets Counter64, ifHCOutUcastPkts Counter64, ifHCOutMulticastPkts Counter64, ifHCOutBroadcastPkts Counter64, ifHCOutDiscards Counter64, ifHCOutErrors Counter64, ifLinkUpDownTrapEnable INTEGER, ifHighSpeed Gauge32 } ifIndex OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "A unique value, greater than zero, for each interface. It is recommended that values are Expires December 1993 [Page 21] Draft Interfaces Group Evolution June 1993 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." ::= { ifEntry 1 } ifDescr OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "A textual string containing information about the interface. This string should include the name of the manufacturer, the product name and the version of the interface hardware/software." ::= { ifEntry 2 } ifType OBJECT-TYPE SYNTAX INTEGER { other(1), -- none of the following regular1822(2), hdh1822(3), ddn-x25(4), rfc877-x25(5), ethernet-csmacd(6), iso88023-csmacd(7), iso88024-tokenBus(8), iso88025-tokenRing(9), iso88026-man(10), starLan(11), proteon-10Mbit(12), proteon-80Mbit(13), hyperchannel(14), fddi(15), lapb(16), sdlc(17), ds1(18), -- T-1 e1(19), -- european equiv. of T-1 basicISDN(20), primaryISDN(21), -- proprietary serial propPointToPointSerial(22), ppp(23), softwareLoopback(24), eon(25), -- CLNP over IP (RFC 1070) Expires December 1993 [Page 22] Draft Interfaces Group Evolution June 1993 ethernet-3Mbit(26), nsip(27), -- XNS over IP slip(28), -- generic SLIP ultra(29), -- ULTRA technologies ds3(30), -- T-3 sip(31), -- SMDS frame-relay(32) } MAX-ACCESS read-only STATUS current DESCRIPTION "The type of interface." ::= { ifEntry 3 } ifMtu OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS read-only STATUS current DESCRIPTION "The size of the largest datagram which can be sent/received on the interface, specified in octets. For interfaces that are used for transmitting network datagrams, this is the size of the largest network datagram that can be sent on the interface." ::= { ifEntry 4 } ifSpeed OBJECT-TYPE SYNTAX Gauge32 MAX-ACCESS read-only STATUS current DESCRIPTION "An estimate of the interface's current bandwidth in bits per second. For interfaces which do not vary in bandwidth or for those where no accurate estimation can be made, this object should contain the nominal bandwidth. If the bandwidth of the interface is greater than the maximum value reportable by this object then this object should report its maximum value (2,147,483,647) and ifHighSpeed must be used to report the interace's speed. For a sub-layer which has no concept of bandwidth, this object should be zero." ::= { ifEntry 5 } Expires December 1993 [Page 23] Draft Interfaces Group Evolution June 1993 ifPhysAddress OBJECT-TYPE SYNTAX PhysAddress MAX-ACCESS read-only STATUS current DESCRIPTION "The interface's address at its protocol sub- layer. The interface's medium-specific MIB must define the bit and byte ordering and format of the value contained by this object. For interfaces which do not have such an address (e.g., a serial line), this object should contain an octet string of zero length." ::= { ifEntry 6 } ifAdminStatus OBJECT-TYPE SYNTAX INTEGER { up(1), -- ready to pass packets down(2), testing(3) -- in some test mode } MAX-ACCESS read-write STATUS current DESCRIPTION "The desired state of the interface. The testing(3) state indicates that no operational packets can be passed." ::= { ifEntry 7 } ifOperStatus OBJECT-TYPE SYNTAX INTEGER { up(1), -- ready to pass packets down(2), testing(3) -- in some test mode } MAX-ACCESS read-only STATUS current DESCRIPTION "The current operational state of the interface. The testing(3) state indicates that no operational packets can be passed." ::= { ifEntry 8 } ifLastChange OBJECT-TYPE SYNTAX TimeTicks MAX-ACCESS read-only Expires December 1993 [Page 24] Draft Interfaces Group Evolution June 1993 STATUS current DESCRIPTION "The value of sysUpTime at the time the interface entered its current operational state. If the current state was entered prior to the last re- initialization of the local network management subsystem, then this object contains a zero value." ::= { ifEntry 9 } ifInOctets OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of octets received on the interface, including framing characters." ::= { ifEntry 10 } ifInUcastPkts OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of packets, delivered by this sub- layer to a higher (sub-)layer, which were not addressed to a multicast or broadcast address at this sub-layer." ::= { ifEntry 11 } ifInNUcastPkts OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The number of packets, delivered by this sub- layer to a higher (sub-)layer, which were addressed to a multicast or broadcast address at this sub-layer. This object is deprecated in favour of ifInMulticastPkts and ifInBroadcastPkts." ::= { ifEntry 12 } ifInDiscards OBJECT-TYPE Expires December 1993 [Page 25] Draft Interfaces Group Evolution June 1993 SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of inbound packets which were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher-layer protocol. One possible reason for discarding such a packet could be to free up buffer space." ::= { ifEntry 13 } ifInErrors OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of inbound packets that contained errors preventing them from being deliverable to a higher-layer protocol." ::= { ifEntry 14 } ifInUnknownProtos OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of packets received via the interface which were discarded because of an unknown or unsupported protocol." ::= { ifEntry 15 } ifOutOctets OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of octets transmitted out of the interface, including framing characters." ::= { ifEntry 16 } ifOutUcastPkts OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current Expires December 1993 [Page 26] Draft Interfaces Group Evolution June 1993 DESCRIPTION "The total number of packets that higher-level protocols requested be transmitted, and which were not addressed to a multicast or broadcast address at this sub-layer, including those that were discarded or not sent." ::= { ifEntry 17 } ifOutNUcastPkts OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS deprecated DESCRIPTION "The total number of packets that higher-level protocols requested be transmitted, and which were addressed to a multicast or broadcast address at this sub-layer, including those that were discarded or not sent. This object is deprecated in favour of ifOutMulticastPkts and ifOutBroadcastPkts." ::= { ifEntry 18 } ifOutDiscards OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of outbound packets which were chosen to be discarded even though no errors had been detected to prevent their being transmitted. One possible reason for discarding such a packet could be to free up buffer space." ::= { ifEntry 19 } ifOutErrors OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of outbound packets that could not be transmitted because of errors." ::= { ifEntry 20 } ifOutQLen OBJECT-TYPE Expires December 1993 [Page 27] Draft Interfaces Group Evolution June 1993 SYNTAX Gauge32 MAX-ACCESS read-only STATUS current DESCRIPTION "The length of the output packet queue (in packets)." ::= { ifEntry 21 } ifSpecific OBJECT-TYPE SYNTAX OBJECT IDENTIFIER MAX-ACCESS read-only STATUS current DESCRIPTION "A reference to MIB definitions specific to the particular media being used to realize the interface. For example, if the interface is realized by an ethernet, then the value of this object refers to a document defining objects specific to ethernet. If this information is not present, its value should be set to the OBJECT IDENTIFIER { 0 0 }, which is a syntactically valid object identifier, and any conformant implementation of ASN.1 and BER must be able to generate and recognize this value." ::= { ifEntry 22 } ifName OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The textual name of the interface which this ifEntry comprises. The value of this object should be the name of the interface as assigned by the host and should be suitable for use in commands entered at the host's `console'. This might be a text name, such as `le0' or a simple port number, such as `1', depending on the interface naming syntax of the host. If there are several ifEntrys that comprise the interface, then each will have the same value of ifName. If there is no local name, or this object is otherwise not applicable, then this object contains a 0-length string. " ::= { ifEntry 23 } Expires December 1993 [Page 28] Draft Interfaces Group Evolution June 1993 ifInMulticastPkts OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of packets, delivered by this sub- layer to a higher (sub-)layer, which were addressed to a multicast address at this sub- layer. For a MAC layer protocol, this includes both Group and Functional addresses." ::= { ifEntry 24 } ifInBroadcastPkts OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of packets, delivered by this sub- layer to a higher (sub-)layer, which were addressed to a broadcast address at this sub- layer." ::= { ifEntry 25 } ifOutMulticastPkts OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of packets that higher-level protocols requested be transmitted, and which were addressed to a multicast address at this sub- layer, including those that were discarded or not sent. For a MAC layer protocol, this includes both Group and Functional addresses." ::= { ifEntry 26 } ifOutBroadcastPkts OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of packets that higher-level protocols requested be transmitted, and which were addressed to a broadcast address at this sub- layer, including those that were discarded or not Expires December 1993 [Page 29] Draft Interfaces Group Evolution June 1993 sent." ::= { ifEntry 27 } -- -- High Capacity Counter objects. These objects are all -- 64 bit versions of the "basic" ifEntry counters. These -- objects all have the same basic semantics as their 32-bit -- counterparts, however, their syntax has been extended -- to 64 bits. -- ifHCInOctets OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of octets received on the interface, including framing characters. This object is a 64-bit version of ifInOctets." ::= { ifEntry 28 } ifHCInUcastPkts OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of packets, delivered by this sub- layer to a higher (sub-)layer, which were not addressed to a multicast or broadcast address at this sub-layer. This object is a 64-bit version of ifInUcastPkts." ::= { ifEntry 29 } ifHCInMulticastPkts OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of packets, delivered by this sub- layer to a higher (sub-)layer, which were addressed to a multicast address at this sub- layer. For a MAC layer protocol, this includes both Group and Functional addresses. This object is a 64-bit version of ifInMulticastPkts." ::= { ifEntry 30 } Expires December 1993 [Page 30] Draft Interfaces Group Evolution June 1993 ifHCInBroadcastPkts OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of packets, delivered by this sub- layer to a higher (sub-)layer, which were addressed to a broadcast address at this sub- layer. This object is a 64-bit version of ifInBroadcastPkts." ::= { ifEntry 31 } ifHCInDiscards OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of inbound packets which were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher (sub-)layer. One possible reason for discarding such a packet could be to free up buffer space. This object is a 64-bit version of ifInDiscards." ::= { ifEntry 32 } ifHCInErrors OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of inbound packets that contained errors preventing them from being deliverable to a higher (sub-)layer. This object is a 64-bit version of ifInErrors." ::= { ifEntry 33 } ifHCInUnknownProtos OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of packets received via the interface which were discarded because of an unknown or unsupported protocol. This object is a 64-bit Expires December 1993 [Page 31] Draft Interfaces Group Evolution June 1993 version of ifInUnknownProtos." ::= { ifEntry 34 } ifHCOutOctets OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of octets transmitted out of the interface, including framing characters. This object is a 64-bit version of ifOutOctets." ::= { ifEntry 35 } ifHCOutUcastPkts OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of packets that higher-level protocols requested be transmitted, and which were not addressed to a multicast or broadcast address at this sub-layer, including those that were discarded or not sent. This object is a 64-bit version of ifOutUcastPkts." ::= { ifEntry 36 } ifHCOutMulticastPkts OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The total number of packets that higher-level protocols requested be transmitted, and which were addressed to a multicast address at this sub- layer, including those that were discarded or not sent. For a MAC layer protocol, this includes both Group and Functional addresses. This object is a 64-bit version of ifOutMulticastPkts." ::= { ifEntry 37 } ifHCOutBroadcastPkts OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION Expires December 1993 [Page 32] Draft Interfaces Group Evolution June 1993 "The total number of packets that higher-level protocols requested be transmitted, and which were addressed to a broadcast address at this sub- layer, including those that were discarded or not sent. This object is a 64-bit version of ifOutBroadcastPkts." ::= { ifEntry 38 } ifHCOutDiscards OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of outbound packets which were chosen to be discarded even though no errors had been detected to prevent their being transmitted. One possible reason for discarding such a packet could be to free up buffer space. This object is a 64- bit version of ifOutDiscards." ::= { ifEntry 39 } ifHCOutErrors OBJECT-TYPE SYNTAX Counter64 MAX-ACCESS read-only STATUS current DESCRIPTION "The number of outbound packets that could not be transmitted because of errors. This object is a 64-bit version of ifOutErrors." ::= { ifEntry 40 } ifLinkUpDownTrapEnable OBJECT-TYPE SYNTAX INTEGER { enabled(1), disabled(2) } MAX-ACCESS read-write STATUS current DESCRIPTION "Indicates whether linkUp/linkDown traps should be generated for this interface. By default, this object should have the value enabled(1) for interfaces which do not operate on 'top' of any other interface (as defined in the ifStackTable), and disabled(2) otherwise." ::= { ifEntry 41 } Expires December 1993 [Page 33] Draft Interfaces Group Evolution June 1993 ifHighSpeed OBJECT-TYPE SYNTAX Gauge32 MAX-ACCESS read-only STATUS current DESCRIPTION "An estimate of the interface's current bandwidth in units of 1,000,000 bits per second. If this object reports a value of `n' then the speed of the interface is somewhere in the range of `n- 500,000' to `n+499,999'. For interfaces which do not vary in bandwidth or for those where no accurate estimation can be made, this object should contain the nominal bandwidth. For a sub- layer which has no concept of bandwidth, this object should be zero." ::= { ifEntry 42 } Expires December 1993 [Page 34] Draft Interfaces Group Evolution June 1993 -- -- The Interface Stack Group -- -- Implementation of this group is mandatory for all systems -- ifStackTable OBJECT-TYPE SYNTAX SEQUENCE OF IfStackEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "The table containing information on the relationships between the multiple sub-layers of network interfaces. In particular, it contains information on which sub-layers run 'on top of' which other sub-layers. Each sub-layer corresponds to a conceptual row in the ifTable." ::= { ifMIBObjects 1 } ifStackEntry OBJECT-TYPE SYNTAX IfStackEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Information on a particular relationship between two sub-layers, specifying that one sub-layer runs on 'top' of the other sub-layer. Each sub-layer corresponds to a conceptual row in the ifTable." INDEX { ifStackHigherLayer, ifStackLowerLayer } ::= { ifStackTable 1 } IfStackEntry ::= SEQUENCE { ifStackHigherLayer Integer32, ifStackLowerLayer Integer32, ifStackStatus RowStatus } ifStackHigherLayer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current Expires December 1993 [Page 35] Draft Interfaces Group Evolution June 1993 DESCRIPTION "The value of ifIndex corresponding to the higher sub-layer of the relationship, i.e., the sub-layer which runs on 'top' of the sub-layer identified by the corresponding instance of ifStackLowerLayer. If there is no higher sub-layer (below the internetwork layer), then this object has the value 0." ::= { ifStackEntry 1 } ifStackLowerLayer OBJECT-TYPE SYNTAX Integer32 MAX-ACCESS not-accessible STATUS current DESCRIPTION "The value of ifIndex corresponding to the lower sub-layer of the relationship, i.e., the sub-layer which runs 'below' the sub-layer identified by the corresponding instance of ifStackHigherLayer. If there is no lower sub-layer, then this object has the value 0." ::= { ifStackEntry 2 } ifStackStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-write STATUS current DESCRIPTION "The status of the relationship between two sub- layers. Changing the value of this object from 'active' to 'notInService' or 'destroy' will likely have consequences up and down the interface stack. Thus, write access to this object is likely to be inappropriate for some types of interfaces, and many implementations will choose not to support write-access for any type of interface." ::= { ifStackEntry 3 } Expires December 1993 [Page 36] Draft Interfaces Group Evolution June 1993 -- Interface Extension Table -- -- This group of objects is mandatory for all types of -- subnetwork interface. ifExtnsTable OBJECT-TYPE SYNTAX SEQUENCE OF IfExtnsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "A list of interfaces extension entries. The number of entries is given by the value of ifNumber." ::= { ifExtensions 1 } ifExtnsEntry OBJECT-TYPE SYNTAX IfExtnsEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "An extension to the ifTable containing additional objects at the subnetwork layer and below for a particular interface." AUGMENTS { ifEntry } ::= { ifExtnsTable 1 } IfExtnsEntry ::= SEQUENCE { ifExtnsChipSet OBJECT IDENTIFIER, ifExtnsRevWare DisplayString, ifExtnsPromiscuous INTEGER } ifExtnsChipSet OBJECT-TYPE SYNTAX OBJECT IDENTIFIER MAX-ACCESS read-only STATUS current DESCRIPTION "This object identifies the hardware chip set being used in the interface. The assignment of OBJECT IDENTIFIERs to various types of hardware chip sets is defined elsewhere. If the hardware chip set is unknown, the object identifier unknownChipSet OBJECT IDENTIFIER ::= { 0 0 } Expires December 1993 [Page 37] Draft Interfaces Group Evolution June 1993 is returned. Note that unknownChipSet is a syntactically valid object identifier, and any conformant implementation of ASN.1 and the BER must be able to generate and recognize this value." ::= { ifExtnsEntry 2 } ifExtnsRevWare OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "An arbitrary octet string that describes the firmware version of this interface. It is intended that this should be human readable. It must only contain ASCII printable characters. Typically this will be the firmware version of the main interface software." ::= { ifExtnsEntry 3 } ifExtnsPromiscuous OBJECT-TYPE SYNTAX INTEGER { true(1), false(2) } MAX-ACCESS read-write STATUS current DESCRIPTION "This object has a value of false(2) if this interface only accepts packets/frames that are addressed to this station. This object has a value of true(1) when the station accepts all packets/frames transmitted on the media. The value true(1) is only legal on certain types of media. If legal, setting this object to a value of true(1) may require the interface to be reset before becoming effective." ::= { ifExtnsEntry 8 } Expires December 1993 [Page 38] Draft Interfaces Group Evolution June 1993 -- -- The Interface Test Table -- -- This group of objects is optional. ifExtnsTestTable OBJECT-TYPE SYNTAX SEQUENCE OF IfExtnsTestEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains one entry per interface." ::= { ifExtensions 2 } ifExtnsTestEntry OBJECT-TYPE SYNTAX IfExtnsTestEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "An entry containing objects for invoking tests on an interface." AUGMENTS { ifEntry } ::= { ifExtnsTestTable 1 } IfExtnsTestEntry ::= SEQUENCE { ifExtnsTestCommunity OCTET STRING, ifExtnsTestRequestId INTEGER, ifExtnsTestType OBJECT IDENTIFIER, ifExtnsTestResult INTEGER, ifExtnsTestCode OBJECT IDENTIFIER, ifExtnsTestContext OBJECT IDENTIFIER } ifExtnsTestCommunity OBJECT-TYPE SYNTAX OCTET STRING MAX-ACCESS read-only STATUS current DESCRIPTION "This object contains the name of the SNMPv1 authentication community (see RFC 1157) which was used to authenticate the SNMPv1 message which invoked the current or most recent test on this interface. If the authentication community is unknown or undefined, or the current or more recent test was invoked with an SNMPv2 message, Expires December 1993 [Page 39] Draft Interfaces Group Evolution June 1993 then this value contains the zero-length string." ::= { ifExtnsTestEntry 2 } ifExtnsTestRequestId OBJECT-TYPE SYNTAX INTEGER MAX-ACCESS read-only STATUS current DESCRIPTION "This object contains the value of the request-id field in the SNMP PDU (see RFCs 1157 and 1448) which invoked the current or most recent test on this interface. If the request-id is unknown or undefined, this value contains the value zero." ::= { ifExtnsTestEntry 3 } ifExtnsTestType OBJECT-TYPE SYNTAX OBJECT IDENTIFIER MAX-ACCESS read-write STATUS current DESCRIPTION "A control variable used to start and stop operator-initiated interface tests. Most OBJECT IDENTIFIER values assigned to tests are defined elsewhere, in associ- ation with specific types of interface. However, this document assigns a value for a full-duplex loopback test, and defines the special meanings of the subject identifier: noTest OBJECT IDENTIFIER ::= { 0 0 } When the value noTest is written to this object, no action is taken unless a test is in progress, in which case the test is aborted. Writing any other value to this object is only valid when no test is currently in progress, in which case the indicated test is initiated. Note that noTest is a syntactically valid object identifier, and any conformant implementation of ASN.1 and BER must be able to generate and recognize this value. When read, this object always returns the most recent value that ifExtnsTestType was set to. If it has not been set since the last initialization of the network management subsystem on the agent, a value of noTest is returned." Expires December 1993 [Page 40] Draft Interfaces Group Evolution June 1993 ::= { ifExtnsTestEntry 4 } wellKnownTests OBJECT IDENTIFIER ::= { ifExtensions 4 } -- full-duplex loopback test testFullDuplexLoopBack OBJECT IDENTIFIER ::= { wellKnownTests 1 } ifExtnsTestResult OBJECT-TYPE SYNTAX INTEGER { none(1), -- no test yet requested success(2), inProgress(3), notSupported(4), unAbleToRun(5), -- due to state of system aborted(6), failed(7) } MAX-ACCESS read-only STATUS current DESCRIPTION "This object contains the result of the most recently requested test, or the value none(1) if no tests have been requested since the last reset. Note that this facility provides no provision for saving the results of one test when starting another, as could be required if used by multiple managers concurrently." ::= { ifExtnsTestEntry 5 } ifExtnsTestCode OBJECT-TYPE SYNTAX OBJECT IDENTIFIER MAX-ACCESS read-only STATUS current DESCRIPTION "This object contains a code which contains more specific information on the test result, for example an error-code after a failed test. Error codes and other values this object may take are specific to the type of interface and/or test. However, one subject identifier: testCodeUnknown OBJECT IDENTIFIER ::= { 0 0 } for use if no additional result code is available. Note that testCodeUnknown is a syntactically valid Expires December 1993 [Page 41] Draft Interfaces Group Evolution June 1993 object identifier, and any conformant implementation of ASN.1 and the BER must be able to generate and recognize this value." ::= { ifExtnsTestEntry 6 } ifExtnsTestContext OBJECT-TYPE SYNTAX OBJECT IDENTIFIER MAX-ACCESS read-only STATUS current DESCRIPTION "This object contains the identity of the SNMPv2 context referenced by the SNMPv2 Message which invoked the current or most recent test on this interface. If the current or most recent test was invoked by an SNMPv1 message, then this object contains the value { 0 0 }." ::= { ifExtnsTestEntry 7 } -- Generic Receive Address Table -- -- This group of objects is mandatory for all types of -- interfaces which can receive packets/frames addressed to -- more than one address. -- -- This conceptual table has been deprecated since the -- semantics of adding and deleting conceptual rows have -- been changed by the replacement of ifExtnsRcvAddrStatus -- with ifRcvAddrStatus which uses the RowStatus Textual -- convention. ifExtnsRcvAddrTable OBJECT-TYPE SYNTAX SEQUENCE OF IfExtnsRcvAddrEntry MAX-ACCESS not-accessible STATUS deprecated DESCRIPTION "This table contains an entry for each address (broadcast, multicast, or uni-cast) for which the system will receive packets/frames on a particular interface, except as follows: - for an interface operating in promiscuous mode, entries are only required for those addresses for which the system would receive frames were it not operating in promiscuous mode. Expires December 1993 [Page 42] Draft Interfaces Group Evolution June 1993 - for 802.5 functional addresses, only one entry is required, for the address which has the functional address bit ANDed with the bit mask of all functional addresses for which the interface will accept frames." ::= { ifExtensions 3 } ifExtnsRcvAddrEntry OBJECT-TYPE SYNTAX IfExtnsRcvAddrEntry MAX-ACCESS not-accessible STATUS deprecated DESCRIPTION "A list of objects identifying an address for which the system will accept packets/frames on the particular interface identified by the index value ifIndex." INDEX { ifIndex, ifExtnsRcvAddrAddress } ::= { ifExtnsRcvAddrTable 1 } IfExtnsRcvAddrEntry ::= SEQUENCE { ifExtnsRcvAddrAddress PhysAddress, ifExtnsRcvAddrStatus INTEGER } ifExtnsRcvAddrAddress OBJECT-TYPE SYNTAX PhysAddress MAX-ACCESS not-accessible STATUS deprecated DESCRIPTION "An address for which the system will accept packets/frames on this entry's interface." ::= { ifExtnsRcvAddrEntry 2 } ifExtnsRcvAddrStatus OBJECT-TYPE SYNTAX INTEGER { other(1), invalid(2), volatile(3), nonVolatile(4) } MAX-ACCESS read-write STATUS deprecated DESCRIPTION "This object has the value nonVolatile(4) for Expires December 1993 [Page 43] Draft Interfaces Group Evolution June 1993 those entries in the table which are valid and will not be deleted by the next restart of the managed system. Entries having the value volatile(3) are valid and exist, but have not been saved, so that will not exist after the next restart of the managed system. Entries having the value other(1) are valid and exist but are not classified as to whether they will continue to exist after the next restart. Entries having the value invalid(2) are invalid and do not represent an address for which an interface accepts frames. Setting an object instance to one of the values other(1), volatile(3), or nonVolatile(4) causes the corresponding entry to exist or continue to exist, and to take on the respective status as regards the next restart of the managed system. Setting an object instance to the value invalid(2) causes the corresponding entry to become invalid or cease to exist. Note that it may be inappropriate for some addresses to be invalidated. Accordingly, an agent may return an error response if a management station attempts to change this object to an inappropriate value. It is an implementation-specific matter as to whether the agent removes an invalidated entry from the table. Accordingly, management stations must be prepared to receive tabular information from agents that corresponds to entries not currently in use. Proper interpretation of such entries requires examination of the relevant ifExtnsRcvAddrStatus object instance." DEFVAL { volatile } ::= { ifExtnsRcvAddrEntry 3 } -- Generic Receive Address Table -- -- This group of objects is mandatory for all types of -- interfaces which can receive packets/frames addressed to -- more than one address. -- Expires December 1993 [Page 44] Draft Interfaces Group Evolution June 1993 -- This table replaces the ifExtnsRcvAddr table. The main -- difference is that this table makes use of the RowStatus -- textual convention, while ifExtnsRcvAddr does not. ifRcvAddrTable OBJECT-TYPE SYNTAX SEQUENCE OF IfRcvAddrEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "This table contains an entry for each address (broadcast, multicast, or uni-cast) for which the system will receive packets/frames on a particular interface, except as follows: - for an interface operating in promiscuous mode, entries are only required for those addresses for which the system would receive frames were it not operating in promiscuous mode. - for 802.5 functional addresses, only one entry is required, for the address which has the functional address bit ANDed with the bit mask of all functional addresses for which the interface will accept frames." ::= { ifMIBObjects 2 } ifRcvAddrEntry OBJECT-TYPE SYNTAX IfRcvAddrEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "A list of objects identifying an address for which the system will accept packets/frames on the particular interface identified by the index value ifIndex." INDEX { ifIndex, ifRcvAddrAddress } ::= { ifRcvAddrTable 1 } IfRcvAddrEntry ::= SEQUENCE { ifRcvAddrAddress PhysAddress, ifRcvAddrStatus INTEGER, ifRcvAddrType } Expires December 1993 [Page 45] Draft Interfaces Group Evolution June 1993 ifRcvAddrAddress OBJECT-TYPE SYNTAX PhysAddress MAX-ACCESS not-accessible STATUS current DESCRIPTION "An address for which the system will accept packets/frames on this entry's interface." ::= { ifRcvAddrEntry 1 } ifRcvAddrStatus OBJECT-TYPE SYNTAX RowStatus MAX-ACCESS read-write DESCRIPTION "This object is used to create and delete rows in the ifRcvAddrTable." ::= { ifRcvAddrEntry 2 } ifRcvAddrType OBJECT-TYPE SYNTAX INTEGER { other(1), volatile(2), nonVolatile(3) } MAX-ACCESS read-write DESCRIPTION "This object has the value nonVolatile(4) for those entries in the table which are valid and will not be deleted by the next restart of the managed system. Entries having the value volatile(3) are valid and exist, but have not been saved, so that will not exist after the next restart of the managed system. Entries having the value other(1) are valid and exist but are not classified as to whether they will continue to exist after the next restart. Entries having the value invalid(2) are invalid and do not represent an address for which an interface accepts frames. Setting an object instance to one of the values other(1), volatile(3), or nonVolatile(4) causes the corresponding entry to exist or continue to exist, and to take on the respective status as regards the next restart of the managed system. Expires December 1993 [Page 46] Draft Interfaces Group Evolution June 1993 DEFVAL { volatile } ::= { ifRcvAddrEntry 3 } Expires December 1993 [Page 47] Draft Interfaces Group Evolution June 1993 -- conformance information ifConformance OBJECT IDENTIFIER ::= { ifMIB 2 } ifGroups OBJECT IDENTIFIER ::= { ifConformance 1 } ifCompliances OBJECT IDENTIFIER ::= { ifConformance 2 } -- compliance statements ifCompliance MODULE-COMPLIANCE STATUS current DESCRIPTION "The compliance statement for SNMPv2 entities which have network interfaces." MODULE -- this module MANDATORY-GROUPS { ifGeneralGroup, ifStackGroup } GROUP ifCharacterGroup DESCRIPTION "This group is mandatory only for those network interfaces which are character-oriented or packet-oriented and for which the value of the corresponding instance of ifSpeed is less than or equal to 20,000,000 bits/second." GROUP ifHCCharacterGroup DESCRIPTION "This group is mandatory only for those network interfaces which are character-oriented or packet-oriented and for which the value of the corresponding instance of ifSpeed is greater than 20,000,000 bits/second." GROUP ifPacketGroup DESCRIPTION "This group is mandatory only for those network interfaces which are packet-oriented and for which the value of the corresponding instance of ifSpeed is less than or equal to 20,000,000 bits/second." GROUP ifHCPacketGroup DESCRIPTION "This group is mandatory only for those network Expires December 1993 [Page 48] Draft Interfaces Group Evolution June 1993 interfaces which are packet-oriented and for which the value of the corresponding instance of ifSpeed is greater than 20,000,000 bits/second." GROUP ifTestGroup DESCRIPTION "This group is optional." GROUP ifRcvAddressGroup DESCRIPTION "This group is mandatory only for interfaces which can receive packets/frames addressed to more than one address." OBJECT ifExtnsPromiscuous MIN-ACCESS read-only DESCRIPTION "Write access is not required." OBJECT ifStackStatus SYNTAX INTEGER { active(1) } -- subset of RowStatus MIN-ACCESS read-only DESCRIPTION "Write access is not required, and only one of the six enumerated values for the RowStatus textual convention need be supported, specifically: active(1)." ::= { ifCompliances 1 } Expires December 1993 [Page 49] Draft Interfaces Group Evolution June 1993 -- units of conformance ifGeneralGroup OBJECT-GROUP OBJECTS { ifDescr, ifType, ifSpeed, ifPhysAddress, ifAdminStatus, ifOperStatus, ifLastChange, ifSpecific, ifLinkUpDownTrapEnable, ifHighSpeed, ifExtnsChipSet, ifExtnsRevWare, ifExtnsPromiscuous } STATUS current DESCRIPTION "A collection of objects providing information applicable to all network interfaces." ::= { ifGroups 1 } ifCharacterGroup OBJECT-GROUP OBJECTS { ifInOctets, ifOutOctets } STATUS current DESCRIPTION "A collection of objects providing information specific to low and medium speed (less than or equal to 20,000,000 bits/second) packet-oriented or character-oriented network interfaces." ::= { ifGroups 2 } ifHCCharacterGroup OBJECT-GROUP OBJECTS { ifHCInOctets, ifHCOutOctets } STATUS current DESCRIPTION "A collection of objects providing information specific to high speed (greater than 20,000,000 bits/second) packet-oriented or character-oriented network interfaces." ::= { ifGroups 3 } ifPacketGroup OBJECT-GROUP OBJECTS { ifMtu, ifInUcastPkts, ifInMulticastPkts, ifInBroadcastPkts, ifInDiscards, ifInErrors, ifInUnknownProtos, ifOutUcastPkts, ifOutMulticastPkts, ifOutBroadcastPkts, ifOutDiscards, ifOutErrors, ifOutQLen } STATUS current DESCRIPTION "A collection of objects providing information specific to low and medium speed (less than or equal to 20,000,000 bits/second) packet-oriented Expires December 1993 [Page 50] Draft Interfaces Group Evolution June 1993 network interfaces." ::= { ifGroups 4 } ifHCPacketGroup OBJECT-GROUP OBJECTS { ifMtu, ifHCInUcastPkts, ifHCInMulticastPkts, ifHCInBroadcastPkts, ifHCInDiscards, ifHCInErrors, ifHCInUnknownProtos, ifHCOutUcastPkts, ifHCOutMulticastPkts, ifHCOutBroadcastPkts, ifHCOutDiscards, ifHCOutErrors, ifHCOutQLen } STATUS current DESCRIPTION "A collection of objects providing information specific to high speed (greater than 20,000,000 bits/second) packet-oriented network interfaces." ::= { ifGroups 5 } ifRcvAddressGroup OBJECT-GROUP OBJECTS { ifRcvAddrStatus, ifRcvAddrType } STATUS current DESCRIPTION "A collection of objects providing information on the multiple addresses which an interface receives." ::= { ifGroups 6 } ifTestGroup OBJECT-GROUP OBJECTS { ifExtnsTestCommunity, ifExtnsTestRequestId ifExtnsTestType, ifExtnsTestResult, ifExtnsTestCode, ifExtnsTestContext } STATUS current DESCRIPTION "A collection of objects providing the ability to invoke tests on an interface." ::= { ifGroups 7 } ifStackGroup OBJECT-GROUP OBJECTS { ifStackStatus } STATUS current DESCRIPTION "A collection of objects providing information on the layering of MIB-II interfaces." ::= { ifGroups 8 } END Expires December 1993 [Page 51] Draft Interfaces Group Evolution June 1993 6. Acknowledgements The proposals in this memo are the result of conversations and discussions with many people, including at least the following: Fred Baker, Ted Brunner, Chuck Davin, Jeremy Greene, Marshall Rose, Kaj Tesink, and Dean Throop. However, it does not necessarily represent any consensus among the above-mentioned. Expires December 1993 [Page 52] Draft Interfaces Group Evolution June 1993 7. References [1] J. Case, K. McCloghrie, M. Rose, and S. Waldbusser, Structure of Management Information for version 2 of the Simple Network Management Protocol (SNMPv2), Request for Comments 1442, April 1993. [2] J. Galvin, K. McCloghrie, Administrative Model for version 2 of the Simple Network Management Protocol (SNMPv2), Request for Comments 1448, April 1993. [3] J. Case, K. McCloghrie, M. Rose, and S. Waldbusser, Protocol Operations for version 2 of the Simple Network Management Protocol (SNMPv2), Request for Comments 1448, April 1993. [4] K. McCloghrie and M.T. Rose, Management Information Base for Network Management of TCP/IP-based internets - MIB- II, Request for Comments 1213. March 1991. [5] J.D. Case, M.S. Fedor, M.L. Schoffstall, and J.R. Davin, Simple Network Management Protocol, Request for Comments 1157. May 1990. [6] J. Postel, Internet Protocol, Request for Comments 791, September 1981. [7] K. McCloghrie, Extensions to the Generic-Interface MIB, Request for Comments 1229, May 1991. Expires December 1993 [Page 53] Draft Interfaces Group Evolution June 1993 8. Security Considerations Security issues are not discussed in this memo. 9. Authors' Address Keith McCloghrie Hughes LAN Systems 1225 Charleston Rd, Mountain View, Ca 94043 415-966-7934 kzm@hls.com Frank Kastenholz FTP Software 2 High Street North Andover, Mass. USA 01845 (508)685-4000 kasten@ftp.com Expires December 1993 [Page 54] Draft Interfaces Group Evolution June 1993 Table of Contents 1 Introduction .......................................... 2 2 The SNMPv2 Network Management Framework ............... 3 2.1 Object Definitions .................................. 3 3 Experience with the Interfaces Group .................. 4 3.1 Areas of Clarification/Revision ..................... 4 3.1.1 Interface Numbering ............................... 4 3.1.2 Interface Sub-Layers .............................. 5 3.1.3 Virtual Circuits .................................. 6 3.1.4 Bit and Character Oriented Interfaces ............. 6 3.1.5 Counter Size ...................................... 7 3.1.6 Interface Speed ................................... 7 3.1.7 Multicast/Broadcast Counters ...................... 7 3.2 Clarifications/Revisions ............................ 7 3.2.1 Interface Numbering ............................... 7 3.2.2 Interface Sub-Layers .............................. 9 3.2.3 Virtual Circuits .................................. 11 3.2.4 Bit and Character Oriented Interfaces ............. 12 3.2.5 Counter Size ...................................... 13 3.2.6 Interface Speed ................................... 15 3.2.7 Multicast/Broadcast Counters ...................... 16 4 Use of the Interface Test Table ....................... 16 5 Definitions ........................................... 19 6 Acknowledgements ...................................... 52 7 References ............................................ 53 8 Security Considerations ............................... 54 9 Authors' Address ...................................... 54 Expires December 1993 [Page 55]