Your comments please
Karl Auerbach <karl@eng.sun.com> Sat, 02 March 1991 01:57 UTC
Received: from nisc.psi.net by NRI.NRI.Reston.VA.US id aa18791; 1 Mar 91 20:57 EST
Received: by nisc.psi.net (5.61/2.1-PSINet Operations ) id AA10453; Fri, 1 Mar 91 20:12:51 -0500
Received: from nisc.nyser.net by nisc.psi.net (5.61/2.1-PSINet Operations ) id AA10449; Fri, 1 Mar 91 20:12:45 -0500
Received: from Sun.COM by nisc.nyser.net (5.61/2.1-) id AA03259; Fri, 1 Mar 91 20:11:09 -0500
Received: from Eng.Sun.COM (zigzag-bb.Corp.Sun.COM) by Sun.COM (4.1/SMI-4.1) id AA05444; Fri, 1 Mar 91 17:14:40 PST
Received: from lvs.Eng.Sun.COM by Eng.Sun.COM (4.1/SMI-4.1) id AA22469; Fri, 1 Mar 91 17:21:09 PST
Received: by lvs.Eng.Sun.COM (4.1/SMI-4.1) id AA00681; Fri, 1 Mar 91 17:15:53 PST
Date: Fri, 01 Mar 1991 17:15:53 -0800
From: Karl Auerbach <karl@eng.sun.com>
Message-Id: <9103020115.AA00681@lvs.Eng.Sun.COM>
To: snmp-wg@nisc.nyser.net
Subject: Your comments please
Status: O
I've taken a crack at the ipRouting table problem in the MIBs. You know... the problem about multiple routes to the same destination. Anyway, I'd really appreciate some feedback before I invest much more effort. (If anyone is interested there is also a Postscript version.) Thanks, --karl-- ---------cut here---------- RFC WXYZ draft IP Routing Table MIB Feb 1991 Management Information Base for IP Routing Table 5:19 PM February 28, 1991 Karl Auerbach Sun Microsystems karl@eng.sun.com 1. Status of this Memo This memo defines an extension to MIB-II (RFC draft-ietf-snmp- mib2-04.txt)[1] and is a Proposed Standard for the Internet community. Please send comments to: Karl Auerbach <karl@eng.sun.com>. +--------------------------------------------+ | DRAFT | +--------------------------------------------+ Karl Auerbach [Page 1] RFC WXYZ draft IP Routing Table MIB Feb 1991 2. Introduction It is possible for a device to have a routing table in which there are multiple, alternate routes for any given destination. Similarly, there are devices which there are multiple, alternate IP addresses associated with the same physical interface. MIB-I (RFC1156)[2] does not adequately support these devices. Early drafts of MIB-II attempted to deal with these situations through the addition of a an additional, optional distinguishing component of the SNMP instance. However, certain problems were recognized with the MIB-II mechanism. In order to expedite the progress of MIB-II, the proposed changes were removed pending further study. Consequently, MIB-II, as published, also fails to adequately support these devices. The problems with the MIB-II drafts were twofold: 1. The use of an optional component in the instance portion of an object identifier was unique and would have caused problems with existing and new implementations. 2. There were no rules to govern the generation of this new component and the reclamation of its value. This proposal proposes a revision to MIB-II to allow multiple routes and multiple IP addresses. In particular, the old MIB-I and MIB-II IP addressing and IP routing tables are superseded. The old table definitions are deprecated. Both of these new tables add an additional component to the instance specifier, similar to what was proposed in the early MIB-II drafts. However, in this proposal, this additional component is mandatory, not optional. Rules are defined to govern the addition of new "rows" to these new tables. An additional variable is added to each of the new tables to clearly differentiate between addition of new rows and modification of existing rows. 3. Deprecation of MIB-II ipRouteTable The status of the existing ipRouteTable and all variables contained within that table are changed to "deprecated". Karl Auerbach [Page 2] RFC WXYZ draft IP Routing Table MIB Feb 1991 In other words, the definition of ipRouteTable in MIB-II is modified as follows: ipRouteTable OBJECT-TYPE SYNTAX SEQUENCE OF IpRouteEntry ACCESS not-accessible STATUS deprecated DESCRIPTION "This entity's IP Routing table." ::= { ip 21 } 4. New IP Routing Table The new IP routing table is very similar to the old version found in MIB-I and MIB-II. However, it has a new variable in each "row", ipRouteKey. And the instance index is composed of the ipRouteDest (like in MIB-I and MIB-I) plus the new ipRouteKey. The ipRouteKey is essentially a differentiator between different routes to the same destination. The presence of a SET operation against ipRouteKey acts as a switch to enable an agent to perform a row creation rather than modifying an existing instance of ipRouteEntry. The values of ipRouteKey must be unique only in the context of routes to the same destination. In other words, the same ipRouteKey value may be found on a route to a different destination. The values of ipRouteKey are not highly constrained. Values must range between 1 and 65535, inclusive. The values need not be densely packed. Nor need successive values bear any particular relationship to previous values. When generating new values, the generator may try to avoid re-using values which have recently been removed. However, since the scope of an ipRouteKey value is the set of routes with to the same destination, there is ought to be no problem should a value be quickly reused. 4.1 Contents -- the IP routing table -- The IP routing table contains an entry for each route -- presently known to this entity. Karl Auerbach [Page 3] RFC WXYZ draft IP Routing Table MIB Feb 1991 ipRoutingTable OBJECT-TYPE SYNTAX SEQUENCE OF IpRouteEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "This entity's IP Routing table." ::= { ip XX } -- Each instance of IpRouteEntry is identified by a an -- instance formed by the IP address of the destination -- and a differentiating integer. This integer is -- generated and reclaimed according to rules -- specified in section 4.3 of this document. ipRouteEntry OBJECT-TYPE SYNTAX IpRouteEntry ACCESS not-accessible STATUS mandatory DESCRIPTION "A route to a particular destination." INDEX { ipRouteDest ipRouteKey} ::= { ipRouteTable 1 } IpRouteEntry ::= SEQUENCE { ipRouteDest IpAddress, ipRouteIfIndex INTEGER, ipRouteMetric1 INTEGER, ipRouteMetric2 INTEGER, ipRouteMetric3 INTEGER, ipRouteMetric4 INTEGER, ipRouteNextHop IpAddress, ipRouteType INTEGER, ipRouteProto INTEGER, ipRouteAge INTEGER, ipRouteMask IpAddress, ipRouteMetric5 INTEGER, ipRouteInfo OBJECT IDENTIFIER ipRouteKey INTEGER (1..65535) } ipRouteDest OBJECT-TYPE SYNTAX IpAddress ACCESS read-write STATUS mandatory DESCRIPTION "The destination IP address of this route. An entry with a value of 0.0.0.0 is considered a default route." ::= { ipRouteEntry 1 } Karl Auerbach [Page 4] RFC WXYZ draft IP Routing Table MIB Feb 1991 ipRouteIfIndex OBJECT-TYPE SYNTAX INTEGER ACCESS read-write STATUS mandatory DESCRIPTION "The index value which uniquely identifies the local interface through which the next hop of this route should be reached. The interface identified by a particular value of this index is the same interface as identified by the same value of ifIndex." ::= { ipRouteEntry 2 } ipRouteMetric1 OBJECT-TYPE SYNTAX INTEGER ACCESS read-write STATUS mandatory DESCRIPTION "The primary routing metric for this route. The semantics of this metric are determined by the routing-protocol specified in the route's ipRouteProto value. If this metric is not used, its value should be set to -1." ::= { ipRouteEntry 3 } ipRouteMetric2 OBJECT-TYPE SYNTAX INTEGER ACCESS read-write STATUS mandatory DESCRIPTION "An alternate routing metric for this route. The semantics of this metric are determined by the routing-protocol specified in the route's ipRouteProto value. If this metric is not used, its value should be set to -1." ::= { ipRouteEntry 4 } ipRouteMetric3 OBJECT-TYPE SYNTAX INTEGER ACCESS read-write STATUS mandatory DESCRIPTION "An alternate routing metric for this route. The semantics of this metric are determined by the routing-protocol specified in the route's ipRouteProto value. If this metric is not used, its value should be set to -1." ::= { ipRouteEntry 5 } Karl Auerbach [Page 5] RFC WXYZ draft IP Routing Table MIB Feb 1991 ipRouteMetric4 OBJECT-TYPE SYNTAX INTEGER ACCESS read-write STATUS mandatory DESCRIPTION "An alternate routing metric for this route. The semantics of this metric are determined by the routing-protocol specified in the route's ipRouteProto value. If this metric is not used, its value should be set to -1." ::= { ipRouteEntry 6 } ipRouteNextHop OBJECT-TYPE SYNTAX IpAddress ACCESS read-write STATUS mandatory DESCRIPTION "The IP address of the next hop of this route. (In the case of a route bound to an interface which is realized via a broadcast media, the value of this field is the agent's IP address on that interface.)" ::= { ipRouteEntry 7 } Karl Auerbach [Page 6] RFC WXYZ draft IP Routing Table MIB Feb 1991 ipRouteType OBJECT-TYPE SYNTAX INTEGER { other(1), -- None of the following. invalid(2), -- An invalidated route. direct(3), -- Route to a directly -- connected (sub-)network. indirect(4) -- Route to a non-local -- host, network, or -- sub-network. } ACCESS read-write STATUS mandatory DESCRIPTION "The type of route. Note that the values direct(3) and indirect(4) refer to the notion of direct and indirect routing in the IP architecture. Setting this object to the value invalid(2) has the effect of invalidating the corresponding entry in the ipRouteTable object. That is, it effectively disassociates the destination identified with said entry from the route identified with said entry. 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 ipRouteType object." ::= { ipRouteEntry 8 } Karl Auerbach [Page 7] RFC WXYZ draft IP Routing Table MIB Feb 1991 ipRouteProto OBJECT-TYPE SYNTAX INTEGER { other(1), -- None of the following. local(2), -- Non-protocol information, -- e.g., manually configured -- entries. netmgmt(3), -- Set via a network -- management protocol icmp(4), -- Obtained via ICMP, -- e.g., Redirect -- The remaining values are -- all gateway routing -- protocols: egp(5), ggp(6), hello(7), rip(8), is-is(9), es-is(10), ciscoIgrp(11), bbnSpfIgp(12), ospf(13), bgp(14) } ACCESS read-only STATUS mandatory DESCRIPTION "The routing mechanism via which this route was learned. Inclusion of values for gateway routing protocols is not intended to imply that hosts should support those protocols." ::= { ipRouteEntry 9 } ipRouteAge OBJECT-TYPE SYNTAX INTEGER ACCESS read-write STATUS mandatory DESCRIPTION "The number of seconds since this route was last updated or otherwise determined to be correct. Note that no semantics of `too old' can be implied except through knowledge of the routing protocol by which the route was learned." ::= { ipRouteEntry 10 } Karl Auerbach [Page 8] RFC WXYZ draft IP Routing Table MIB Feb 1991 ipRouteMask OBJECT-TYPE SYNTAX IpAddress ACCESS read-write STATUS mandatory DESCRIPTION "Indicate the mask to be logical-ANDed with the destination address before being compared to the value in the ipRouteDest field. For those systems that do not support arbitrary subnet masks, an agent constructs the value of the ipRouteMask by determining whether the value of the correspondent ipRouteDest field belong to a class-A, B, or C network, and then using one of: mask network 255.0.0. class-A 255.255.0.0 class-B 55.255.255.0 class-C If the value of the ipRouteDest is 0.0.0.0 (a default route), then the mask value is also 0.0.0.0. It should be noted that all IP routing subsystems implicitly use this mechanism." ::= { ipRouteEntry 11 } ipRouteMetric5 OBJECT-TYPE SYNTAX INTEGER ACCESS read-write STATUS mandatory DESCRIPTION "An alternate routing metric for this route. The semantics of this metric are determined by the routing-protocol specified in the route's ipRouteProto value. If this metric is not used, its value should be set to -1." ::= { ipRouteEntry 12 } ipRouteInfo OBJECT-TYPE SYNTAX OBJECT IDENTIFIER ACCESS read-write STATUS mandatory DESCRIPTION "A reference to MIB definitions specific to the particular routing protocol which is responsible for this route, as determined by the value specified in the route's ipRouteProto value. 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 conforming implementation of ASN.1 and BER must be able to generate and recognize this value." ::= { ipRouteEntry 13 } Karl Auerbach [Page 9] RFC WXYZ draft IP Routing Table MIB Feb 1991 ipRouteKey OBJECT-TYPE SYNTAX INTEGER (1..65535) ACCESS read-write STATUS mandatory DESCRIPTION "A value which distinguishes this instance of IpRouteEntry from other instances. A value is invalid for a write if it represents an existing instance of ipRouteEntry unless that instance has an ipRouteType value of 'invalid'. Hence writes to ipRouteKey may occur only in the context of an attempt to create a new instance of ipRouteEntry. An attempt to write a value indicates that creation of a new instance of ipRouteEntry is to be attempted." ::= { ipRouteEntry 14 } 4.2 Adding New Rows to new routing table An SNMP agent shall create a new instance of IpRouteEntry for each contiguous block of varBinds contained in an otherwise valid a SET-REQUEST PDU meeting the following criteria: 1. The contiguous block of varBinds contains entries for each of: VARIABLE VALUE ipRouteDest Equal to that in the index. ipRouteIfIndex In range (1..ifNumber) ipRouteMetric1 An appropriate value ipRouteMetric2 An appropriate value ipRouteMetric3 An appropriate value ipRouteMetric4 An appropriate value ipRouteNextHop An appropriate value ipRouteType other(1), direct(3), or indirect(4) ipRouteProto Local(2) ipRouteAge Zero ipRouteMask An appropriate value ipRouteMetric5 An appropriate value ipRouteInfo { 0 0 } ipRouteKey. Equal to that in the index. 2. These entries must appear in the order shown, with no gaps and with no intervening entries. 3. The ipRouteDest portion of the index of all such entries must be identical. 4. The ipRouteKey portion of the index of all such entries must be identical. The value if the ipRouteKey portion of the index identifies the ipRouteKey to be assigned to the row to be created. Karl Auerbach [Page 10] RFC WXYZ draft IP Routing Table MIB Feb 1991 5. The index of all such entries must refer to an nonexistent instance of IpRouteEntry or one in which ipRouteType is "invalid (2)". If any of conditions #1, #2, #3, or #4 are violated the block of varBinds is considered a collection of unrelated varBinds which will succeed or fail on their individual merits (subject, of course, to the standard SNMP requirement that all SETs succeed or fail together.) If conditions #1 through #4 are met but condition #5 fails (due the existence of a valid row), then the SET-REQUEST shall be rejected with a badValue error with the error index referencing the first varBind of the block. (Note that a route which is marked as "invalid" is considered as nonexistent for the purposes of condition #5. Thus a block of varBinds which meets all of the above conditions with respect to an existing, but "invalid" row has the effect of resurrecting that row.) Note that presence of ipRouteKey at the end of a block of varBinds in a SET-REQUEST enables a manager to safely differentiate between creation of a new instance and modification of an existing entry. Condition #5 acts as a gate to prevent the inadvertent overwriting of existing rows, including rows which have recently been created and of which the manager station is unaware. Also note that the manager is able to "know" what value of ipRouteKey is associated with any instances which that manager creates. The manager need only examine the success or failure of the SET-REQUEST, a subsequent GET-REQUEST or series of GET-NEXT-REQUESTs are not needed to ascertain the ipRouteKey of the new row. A single SET-REQUEST PDU may contain multiple contiguous blocks of varBinds meeting these criteria. In such cases, the agent shall create multiple new rows. In the situation where a single SET-REQUEST PDU contains multiple contiguous blocks bearing the same instance, the agent shall create only one new row for that instance. It would have been feasible to relax the conditions #1 and #2 so that the set of necessary variables could be scattered throughout a PDU and occur in any order. But to do so would add unnecessary complexity to the agent. To make use of these rules, a manager station creates a new row as follows: 1. The manager station, by its own private means, gathers together the information to be placed in the new row. Karl Auerbach [Page 11] RFC WXYZ draft IP Routing Table MIB Feb 1991 2. The manager station chooses a value of ipRouteKey for the new row. The best technique is to read the ipRoutingEntrys for the proposed destination to winnow out any ipRouteKeys which are currently in use. However, any other mechanism may be used (including random generation). The manager station must always be prepared for the SET-REQUEST to fail due to ipRouteKey collision no matter how the value is selected. 3. The manager station sends out a SET-REQUEST PDU with a block of varBinds as described above. The value of ipRouteKey used in the Index and proposed for ipRouteKey in the varBinds is that selected in step #2 above. The agent will validate the SET-REQUEST. During validation, the agent will run the varBinds against the previously described criteria. If the manager has indicated row creation, but a row already exists, the agent will reject the SET-REQUEST. Otherwise, if the SET-REQUEST is otherwise valid, the agent will create the new row and a good GET-RESPONSE PDU will be returned. 4. If the manager receives a clean GET-RESPONSE, the manager will "know" that a new row has been created with the given ipRouteKey. Otherwise, if the error in the response PDU indicates a row collision, the manager station should iterate this procedure from step #2, above. The number of iterations is theoretically unbounded, but in practice (and assuming the manager is not simply reusing the same proposed ipRouteKey values) the procedure should terminate very quickly. In fact, if the manager station selects proposed ipRouteKeys based upon those in use, collisions (and hence iterations) should be very rare indeed. 4.3 Practical Matters It is suggested that agents generate even values of ipRouteKey and managers generate odd values. It is suggested that manager stations include some randomizing method within the generation of ipRouteKey values. The purpose is to perform a "randomized backoff" to avoid persistent collisions between two manager stations trying to create a row. Some implementations of IP can differentiate between routes to networks and routes to individual hosts. These can be distinguished by the following convention: Routes to specific hosts have ipRouteMask values of 0xFFFFFFFF (32 ones). All other values of ipRouteMask indicate a network route. Karl Auerbach [Page 12] RFC WXYZ draft IP Routing Table MIB Feb 1991 5. New IP Addressing Table 5.1 Contents 5.2 Adding News Rows to the new addressing table 5.3 Practical Matters Karl Auerbach [Page 13] RFC WXYZ draft IP Routing Table MIB Feb 1991 [1] M. Rose, K. McCloghrie, Management Information Base for Network Management of TCP/IP-based Internets: MIB-II, Internet Working Group RFC draft, Network Information Center, SRI International, Menlo Park, California, (Dec, 1990) [2] M. Rose, K. McCloghrie, Management Information Base for Network Management of TCP/IP-based Internets, Internet, Working Group RFC 1156, Network Information Center, SRI International, Menlo Park, California, (May, 1990) Karl Auerbach [Page 14]
- Your comments please Karl Auerbach
- Your comments please Jeremy Greene