diff options
Diffstat (limited to 'doc/rfc/rfc2272.txt')
-rw-r--r-- | doc/rfc/rfc2272.txt | 2187 |
1 files changed, 2187 insertions, 0 deletions
diff --git a/doc/rfc/rfc2272.txt b/doc/rfc/rfc2272.txt new file mode 100644 index 0000000..f7dc8c4 --- /dev/null +++ b/doc/rfc/rfc2272.txt @@ -0,0 +1,2187 @@ + + + + + + +Network Working Group J. Case +Request for Comments: 2272 SNMP Research, Inc. +Obsoletes: 2262 D. Harrington +Category: Standards Track Cabletron Systems, Inc. + R. Presuhn + BMC Software, Inc. + B. Wijnen + IBM T. J. Watson Research + January 1998 + + + 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 (1998). All Rights Reserved. + +IANA Note + + Due to a clerical error in the assignment of the snmpModules in this + memo, this RFC provides the corrected number assignment for this + protocol. This memo obsoletes RFC 2262. + +Abstract + + This document describes the Message Processing and Dispatching for + SNMP messages within the SNMP architecture [RFC2271]. 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. + +Table of Contents + + 1. Introduction ............................................... 2 + 2. Overview ................................................... 3 + 2.1. The Dispatcher. .......................................... 5 + 2.2. Message Processing Subsystem ............................. 5 + 3. Elements of Message Processing and Dispatching ............. 6 + + + +Case, et. al. Standards Track [Page 1] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 ...................... 7 + 4.1.2. Sending a Response to the Network ...................... 9 + 4.2. Receiving an SNMP Message from the Network ............... 10 + 4.2.1. Message Dispatching of received SNMP Messages .......... 10 + 4.2.2. PDU Dispatching for Incoming Messages .................. 11 + 4.2.2.1. Incoming Requests and Notifications .................. 12 + 4.2.2.2. Incoming Responses ................................... 13 + 4.3. Application Registration for Handling PDU types .......... 14 + 4.4. Application Unregistration for Handling PDU Types ........ 14 + 5. Definitions ................................................ 15 + 5.1. Definitions for SNMP Message Processing and Dispatching .. 15 + 6. The SNMPv3 Message Format .................................. 18 + 6.1. msgVersion ............................................... 19 + 6.2. msgID .................................................... 19 + 6.3. msgMaxSize ............................................... 19 + 6.4. msgFlags ................................................. 20 + 6.5. msgSecurityModel ......................................... 22 + 6.6. msgSecurityParameters .................................... 22 + 6.7. scopedPduData ............................................ 22 + 6.8. scopedPDU ................................................ 22 + 6.8.1. contextEngineID ........................................ 22 + 6.8.2. contextName ............................................ 23 + 6.8.3. data ................................................... 23 + 7. Elements of Procedure for v3MP ............................. 23 + 7.1. Prepare an Outgoing SNMP Message ......................... 24 + 7.2. Prepare Data Elements from an Incoming SNMP Message ...... 29 + 8. Intellectual Property ...................................... 34 + 9. Acknowledgements ........................................... 35 + 10. Security Considerations ................................... 36 + 11. References ................................................ 36 + 12. Editors' Addresses ........................................ 38 + 13. Full Copyright Statement .................................. 39 + +1. Introduction + + The Architecture for describing Internet Management Frameworks + [RFC2271] 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. + + + +Case, et. al. Standards Track [Page 2] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 [RFC2271]. + + 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 responsibile for processing a 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 modelled 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 modelled 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 RFC 2119. + +2. Overview + + The following illustration depicts the Message Processing in relation + to SNMP applications, the Security Subsystem and Transport Mappings. + + + + + + + + + + + + +Case, et. al. Standards Track [Page 3] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + +-------------------------------------------------------------------+ + | 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 RFC1906) | | +->| otherMP * |<--->| +-------------+ | | + | +------------------+ | +------------+ | | | | + | ^ +---------------------+ +-----------------+ | + | | | + +----------|--------------------------------------------------------+ + v + +------------------+ + | Network | + +------------------+ + + + + + + + + + +Case, et. al. Standards Track [Page 4] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + +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 2272 SNMPv3 Management Protocol January 1998 + + +3. Elements of Message Processing and Dispatching + + See [RFC2271] 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 + [RFC1905]. 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. + + 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. + + + +Case, et. al. Standards Track [Page 6] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + For incoming messages, 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 [RFC1905] elements of procedure and syntax instead of + those specified for SNMPv1. + +3.3. pduType + + A value of pduType represents a specific type of protocol operation. + The values of 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. + +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 trap. + + 1) The application requests this using the abstract service + primitive: + + + + +Case, et. al. Standards Track [Page 7] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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. + + 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 -- the version of the PDU + 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 + ) + + + + +Case, et. al. Standards Track [Page 8] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 via + the transport specified by the transportDomain to the address + specified by the transportAddress. + + 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. + + 1) An application can request this using the abstract service + primitive: + + 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 + + + +Case, et. al. Standards Track [Page 9] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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. + + 4) If the result is success, the outgoingMessage is sent over the + transport specified by the transportDomain to the address + specified by the transportAddress. + + 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 [RFC1907] 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 [RFC1907] counter is incremented, and + the message is discarded without further processing. If the + version is not supported, then the snmpInBadVersions [RFC1907] + counter is incremented, and the message is discarded without + further processing. + + + + + +Case, et. al. Standards Track [Page 10] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 3) The origin transportDomain and origin transportAddress are + determined. + + 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 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 -- 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 11] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + +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 transportDomain -- destination transportDomain + OUT transportAddress -- 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. + + d) The incoming message is discarded without further processing. + Message Processing for this message is complete. + + 3) The PDU is dispatched to the application, using the abstract + service primitive: + + + + +Case, et. al. Standards Track [Page 12] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 PDU 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. + + 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 + + + + + +Case, et. al. Standards Track [Page 13] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 means for + requesting simultaneous registration for multiple values of + 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. + + 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: + + + + + +Case, et. al. Standards Track [Page 14] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + unregisterContextEngineID( + IN contextEngineID -- give up responsibility for this + IN pduType -- the pduType(s) to be unregistered + ) + Note: implementations may provide means for requesting + unregistration for simultaneous multiple contextEngineID values, + e.g., all contextEngineID values, and may also provide 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 "9711200000Z" -- 20 November 1997 + ORGANIZATION "SNMPv3 Working Group" + CONTACT-INFO "WG-email: snmpv3@tis.com + Subscribe: majordomo@tis.com + In message body: subscribe snmpv3 + + Chair: Russ Mundy + Trusted Information Systems + postal: 3060 Washington Road + Glenwood, MD 21738 + USA + email: mundy@tis.com + phone: +1 301-854-6889 + + 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 + + + +Case, et. al. Standards Track [Page 15] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + Co-editor Dave Harrington + Cabletron Systems, Inc. + postal: Post Office Box 5005 + MailStop: Durham + 35 Industrial Way + Rochester, NH 03867-5005 + USA + email: dbh@ctron.com + phone: +1 603-337-7357 + + Co-editor: Randy Presuhn + BMC Software, Inc. + postal: 1190 Saratoga Ave, Suite 190 + San Jose, CA 95120 + USA + email: rpresuhn@bmc.com + phone: +1 408-556-0720 + + Co-editor: Bert Wijnen + IBM T. J. Watson Research + postal: Schagen 33 + 3461 GL Linschoten + Netherlands + email: wijnen@vnet.ibm.com + phone: +31 348-432-794 + + " + DESCRIPTION "The MIB for Message Processing and Dispatching" + ::= { 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. + + + +Case, et. al. Standards Track [Page 16] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + " + ::= { 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 } + + -- 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, + + + +Case, et. al. Standards Track [Page 17] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 + msgVersion INTEGER { snmpv3 (3) }, + -- administrative parameters + msgGlobalData HeaderData, + -- security model-specific parameters + -- format defined by Security Model + 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 (0..2147483647) + } + + + +Case, et. al. Standards Track [Page 18] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 RFC1905 + } + 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 [RFC2271] as the high-order + 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 is 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 may need to identify the + message even if decrypting 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. + +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. + + + + + + + +Case, et. al. Standards Track [Page 19] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 how big the Response + to a Request message can be. + +6.4. msgFlags + + The msgFlags field of the message contains several bit fields which + control processing of the message. + + When the reportableFlag is one, a Report PDU must be returned to the + sender under those conditions which can cause the generation of + Report PDUs. When the reportableFlag is zero, then a Report PDU must + not be sent. The reportableFlag must always be zero when the message + contains 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 request-type PDU + (such as a Get PDU) and an acknowledged notification-type PDU (such + as an Inform PDU). + + If the reportableFlag is set to one for a message containing 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 engine-to-engine communications and are processed + directly by the SNMPv3 Message Processing Model, and are generally + not passed to applications for processing, unlike all other PDU + types. + + Note that 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 ecryption key. If the PDU can be decoded, the PDU type + forms the basis for decisions on sending Report PDUs. + + 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. + + + + +Case, et. al. Standards Track [Page 20] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + There are three securityLevels, namely noAuthNoPriv, which is less + than authNoPriv, which is in turn less than authPriv. See the SNMP + architecture document [RFC2271] 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 + 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., 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 + + + +Case, et. al. Standards Track [Page 21] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + authFlag zero, privFlag one -> invalid combination + authFlag one, privFlag zero -> securityLevel is authNoPriv + authFlag one, privFlag one -> securityLevel is authPriv + +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. + + + + + + +Case, et. al. Standards Track [Page 22] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + For incoming messages, the contextEngineID is used 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. + +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 [RFC1905]. + +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 reportableFlag is set in the + received message. + + 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 must also be released at that same time. + + + + +Case, et. al. Standards Track [Page 23] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + +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 GetRequest-PDU, GetNextRequest-PDU, GetBulkRequest- + PDU, SetRequest-PDU, InformRequest-PDU, or SNMPv2-Trap-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 + ) + + 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. + + * SNMPv3 does not use the values of expectResponse or + pduVersion. + + 2) The Message Dispatcher may request that an SNMPv3 message + containing a Response-PDU or Report-PDU be prepared for sending. + + a) It makes such a request according to the abstract service + primitive: + + + + + +Case, et. al. Standards Track [Page 24] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 of Response PDU + IN stateReference -- reference to state + -- information presented with + -- the request + IN statusInformation -- success or errorIndication + -- error counter OID and value + -- when errorIndication + OUT transportDomain -- destination transport domain + OUT transportAddress -- 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. + + 3) If statusInformation contains values for an OID/value combination + (potentially also containing a securityLevel value, + contextEngineID value, or contextName value), then + + a) If reportableFlag is zero, then the original message is + discarded, and no further processing is done. A result of + FAILURE is returned. SNMPv3 Message Processing is complete. + + + +Case, et. al. Standards Track [Page 25] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + b) If a PDU is provided, it is the PDU from the original request. + If possible, extract the request-id. + + 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. + + 4) If 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. + + + + + + +Case, et. al. Standards Track [Page 26] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 a Response-PDU, Report-PDU or SNMPv2-Trap-PDU, + then the reportableFlag is set to zero. + + - If the PDU is a GetRequest-PDU, GetNextRequest-PDU, + GetBulkRequest-PDU, SetRequest-PDU, or InformRequest-PDU + then the reportableFlag is set to one. + + - All other msgFlags bits are set to zero. + + e) msgSecurityModel is set to the value of securityModel + + 8) If the PDU is a Response-PDU or Report-PDU, 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 + + + +Case, et. al. Standards Track [Page 27] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 a GetRequest-PDU, GetNextRequest-PDU, + GetBulkRequest-PDU, SetRequest-PDU, InformRequest-PDU, or or + SNMPv2-Trap-PDU, then + + a) If the PDU is an SNMPv2-Trap-PDU, 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 + securityEngineID is set to the value of the target entity's + snmpEngineID. + + 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 + IN securityName -- as provided by caller + IN securityLevel -- as provided by caller + IN snmpEngineID -- as determined in step 9 a) + 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 + ) + + + + + + + +Case, et. al. Standards Track [Page 28] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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) Information about the outgoing message is cached, and a + stateReference is created (implementation-specific). + 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. + +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 of Response PDU + + + +Case, et. al. Standards Track [Page 29] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 [RFC1906]) of an SNMPv3Message value, then the + snmpInASNParseErrs counter [RFC1907] 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, a Report PDU is generated, the message is + discarded without further processing, and a FAILURE result is + returned. SNMPv3 Message Processing is complete. + + 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, a Report PDU is + generated, the message is discarded without further processing, + and a FAILURE result is returned. SNMPv3 Message Processing is + complete. + + 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 + + + +Case, et. al. Standards Track [Page 30] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + -- value if error + processIncomingMsg( + IN messageProcessingModel -- SNMPv3 Message Processing Model + IN expectResponse -- TRUE or FALSE + 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 of Response PDU + 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 a Report PDU is generated. + + 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 + + + +Case, et. al. Standards Track [Page 31] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 + OUT transportDomain -- destination's transport + -- domain + OUT transportAddress -- destination's transport + -- address + OUT outgoingMessage -- the message to send + OUT outgoingMessageLength -- the length of the message + ) + + 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 [RFC1907] 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. + + 8) The pduVersion is set to an SNMPv2-PDU. + + 9) The pduType is determined, in an implementation-dependent manner, + to be: + + - a GetRequest-PDU, + - a GetNextRequest-PDU, + - a GetBulkRequest-PDU, + - a SetRequest-PDU, + - an InformRequest-PDU, + - an SNMPv2-Trap-PDU, + - a Response-PDU, or + - a Report-PDU. + + 10) If the pduType is a Response-PDU or Report-PDU, 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. + + + +Case, et. al. Standards Track [Page 32] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + b) sendPduHandle is retrieved from the cached information. + + Otherwise, sendPduHandle is set to <none>, an implementation + defined value. + + 11) If the pduType is a Report-PDU, 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) Any cached information about the outstanding Request message + 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 a Response-PDU, 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 the security state information is + discarded, 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. + + c) Otherwise, any cached information about the outstanding + Request message is discarded, and stateReference is set to + <none>. + + d) A SUCCESS result is returned. SNMPv3 Message Processing is + complete. + + + +Case, et. al. Standards Track [Page 33] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 13) If the pduType is a GetRequest-PDU, GetNextRequest-PDU, + GetBulkRequest-PDU, SetRequest-PDU, or InformRequest-PDU, then + + 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 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. + + 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 an SNMPv2-Trap-PDU, 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. + + + + + + + +Case, et. al. Standards Track [Page 34] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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. + +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: + + Dave Battle (SNMP Research, Inc.) + Uri Blumenthal (IBM T.J. Watson Research Center) + Jeff Case (SNMP Research, Inc.) + John Curran (BBN) + T. Max Devlin (Hi-TECH Connections) + John Flick (Hewlett Packard) + David Harrington (Cabletron Systems Inc.) + N.C. Hien (IBM T.J. Watson Research Center) + Dave Levi (SNMP Research, Inc.) + Louis A Mamakos (UUNET Technologies Inc.) + Paul Meyer (Secure Computing Corporation) + Keith McCloghrie (Cisco Systems) + Russ Mundy (Trusted Information Systems, Inc.) + Bob Natale (ACE*COMM Corporation) + Mike O'Dell (UUNET Technologies Inc.) + Dave Perkins (DeskTalk) + Peter Polkinghorne (Brunel University) + Randy Presuhn (BMC Software, Inc.) + David Reid (SNMP Research, Inc.) + Shawn Routhier (Epilogue) + Juergen Schoenwaelder (TU Braunschweig) + Bob Stewart (Cisco Systems) + Bert Wijnen (IBM T.J. Watson Research Center) + + 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) + + + +Case, et. al. Standards Track [Page 35] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + 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 [RFC2271] 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. + + 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. + +11. References + + [RFC1901] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, + "Introduction to Community-based SNMPv2", + RFC 1901, January 1996. + + + + + + + +Case, et. al. Standards Track [Page 36] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + + [RFC1902] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, + "Structure of Management Information for + Version 2 of the Simple Network Management Protocol (SNMPv2)", + RFC 1902, January 1996. + + [RFC1905] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, + "Protocol Operations for Version 2 of the + Simple Network Management Protocol (SNMPv2)", RFC 1905, January + 1996. + + [RFC1906] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, + "Transport Mappings for Version 2 of the + Simple Network Management Protocol (SNMPv2)", RFC 1906, January + 1996. + + [RFC1907] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, + "Management Information Base for Version 2 + of the Simple Network Management Protocol (SNMPv2)", RFC 1907 + January 1996. + + [RFC1908] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, + "Coexistence between Version 1 and Version + 2 of the Internet-standard Network Management Framework", RFC + 1908, January 1996. + + [RFC 2028] Hovey, R., and S. Bradner, "The Organizations Involved in + the IETF Standards Process", BCP 11, RFC 2028, October 1996. + + [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate + Requirement Levels", RFC 2119, BCP 14, March 1997. + + [RFC2271] Harrington, D., Presuhn, R., and B. Wijnen, "An + Architecture for describing SNMP Management Frameworks", + RFC 2271, January 1998. + + [RFC2274] Blumenthal, U., and B. Wijnen, "The User-Based + Security Model for Version 3 of the Simple Network + Management Protocol (SNMPv3)", RFC 2274, January 1998. + + [RFC2275] Wijnen, B., Presuhn, R., and K. McCloghrie, + "View-based Access Control Model for the Simple + Network Management Protocol (SNMP)", RFC 2275, January 1998. + + [RFC2273] Levi, D., Meyer, P., and B. Stewart, "SNMPv3 + Applications", RFC 2273, January 1998. + + + + + + +Case, et. al. Standards Track [Page 37] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + +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 + + + Dave Harrington + Cabletron Systems, Inc + Post Office Box 5005 + Mail Stop: Durham + 35 Industrial Way + Rochester, NH 03867-5005 + USA + + Phone: +1 603-337-7357 + EMail: dbh@ctron.com + + + Randy Presuhn + BMC Software, Inc. + 1190 Saratoga Avenue + Suite 130 + San Jose, CA 95129 + USA + + Phone: +1 408-556-0720 + EMail: rpresuhn@bmc.com + + + Bert Wijnen + IBM T. J. Watson Research + Schagen 33 + 3461 GL Linschoten + Netherlands + + Phone: +31 348-432-794 + EMail: wijnen@vnet.ibm.com + + + + + + + + +Case, et. al. Standards Track [Page 38] + +RFC 2272 SNMPv3 Management Protocol January 1998 + + +13. Full Copyright Statement + + Copyright (C) The Internet Society (1998). 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. + + + + + + + + + + + + + + + + + + + + + + + + +Case, et. al. Standards Track [Page 39] + |