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]