GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


rfc:rfc2089

Network Working Group B. Wijnen Request for Comments: 2089 IBM Category: Informational D. Levi

                                                    SNMP Research, Inc
                                                          January 1997
                               V2ToV1
                     Mapping SNMPv2 onto SNMPv1
                   within a bi-lingual SNMP agent

Status of this Memo

 This memo provides information for the Internet community.  This memo
 does not specify an Internet standard of any kind.  Distribution of
 this memo is unlimited.

Abstract

 The goal of this memo is to document a common way of mapping an
 SNMPv2 response into an SNMPv1 response within a bi-lingual SNMP
 agent (one that supports both SNMPv1 and SNMPv2).

Table of Contents

   1.0  Introduction  . . . . . . . . . . . . . . . . . . . . . . .  2
   2.0  Mapping SNMPv2 into SNMPv1  . . . . . . . . . . . . . . . .  2
   2.1  Mapping SNMPv2 error-status into SNMPv1 error-status  . . .  3
   2.2  Mapping SNMPv2 exceptions into SNMPv1   . . . . . . . . . .  3
   2.3  Mapping noSuchObject and noSuchInstance   . . . . . . . . .  4
   2.4  Mapping endOfMibView  . . . . . . . . . . . . . . . . . . .  5
   2.5  Mapping SNMPv2 SMI into SNMPv1  . . . . . . . . . . . . . .  5
   3.0  Processing SNMPv1 requests  . . . . . . . . . . . . . . . .  6
   3.1  Processing an SNMPv1 GET request  . . . . . . . . . . . . .  6
   3.2  Processing an SNMPv1 GETNEXT request  . . . . . . . . . . .  7
   3.3  Processing an outgoing SNMPv2 trap  . . . . . . . . . . . .  8
   4.0  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . 10
   5.0  References  . . . . . . . . . . . . . . . . . . . . . . . . 10
   6.0  Security Considerations   . . . . . . . . . . . . . . . . . 10
   7.0  Authors' Addresses  . . . . . . . . . . . . . . . . . . . . 11
   Appendix A.  Background Information  . . . . . . . . . . . . .   12
   A.1  Mapping of error-status Values  . . . . . . . . . . . . .   12
   A.2  SNMPv1 traps without Counter64 varBinds.  . . . . . . . .   12

Wijnen & Levi Informational [Page 1] RFC 2089 V2toV1 January 1997

1.0 Introduction

 We now have the SNMPv1 protocol (RFC1157 [1]) as a full standard and
 the SNMPv2 protocol (RFC1905 [1]) as a DRAFT standard.  It can be
 expected that many agent implementations will support both SNMPv1 and
 SNMPv2 requests coming from SNMP management entities.  In many cases
 the underlying instrumentation will be implemented using the new
 SNMPv2 SMI and SNMPv2 protocol.  The SNMP engine then gets the task
 to ensure that any SNMPv2 response data coming from such SNMPv2
 compliant instrumentation gets converted to a proper SNMPv1 response
 if the original request came in as an SNMPv1 request.  The SNMP
 engine should also deal with mapping SNMPv2 traps which are generated
 by an application or by the SNMPv2 compliant instrumentation into
 SNMPv1 traps if the agent has been configured to send traps to an
 SNMPv1 manager.
 It seems beneficial if all such agents do this mapping in the same
 way. This document describes such a mapping based on discussions and
 perceived consensus on the various mailing lists.  The authors of
 this document have also compared their own implementations of these
 mappings. They had a few minor differences and decided to make their
 implementation behave the same and document this mapping so others
 can benefit from it.
 We recommend that all agents implement this same mapping.
 Note that the mapping described in this document should also be
 followed by SNMP proxies that provide a mapping between SNMPv1
 management applications and SNMPv2 agents.

2.0 Mapping SNMPv2 into SNMPv1

 These are the type of mappings that we need:
   o   Mapping of the SNMPv2 error-status into SNMPv1 error-status
   o   Mapping of the SNMPv2 exceptions into SNMPv1 error-status
   o   Skipping object instances that have a non-SNMPv1 Syntax
       (specifically Counter64)
   o   Mapping of SNMPv2 traps into SNMPv1 traps

