home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
- 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]
-
-