NMRG J. Schoenwaelder
Internet-Draft International University Bremen
Expires: May 28, 2004 November 28, 2003
GetRange Operation for the Simple Network Management Protocol (SNMP)
draft-irtf-nmrg-snmp-getrange-00.txt
Status of this Memo
This document is an Internet-Draft and is in full conformance with
all provisions of Section 10 of RFC2026.
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 draft documents 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 "work in progress."
The list of current Internet-Drafts can be accessed at http://
www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
This Internet-Draft will expire on May 28, 2004.
Copyright Notice
Copyright (C) The Internet Society (2003). All Rights Reserved.
Abstract
This memo defines the GetRangeRequest-PDU for the Simple Network
Management Protocol (SNMP). The GetRangeRequest-PDU enables a command
generator to read a large amount of management information with a
minimum number of protocol operations and without having to guess a
suitable repetition count and without reading data beyond the
information the command generator is interested in (overshoot
effect).
Schoenwaelder Expires May 28, 2004 [Page 1]
Internet-Draft GetRange Operation for SNMP November 2003
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Definitions . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Elements of Procedure . . . . . . . . . . . . . . . . . . . . 4
4. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.1 Retrieving Columns from a Single Table . . . . . . . . . . . . 7
4.2 Retrieving Columns from Multiple Tables . . . . . . . . . . . 7
4.3 Retrieving Tables with Holes . . . . . . . . . . . . . . . . . 8
5. Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 9
Normative References . . . . . . . . . . . . . . . . . . . . . 10
Informative References . . . . . . . . . . . . . . . . . . . . 10
Author's Address . . . . . . . . . . . . . . . . . . . . . . . 11
Intellectual Property and Copyright Statements . . . . . . . . 12
Schoenwaelder Expires May 28, 2004 [Page 2]
Internet-Draft GetRange Operation for SNMP November 2003
1. Introduction
The second version of the protocol operations for the Simple Network
Management Protocol (SNMP) defined in RFC 3416 [RFC3416] includes the
GetBulkRequest-PDU for reading large amounts of management
information. The GetBulkRequest-PDU can be seen as a generalization
of the GetNextRequest-PDU since it basically asks the command
generator to perform repeated get-next operations internally. The
max-repetitions parameter in the GetBulkRequest-PDU defines the
maximum number of repetitions. The command responder might perform
fewer repetitions taking into account constraints for the response
message or other processing constrains.
The usage of the GetBulkRequest-PDU has shown some problems. First,
command generators often do not know a suitable value for the
max-repetitions parameter. If the parameter is chosen too small, more
requests are needed which reduces the overall benefit. If the
max-repetitions parameter is set too large, variables might be
retrieved that are not interesting for the command generator and
subsequently discarded (overshoot effect). This can have severe
effects if the retrieval of the unwanted data internally within the
command generator is expensive [STBULK].
This memo introduces the GetRangeRequest-PDU which addresses these
issues with the GetBulkRequest-PDU while otherwise following the same
design principles:
1. The GetRangeRequest-PDU operates like all other SNMP PDUs on a
lexicographically ordered list of variables and does not assume
knowledge about conceptual tables.
2. The GetRangeRequest-PDU uses the same PDU format as all other
SNMP PDUs.
3. The GetRangeRequest-PDU keeps the non-repetitions parameter of
the GetBulkRequest-PDU since it is often required to retrieve the
value of sysUpTime in addition to other variables (especially for
counter variables).
4. The GetRangeRequest-PDU requires no knowledge of the MIBs
supported by an application and it can be used with existing
instrumentations and extensible agent protocols such as AgentX .
5. The GetRangeRequest-PDU deals with holes or columns from
conceptual tables with different number of instances in such a
way that no uninteresting data or fill data is transmitted.
The basic improvement over the GetBulkRequest-PDU is to replace the
Schoenwaelder Expires May 28, 2004 [Page 3]
Internet-Draft GetRange Operation for SNMP November 2003
max-repetitions parameter with a number of bumper object identifiers
(OIDs) which define where the processing should stop, thus avoiding
the need to estimate a suitable value for the max-repetitions
parameter. The idea to use bumper OIDs (or short bumpers) was first
introduced in [STBUMP].
The GetRangeRequest-PDU belongs to the Read class and the Confirmed
class as defined in RFC 3411 [RFC3411].
2. Definitions
NMRG-SNMP-GETRANGE-PDU DEFINITIONS ::= BEGIN
IMPORTS PDU, VarBindList, max-bindings
FROM SNMPv2-PDU;
GetRangeRequest-PDU ::=
[9] IMPLICIT -- xxx IANA, can we use [9] ??
GetRangePDU
GetRangePDU ::= -- identical in structure to PDU
SEQUENCE {
request-id
INTEGER (-2147483648..2147483647),
non-repeaters
INTEGER (0..max-bindings),
bumpers -- number of bumper varbinds
INTEGER (0..max-bindings),
variable-bindings -- values are ignored
VarBindList
}
END
3. Elements of Procedure
A GetRangeRequest-PDU is generated and transmitted at the request of
an application. The purpose of the GetRangeRequest-PDU is to request
the transfer of a potentially large amount of data, including, but
not limited to, the efficient and rapid retrieval of large tables.
Upon receipt of a GetRangeRequest-PDU, the receiving SNMP entity
processes each variable binding in the variable-binding list to
produce a Response-PDU with its request-id field having the same
Schoenwaelder Expires May 28, 2004 [Page 4]
Internet-Draft GetRange Operation for SNMP November 2003
value as in the request.
The values of the non-repeaters (N) and bumpers (B) field together
with the first elements in the variable bindings specify the
processing requested. One variable binding in the Response-PDU is
requested for the first N variable bindings in the request. The
following B elements in the variable bindings are so called bumpers
which split the list of lexicographically ordered variables into
sublists. Multiple variable bindings are requested for each of the
remaining (R) variable bindings in the request.
If N is greater than zero, the first through the (N)-th variable
bindings of the Response-PDU are each produced as follows:
1. The variable is located which is in the lexicographically ordered
list of the names of all variables which are accessible by this
request and whose name is the first lexicographic successor of
the variable binding's name in the incoming GetRangeRequest-PDU.
The corresponding variable binding's name and value fields in the
Response-PDU are set to the name and value of the located
variable
2. If the requested variable binding's name does not
lexicographically precede the name of any variable accessible by
this request, i.e., there is no lexicographic successor, then the
corresponding variable binding produced in the Response-PDU has
its value field set to "endOfMibView", and its name field set to
the variable binding's name in the request.
If B is greater than zero, the next B variable bindings are
conceptually copied into the bumpers list (BL). If R is non-zero, the
remaining variable bindings in the request are conceptually copied
into the repeater list (RL). The (N + 1)-th and subsequent variable
bindings of the Response-PDU are each produced in a similar manner:
1. Select the first element of the repeater list RL and the first
element of the bumpers list BL.
2. The variable is located which is in the lexicographically ordered
list of the names of all variables which are accessible by this
request and whose name is the first lexicographic successor of
the selected variable binding's name in the repeater list RL.
3. If the name of the located variable is lexicographically smaller
than the name of the selected variable binding's name in the
bumpers list BL, then the variable binding's name and value
fields in the Response-PDU are set to the name and value of the
located variable. The selected element in the repeater list RL is
Schoenwaelder Expires May 28, 2004 [Page 5]
Internet-Draft GetRange Operation for SNMP November 2003
updated with the name of the located variable.
4. Otherwise, the variable binding's name field in the Response-PDU
is set to the name of the selected bumpers variable binding and
the variable binding's value field is set to "endOfMibView". The
selected elements are marked as "done" in the repeater list RL
and the bumpers list BL.
5. The next element in the repeater list RL and the next element in
the bumpers list BL which is not yet marked "done" is selected.
If the end of the lists is reached, the first or a subsequent
element not yet marked "done" is selected. Processing stops if no
such element exists. Goto step number 2 if new elements were
selected.
While the GetRangeRequest-PDU retrieves all the requested lists of
variables, the response may be generated with a lesser number of
variable bindings (possibly zero) for either of two reasons.
1. If the size of the message encapsulating the Response-PDU
containing the requested number of variable bindings would be
greater than either a local constraint or the maximum message
size of the originator, then the response is generated with a
lesser number of variable bindings. This lesser number is the
ordered set of variable bindings with some of the variable
bindings at the end of the set removed, such that the size of the
message encapsulating the Response-PDU is approximately equal to
but no greater than either a local constraint or the maximum
message size of the originator. Note that the number of variable
bindings removed has no relationship to the values of N, B, or R.
2. In the event that the processing of a request with many
repetitions requires a significantly greater amount of processing
time than a normal request, then a command responder application
may terminate the request with less than the full number of
repetitions, providing at least one repetition is completed.
If the processing of any variable binding fails for a reason other
than listed above, then the Response-PDU is re-formatted with the
same values in its request-id and variable-bindings fields as the
received GetRangeRequest-PDU, with the value of its error-status
field set to "genErr", and the value of its error-index field is set
to the index of the variable binding in the original request which
corresponds to the failed variable binding.
Otherwise, the value of the Response-PDU's error-status field is set
to "noError", and the value of its error-index field to zero.
Schoenwaelder Expires May 28, 2004 [Page 6]
Internet-Draft GetRange Operation for SNMP November 2003
The generated Response-PDU (possibly with an empty variable-bindings
field) is then encapsulated into a message. If the size of the
resultant message is less than or equal to both a local constraint
and the maximum message size of the originator, it is transmitted to
the originator of the GetRangeRequest-PDU. Otherwise, the
snmpSilentDrops counter defined in RFC 3418 [RFC3418] is incremented
and the resultant message is discarded.
4. Examples
The following examples assume that an agent implements the ifTable
and ifXTable of the IF-MIB [RFC2863] with five rows (identified by
the ifIndex values 1 to 5) and the ipNetToMediaTable of the IP-MIB
[RFC2011] with two rows (identified by 192.0.2.1, 192.0.2.25).
4.1 Retrieving Columns from a Single Table
Retrieve the values for ifAdminStatus and ifOperStatus for all rows
in the ifTable (assuming that only seven variable bindings fit into a
Response-PDU).
GetRangeRequest [ non-repeaters = 1, bumpers = 2 ]
( sysUpTime,
ifOperStatus, ifLastChange,
ifAdminStatus, ifOperStatus )
Response ( sysUpTime.0 = "12",
ifAdminStatus.1 = "up", ifOperStatus.1 = "up",
ifAdminStatus.2 = "up", ifOperStatus.2 = "up",
ifAdminStatus.3 = "up", ifOperStatus.3 = "down" )
GetRangeRequest [ non-repeaters = 1, bumpers = 2 ]
( sysUpTime,
ifOperStatus, ifLastChange,
ifAdminStatus.3, ifOperStatus.3 )
Response ( sysUpTime.0 = "13",
ifAdminStatus.4 = "up", ifOperStatus.4 = "down",
ifAdminStatus.5 = "up", ifOperStatus.5 = "down",
ifOperStatus = [endOfMibView], ifLastChange = [endOfMibView] )
4.2 Retrieving Columns from Multiple Tables
Retrieve the values of ifDescr, ifName, ipAdEntAddr, ipAdEntIfIndex,
ipAdEntNetMask for all rows in the ifTable and the ipAdEntTable
(assuming that only nine variable bindings fit into a Response-PDU).
Schoenwaelder Expires May 28, 2004 [Page 7]
Internet-Draft GetRange Operation for SNMP November 2003
GetRangeRequest [ non-repeaters = 1, bumpers = 4 ]
( sysUpTime,
ifType, ifInMulticastPkts, ipAdEntNetMask, ipAdEntBcastAddr,
ifDescr, ifName, ipAdEntIfIndex, ipAdEntNetMask )
Response ( sysUpTime = "32",
ifDescr.1 = "lo", ifName.1 = "lo",
ipAdEntIfIndex.127.0.0.1 = "1",
ipAdEntNetMask.127.0.0.1 = "255.0.0.0",
ifDescr.2 = "eth0", ifName.2 = "eth0",
ipAdEntIfIndex.192.0.2.1 = "2",
ipAdEntNetMask.192.0.2.1 = "255.255.255.0" )
GetRangeRequest [non-repeaters = 1, bumpers = 4 ]
( sysUpTime,
ifType, ifInMulticastPkts, ipAdEntNetMask, ipAdEntBcastAddr,
ifDescr.2, ifName.2,
ipAdEntIfIndex.192.0.2.1, ipAdEntNetMask.192.0.2.1 )
Response ( sysUpTime = "33",
ifDescr.3 = "eth1", ifName.3 = "eth1",
ipAdEntNetMask = [endOfMibView], ipAdEntNetMask = [endOfMibView],
ifDescr.4 = "eth2", ifName.4 = "eth2",
ifDescr.5 = "eth3", ifName.5 = "eth3" )
GetRangeRequest [non-repeaters = 1, bumpers = 2 ]
( sysUpTime,
ifType, ifInMulticastPkts,
ifDescr.5, ifName.5 )
Response ( sysUpTime = "34",
ifType = [endOfMibView], ifInMulticastPkts = [endOfMibView] )
4.3 Retrieving Tables with Holes
Retrieve the values of ifDescr and ifAlias. Assume that the instance
ifAlias.2 does not exist in the MIB view (assuming that twelve
variable bindings fit into a Response-PDU).
GetRangeRequest [ non-repeaters = 1, bumpers = 2 ]
( sysUpTime,
ifType, ifCounterDiscontinuityTime,
ifDescr, ifAlias )
Response ( sysUpTime = "42",
ifDescr.1 = "lo", ifAlias.1 = "loopback interface",
ifDescr.2 = "eth0", ifAlias.3 = "",
Schoenwaelder Expires May 28, 2004 [Page 8]
Internet-Draft GetRange Operation for SNMP November 2003
ifDescr.3 = "eth1", ifAlias.4 = "",
ifDescr.4 = "eth2", ifAlias.5 = "",
ifDescr.5 = "eth3", ifCounterDiscontinuityTime = [endOfMibView],
ifType = [endOfMibView] )
5. Discussion
Many proposals have been developed so far to improve the bulk
retrieval performance characteristics of SNMP. The proposed solutions
range from rather simple to rather drastic changes and additions to
the existing protocol. The new PDU proposed in this memo certainly
falls into the first category. By using this new PDU in combination
with OID compression techniques and transports supporting larger
message sizes (such as SNMP over TCP [RFC3430]), significant
performance improvements can be achieved since (a) the manager does
not have to guess a suitable value for the max-repetitions parameter
of the GetBulkRequest-PDU and holes are handled in a way which avoids
to return variables which are of no value for the command generator.
Dave Perkins proposed a GetColsRequest-PDU which is more powerful
than the GetRangeRequest-PDU described in this memo. The
GetColsRequest-PDU operates on conceptual rows and supports a filter
expression to select the desired rows. The response is returned in a
compact encoding which suppresses redundant OID components. However,
the GetColsRequest-PDU does not allow to retrieve data from multiple
arbitrary tables with a single request and it requires that the SNMP
engine has knowledge about table indexing to be able to extract
values of auxiliary objects by unpacking instance identifiers.
Wes Hardacker proposed a set of object-oriented PDUs which provide
many new features. The processing of these PDUs requires MIB
knowledge in the SNMP engine. The EOS working group of the IETF was
not able to achieve consensus on these new object-oriented PDUs.
6. Acknowledgements
The Network Management Research Group (NMRG) has discussed bulk data
retrieval improvements for SNMP in several meetings. This document
was inspired by many ideas that came up during these discussions. The
submissions to the EOS IETF working group further helped to shape
this document.
The idea to introduce bumper objects to mark the end of lists was
first described by M. Malowidzki [STBUMP].
Some paragraphs and phrases are taken from the second version of the
protocol operations for the Simple Network Management Protocol (SNMP)
Schoenwaelder Expires May 28, 2004 [Page 9]
Internet-Draft GetRange Operation for SNMP November 2003
[RFC3416] written by R. Presuhn, J. Case, K. McCloghrie, M. Rose, and
S. Waldbusser.
Normative References
[RFC3411] Harrington, D., Presuhn, R. and B. Wijnen, "An
Architecture for Describing Simple Network Management
Protocol (SNMP) Management Frameworks", STD 62, RFC 3411,
December 2002.
[RFC3416] Presuhn, R., Case, J., McCloghrie, K., Rose, M. and S.
Waldbusser, "Version 2 of the Protocol Operations for the
Simple Network Management Protocol (SNMP)", STD 62, RFC
3416, December 2002.
[RFC3418] Presuhn, R., Case, J., McCloghrie, K., Rose, M. and S.
Waldbusser, "Management Information Base (MIB) for the
Simple Network Management Protocol (SNMP)", STD 62, RFC
3418, December 2002.
Informative References
[STBULK] Sprenkels, R. and J. Martin-Flatin, "Bulk Transfers of MIB
Data", Simple Times 7(1), March 1999.
[STBUMP] Malowidzki, M., "GetBulk Worth Fixing", Simple Times
10(1), December 2002.
[RFC2863] McCloghrie, K. and F. Kastenholz, "The Interfaces Group
MIB", RFC 2863, June 2000.
[RFC2011] McCloghrie, K., "SNMPv2 Management Information Base for
the Internet Protocol using SMIv2", RFC 2011, November
1996.
[RFC3430] Schoenwaelder, J., "Simple Network Management Protocol
(SNMP) over Transmission Control Protocol (TCP) Transport
Mapping", RFC 3430, December 2002.
Schoenwaelder Expires May 28, 2004 [Page 10]
Internet-Draft GetRange Operation for SNMP November 2003
Author's Address
Juergen Schoenwaelder
International University Bremen
Campus Ring 1
28725 Bremen
Germany
Phone: +49 421 200-3587
EMail: j.schoenwaelder@iu-bremen.de
Schoenwaelder Expires May 28, 2004 [Page 11]
Internet-Draft GetRange Operation for SNMP November 2003
Intellectual Property Statement
The IETF takes no position regarding the validity or scope of any
intellectual property or other rights that might be claimed to
pertain to the implementation or use of the technology described in
this document or the extent to which any license under such rights
might or might not be available; neither does it represent that it
has made any effort to identify any such rights. Information on the
IETF's procedures with respect to rights in standards-track and
standards-related documentation can be found in BCP-11. Copies of
claims of rights made available for publication and any assurances of
licenses to be made available, or the result of an attempt made to
obtain a general license or permission for the use of such
proprietary rights by implementors or users of this specification can
be obtained from the IETF Secretariat.
The IETF invites any interested party to bring to its attention any
copyrights, patents or patent applications, or other proprietary
rights which may cover technology that may be required to practice
this standard. Please address the information to the IETF Executive
Director.
Full Copyright Statement
Copyright (C) The Internet Society (2003). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assignees.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
Schoenwaelder Expires May 28, 2004 [Page 12]
Internet-Draft GetRange Operation for SNMP November 2003
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
Acknowledgment
Funding for the RFC Editor function is currently provided by the
Internet Society.
Schoenwaelder Expires May 28, 2004 [Page 13]