2412 lines
94 KiB
Plaintext
2412 lines
94 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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]
|
|||
|
|