Wijnen & Levi Informational [Page 2] RFC 2089 V2toV1 January 1997

2.1 Mapping SNMPv2 error-status into SNMPv1 error-status

 With the new SNMPv2 protocol (RFC1905 [1]) we get a set of error-
 status values that return the cause of an error in much more detail.
 But an SNMPv1 manager does not understand such error-status values.
 So, when the instrumentation code returns response data and uses an
 SNMPv2 error-status to report on the success or failure of the
 requested operation and if the original SNMP request is an SNMPv1
 request, then we must map such an error-status into an SNMPv1 error-
 status when composing the SNMP response PDU.
 The SNMPv2 error status is mapped to an SNMPv1 error-status using
 this table:
           SNMPv2 error-status    SNMPv1 error-status
           ===================    ===================
           noError                noError
           tooBig                 tooBig
           noSuchName             noSuchName
           badValue               badValue
           readOnly               readOnly
           genErr                 genErr
           wrongValue             badValue
           wrongEncoding          badValue
           wrongType              badValue
           wrongLength            badValue
           inconsistentValue      badValue
           noAccess               noSuchName
           notWritable            noSuchName
           noCreation             noSuchName
           inconsistentName       noSuchName
           resourceUnavailable    genErr
           commitFailed           genErr
           undoFailed             genErr
           authorizationError     noSuchName

2.2 Mapping SNMPv2 exceptions into SNMPv1

 In SNMPv2 we have so called exception values. These will allow an
 SNMPv2 response PDU to return as much management information as
 possible, even if one or more of the requested variables do not
 exist.  SNMPv1 does not support exception values, and thus does not
 return the value of management information when any error occurs.
 When multiple variables do not exist, an SNMPv1 agent can return only
 a single error and index of a single variable.  The agent determines
 by its implementation strategy which variable to identify as the

Wijnen & Levi Informational [Page 3] RFC 2089 V2toV1 January 1997

 cause of the error via the value of the error-index field. Thus, an
 SNMPv1 manager may make no assumption on the validity of the other
 variables in the request.
 So, when an SNMPv1 request is received, we must check the varBinds
 returned from SNMPv2 compliant instrumentation for exception values,
 and convert these exception values into SNMPv1 error codes.
 The type of exception we can get back and the action we must take
 depends on the SNMP operation that is requested.
   o   For SNMP GET requests we can get back noSuchObject and
       noSuchInstance.
   o   For SNMP GETNEXT requests we can get back endOfMibView.
   o   For SNMP SET requests we cannot get back any exceptions.
   o   For SNMP GETBULK requests we can get back endOfMibView, but
       such a request should only come in as an SNMPv2 request, so we
       do not have to worry about any mapping onto SNMPv1.  If a
       GETBULK comes in as an SNMPv1 request, it is treated as an
       error and the packet is dropped.

2.3 Mapping noSuchObject and noSuchInstance

 A noSuchObject or noSuchInstance exception generated by SNMPv2
 compliant instrumentation indicates that the requested object
 instance can not be returned.  The SNMPv1 error code for this
 condition is noSuchName, and so the error-status field of the
 response PDU should be set to noSuchName.  Also, the error-index
 field is set to the index of the varBind for which an exception
 occurred, and the varBind list from the original request is returned
 with the response PDU.
 Note that when the response contains multiple exceptions, that the
 agent may pick any one to be returned.

Wijnen & Levi Informational [Page 4] RFC 2089 V2toV1 January 1997

2.4 Mapping endOfMibView

 When SNMPv2 compliant instrumentation returns a varBind containing an
 endOfMibView exception in response to a GETNEXT request, it indicates
 that there are no object instances available which lexicographically
 follow the object in the request. In an SNMPv1 agent, this condition
 normally results in a noSuchName error, and so the error-status field
 of the response PDU should be set to noSuchName. Also, the error-
 index field is set to the index of the varBind for which an exception
 occurred, and the varBind list from the original request is returned
 with the response PDU.
 Note that when the response contains multiple exceptions, that the
 agent may pick any one to be returned.

