| |
| |
| |
| |
| |
| |
| Network Working Group J. Case |
| Request for Comments: 3412 SNMP Research, Inc. |
| STD: 62 D. Harrington |
| Obsoletes: 2572 Enterasys Networks |
| Category: Standards Track R. Presuhn |
| BMC Software, Inc. |
| B. Wijnen |
| Lucent Technologies |
| December 2002 |
| |
| |
| Message Processing and Dispatching for the |
| Simple Network Management Protocol (SNMP) |
| |
| Status of this Memo |
| |
| This document specifies an Internet standards track protocol for the |
| Internet community, and requests discussion and suggestions for |
| improvements. Please refer to the current edition of the "Internet |
| Official Protocol Standards" (STD 1) for the standardization state |
| and status of this protocol. Distribution of this memo is unlimited. |
| |
| Copyright Notice |
| |
| Copyright (C) The Internet Society (2002). All Rights Reserved. |
| |
| Abstract |
| |
| This document describes the Message Processing and Dispatching for |
| Simple Network Management Protocol (SNMP) messages within the SNMP |
| architecture. It defines the procedures for dispatching potentially |
| multiple versions of SNMP messages to the proper SNMP Message |
| Processing Models, and for dispatching PDUs to SNMP applications. |
| This document also describes one Message Processing Model - the |
| SNMPv3 Message Processing Model. This document obsoletes RFC 2572. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 1] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| Table of Contents |
| |
| 1. Introduction ................................................ 3 |
| 2. Overview .................................................... 4 |
| 2.1. The Dispatcher ............................................ 5 |
| 2.2. Message Processing Subsystem .............................. 5 |
| 3. Elements of Message Processing and Dispatching .............. 6 |
| 3.1. messageProcessingModel .................................... 6 |
| 3.2. pduVersion ................................................ 6 |
| 3.3. pduType ................................................... 7 |
| 3.4. sendPduHandle ............................................. 7 |
| 4. Dispatcher Elements of Procedure ............................ 7 |
| 4.1. Sending an SNMP Message to the Network .................... 7 |
| 4.1.1. Sending a Request or Notification ....................... 8 |
| 4.1.2. Sending a Response to the Network ....................... 9 |
| 4.2. Receiving an SNMP Message from the Network ................ 11 |
| 4.2.1. Message Dispatching of received SNMP Messages ........... 11 |
| 4.2.2. PDU Dispatching for Incoming Messages ................... 12 |
| 4.2.2.1. Incoming Requests and Notifications ................... 13 |
| 4.2.2.2. Incoming Responses .................................... 14 |
| 4.3. Application Registration for Handling PDU types ........... 15 |
| 4.4. Application Unregistration for Handling PDU Types ......... 16 |
| 5. Definitions ................................................. 16 |
| 5.1. Definitions for SNMP Message Processing and Dispatching ... 16 |
| 6. The SNMPv3 Message Format ................................... 19 |
| 6.1. msgVersion ................................................ 20 |
| 6.2. msgID ..................................................... 20 |
| 6.3. msgMaxSize ................................................ 21 |
| 6.4. msgFlags .................................................. 21 |
| 6.5. msgSecurityModel .......................................... 24 |
| 6.6. msgSecurityParameters ..................................... 24 |
| 6.7. scopedPduData ............................................. 24 |
| 6.8. scopedPDU ................................................. 24 |
| 6.8.1. contextEngineID ......................................... 24 |
| 6.8.2. contextName ............................................. 25 |
| 6.8.3. data .................................................... 25 |
| 7. Elements of Procedure for v3MP .............................. 25 |
| 7.1. Prepare an Outgoing SNMP Message .......................... 26 |
| 7.2. Prepare Data Elements from an Incoming SNMP Message ....... 32 |
| 8. Intellectual Property ....................................... 37 |
| 9. Acknowledgements ............................................ 38 |
| 10. Security Considerations .................................... 39 |
| 11. References ................................................. 40 |
| 11.1. Normative References ..................................... 40 |
| 11.2. Informative References ................................... 41 |
| 12. Editors' Addresses ......................................... 42 |
| 13. Full Copyright Statement ................................... 43 |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 2] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 1. Introduction |
| |
| The Architecture for describing Internet Management Frameworks |
| [RFC3411] describes that an SNMP engine is composed of: |
| |
| 1) a Dispatcher |
| 2) a Message Processing Subsystem, |
| 3) a Security Subsystem, and |
| 4) an Access Control Subsystem. |
| |
| Applications make use of the services of these subsystems. |
| |
| It is important to understand the SNMP architecture and its |
| terminology to understand where the Message Processing Subsystem and |
| Dispatcher described in this document fit into the architecture and |
| interact with other subsystems within the architecture. The reader |
| is expected to have read and understood the description of the SNMP |
| architecture, defined in [RFC3411]. |
| |
| The Dispatcher in the SNMP engine sends and receives SNMP messages. |
| It also dispatches SNMP PDUs to SNMP applications. When an SNMP |
| message needs to be prepared or when data needs to be extracted from |
| an SNMP message, the Dispatcher delegates these tasks to a message |
| version-specific Message Processing Model within the Message |
| Processing Subsystem. |
| |
| A Message Processing Model is responsible for processing an SNMP |
| version-specific message and for coordinating the interaction with |
| the Security Subsystem to ensure proper security is applied to the |
| SNMP message being handled. |
| |
| Interactions between the Dispatcher, the Message Processing |
| Subsystem, and applications are modeled using abstract data elements |
| and abstract service interface primitives defined by the SNMP |
| architecture. |
| |
| Similarly, interactions between the Message Processing Subsystem and |
| the Security Subsystem are modeled using abstract data elements and |
| abstract service interface primitives as defined by the SNMP |
| architecture. |
| |
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", |
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this |
| document are to be interpreted as described in BCP 14, RFC 2119. |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 3] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 2. Overview |
| |
| The following illustration depicts the Message Processing in relation |
| to SNMP applications, the Security Subsystem and Transport Mappings. |
| |
| +-------------------------------------------------------------------+ |
| | SNMP Entity | |
| | | |
| | +---------------------------------------------------------------+ | |
| | | Applications | | |
| | | +-----------+ +--------------+ | | |
| | | | Command | | Notification | | | |
| | | | Generator | | Originator | +-----------+ +--------------+| | |
| | | +-----------+ +--------------+ | Proxy | | Other || | |
| | | +-----------+ +--------------+ | Forwarder | |Application(s)|| | |
| | | | Command | | Notification | +-----------+ +--------------+| | |
| | | | Responder | | Receiver | | | |
| | | +-----------+ +--------------+ | | |
| | +---------------------------------------------------------------+ | |
| | ^ ^ ^ ^ | |
| | | | | | | |
| | v v v v | |
| | +--------+-------+---------------+-----------+ | |
| | ^ | |
| | | +---------------------+ +-----------------+ | |
| | | | Message Processing | | Security | | |
| | Dispatcher v | Subsystem | | Subsystem | | |
| | +------------------+ | +------------+ | | | | |
| | | PDU Dispatcher | | +->| v1MP * |<--->| +-------------+ | | |
| | | | | | +------------+ | | | Other | | | |
| | | | | | +------------+ | | | Security | | | |
| | | | | +->| v2cMP * |<--->| | Model | | | |
| | | Message | | | +------------+ | | +-------------+ | | |
| | | Dispatcher <-------->+ | | | | |
| | | | | | +------------+ | | +-------------+ | | |
| | | | | +->| v3MP * |<--->| | User-based | | | |
| | | Transport | | | +------------+ | | | Security | | | |
| | | Mapping | | | +------------+ | | | Model | | | |
| | | (e.g., RFC 3417) | | +->| otherMP * |<--->| +-------------+ | | |
| | +------------------+ | +------------+ | | | | |
| | ^ +---------------------+ +-----------------+ | |
| | | | |
| +----------|--------------------------------------------------------+ |
| v |
| +------------------+ |
| | Network | * One or more models may be present. |
| +------------------+ |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 4] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 2.1. The Dispatcher |
| |
| The Dispatcher is a key piece of an SNMP engine. There is only one |
| in an SNMP engine, and its job is to dispatch tasks to the multiple |
| version-specific Message Processing Models, and to dispatch PDUs to |
| various applications. |
| |
| For outgoing messages, an application provides a PDU to be sent, plus |
| the data needed to prepare and send the message, and the application |
| specifies which version-specific Message Processing Model will be |
| used to prepare the message with the desired security processing. |
| Once the message is prepared, the Dispatcher sends the message. |
| |
| For incoming messages, the Dispatcher determines the SNMP version of |
| the incoming message and passes the message to the version-specific |
| Message Processing Model to extract the components of the message and |
| to coordinate the processing of security services for the message. |
| After version-specific processing, the PDU Dispatcher determines |
| which application, if any, should receive the PDU for processing and |
| forwards it accordingly. |
| |
| The Dispatcher, while sending and receiving SNMP messages, collects |
| statistics about SNMP messages and the behavior of the SNMP engine in |
| managed objects to make them accessible to remote SNMP entities. |
| This document defines these managed objects, the MIB module which |
| contains them, and how these managed objects might be used to provide |
| useful management. |
| |
| 2.2. Message Processing Subsystem |
| |
| The SNMP Message Processing Subsystem is the part of an SNMP engine |
| which interacts with the Dispatcher to handle the version-specific |
| SNMP messages. It contains one or more Message Processing Models. |
| |
| This document describes one Message Processing Model, the SNMPv3 |
| Message Processing Model, in Section 6. The SNMPv3 Message |
| Processing Model is defined in a separate section to show that |
| multiple (independent) Message Processing Models can exist at the |
| same time and that such Models can be described in different |
| documents. The SNMPv3 Message Processing Model can be replaced or |
| supplemented with other Message Processing Models in the future. Two |
| Message Processing Models which are expected to be developed in the |
| future are the SNMPv1 message format [RFC1157] and the SNMPv2c |
| message format [RFC1901]. Others may be developed as needed. |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 5] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 3. Elements of Message Processing and Dispatching |
| |
| See [RFC3411] for the definitions of: |
| |
| contextEngineID |
| contextName |
| scopedPDU |
| maxSizeResponseScopedPDU |
| securityModel |
| securityName |
| securityLevel |
| messageProcessingModel |
| |
| For incoming messages, a version-specific message processing module |
| provides these values to the Dispatcher. For outgoing messages, an |
| application provides these values to the Dispatcher. |
| |
| For some version-specific processing, the values may be extracted |
| from received messages; for other versions, the values may be |
| determined by algorithm, or by an implementation-defined mechanism. |
| The mechanism by which the value is determined is irrelevant to the |
| Dispatcher. |
| |
| The following additional or expanded definitions are for use within |
| the Dispatcher. |
| |
| 3.1. messageProcessingModel |
| |
| The value of messageProcessingModel identifies a Message Processing |
| Model. A Message Processing Model describes the version-specific |
| procedures for extracting data from messages, generating messages, |
| calling upon a securityModel to apply its security services to |
| messages, for converting data from a version-specific message format |
| into a generic format usable by the Dispatcher, and for converting |
| data from Dispatcher format into a version-specific message format. |
| |
| 3.2. pduVersion |
| |
| The value of pduVersion represents a specific version of protocol |
| operation and its associated PDU formats, such as SNMPv1 or SNMPv2 |
| [RFC3416]. The values of pduVersion are specific to the version of |
| the PDU contained in a message, and the PDUs processed by |
| applications. The Dispatcher does not use the value of pduVersion |
| directly. |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 6] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| An application specifies the pduVersion when it requests the PDU |
| Dispatcher to send a PDU to another SNMP engine. The Dispatcher |
| passes the pduVersion to a Message Processing Model, so it knows how |
| to handle the PDU properly. |
| |
| For incoming messages, the pduVersion is provided to the Dispatcher |
| by a version-specific Message Processing module. The PDU Dispatcher |
| passes the pduVersion to the application so it knows how to handle |
| the PDU properly. For example, a command responder application needs |
| to know whether to use [RFC3416] elements of procedure and syntax |
| instead of those specified for SNMPv1. |
| |
| 3.3. pduType |
| |
| A value of the pduType represents a specific type of protocol |
| operation. The values of the pduType are specific to the version of |
| the PDU contained in a message. |
| |
| Applications register to support particular pduTypes for particular |
| contextEngineIDs. |
| |
| For incoming messages, pduType is provided to the Dispatcher by a |
| version-specific Message Processing module. It is subsequently used |
| to dispatch the PDU to the application which registered for the |
| pduType for the contextEngineID of the associated scopedPDU. |
| |
| 3.4. sendPduHandle |
| |
| This handle is generated for coordinating the processing of requests |
| and responses between the SNMP engine and an application. The handle |
| must be unique across all version-specific Message Processing Models, |
| and is of local significance only. |
| |
| 4. Dispatcher Elements of Procedure |
| |
| This section describes the procedures followed by the Dispatcher when |
| generating and processing SNMP messages. |
| |
| 4.1. Sending an SNMP Message to the Network |
| |
| This section describes the procedure followed by an SNMP engine |
| whenever it sends an SNMP message. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 7] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 4.1.1. Sending a Request or Notification |
| |
| The following procedures are followed by the Dispatcher when an |
| application wants to send an SNMP PDU to another (remote) |
| application, i.e., to initiate a communication by originating a |
| message, such as one containing a request or a notification. |
| |
| 1) The application requests this using the abstract service |
| primitive: |
| |
| statusInformation = -- sendPduHandle if success |
| -- errorIndication if failure |
| sendPdu( |
| IN transportDomain -- transport domain to be used |
| IN transportAddress -- destination network address |
| IN messageProcessingModel -- typically, SNMP version |
| IN securityModel -- Security Model to use |
| IN securityName -- on behalf of this principal |
| IN securityLevel -- Level of Security requested |
| IN contextEngineID -- data from/at this entity |
| IN contextName -- data from/in this context |
| IN pduVersion -- the version of the PDU |
| IN PDU -- SNMP Protocol Data Unit |
| IN expectResponse -- TRUE or FALSE |
| ) |
| |
| 2) If the messageProcessingModel value does not represent a Message |
| Processing Model known to the Dispatcher, then an errorIndication |
| (implementation-dependent) is returned to the calling application. |
| No further processing is performed. |
| |
| 3) The Dispatcher generates a sendPduHandle to coordinate subsequent |
| processing. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 8] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 4) The Message Dispatcher sends the request to the version-specific |
| Message Processing module identified by messageProcessingModel |
| using the abstract service primitive: |
| |
| statusInformation = -- success or error indication |
| prepareOutgoingMessage( |
| IN transportDomain -- as specified by application |
| IN transportAddress -- as specified by application |
| IN messageProcessingModel -- as specified by application |
| IN securityModel -- as specified by application |
| IN securityName -- as specified by application |
| IN securityLevel -- as specified by application |
| IN contextEngineID -- as specified by application |
| IN contextName -- as specified by application |
| IN pduVersion -- as specified by application |
| IN PDU -- as specified by application |
| IN expectResponse -- as specified by application |
| IN sendPduHandle -- as determined in step 3. |
| OUT destTransportDomain -- destination transport domain |
| OUT destTransportAddress -- destination transport address |
| OUT outgoingMessage -- the message to send |
| OUT outgoingMessageLength -- the message length |
| ) |
| |
| 5) If the statusInformation indicates an error, the errorIndication |
| is returned to the calling application. No further processing is |
| performed. |
| |
| 6) If the statusInformation indicates success, the sendPduHandle is |
| returned to the application, and the outgoingMessage is sent. The |
| transport used to send the outgoingMessage is returned via |
| destTransportDomain, and the address to which it was sent is |
| returned via destTransportAddress. |
| |
| Outgoing Message Processing is complete. |
| |
| 4.1.2. Sending a Response to the Network |
| |
| The following procedure is followed when an application wants to |
| return a response back to the originator of an SNMP Request. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 9] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 1) An application can request this using the abstract service |
| primitive: |
| |
| result = |
| returnResponsePdu( |
| IN messageProcessingModel -- typically, SNMP version |
| IN securityModel -- Security Model in use |
| IN securityName -- on behalf of this principal |
| IN securityLevel -- same as on incoming request |
| IN contextEngineID -- data from/at this SNMP entity |
| IN contextName -- data from/in this context |
| IN pduVersion -- the version of the PDU |
| IN PDU -- SNMP Protocol Data Unit |
| IN maxSizeResponseScopedPDU -- maximum size of Response PDU |
| IN stateReference -- reference to state information |
| -- as presented with the request |
| IN statusInformation -- success or errorIndication |
| ) -- (error counter OID and value |
| -- when errorIndication) |
| |
| 2) The Message Dispatcher sends the request to the appropriate |
| Message Processing Model indicated by the received value of |
| messageProcessingModel using the abstract service primitive: |
| |
| result = -- SUCCESS or errorIndication |
| prepareResponseMessage( |
| IN messageProcessingModel -- specified by application |
| IN securityModel -- specified by application |
| IN securityName -- specified by application |
| IN securityLevel -- specified by application |
| IN contextEngineID -- specified by application |
| IN contextName -- specified by application |
| IN pduVersion -- specified by application |
| IN PDU -- specified by application |
| IN maxSizeResponseScopedPDU -- specified by application |
| IN stateReference -- specified by application |
| IN statusInformation -- specified by application |
| OUT destTransportDomain -- destination transport domain |
| OUT destTransportAddress -- destination transport address |
| OUT outgoingMessage -- the message to send |
| OUT outgoingMessageLength -- the message length |
| ) |
| |
| 3) If the result is an errorIndication, the errorIndication is |
| returned to the calling application. No further processing is |
| performed. |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 10] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 4) If the result is success, the outgoingMessage is sent. The |
| transport used to send the outgoingMessage is returned via |
| destTransportDomain, and the address to which it was sent is |
| returned via destTransportAddress. |
| |
| Message Processing is complete. |
| |
| 4.2. Receiving an SNMP Message from the Network |
| |
| This section describes the procedure followed by an SNMP engine |
| whenever it receives an SNMP message. |
| |
| Please note, that for the sake of clarity and to prevent the text |
| from being even longer and more complicated, some details were |
| omitted from the steps below. In particular, the elements of |
| procedure do not always explicitly indicate when state information |
| needs to be released. The general rule is that if state information |
| is available when a message is to be "discarded without further |
| processing", then the state information must also be released at that |
| same time. |
| |
| 4.2.1. Message Dispatching of received SNMP Messages |
| |
| 1) The snmpInPkts counter [RFC3418] is incremented. |
| |
| 2) The version of the SNMP message is determined in an |
| implementation-dependent manner. If the packet cannot be |
| sufficiently parsed to determine the version of the SNMP message, |
| then the snmpInASNParseErrs [RFC3418] counter is incremented, and |
| the message is discarded without further processing. If the |
| version is not supported, then the snmpInBadVersions [RFC3418] |
| counter is incremented, and the message is discarded without |
| further processing. |
| |
| 3) The origin transportDomain and origin transportAddress are |
| determined. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 11] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 4) The message is passed to the version-specific Message Processing |
| Model which returns the abstract data elements required by the |
| Dispatcher. This is performed using the abstract service |
| primitive: |
| |
| result = -- SUCCESS or errorIndication |
| prepareDataElements( |
| IN transportDomain -- origin as determined in step 3. |
| IN transportAddress -- origin as determined in step 3. |
| IN wholeMsg -- as received from the network |
| IN wholeMsgLength -- as received from the network |
| OUT messageProcessingModel -- typically, SNMP version |
| OUT securityModel -- Security Model specified |
| OUT securityName -- on behalf of this principal |
| OUT securityLevel -- Level of Security specified |
| OUT contextEngineID -- data from/at this entity |
| OUT contextName -- data from/in this context |
| OUT pduVersion -- the version of the PDU |
| OUT PDU -- SNMP Protocol Data Unit |
| OUT pduType -- SNMP PDU type |
| OUT sendPduHandle -- handle for a matched request |
| OUT maxSizeResponseScopedPDU -- maximum size of Response PDU |
| OUT statusInformation -- success or errorIndication |
| -- (error counter OID and value |
| -- when errorIndication) |
| OUT stateReference -- reference to state information |
| -- to be used for a possible |
| ) -- Response |
| |
| 5) If the result is a FAILURE errorIndication, the message is |
| discarded without further processing. |
| |
| 6) At this point, the abstract data elements have been prepared and |
| processing continues as described in Section 4.2.2, PDU |
| Dispatching for Incoming Messages. |
| |
| 4.2.2. PDU Dispatching for Incoming Messages |
| |
| The elements of procedure for the dispatching of PDUs depends on the |
| value of sendPduHandle. If the value of sendPduHandle is <none>, |
| then this is a request or notification and the procedures specified |
| in Section 4.2.2.1 apply. If the value of snmpPduHandle is not |
| <none>, then this is a response and the procedures specified in |
| Section 4.2.2.2 apply. |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 12] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 4.2.2.1. Incoming Requests and Notifications |
| |
| The following procedures are followed for the dispatching of PDUs |
| when the value of sendPduHandle is <none>, indicating this is a |
| request or notification. |
| |
| 1) The combination of contextEngineID and pduType is used to |
| determine which application has registered for this request or |
| notification. |
| |
| 2) If no application has registered for the combination, then: |
| |
| a) The snmpUnknownPDUHandlers counter is incremented. |
| |
| b) A Response message is generated using the abstract service |
| primitive: |
| |
| result = -- SUCCESS or FAILURE |
| prepareResponseMessage( |
| IN messageProcessingModel -- as provided by MP module |
| IN securityModel -- as provided by MP module |
| IN securityName -- as provided by MP module |
| IN securityLevel -- as provided by MP module |
| IN contextEngineID -- as provided by MP module |
| IN contextName -- as provided by MP module |
| IN pduVersion -- as provided by MP module |
| IN PDU -- as provided by MP module |
| IN maxSizeResponseScopedPDU -- as provided by MP module |
| IN stateReference -- as provided by MP module |
| IN statusInformation -- errorIndication plus |
| -- snmpUnknownPDUHandlers OID |
| -- value pair. |
| OUT destTransportDomain -- destination transportDomain |
| OUT destTransportAddress -- destination transportAddress |
| OUT outgoingMessage -- the message to send |
| OUT outgoingMessageLength -- its length |
| ) |
| |
| c) If the result is SUCCESS, then the prepared message is sent to |
| the originator of the request as identified by the |
| transportDomain and transportAddress. The transport used to |
| send the outgoingMessage is returned via destTransportDomain, |
| and the address to which it was sent is returned via |
| destTransportAddress. |
| |
| d) The incoming message is discarded without further processing. |
| Message Processing for this message is complete. |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 13] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 3) The PDU is dispatched to the application, using the abstract |
| service primitive: |
| |
| processPdu( -- process Request/Notification |
| IN messageProcessingModel -- as provided by MP module |
| IN securityModel -- as provided by MP module |
| IN securityName -- as provided by MP module |
| IN securityLevel -- as provided by MP module |
| IN contextEngineID -- as provided by MP module |
| IN contextName -- as provided by MP module |
| IN pduVersion -- as provided by MP module |
| IN PDU -- as provided by MP module |
| IN maxSizeResponseScopedPDU -- as provided by MP module |
| IN stateReference -- as provided by MP module |
| -- needed when sending response |
| ) |
| |
| Message processing for this message is complete. |
| |
| 4.2.2.2. Incoming Responses |
| |
| The following procedures are followed for the dispatching of PDUs |
| when the value of sendPduHandle is not <none>, indicating this is a |
| response. |
| |
| 1) The value of sendPduHandle is used to determine, in an |
| implementation-defined manner, which application is waiting for a |
| response associated with this sendPduHandle. |
| |
| 2) If no waiting application is found, the message is discarded |
| without further processing, and the stateReference is released. |
| The snmpUnknownPDUHandlers counter is incremented. Message |
| Processing is complete for this message. |
| |
| 3) Any cached information, including stateReference, about the |
| message is discarded. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 14] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 4) The response is dispatched to the application using the abstract |
| service primitive: |
| |
| processResponsePdu( -- process Response PDU |
| IN messageProcessingModel -- provided by the MP module |
| IN securityModel -- provided by the MP module |
| IN securityName -- provided by the MP module |
| IN securityLevel -- provided by the MP module |
| IN contextEngineID -- provided by the MP module |
| IN contextName -- provided by the MP module |
| IN pduVersion -- provided by the MP module |
| IN PDU -- provided by the MP module |
| IN statusInformation -- provided by the MP module |
| IN sendPduHandle -- provided by the MP module |
| ) |
| |
| Message Processing is complete for this message. |
| |
| 4.3. Application Registration for Handling PDU types |
| |
| Applications that want to process certain PDUs must register with the |
| PDU Dispatcher. Applications specify the combination of |
| contextEngineID and pduType(s) for which they want to take |
| responsibility. |
| |
| 1) An application registers according to the abstract interface |
| primitive: |
| |
| statusInformation = -- success or errorIndication |
| registerContextEngineID( |
| IN contextEngineID -- take responsibility for this one |
| IN pduType -- the pduType(s) to be registered |
| ) |
| |
| Note: Implementations may provide a means of requesting |
| registration for simultaneous multiple contextEngineID values, |
| e.g., all contextEngineID values, and may also provide a means for |
| requesting simultaneous registration for multiple values of the |
| pduType. |
| |
| 2) The parameters may be checked for validity; if they are not, then |
| an errorIndication (invalidParameter) is returned to the |
| application. |
| |
| 3) Each combination of contextEngineID and pduType can be registered |
| only once. If another application has already registered for the |
| specified combination, then an errorIndication (alreadyRegistered) |
| is returned to the application. |
| |
| |
| |
| Case, et al. Standards Track [Page 15] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 4) Otherwise, the registration is saved so that SNMP PDUs can be |
| dispatched to this application. |
| |
| 4.4. Application Unregistration for Handling PDU Types |
| |
| Applications that no longer want to process certain PDUs must |
| unregister with the PDU Dispatcher. |
| |
| 1) An application unregisters using the abstract service primitive: |
| |
| unregisterContextEngineID( |
| IN contextEngineID -- give up responsibility for this |
| IN pduType -- the pduType(s) to be unregistered |
| ) |
| |
| Note: Implementations may provide a means for requesting the |
| unregistration for simultaneous multiple contextEngineID values, |
| e.g., all contextEngineID values, and may also provide a means for |
| requesting simultaneous unregistration for multiple values of |
| pduType. |
| |
| 2) If the contextEngineID and pduType combination has been |
| registered, then the registration is deleted. |
| |
| If no such registration exists, then the request is ignored. |
| |
| 5. Definitions |
| |
| 5.1. Definitions for SNMP Message Processing and Dispatching |
| |
| SNMP-MPD-MIB DEFINITIONS ::= BEGIN |
| |
| IMPORTS |
| MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF |
| MODULE-IDENTITY, OBJECT-TYPE, |
| snmpModules, Counter32 FROM SNMPv2-SMI; |
| |
| snmpMPDMIB MODULE-IDENTITY |
| LAST-UPDATED "200210140000Z" |
| ORGANIZATION "SNMPv3 Working Group" |
| CONTACT-INFO "WG-EMail: snmpv3@lists.tislabs.com |
| Subscribe: snmpv3-request@lists.tislabs.com |
| |
| Co-Chair: Russ Mundy |
| Network Associates Laboratories |
| postal: 15204 Omega Drive, Suite 300 |
| Rockville, MD 20850-4601 |
| USA |
| |
| |
| |
| Case, et al. Standards Track [Page 16] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| EMail: mundy@tislabs.com |
| phone: +1 301-947-7107 |
| |
| Co-Chair & |
| Co-editor: David Harrington |
| Enterasys Networks |
| postal: 35 Industrial Way |
| P. O. Box 5005 |
| Rochester NH 03866-5005 |
| USA |
| EMail: dbh@enterasys.com |
| phone: +1 603-337-2614 |
| |
| Co-editor: Jeffrey Case |
| SNMP Research, Inc. |
| postal: 3001 Kimberlin Heights Road |
| Knoxville, TN 37920-9716 |
| USA |
| EMail: case@snmp.com |
| phone: +1 423-573-1434 |
| |
| Co-editor: Randy Presuhn |
| BMC Software, Inc. |
| postal: 2141 North First Street |
| San Jose, CA 95131 |
| USA |
| EMail: randy_presuhn@bmc.com |
| phone: +1 408-546-1006 |
| |
| Co-editor: Bert Wijnen |
| Lucent Technologies |
| postal: Schagen 33 |
| 3461 GL Linschoten |
| Netherlands |
| EMail: bwijnen@lucent.com |
| phone: +31 348-680-485 |
| " |
| DESCRIPTION "The MIB for Message Processing and Dispatching |
| |
| Copyright (C) The Internet Society (2002). This |
| version of this MIB module is part of RFC 3412; |
| see the RFC itself for full legal notices. |
| " |
| REVISION "200210140000Z" -- 14 October 2002 |
| DESCRIPTION "Updated addresses, published as RFC 3412." |
| REVISION "199905041636Z" -- 4 May 1999 |
| DESCRIPTION "Updated addresses, published as RFC 2572." |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 17] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| REVISION "199709300000Z" -- 30 September 1997 |
| DESCRIPTION "Original version, published as RFC 2272." |
| ::= { snmpModules 11 } |
| |
| -- Administrative assignments *************************************** |
| |
| snmpMPDAdmin OBJECT IDENTIFIER ::= { snmpMPDMIB 1 } |
| snmpMPDMIBObjects OBJECT IDENTIFIER ::= { snmpMPDMIB 2 } |
| snmpMPDMIBConformance OBJECT IDENTIFIER ::= { snmpMPDMIB 3 } |
| |
| -- Statistics for SNMP Messages ************************************* |
| |
| snmpMPDStats OBJECT IDENTIFIER ::= { snmpMPDMIBObjects 1 } |
| |
| snmpUnknownSecurityModels OBJECT-TYPE |
| SYNTAX Counter32 |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "The total number of packets received by the SNMP |
| engine which were dropped because they referenced a |
| securityModel that was not known to or supported by |
| the SNMP engine. |
| " |
| ::= { snmpMPDStats 1 } |
| |
| snmpInvalidMsgs OBJECT-TYPE |
| SYNTAX Counter32 |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "The total number of packets received by the SNMP |
| engine which were dropped because there were invalid |
| or inconsistent components in the SNMP message. |
| " |
| ::= { snmpMPDStats 2 } |
| |
| snmpUnknownPDUHandlers OBJECT-TYPE |
| SYNTAX Counter32 |
| MAX-ACCESS read-only |
| STATUS current |
| DESCRIPTION "The total number of packets received by the SNMP |
| engine which were dropped because the PDU contained |
| in the packet could not be passed to an application |
| responsible for handling the pduType, e.g. no SNMP |
| application had registered for the proper |
| combination of the contextEngineID and the pduType. |
| " |
| ::= { snmpMPDStats 3 } |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 18] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| -- Conformance information ****************************************** |
| |
| snmpMPDMIBCompliances OBJECT IDENTIFIER ::= {snmpMPDMIBConformance 1} |
| snmpMPDMIBGroups OBJECT IDENTIFIER ::= {snmpMPDMIBConformance 2} |
| |
| -- Compliance statements |
| |
| snmpMPDCompliance MODULE-COMPLIANCE |
| STATUS current |
| DESCRIPTION "The compliance statement for SNMP entities which |
| implement the SNMP-MPD-MIB. |
| " |
| MODULE -- this module |
| MANDATORY-GROUPS { snmpMPDGroup } |
| ::= { snmpMPDMIBCompliances 1 } |
| |
| snmpMPDGroup OBJECT-GROUP |
| OBJECTS { |
| snmpUnknownSecurityModels, |
| snmpInvalidMsgs, |
| snmpUnknownPDUHandlers |
| } |
| STATUS current |
| DESCRIPTION "A collection of objects providing for remote |
| monitoring of the SNMP Message Processing and |
| Dispatching process. |
| " |
| ::= { snmpMPDMIBGroups 1 } |
| |
| END |
| |
| 6. The SNMPv3 Message Format |
| |
| This section defines the SNMPv3 message format and the corresponding |
| SNMP version 3 Message Processing Model (v3MP). |
| |
| SNMPv3MessageSyntax DEFINITIONS IMPLICIT TAGS ::= BEGIN |
| |
| SNMPv3Message ::= SEQUENCE { |
| -- identify the layout of the SNMPv3Message |
| -- this element is in same position as in SNMPv1 |
| -- and SNMPv2c, allowing recognition |
| -- the value 3 is used for snmpv3 |
| msgVersion INTEGER ( 0 .. 2147483647 ), |
| -- administrative parameters |
| msgGlobalData HeaderData, |
| -- security model-specific parameters |
| -- format defined by Security Model |
| |
| |
| |
| Case, et al. Standards Track [Page 19] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| msgSecurityParameters OCTET STRING, |
| msgData ScopedPduData |
| } |
| |
| HeaderData ::= SEQUENCE { |
| msgID INTEGER (0..2147483647), |
| msgMaxSize INTEGER (484..2147483647), |
| |
| msgFlags OCTET STRING (SIZE(1)), |
| -- .... ...1 authFlag |
| -- .... ..1. privFlag |
| -- .... .1.. reportableFlag |
| -- Please observe: |
| -- .... ..00 is OK, means noAuthNoPriv |
| -- .... ..01 is OK, means authNoPriv |
| -- .... ..10 reserved, MUST NOT be used. |
| -- .... ..11 is OK, means authPriv |
| |
| msgSecurityModel INTEGER (1..2147483647) |
| } |
| |
| ScopedPduData ::= CHOICE { |
| plaintext ScopedPDU, |
| encryptedPDU OCTET STRING -- encrypted scopedPDU value |
| } |
| |
| ScopedPDU ::= SEQUENCE { |
| contextEngineID OCTET STRING, |
| contextName OCTET STRING, |
| data ANY -- e.g., PDUs as defined in [RFC3416] |
| } |
| END |
| |
| 6.1. msgVersion |
| |
| The msgVersion field is set to snmpv3(3) and identifies the message |
| as an SNMP version 3 Message. |
| |
| 6.2. msgID |
| |
| The msgID is used between two SNMP entities to coordinate request |
| messages and responses, and by the v3MP to coordinate the processing |
| of the message by different subsystem models within the architecture. |
| |
| Values for msgID SHOULD be generated in a manner that avoids re-use |
| of any outstanding values. Doing so provides protection against some |
| replay attacks. One possible implementation strategy would be to use |
| the low-order bits of snmpEngineBoots [RFC3411] as the high-order |
| |
| |
| |
| Case, et al. Standards Track [Page 20] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| portion of the msgID value and a monotonically increasing integer for |
| the low-order portion of msgID. |
| |
| Note that the request-id in a PDU may be used by SNMP applications to |
| identify the PDU; the msgID is used by the engine to identify the |
| message which carries a PDU. The engine needs to identify the |
| message even if decryption of the PDU (and request-id) fails. No |
| assumption should be made that the value of the msgID and the value |
| of the request-id are equivalent. |
| |
| The value of the msgID field for a response takes the value of the |
| msgID field from the message to which it is a response. By use of |
| the msgID value, an engine can distinguish the (potentially multiple) |
| outstanding requests, and thereby correlate incoming responses with |
| outstanding requests. In cases where an unreliable datagram service |
| is used, the msgID also provides a simple means of identifying |
| messages duplicated by the network. If a request is retransmitted, a |
| new msgID value SHOULD be used for each retransmission. |
| |
| 6.3. msgMaxSize |
| |
| The msgMaxSize field of the message conveys the maximum message size |
| supported by the sender of the message, i.e., the maximum message |
| size that the sender can accept when another SNMP engine sends an |
| SNMP message (be it a response or any other message) to the sender of |
| this message on the transport in use for this message. |
| |
| When an SNMP message is being generated, the msgMaxSize is provided |
| by the SNMP engine which generates the message. At the receiving |
| SNMP engine, the msgMaxSize is used to determine the maximum message |
| size the sender can accommodate. |
| |
| 6.4. msgFlags |
| |
| The msgFlags field of the message contains several bit fields which |
| control processing of the message. |
| |
| The reportableFlag is a secondary aid in determining whether a Report |
| PDU MUST be sent. It is only used in cases where the PDU portion of |
| a message cannot be decoded, due to, for example, an incorrect |
| encryption key. If the PDU can be decoded, the PDU type forms the |
| basis for decisions on sending Report PDUs. |
| |
| When the reportableFlag is used, if its value is one, a Report PDU |
| MUST be returned to the sender under those conditions which can cause |
| the generation of Report PDUs. Similarly, when the reportableFlag is |
| used and its value is zero, then a Report PDU MUST NOT be sent. The |
| reportableFlag MUST always be zero when the message contains a PDU |
| |
| |
| |
| Case, et al. Standards Track [Page 21] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| from the Unconfirmed Class, such as a Report PDU, a response-type PDU |
| (such as a Response PDU), or an unacknowledged notification-type PDU |
| (such as an SNMPv2-trap PDU). The reportableFlag MUST always be one |
| for a PDU from the Confirmed Class, including request-type PDUs (such |
| as a Get PDU) and acknowledged notification-type PDUs (such as an |
| Inform PDU). |
| |
| If the reportableFlag is set to one for a message containing a PDU |
| from the Unconfirmed Class, such as a Report PDU, a response-type PDU |
| (such as a Response PDU), or an unacknowledged notification-type PDU |
| (such as an SNMPv2-trap PDU), then the receiver of that message MUST |
| process it as though the reportableFlag had been set to zero. |
| |
| If the reportableFlag is set to zero for a message containing a |
| request-type PDU (such as a Get PDU) or an acknowledged |
| notification-type PDU (such as an Inform PDU), then the receiver of |
| that message MUST process it as though the reportableFlag had been |
| set to one. |
| |
| Report PDUs are generated directly by the SNMPv3 Message Processing |
| Model, and support engine-to-engine communications, but may be passed |
| to applications for processing. |
| |
| An SNMP engine that receives a reportPDU may use it to determine what |
| kind of problem was detected by the remote SNMP engine. It can do so |
| based on the error counter included as the first (and only) varBind |
| of the reportPDU. Based on the detected error, the SNMP engine may |
| try to send a corrected SNMP message. If that is not possible, it |
| may pass an indication of the error to the application on whose |
| behalf the failed SNMP request was issued. |
| |
| The authFlag and privFlag portions of the msgFlags field are set by |
| the sender to indicate the securityLevel that was applied to the |
| message before it was sent on the wire. The receiver of the message |
| MUST apply the same securityLevel when the message is received and |
| the contents are being processed. |
| |
| There are three securityLevels, namely noAuthNoPriv, which is less |
| than authNoPriv, which is in turn less than authPriv. See the SNMP |
| architecture document [RFC3411] for details about the securityLevel. |
| |
| a) authFlag |
| |
| If the authFlag is set to one, then the securityModel used by the |
| SNMP engine which sent the message MUST identify the securityName |
| on whose behalf the SNMP message was generated and MUST provide, |
| in a securityModel-specific manner, sufficient data for the |
| receiver of the message to be able to authenticate that |
| |
| |
| |
| Case, et al. Standards Track [Page 22] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| identification. In general, this authentication will allow the |
| receiver to determine with reasonable certainty that the message |
| was: |
| |
| - sent on behalf of the principal associated with the |
| securityName, |
| |
| - was not redirected, |
| |
| - was not modified in transit, and |
| |
| - was not replayed. |
| |
| If the authFlag is zero, then the securityModel used by the SNMP |
| engine which sent the message MUST identify the securityName on |
| whose behalf the SNMP message was generated but it does not need |
| to provide sufficient data for the receiver of the message to |
| authenticate the identification, as there is no need to |
| authenticate the message in this case. |
| |
| b) privFlag |
| |
| If the privFlag is set, then the securityModel used by the SNMP |
| engine which sent the message MUST also protect the scopedPDU in |
| an SNMP message from disclosure, i.e., it MUST encrypt/decrypt the |
| scopedPDU. If the privFlag is zero, then the securityModel in use |
| does not need to protect the data from disclosure. |
| |
| It is an explicit requirement of the SNMP architecture that if |
| privacy is selected, then authentication is also required. That |
| means that if the privFlag is set, then the authFlag MUST also be |
| set to one. |
| |
| The combination of the authFlag and the privFlag comprises a Level |
| of Security as follows: |
| |
| authFlag zero, privFlag zero -> securityLevel is noAuthNoPriv |
| authFlag zero, privFlag one -> invalid combination, see below |
| authFlag one, privFlag zero -> securityLevel is authNoPriv |
| authFlag one, privFlag one -> securityLevel is authPriv |
| |
| The elements of procedure (see below) describe the action to be taken |
| when the invalid combination of authFlag equal to zero and privFlag |
| equal to one is encountered. |
| |
| The remaining bits in msgFlags are reserved, and MUST be set to zero |
| when sending a message and SHOULD be ignored when receiving a |
| message. |
| |
| |
| |
| Case, et al. Standards Track [Page 23] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 6.5. msgSecurityModel |
| |
| The v3MP supports the concurrent existence of multiple Security |
| Models to provide security services for SNMPv3 messages. The |
| msgSecurityModel field in an SNMPv3 Message identifies which Security |
| Model was used by the sender to generate the message and therefore |
| which securityModel MUST be used by the receiver to perform security |
| processing for the message. The mapping to the appropriate |
| securityModel implementation within an SNMP engine is accomplished in |
| an implementation-dependent manner. |
| |
| 6.6. msgSecurityParameters |
| |
| The msgSecurityParameters field of the SNMPv3 Message is used for |
| communication between the Security Model modules in the sending and |
| receiving SNMP engines. The data in the msgSecurityParameters field |
| is used exclusively by the Security Model, and the contents and |
| format of the data is defined by the Security Model. This OCTET |
| STRING is not interpreted by the v3MP, but is passed to the local |
| implementation of the Security Model indicated by the |
| msgSecurityModel field in the message. |
| |
| 6.7. scopedPduData |
| |
| The scopedPduData field represents either the plain text scopedPDU if |
| the privFlag in the msgFlags is zero, or it represents an |
| encryptedPDU (encoded as an OCTET STRING) which MUST be decrypted by |
| the securityModel in use to produce a plaintext scopedPDU. |
| |
| 6.8. scopedPDU |
| |
| The scopedPDU contains information to identify an administratively |
| unique context and a PDU. The object identifiers in the PDU refer to |
| managed objects which are (expected to be) accessible within the |
| specified context. |
| |
| 6.8.1. contextEngineID |
| |
| The contextEngineID in the SNMPv3 message uniquely identifies, within |
| an administrative domain, an SNMP entity that may realize an instance |
| of a context with a particular contextName. |
| |
| For incoming messages, the contextEngineID is used in conjunction |
| with the pduType to determine to which application the scopedPDU will |
| be sent for processing. |
| |
| For outgoing messages, the v3MP sets the contextEngineID to the value |
| provided by the application in the request for a message to be sent. |
| |
| |
| |
| Case, et al. Standards Track [Page 24] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 6.8.2. contextName |
| |
| The contextName field in an SNMPv3 message, in conjunction with the |
| contextEngineID field, identifies the particular context associated |
| with the management information contained in the PDU portion of the |
| message. The contextName is unique within the SNMP entity specified |
| by the contextEngineID, which may realize the managed objects |
| referenced within the PDU. An application which originates a message |
| provides the value for the contextName field and this value may be |
| used during processing by an application at the receiving SNMP |
| Engine. |
| |
| 6.8.3. data |
| |
| The data field of the SNMPv3 Message contains the PDU. Among other |
| things, the PDU contains the PDU type that is used by the v3MP to |
| determine the type of the incoming SNMP message. The v3MP specifies |
| that the PDU MUST be one of those specified in [RFC3416]. |
| |
| 7. Elements of Procedure for v3MP |
| |
| This section describes the procedures followed by an SNMP engine when |
| generating and processing SNMP messages according to the SNMPv3 |
| Message Processing Model. |
| |
| Please note, that for the sake of clarity and to prevent the text |
| from being even longer and more complicated, some details were |
| omitted from the steps below. |
| |
| a) Some steps specify that when some error conditions are |
| encountered when processing a received message, a message |
| containing a Report PDU is generated and the received message |
| is discarded without further processing. However, a Report-PDU |
| MUST NOT be generated unless the PDU causing generation of the |
| Report PDU can be determined to be a member of the Confirmed |
| Class, or the reportableFlag is set to one and the PDU class |
| cannot be determined. |
| |
| b) The elements of procedure do not always explicitly indicate |
| when state information needs to be released. The general rule |
| is that if state information is available when a message is to |
| be "discarded without further processing", then the state |
| information should also be released at that same time. |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 25] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 7.1. Prepare an Outgoing SNMP Message |
| |
| This section describes the procedure followed to prepare an SNMPv3 |
| message from the data elements passed by the Message Dispatcher. |
| |
| 1) The Message Dispatcher may request that an SNMPv3 message |
| containing a Read Class, Write Class, or Notification Class PDU be |
| prepared for sending. |
| |
| a) It makes such a request according to the abstract service |
| primitive: |
| |
| statusInformation = -- success or errorIndication |
| prepareOutgoingMessage( |
| IN transportDomain -- requested transport domain |
| IN transportAddress -- requested destination address |
| IN messageProcessingModel -- typically, SNMP version |
| IN securityModel -- Security Model to use |
| IN securityName -- on behalf of this principal |
| IN securityLevel -- Level of Security requested |
| IN contextEngineID -- data from/at this entity |
| IN contextName -- data from/in this context |
| IN pduVersion -- version of the PDU * |
| IN PDU -- SNMP Protocol Data Unit |
| IN expectResponse -- TRUE or FALSE * |
| IN sendPduHandle -- the handle for matching |
| -- incoming responses |
| OUT destTransportDomain -- destination transport domain |
| OUT destTransportAddress -- destination transport address |
| OUT outgoingMessage -- the message to send |
| OUT outgoingMessageLength -- the length of the message |
| ) |
| |
| * The SNMPv3 Message Processing Model does not use the values of |
| expectResponse or pduVersion. |
| |
| b) A unique msgID is generated. The number used for msgID should |
| not have been used recently, and MUST NOT be the same as was |
| used for any outstanding request. |
| |
| 2) The Message Dispatcher may request that an SNMPv3 message |
| containing a Response Class or Internal Class PDU be prepared for |
| sending. |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 26] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| a) It makes such a request according to the abstract service |
| primitive: |
| |
| result = -- SUCCESS or FAILURE |
| prepareResponseMessage( |
| IN messageProcessingModel -- typically, SNMP version |
| IN securityModel -- same as on incoming request |
| IN securityName -- same as on incoming request |
| IN securityLevel -- same as on incoming request |
| IN contextEngineID -- data from/at this SNMP entity |
| IN contextName -- data from/in this context |
| IN pduVersion -- version of the PDU |
| IN PDU -- SNMP Protocol Data Unit |
| IN maxSizeResponseScopedPDU -- maximum size sender can |
| -- accept |
| IN stateReference -- reference to state |
| -- information presented with |
| -- the request |
| IN statusInformation -- success or errorIndication |
| -- error counter OID and value |
| -- when errorIndication |
| OUT destTransportDomain -- destination transport domain |
| OUT destTransportAddress -- destination transport address |
| OUT outgoingMessage -- the message to send |
| OUT outgoingMessageLength -- the length of the message |
| ) |
| |
| b) The cached information for the original request is retrieved |
| via the stateReference, including: |
| |
| - msgID, |
| - contextEngineID, |
| - contextName, |
| - securityModel, |
| - securityName, |
| - securityLevel, |
| - securityStateReference, |
| - reportableFlag, |
| - transportDomain, and |
| - transportAddress. |
| |
| The SNMPv3 Message Processing Model does not allow cached data |
| to be overridden, except by error indications as detailed in |
| (3) below. |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 27] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 3) If statusInformation contains values for an OID/value combination |
| (potentially also containing a securityLevel value, |
| contextEngineID value, or contextName value), then: |
| |
| a) If a PDU is provided, it is the PDU from the original request. |
| If possible, extract the request-id and pduType. |
| |
| b) If the pduType is determined to not be a member of the |
| Confirmed Class, or if the reportableFlag is zero and the |
| pduType cannot be determined, then the original message is |
| discarded, and no further processing is done. A result of |
| FAILURE is returned. SNMPv3 Message Processing is complete. |
| |
| c) A Report PDU is prepared: |
| |
| 1) the varBindList is set to contain the OID and value from the |
| statusInformation. |
| |
| 2) error-status is set to 0. |
| |
| 3) error-index is set to 0. |
| |
| 4) request-id is set to the value extracted in step b). |
| Otherwise, request-id is set to 0. |
| |
| d) The errorIndication in statusInformation may be accompanied by |
| a securityLevel value, a contextEngineID value, or a |
| contextName value. |
| |
| 1) If statusInformation contains a value for securityLevel, |
| then securityLevel is set to that value, otherwise it is set |
| to noAuthNoPriv. |
| |
| 2) If statusInformation contains a value for contextEngineID, |
| then contextEngineID is set to that value, otherwise it is |
| set to the value of this entity's snmpEngineID. |
| |
| 3) If statusInformation contains a value for contextName, then |
| contextName is set to that value, otherwise it is set to the |
| default context of "" (zero-length string). |
| |
| e) PDU is set to refer to the new Report-PDU. The old PDU is |
| discarded. |
| |
| f) Processing continues with step 6) below. |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 28] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 4) If the contextEngineID is not yet determined, then the |
| contextEngineID is determined, in an implementation-dependent |
| manner, possibly using the transportDomain and transportAddress. |
| |
| 5) If the contextName is not yet determined, the contextName is set |
| to the default context. |
| |
| 6) A scopedPDU is prepared from the contextEngineID, contextName, and |
| PDU. |
| |
| 7) msgGlobalData is constructed as follows: |
| |
| a) The msgVersion field is set to snmpv3(3). |
| |
| b) msgID is set as determined in step 1 or 2 above. |
| |
| c) msgMaxSize is set to an implementation-dependent value. |
| |
| d) msgFlags are set as follows: |
| |
| - If securityLevel specifies noAuthNoPriv, then authFlag and |
| privFlag are both set to zero. |
| |
| - If securityLevel specifies authNoPriv, then authFlag is set |
| to one and privFlag is set to zero. |
| |
| - If securityLevel specifies authPriv, then authFlag is set to |
| one and privFlag is set to one. |
| |
| - If the PDU is from the Unconfirmed Class, then the |
| reportableFlag is set to zero. |
| |
| - If the PDU is from the Confirmed Class then the |
| reportableFlag is set to one. |
| |
| - All other msgFlags bits are set to zero. |
| |
| e) msgSecurityModel is set to the value of securityModel. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 29] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 8) If the PDU is from the Response Class or the Internal Class, then: |
| |
| a) The specified Security Model is called to generate the message |
| according to the primitive: |
| |
| statusInformation = |
| generateResponseMsg( |
| IN messageProcessingModel -- SNMPv3 Message Processing |
| -- Model |
| IN globalData -- msgGlobalData from step 7 |
| IN maxMessageSize -- from msgMaxSize (step 7c) |
| IN securityModel -- as determined in step 7e |
| IN securityEngineID -- the value of snmpEngineID |
| IN securityName -- on behalf of this principal |
| IN securityLevel -- for the outgoing message |
| IN scopedPDU -- as prepared in step 6) |
| IN securityStateReference -- as determined in step 2 |
| OUT securityParameters -- filled in by Security Module |
| OUT wholeMsg -- complete generated message |
| OUT wholeMsgLength -- length of generated message |
| ) |
| |
| If, upon return from the Security Model, the statusInformation |
| includes an errorIndication, then any cached information about |
| the outstanding request message is discarded, and an |
| errorIndication is returned, so it can be returned to the |
| calling application. SNMPv3 Message Processing is complete. |
| |
| b) A SUCCESS result is returned. SNMPv3 Message Processing is |
| complete. |
| |
| 9) If the PDU is from the Confirmed Class or the Notification Class, |
| then: |
| |
| a) If the PDU is from the Unconfirmed Class, then securityEngineID |
| is set to the value of this entity's snmpEngineID. |
| |
| Otherwise, the snmpEngineID of the target entity is determined, |
| in an implementation-dependent manner, possibly using |
| transportDomain and transportAddress. The value of the |
| securityEngineID is set to the value of the target entity's |
| snmpEngineID. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 30] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| b) The specified Security Model is called to generate the message |
| according to the primitive: |
| |
| statusInformation = |
| generateRequestMsg( |
| IN messageProcessingModel -- SNMPv3 Message Processing Model |
| IN globalData -- msgGlobalData, from step 7 |
| IN maxMessageSize -- from msgMaxSize in step 7 c) |
| IN securityModel -- as provided by caller |
| IN securityEngineID -- authoritative SNMP entity |
| -- from step 9 a) |
| IN securityName -- as provided by caller |
| IN securityLevel -- as provided by caller |
| IN scopedPDU -- as prepared in step 6 |
| OUT securityParameters -- filled in by Security Module |
| OUT wholeMsg -- complete generated message |
| OUT wholeMsgLength -- length of the generated message |
| ) |
| |
| If, upon return from the Security Model, the statusInformation |
| includes an errorIndication, then the message is discarded, and |
| the errorIndication is returned, so it can be returned to the |
| calling application, and no further processing is done. SNMPv3 |
| Message Processing is complete. |
| |
| c) If the PDU is from the Confirmed Class, information about the |
| outgoing message is cached, and an implementation-specific |
| stateReference is created. Information to be cached includes |
| the values of: |
| |
| - sendPduHandle |
| - msgID |
| - snmpEngineID |
| - securityModel |
| - securityName |
| - securityLevel |
| - contextEngineID |
| - contextName |
| |
| d) A SUCCESS result is returned. SNMPv3 Message Processing is |
| complete. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 31] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 7.2. Prepare Data Elements from an Incoming SNMP Message |
| |
| This section describes the procedure followed to extract data from an |
| SNMPv3 message, and to prepare the data elements required for further |
| processing of the message by the Message Dispatcher. |
| |
| 1) The message is passed in from the Message Dispatcher according to |
| the abstract service primitive: |
| |
| result = -- SUCCESS or errorIndication |
| prepareDataElements( |
| IN transportDomain -- origin transport domain |
| IN transportAddress -- origin transport address |
| IN wholeMsg -- as received from the network |
| IN wholeMsgLength -- as received from the network |
| OUT messageProcessingModel -- typically, SNMP version |
| OUT securityModel -- Security Model to use |
| OUT securityName -- on behalf of this principal |
| OUT securityLevel -- Level of Security requested |
| OUT contextEngineID -- data from/at this entity |
| OUT contextName -- data from/in this context |
| OUT pduVersion -- version of the PDU |
| OUT PDU -- SNMP Protocol Data Unit |
| OUT pduType -- SNMP PDU type |
| OUT sendPduHandle -- handle for matched request |
| OUT maxSizeResponseScopedPDU -- maximum size sender can accept |
| OUT statusInformation -- success or errorIndication |
| -- error counter OID and value |
| -- when errorIndication |
| OUT stateReference -- reference to state information |
| -- to be used for a possible |
| ) -- Response |
| |
| 2) If the received message is not the serialization (according to |
| the conventions of [RFC3417]) of an SNMPv3Message value, then the |
| snmpInASNParseErrs counter [RFC3418] is incremented, the message |
| is discarded without further processing, and a FAILURE result is |
| returned. SNMPv3 Message Processing is complete. |
| |
| 3) The values for msgVersion, msgID, msgMaxSize, msgFlags, |
| msgSecurityModel, msgSecurityParameters, and msgData are |
| extracted from the message. |
| |
| 4) If the value of the msgSecurityModel component does not match a |
| supported securityModel, then the snmpUnknownSecurityModels |
| counter is incremented, the message is discarded without further |
| processing, and a FAILURE result is returned. SNMPv3 Message |
| Processing is complete. |
| |
| |
| |
| Case, et al. Standards Track [Page 32] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 5) The securityLevel is determined from the authFlag and the |
| privFlag bits of the msgFlags component as follows: |
| |
| a) If the authFlag is not set and the privFlag is not set, then |
| securityLevel is set to noAuthNoPriv. |
| |
| b) If the authFlag is set and the privFlag is not set, then |
| securityLevel is set to authNoPriv. |
| |
| c) If the authFlag is set and the privFlag is set, then |
| securityLevel is set to authPriv. |
| |
| d) If the authFlag is not set and privFlag is set, then the |
| snmpInvalidMsgs counter is incremented, the message is |
| discarded without further processing, and a FAILURE result is |
| returned. SNMPv3 Message Processing is complete. |
| |
| e) Any other bits in the msgFlags are ignored. |
| |
| 6) The security module implementing the Security Model as specified |
| by the securityModel component is called for authentication and |
| privacy services. This is done according to the abstract service |
| primitive: |
| |
| statusInformation = -- errorIndication or success |
| -- error counter OID and |
| -- value if error |
| processIncomingMsg( |
| IN messageProcessingModel -- SNMPv3 Message Processing Model |
| IN maxMessageSize -- of the sending SNMP entity |
| IN securityParameters -- for the received message |
| IN securityModel -- for the received message |
| IN securityLevel -- Level of Security |
| IN wholeMsg -- as received on the wire |
| IN wholeMsgLength -- length as received on the wire |
| OUT securityEngineID -- authoritative SNMP entity |
| OUT securityName -- identification of the principal |
| OUT scopedPDU, -- message (plaintext) payload |
| OUT maxSizeResponseScopedPDU -- maximum size sender can accept |
| OUT securityStateReference -- reference to security state |
| ) -- information, needed for |
| -- response |
| |
| If an errorIndication is returned by the security module, then: |
| |
| a) If statusInformation contains values for an OID/value pair, |
| then generation of a Report PDU is attempted (see step 3 in |
| section 7.1). |
| |
| |
| |
| Case, et al. Standards Track [Page 33] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 1) If the scopedPDU has been returned from processIncomingMsg, |
| then determine contextEngineID, contextName, and PDU. |
| |
| 2) Information about the message is cached and a |
| stateReference is created (implementation-specific). |
| Information to be cached includes the values of: |
| |
| msgVersion, |
| msgID, |
| securityLevel, |
| msgFlags, |
| msgMaxSize, |
| securityModel, |
| maxSizeResponseScopedPDU, |
| securityStateReference |
| |
| 3) Request that a Report-PDU be prepared and sent, according |
| to the abstract service primitive: |
| |
| result = -- SUCCESS or FAILURE |
| returnResponsePdu( |
| IN messageProcessingModel -- SNMPv3(3) |
| IN securityModel -- same as on incoming request |
| IN securityName -- from processIncomingMsg |
| IN securityLevel -- same as on incoming request |
| IN contextEngineID -- from step 6 a) 1) |
| IN contextName -- from step 6 a) 1) |
| IN pduVersion -- SNMPv2-PDU |
| IN PDU -- from step 6 a) 1) |
| IN maxSizeResponseScopedPDU -- from processIncomingMsg |
| IN stateReference -- from step 6 a) 2) |
| IN statusInformation -- from processIncomingMsg |
| ) |
| |
| b) The incoming message is discarded without further processing, |
| and a FAILURE result is returned. SNMPv3 Message Processing |
| is complete. |
| |
| 7) The scopedPDU is parsed to extract the contextEngineID, the |
| contextName and the PDU. If any parse error occurs, then the |
| snmpInASNParseErrs counter [RFC3418] is incremented, the security |
| state information is discarded, the message is discarded without |
| further processing, and a FAILURE result is returned. SNMPv3 |
| Message Processing is complete. Treating an unknown PDU type is |
| treated as a parse error is an implementation option. |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 34] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 8) The pduVersion is determined in an implementation-dependent |
| manner. For SNMPv3, the pduVersion would be an SNMPv2-PDU. |
| |
| 9) The pduType is determined, in an implementation-dependent manner. |
| For [RFC3416], the pduTypes include: |
| |
| - GetRequest-PDU, |
| - GetNextRequest-PDU, |
| - GetBulkRequest-PDU, |
| - SetRequest-PDU, |
| - InformRequest-PDU, |
| - SNMPv2-Trap-PDU, |
| - Response-PDU, |
| - Report-PDU. |
| |
| 10) If the pduType is from the Response Class or the Internal Class, |
| then: |
| |
| a) The value of the msgID component is used to find the cached |
| information for a corresponding outstanding Request message. |
| If no such outstanding Request message is found, then the |
| security state information is discarded, the message is |
| discarded without further processing, and a FAILURE result is |
| returned. SNMPv3 Message Processing is complete. |
| |
| b) sendPduHandle is retrieved from the cached information. |
| |
| Otherwise, sendPduHandle is set to <none>, an implementation |
| defined value. |
| |
| 11) If the pduType is from the Internal Class, then: |
| |
| a) statusInformation is created using the contents of the |
| Report-PDU, in an implementation-dependent manner. This |
| statusInformation will be forwarded to the application |
| associated with the sendPduHandle. |
| |
| b) The cached data for the outstanding message, referred to by |
| stateReference, is retrieved. If the securityModel or |
| securityLevel values differ from the cached ones, it is |
| important to recognize that Internal Class PDUs delivered at |
| the security level of noAuthNoPriv open a window of |
| opportunity for spoofing or replay attacks. If the receiver |
| of such messages is aware of these risks, the use of such |
| unauthenticated messages is acceptable and may provide a |
| useful function for discovering engine IDs or for detecting |
| misconfiguration at remote nodes. |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 35] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| When the securityModel or securityLevel values differ from the |
| cached ones, an implementation may retain the cached |
| information about the outstanding Request message, in |
| anticipation of the possibility that the Internal Class PDU |
| received might be illegitimate. Otherwise, any cached |
| information about the outstanding Request message is |
| discarded. |
| |
| c) The security state information for this incoming message is |
| discarded. |
| |
| d) stateReference is set to <none>. |
| |
| e) A SUCCESS result is returned. SNMPv3 Message Processing is |
| complete. |
| |
| 12) If the pduType is from the Response Class, then: |
| |
| a) The cached data for the outstanding request, referred to by |
| stateReference, is retrieved, including: |
| |
| - snmpEngineID |
| - securityModel |
| - securityName |
| - securityLevel |
| - contextEngineID |
| - contextName |
| |
| b) If the values extracted from the incoming message differ from |
| the cached data, then any cached information about the |
| outstanding Request message is discarded, the incoming message |
| is discarded without further processing, and a FAILURE result |
| is returned. SNMPv3 Message Processing is complete. |
| |
| When the securityModel or securityLevel values differ from the |
| cached ones, an implementation may retain the cached |
| information about the outstanding Request message, in |
| anticipation of the possibility that the Response Class PDU |
| received might be illegitimate. |
| |
| c) Otherwise, any cached information about the outstanding |
| Request message is discarded, and the stateReference is set to |
| <none>. |
| |
| d) A SUCCESS result is returned. SNMPv3 Message Processing is |
| complete. |
| |
| 13) If the pduType is from the Confirmed Class, then: |
| |
| |
| |
| Case, et al. Standards Track [Page 36] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| a) If the value of securityEngineID is not equal to the value of |
| snmpEngineID, then the security state information is |
| discarded, any cached information about this message is |
| discarded, the incoming message is discarded without further |
| processing, and a FAILURE result is returned. SNMPv3 Message |
| Processing is complete. |
| |
| b) Information about the message is cached and a stateReference |
| is created (implementation-specific). Information to be |
| cached includes the values of: |
| |
| msgVersion, |
| msgID, |
| securityLevel, |
| msgFlags, |
| msgMaxSize, |
| securityModel, |
| maxSizeResponseScopedPDU, |
| securityStateReference |
| |
| c) A SUCCESS result is returned. SNMPv3 Message Processing is |
| complete. |
| |
| 14) If the pduType is from the Unconfirmed Class, then a SUCCESS |
| result is returned. SNMPv3 Message Processing is complete. |
| |
| 8. Intellectual Property |
| |
| 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. |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 37] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 9. Acknowledgements |
| |
| This document is the result of the efforts of the SNMPv3 Working |
| Group. Some special thanks are in order to the following SNMPv3 WG |
| members: |
| |
| Harald Tveit Alvestrand (Maxware) |
| Dave Battle (SNMP Research, Inc.) |
| Alan Beard (Disney Worldwide Services) |
| Paul Berrevoets (SWI Systemware/Halcyon Inc.) |
| Martin Bjorklund (Ericsson) |
| Uri Blumenthal (IBM T. J. Watson Research Center) |
| Jeff Case (SNMP Research, Inc.) |
| John Curran (BBN) |
| Mike Daniele (Compaq Computer Corporation) |
| T. Max Devlin (Eltrax Systems) |
| John Flick (Hewlett Packard) |
| Rob Frye (MCI) |
| Wes Hardaker (U.C.Davis, Information Technology - D.C.A.S.) |
| David Harrington (Cabletron Systems Inc.) |
| Lauren Heintz (BMC Software, Inc.) |
| N.C. Hien (IBM T. J. Watson Research Center) |
| Michael Kirkham (InterWorking Labs, Inc.) |
| Dave Levi (SNMP Research, Inc.) |
| Louis A Mamakos (UUNET Technologies Inc.) |
| Joe Marzot (Nortel Networks) |
| Paul Meyer (Secure Computing Corporation) |
| Keith McCloghrie (Cisco Systems) |
| Bob Moore (IBM) |
| Russ Mundy (TIS Labs at Network Associates) |
| Bob Natale (ACE*COMM Corporation) |
| Mike O'Dell (UUNET Technologies Inc.) |
| Dave Perkins (DeskTalk) |
| Peter Polkinghorne (Brunel University) |
| Randy Presuhn (BMC Software, Inc.) |
| David Reeder (TIS Labs at Network Associates) |
| David Reid (SNMP Research, Inc.) |
| Aleksey Romanov (Quality Quorum) |
| Shawn Routhier (Epilogue) |
| Juergen Schoenwaelder (TU Braunschweig) |
| Bob Stewart (Cisco Systems) |
| Mike Thatcher (Independent Consultant) |
| Bert Wijnen (IBM T. J. Watson Research Center) |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 38] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| The document is based on recommendations of the IETF Security and |
| Administrative Framework Evolution for SNMP Advisory Team. Members |
| of that Advisory Team were: |
| |
| David Harrington (Cabletron Systems Inc.) |
| Jeff Johnson (Cisco Systems) |
| David Levi (SNMP Research Inc.) |
| John Linn (Openvision) |
| Russ Mundy (Trusted Information Systems) chair |
| Shawn Routhier (Epilogue) |
| Glenn Waters (Nortel) |
| Bert Wijnen (IBM T. J. Watson Research Center) |
| |
| As recommended by the Advisory Team and the SNMPv3 Working Group |
| Charter, the design incorporates as much as practical from previous |
| RFCs and drafts. As a result, special thanks are due to the authors |
| of previous designs known as SNMPv2u and SNMPv2*: |
| |
| Jeff Case (SNMP Research, Inc.) |
| David Harrington (Cabletron Systems Inc.) |
| David Levi (SNMP Research, Inc.) |
| Keith McCloghrie (Cisco Systems) |
| Brian O'Keefe (Hewlett Packard) |
| Marshall T. Rose (Dover Beach Consulting) |
| Jon Saperia (BGS Systems Inc.) |
| Steve Waldbusser (International Network Services) |
| Glenn W. Waters (Bell-Northern Research Ltd.) |
| |
| 10. Security Considerations |
| |
| The Dispatcher coordinates the processing of messages to provide a |
| level of security for management messages and to direct the SNMP PDUs |
| to the proper SNMP application(s). |
| |
| A Message Processing Model, and in particular the v3MP defined in |
| this document, interacts as part of the Message Processing with |
| Security Models in the Security Subsystem via the abstract service |
| interface primitives defined in [RFC3411] and elaborated above. |
| |
| The level of security actually provided is primarily determined by |
| the specific Security Model implementation(s) and the specific SNMP |
| application implementation(s) incorporated into this framework. |
| Applications have access to data which is not secured. Applications |
| should take reasonable steps to protect the data from disclosure, and |
| when they send data across the network, they should obey the |
| securityLevel and call upon the services of an Access Control Model |
| as they apply access control. |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 39] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| The values for the msgID element used in communication between SNMP |
| entities MUST be chosen to avoid replay attacks. The values do not |
| need to be unpredictable; it is sufficient that they not repeat. |
| |
| When exchanges are carried out over an insecure network, there is an |
| open opportunity for a third party to spoof or replay messages when |
| any message of an exchange is given at the security level of |
| noAuthNoPriv. For most exchanges, all messages exist at the same |
| security level. In the case where the final message is an Internal |
| Class PDU, this message may be delivered at a level of noAuthNoPriv |
| or authNoPriv, independent of the security level of the preceding |
| messages. Internal Class PDUs delivered at the level of authNoPriv |
| are not considered to pose a security hazard. Internal Class PDUs |
| delivered at the security level of noAuthNoPriv open a window of |
| opportunity for spoofing or replay attacks. If the receiver of such |
| messages is aware of these risks, the use of such unauthenticated |
| messages is acceptable and may provide a useful function for |
| discovering engine IDs or for detecting misconfiguration at remote |
| nodes. |
| |
| This document also contains a MIB definition module. None of the |
| objects defined is writable, and the information they represent is |
| not deemed to be particularly sensitive. However, if they are deemed |
| sensitive in a particular environment, access to them should be |
| restricted through the use of appropriately configured Security and |
| Access Control models. |
| |
| 11. References |
| |
| 11.1. Normative References |
| |
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate |
| Requirement Levels", BCP 14, RFC 2119, March 1997. |
| |
| [RFC2578] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., |
| Rose, M. and S. Waldbusser, "Structure of Management |
| Information Version 2 (SMIv2)", STD 58, RFC 2578, April |
| 1999. |
| |
| [RFC2580] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., |
| Rose, M. and S. Waldbusser, "Conformance Statements for |
| SMIv2", STD 58, RFC 2580, April 1999. |
| |
| [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. |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 40] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| [RFC3413] Levi, D., Meyer, P. and B. Stewart, "Simple Network |
| Management Protocol (SNMP) Applications", STD 62, RFC |
| 3413, December 2002. |
| |
| [RFC3414] Blumenthal, U. and B. Wijnen, "The User-Based Security |
| Model (USM) for Version 3 of the Simple Network |
| Management Protocol (SNMPv3)", STD 62, RFC 3414, December |
| 2002. |
| |
| [RFC3415] Wijnen, B., Presuhn, R. and K. McCloghrie, "View-based |
| Access Control Model (VACM) for the Simple Network |
| Management Protocol (SNMP)", STD 62, RFC 3415, 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. |
| |
| [RFC3417] Presuhn, R., Case, J., McCloghrie, K., Rose, M. and S. |
| Waldbusser, "Transport Mappings for the Simple Network |
| Management Protocol (SNMP)", STD 62, RFC 3417, 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. |
| |
| 11.2. Informative References |
| |
| [RFC1901] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, |
| "Introduction to Community-based SNMPv2", RFC 1901, |
| January 1996. |
| |
| [RFC2028] Hovey, R. and S. Bradner, "The Organizations Involved in |
| the IETF Standards Process", BCP 11, RFC 2028, October |
| 1996. |
| |
| [RFC2576] Frye, R., Levi, D., Routhier, S. and B. Wijnen, |
| "Coexistence between Version 1, Version 2, and Version 3 |
| of the Internet-Standard Network Management Framework", |
| RFC 2576, March 2000. |
| |
| [RFC3410] Case, J., Mundy, R., Partain, D. and B. Stewart, |
| "Introduction and Applicability Statements for Internet- |
| Standard Management Framework", RFC 3410, December 2002. |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 41] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 12. Editors' Addresses |
| |
| Jeffrey Case |
| SNMP Research, Inc. |
| 3001 Kimberlin Heights Road |
| Knoxville, TN 37920-9716 |
| USA |
| |
| Phone: +1 423-573-1434 |
| EMail: case@snmp.com |
| |
| |
| David Harrington |
| Enterasys Networks |
| 35 Industrial Way |
| Post Office Box 5005 |
| Rochester, NH 03866-5005 |
| USA |
| |
| Phone: +1 603-337-2614 |
| EMail: dbh@enterasys.com |
| |
| |
| Randy Presuhn |
| BMC Software, Inc. |
| 2141 North First Street |
| San Jose, CA 95131 |
| USA |
| |
| Phone: +1 408-546-1006 |
| EMail: randy_presuhn@bmc.com |
| |
| |
| Bert Wijnen |
| Lucent Technologies |
| Schagen 33 |
| 3461 GL Linschoten |
| Netherlands |
| |
| Phone: +31 348-680-485 |
| EMail: bwijnen@lucent.com |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 42] |
| |
| RFC 3412 Message Processing and Dispatching for SNMP December 2002 |
| |
| |
| 13. Full Copyright Statement |
| |
| Copyright (C) The Internet Society (2002). 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 assigns. |
| |
| 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 |
| HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF |
| MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. |
| |
| Acknowledgement |
| |
| Funding for the RFC Editor function is currently provided by the |
| Internet Society. |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| Case, et al. Standards Track [Page 43] |
| |