2.5 Mapping SNMPv2 SMI into SNMPv1

 The SNMPv2 SMI (RFC1902 [2]) defines basically one new syntax that is
 problematic for SNMPv1 managers. That is the syntax Counter64.  All
 the others can be handled by SNMPv1 managers.
 The net impact on bi-lingual agents is that they should make sure
 that they never return a varBind with a Counter64 value to an SNMPv1
 manager.
 The best accepted practice is to consider such object instances
 implicitly excluded from the view.  So:
   o   On an SNMPv1 GET request, we return an error-status of
       noSuchName and the error-index is set to the varBind that
       causes this error.
   o   On an SNMPv1 GETNEXT request, we skip the object instance and
       fetch the next object instance that follows the one with a
       syntax of Counter64.
   o   Any SET request that has a varBind with a Counter64 value must
       have come from a SNMPv2 manager, and so it should not cause a
       problem.  If we do receive a Counter64 value in an SNMPv1 SET
       packet, it should result in an ASN.1 parse error since
       Counter64 is not valid in the SNMPv1 protocol. When an ASN.1
       parse error occurs, the counter snmpInASNParseErrs is
       incremented and no response is returned.
   o   The GETBULK is an SNMPv2 operation, so it should never come
       from an SNMPv1 manager.  If we do receive a GETBULK PDU from in
       an SNMPv1 packet, then we consider it an invalid PDU-type and
       we drop the packet.

Wijnen & Levi Informational [Page 5] RFC 2089 V2toV1 January 1997

3.0 Processing SNMPv1 requests

 This sections contains a step by step description of how to handle
 SNMPv1 requests in an agent where the underlying instrumentation code
 is SNMPv2 compliant.

3.1 Processing an SNMPv1 GET request

 First, the request is converted into a call to the underlying
 instrumentation. This is implementation specific.
 When such instrumentation returns response data using SNMPv2 syntax
 and error-status values, then:
 1.  If the error-status is anything other than noError,
       a.  The error status is translated to an SNMPv1 error-status
           using the table from 2.1, "Mapping SNMPv2 error-status into
           SNMPv1 error-status" on page 2
       b.  The error-index is set to the position (in the original
           request) of the varBind that caused the error-status.
       c.  The varBindList of the response PDU is made exactly the
           same as the varBindList that was received in the original
           request.
  2.  If the error-status is noError, then find any varBind that
      contains an SNMPv2 exception (noSuchObject or noSuchInstance)
      or an SNMPv2 syntax that is unknown to SNMPv1 (Counter64).
      (Note that if there are more than one, the agent may choose any
      such varBind.)  If there are any such varBinds, then for the
      one chosen:
       a.  Set the error-status to noSuchName
       b.  Set the error-index to the position (in the varBindList of
           the original request) of the varBind that returned such an
           SNMPv2 exception or syntax.
       c.  Make the varBindList of the response PDU exactly the same
           as the varBindList that was received in the original
           request.

Wijnen & Levi Informational [Page 6] RFC 2089 V2toV1 January 1997

   3.  If there are no such varBinds, then:
       a.  Set the error-status to noError
       b.  Set the error-index to zero
       c.  Compose the varBindList of the response, using the data as
           it is returned by the instrumentation code.

3.2 Processing an SNMPv1 GETNEXT request

 First, the request is converted into a call to the underlying
 instrumentation. This is implementation specific.  There may be
 repetitive calls to (possibly different pieces of) instrumentation
 code to try to find the first object which lexicographically follows
 each of the objects in the request.  Again, this is implementation
 specific.
 When the instrumentation finally returns response data using SNMPv2
 syntax and error-status values, then:
   1.  If the error-status is anything other than noError,
       a.  The error status is translated to an SNMPv1 error-status
           using the table from 2.1, "Mapping SNMPv2 error-status into
           SNMPv1 error-status" on page 2
       b.  The error-index is set to the position (in the original
           request) of the varBind that caused the error-status.
       c.  The varBindList of the response PDU is made exactly the
           same as the varBindList that was received in the original
           request.
   2.  If the error-status is noError, then:
       a.  If there are any varBinds containing an SNMPv2 syntax of
           Counter64, then consider these varBinds to be not in view
           and repeat the call to the instrumentation code as often as
           needed till a value other than Counter64 is returned.
       b.  Find any varBind that contains an SNMPv2 exception
           endOfMibView.  (Note that if there are more than one, the
           agent may choose any such varBind.)  If there are any such
           varBinds, then for the one chosen:
           1)  Set the error-status to noSuchName

Wijnen & Levi Informational [Page 7] RFC 2089 V2toV1 January 1997

           2)  Set the error-index to the position (in the varBindList
               of the original request) of the varBind that returned
               such an SNMPv2 exception.
           3)  Make the varBindList of the response PDU exactly the
               same as the varBindList that was received in the
               original request.
       c.  If there are no such varBinds, then:
           1)  Set the error-status to noError
           2)  Set the error-index to zero
           3)  Compose the varBindList of the response, using the data
               as it is returned by the instrumentation code.

3.3 Processing an outgoing SNMPv2 TRAP

 If SNMPv2 compliant instrumentation presents an SNMPv2 trap to the
 SNMP engine and such a trap passes all regular checking and then is
 to be sent to an SNMPv1 destination, then the following steps must be
 followed to convert such a trap to an SNMPv1 trap.  This is basically
 the reverse of the SNMPv1 to SNMPv2 mapping as described in RFC1908
 [3].
   1.  If any of the varBinds in the varBindList has an SNMPv2 syntax
       of Counter64, then such varBinds are implicitly considered to
       be not in view, and so they are removed from the varBindList to
       be sent with the SNMPv1 trap.
   2.  The 3 special varBinds in the varBindList of an SNMPv2 trap
       (sysUpTime.0 (TimeTicks), snmpTrapOID.0 (OBJECT IDENTIFIER) and
       optionally snmpTrapEnterprise.0 (OBJECT IDENTIFIER)) are
       removed from the varBindList to be sent with the SNMPv1 trap.
       These 2 (or 3) varBinds are used to decide how to set other
       fields in the SNMPv1 trap PDU as follows:
       a.  The value of sysUpTime.0 is copied into the timestamp field
           of the SNMPv1 trap.

Wijnen & Levi Informational [Page 8] RFC 2089 V2toV1 January 1997

       b.  If the snmpTrapOID.0 value is one of the standard traps the
           specific-trap field is set to zero and the generic trap
           field is set according to this mapping:
              value of snmpTrapOID.0                generic-trap
              ===============================       ============
              1.3.6.1.6.3.1.1.5.1 (coldStart)                  0
              1.3.6.1.6.3.1.1.5.2 (warmStart)                  1
              1.3.6.1.6.3.1.1.5.3 (linkDown)                   2
              1.3.6.1.6.3.1.1.5.4 (linkUp)                     3
              1.3.6.1.6.3.1.1.5.5 (authenticationFailure)      4
              1.3.6.1.6.3.1.1.5.6 (egpNeighborLoss)            5
           The enterprise field is set to the value of
           snmpTrapEnterprise.0 if this varBind is present, otherwise
           it is set to the value snmpTraps as defined in RFC1907 [4].
       c.  If the snmpTrapOID.0 value is not one of the standard
           traps, then the generic-trap field is set to 6 and the
           specific-trap field is set to the last subid of the
           snmpTrapOID.0 value.
           o   If the next to last subid of snmpTrapOID.0 is zero,
               then the enterprise field is set to snmpTrapOID.0 value
               and the last 2 subids are truncated from that value.
           o   If the next to last subid of snmpTrapOID.0 is not zero,
               then the enterprise field is set to snmpTrapOID.0 value
               and the last 1 subid is truncated from that value.
           In any event, the snmpTrapEnterprise.0 varBind (if present)
           is ignored in this case.
   3.  The agent-addr field is set with the appropriate address of the
       the sending SNMP entity, which is the IP address of the sending
       entity of the trap goes out over UDP; otherwise the agent-addr
       field is set to address 0.0.0.0.

Wijnen & Levi Informational [Page 9] RFC 2089 V2toV1 January 1997

4.0 Acknowledgements

 The authors wish to thank the contributions of the SNMPv2 Working
 Group in general.  Special thanks for their detailed review and
 comments goes to these individuals:
     Mike Daniele (DEC)
     Dave Harrington (Cabletron)
     Brian O'Keefe (Hewlett Packard)
     Keith McCloghrie (Cisco Systems)
     Dave Perkins (independent)
     Shawn Routhier (Epilogue)
     Juergen Schoenwaelder (University of Twente)

5.0 References

   [1]  Jeffrey  D. Case, Mark Fedor, Martin Lee Schoffstall and James
        R. Davin, Simple  Network  Management  Protocol  (SNMP),  SNMP
        Research,  Performance  Systems  International, MIT Laboratory
        for Computer Science, RFC 1157, May 1990.
   [2]  Jeffrey D. Case, Keith McCloghrie, Marshall T. Rose and Steven
        Waldbusser, Structure of Managment Information for  Version  2
        of  the  Simple  Network  Management  Protocol  (SNMPv2), SNMP
        Research Inc, Cisco Systems Inc, Dover Beach  Consulting  Inc,
        International Network Services, RFC1902, January 1996.
   [3]  Jeffrey D. Case, Keith McCloghrie, Marshall T. Rose and Steven
        Waldbusser, Coexistence between Version 1 and Version 2 of the
        Internet-standard  Network Management Framework, SNMP Research
        Inc,  Cisco  Systems  Inc,   Dover   Beach   Consulting   Inc,
        International Network Services, RFC1908, January 1996.
   [4]  Jeffrey D. Case, Keith McCloghrie, Marshall T. Rose and Steven
        Waldbusser,  Management  Information Base for Version 2 of the
        Simple Network Management  Protocol  (SNMPv2),  SNMP  Research
        Inc,   Cisco   Systems   Inc,   Dover  Beach  Consulting  Inc,
        International Network Services, RFC1907, January 1996.

6.0 Security Considerations

 Security considerations are not discussed in this memo.

Wijnen & Levi Informational [Page 10] RFC 2089 V2toV1 January 1997

7.0 Authors' Addresses

        Bert Wijnen
        IBM International Operations
        Watsonweg 2
        1423 ND Uithoorn
        The Netherlands
        Phone: +31-079-322-8316
        E-mail: wijnen@vnet.ibm.com
        David Levi
        SNMP Research, Inc
        3001 Kimberlin Heights Rd.
        Knoxville, TN 37920-9716
        USA
        Phone: +1-615-573-1434
        E-mail: levi@snmp.com

Wijnen & Levi Informational [Page 11] RFC 2089 V2toV1 January 1997

APPENDIX A. Background Information

 Here follows some reasoning as to why some choices were made.
 A.1  Mapping of error-status values
 The mapping of SNMPv2 error-status values to SNMPv1 error-status
 values is based on the common interpretation of how an SNMPv1 entity
 should create an error-status value based on the elements of
 procedure defined in RFC1157 [1].
 There was a suggestion to map wrongEncoding into genErr, because it
 could be caused by an ASN.1 parsing error.  Such maybe true, but in
 most cases when we detect the ASN.1 parsing error, we do not yet know
 about the PDU data yet.  Most people who responded to our queries
 have implemented the mapping to a badValue. So we "agreed" on the
 mapping to badValue.
 A.2  SNMPv1 Traps without Counter64 varBinds.
 RFC1448 says that if one of the objects in the varBindList is not
 included in the view, then the trap is NOT sent.  Current SNMPv2u and
 SNMPv2* documents make the same statement.  However, the "rough
 consensus" is that it is better to send partial information than no
 information at all. Besides:
   o   RFC1448 does not allow for a TRAP to be sent with the varBinds
       that are not included in the view removed, so it is an all or
       nothing decision.
   o   We do NOT include the Counter64 varBinds... so the "not in
       view" varBinds are not sent to the trap destination.
   o   The Counter64 objects are "implicit" not in view.  If any
       objects are explicit not in view, then this is checked before
       we do the conversion from an SNMPv2 trap to an SNMPv1 trap, and
       so the trap is not sent at all.

Wijnen & Levi Informational [Page 12]

/data/webs/external/dokuwiki/data/pages/rfc/rfc2089.txt · Last modified: 1997/01/25 01:13 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki