1740 lines
68 KiB
Plaintext
1740 lines
68 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group Editor of this version:
|
||
Request for Comments: 3416 R. Presuhn
|
||
STD: 62 BMC Software, Inc.
|
||
Obsoletes: 1905 Authors of previous version:
|
||
Category: Standards Track J. Case
|
||
SNMP Research, Inc.
|
||
K. McCloghrie
|
||
Cisco Systems, Inc.
|
||
M. Rose
|
||
Dover Beach Consulting, Inc.
|
||
S. Waldbusser
|
||
International Network Services
|
||
December 2002
|
||
|
||
|
||
Version 2 of the Protocol Operations 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 defines version 2 of the protocol operations for the
|
||
Simple Network Management Protocol (SNMP). It defines the syntax and
|
||
elements of procedure for sending, receiving, and processing SNMP
|
||
PDUs. This document obsoletes RFC 1905.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 1]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction ................................................ 3
|
||
2. Overview .................................................... 4
|
||
2.1. Management Information .................................... 4
|
||
2.2. Retransmission of Requests ................................ 4
|
||
2.3. Message Sizes ............................................. 4
|
||
2.4. Transport Mappings ........................................ 5
|
||
2.5. SMIv2 Data Type Mappings .................................. 6
|
||
3. Definitions ................................................. 6
|
||
4. Protocol Specification ...................................... 9
|
||
4.1. Common Constructs ......................................... 9
|
||
4.2. PDU Processing ............................................ 10
|
||
4.2.1. The GetRequest-PDU ...................................... 10
|
||
4.2.2. The GetNextRequest-PDU .................................. 11
|
||
4.2.2.1. Example of Table Traversal ............................ 12
|
||
4.2.3. The GetBulkRequest-PDU .................................. 14
|
||
4.2.3.1. Another Example of Table Traversal .................... 17
|
||
4.2.4. The Response-PDU ........................................ 18
|
||
4.2.5. The SetRequest-PDU ...................................... 19
|
||
4.2.6. The SNMPv2-Trap-PDU ..................................... 22
|
||
4.2.7. The InformRequest-PDU ................................... 23
|
||
5. Notice on Intellectual Property ............................. 24
|
||
6. Acknowledgments ............................................. 24
|
||
7. Security Considerations ..................................... 26
|
||
8. References .................................................. 26
|
||
8.1. Normative References ...................................... 26
|
||
8.2. Informative References .................................... 27
|
||
9. Changes from RFC 1905 ....................................... 28
|
||
10. Editor's Address ........................................... 30
|
||
11. Full Copyright Statement ................................... 31
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 2]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
1. Introduction
|
||
|
||
The SNMP Management Framework at the time of this writing consists of
|
||
five major components:
|
||
|
||
- An overall architecture, described in STD 62, RFC 3411
|
||
[RFC3411].
|
||
|
||
- Mechanisms for describing and naming objects and events for the
|
||
purpose of management. The first version of this Structure of
|
||
Management Information (SMI) is called SMIv1 and described in
|
||
STD 16, RFC 1155 [RFC1155], STD 16, RFC 1212 [RFC1212] and RFC
|
||
1215 [RFC1215]. The second version, called SMIv2, is described
|
||
in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579] and
|
||
STD 58, RFC 2580 [RFC2580].
|
||
|
||
- Message protocols for transferring management information. The
|
||
first version of the SNMP message protocol is called SNMPv1 and
|
||
described in STD 15, RFC 1157 [RFC1157]. A second version of
|
||
the SNMP message protocol, which is not an Internet standards
|
||
track protocol, is called SNMPv2c and described in RFC 1901
|
||
[RFC1901] and STD 62, RFC 3417 [RFC3417]. The third version of
|
||
the message protocol is called SNMPv3 and described in STD 62,
|
||
RFC 3417 [RFC3417], RFC 3412 [RFC3412] and RFC 3414 [RFC3414].
|
||
|
||
- Protocol operations for accessing management information. The
|
||
first set of protocol operations and associated PDU formats is
|
||
described in STD 15, RFC 1157 [RFC1157]. A second set of
|
||
protocol operations and associated PDU formats is described in
|
||
this document.
|
||
|
||
- A set of fundamental applications described in STD 62, RFC 3413
|
||
[RFC3413] and the view-based access control mechanism described
|
||
in STD 62, RFC 3415 [RFC3415].
|
||
|
||
A more detailed introduction to the SNMP Management Framework at the
|
||
time of this writing can be found in RFC 3410 [RFC3410].
|
||
|
||
Managed objects are accessed via a virtual information store, termed
|
||
the Management Information Base or MIB. Objects in the MIB are
|
||
defined using the mechanisms defined in the SMI.
|
||
|
||
This document, Version 2 of the Protocol Operations for the Simple
|
||
Network Management Protocol, defines the operations of the protocol
|
||
with respect to the sending and receiving of PDUs to be carried by
|
||
the message protocol.
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 3]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
2. Overview
|
||
|
||
SNMP entities supporting command generator or notification receiver
|
||
applications (traditionally called "managers") communicate with SNMP
|
||
entities supporting command responder or notification originator
|
||
applications (traditionally called "agents"). The purpose of this
|
||
protocol is the transport of management information and operations.
|
||
|
||
2.1. Management Information
|
||
|
||
The term "variable" refers to an instance of a non-aggregate object
|
||
type defined according to the conventions set forth in the SMI
|
||
[RFC2578] or the textual conventions based on the SMI [RFC2579]. The
|
||
term "variable binding" normally refers to the pairing of the name of
|
||
a variable and its associated value. However, if certain kinds of
|
||
exceptional conditions occur during processing of a retrieval
|
||
request, a variable binding will pair a name and an indication of
|
||
that exception.
|
||
|
||
A variable-binding list is a simple list of variable bindings.
|
||
|
||
The name of a variable is an OBJECT IDENTIFIER which is the
|
||
concatenation of the OBJECT IDENTIFIER of the corresponding object-
|
||
type together with an OBJECT IDENTIFIER fragment identifying the
|
||
instance. The OBJECT IDENTIFIER of the corresponding object-type is
|
||
called the OBJECT IDENTIFIER prefix of the variable.
|
||
|
||
2.2. Retransmission of Requests
|
||
|
||
For all types of request in this protocol, the receiver is required
|
||
under normal circumstances, to generate and transmit a response to
|
||
the originator of the request. Whether or not a request should be
|
||
retransmitted if no corresponding response is received in an
|
||
appropriate time interval, is at the discretion of the application
|
||
originating the request. This will normally depend on the urgency of
|
||
the request. However, such an application needs to act responsibly
|
||
in respect to the frequency and duration of re-transmissions. See
|
||
BCP 41 [RFC2914] for discussion of relevant congestion control
|
||
principles.
|
||
|
||
2.3. Message Sizes
|
||
|
||
The maximum size of an SNMP message is limited to the minimum of:
|
||
|
||
(1) the maximum message size which the destination SNMP entity can
|
||
accept; and,
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 4]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
(2) the maximum message size which the source SNMP entity can
|
||
generate.
|
||
|
||
The former may be known on a per-recipient basis; and in the absence
|
||
of such knowledge, is indicated by transport domain used when sending
|
||
the message. The latter is imposed by implementation-specific local
|
||
constraints.
|
||
|
||
Each transport mapping for the SNMP indicates the minimum message
|
||
size which a SNMP implementation must be able to produce or consume.
|
||
Although implementations are encouraged to support larger values
|
||
whenever possible, a conformant implementation must never generate
|
||
messages larger than allowed by the receiving SNMP entity.
|
||
|
||
One of the aims of the GetBulkRequest-PDU, specified in this
|
||
protocol, is to minimize the number of protocol exchanges required to
|
||
retrieve a large amount of management information. As such, this PDU
|
||
type allows an SNMP entity supporting command generator applications
|
||
to request that the response be as large as possible given the
|
||
constraints on message sizes. These constraints include the limits
|
||
on the size of messages which the SNMP entity supporting command
|
||
responder applications can generate, and the SNMP entity supporting
|
||
command generator applications can receive.
|
||
|
||
However, it is possible that such maximum sized messages may be
|
||
larger than the Path MTU of the path across the network traversed by
|
||
the messages. In this situation, such messages are subject to
|
||
fragmentation. Fragmentation is generally considered to be harmful
|
||
[FRAG], since among other problems, it leads to a decrease in the
|
||
reliability of the transfer of the messages. Thus, an SNMP entity
|
||
which sends a GetBulkRequest-PDU must take care to set its parameters
|
||
accordingly, so as to reduce the risk of fragmentation. In
|
||
particular, under conditions of network stress, only small values
|
||
should be used for max-repetitions.
|
||
|
||
2.4. Transport Mappings
|
||
|
||
It is important to note that the exchange of SNMP messages requires
|
||
only an unreliable datagram service, with every message being
|
||
entirely and independently contained in a single transport datagram.
|
||
Specific transport mappings and encoding rules are specified
|
||
elsewhere [RFC3417]. However, the preferred mapping is the use of
|
||
the User Datagram Protocol [RFC768].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 5]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
2.5. SMIv2 Data Type Mappings
|
||
|
||
The SMIv2 [RFC2578] defines 11 base types (INTEGER, OCTET STRING,
|
||
OBJECT IDENTIFIER, Integer32, IpAddress, Counter32, Gauge32,
|
||
Unsigned32, TimeTicks, Opaque, Counter64) and the BITS construct.
|
||
The SMIv2 base types are mapped to the corresponding selection type
|
||
in the SimpleSyntax and ApplicationSyntax choices of the ASN.1 SNMP
|
||
protocol definition. Note that the INTEGER and Integer32 SMIv2 base
|
||
types are mapped to the integer-value selection type of the
|
||
SimpleSyntax choice. Similarly, the Gauge32 and Unsigned32 SMIv2
|
||
base types are mapped to the unsigned-integer-value selection type of
|
||
the ApplicationSyntax choice.
|
||
|
||
The SMIv2 BITS construct is mapped to the string-value selection type
|
||
of the SimpleSyntax choice. A BITS value is encoded as an OCTET
|
||
STRING, in which all the named bits in (the definition of) the
|
||
bitstring, commencing with the first bit and proceeding to the last
|
||
bit, are placed in bits 8 (high order bit) to 1 (low order bit) of
|
||
the first octet, followed by bits 8 to 1 of each subsequent octet in
|
||
turn, followed by as many bits as are needed of the final subsequent
|
||
octet, commencing with bit 8. Remaining bits, if any, of the final
|
||
octet are set to zero on generation and ignored on receipt.
|
||
|
||
3. Definitions
|
||
|
||
The PDU syntax is defined using ASN.1 notation [ASN1].
|
||
|
||
SNMPv2-PDU DEFINITIONS ::= BEGIN
|
||
|
||
ObjectName ::= OBJECT IDENTIFIER
|
||
|
||
ObjectSyntax ::= CHOICE {
|
||
simple SimpleSyntax,
|
||
application-wide ApplicationSyntax }
|
||
|
||
SimpleSyntax ::= CHOICE {
|
||
integer-value INTEGER (-2147483648..2147483647),
|
||
string-value OCTET STRING (SIZE (0..65535)),
|
||
objectID-value OBJECT IDENTIFIER }
|
||
|
||
ApplicationSyntax ::= CHOICE {
|
||
ipAddress-value IpAddress,
|
||
counter-value Counter32,
|
||
timeticks-value TimeTicks,
|
||
arbitrary-value Opaque,
|
||
big-counter-value Counter64,
|
||
unsigned-integer-value Unsigned32 }
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 6]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
IpAddress ::= [APPLICATION 0] IMPLICIT OCTET STRING (SIZE (4))
|
||
|
||
Counter32 ::= [APPLICATION 1] IMPLICIT INTEGER (0..4294967295)
|
||
|
||
Unsigned32 ::= [APPLICATION 2] IMPLICIT INTEGER (0..4294967295)
|
||
|
||
Gauge32 ::= Unsigned32
|
||
|
||
TimeTicks ::= [APPLICATION 3] IMPLICIT INTEGER (0..4294967295)
|
||
|
||
Opaque ::= [APPLICATION 4] IMPLICIT OCTET STRING
|
||
|
||
Counter64 ::= [APPLICATION 6]
|
||
IMPLICIT INTEGER (0..18446744073709551615)
|
||
|
||
-- protocol data units
|
||
|
||
PDUs ::= CHOICE {
|
||
get-request GetRequest-PDU,
|
||
get-next-request GetNextRequest-PDU,
|
||
get-bulk-request GetBulkRequest-PDU,
|
||
response Response-PDU,
|
||
set-request SetRequest-PDU,
|
||
inform-request InformRequest-PDU,
|
||
snmpV2-trap SNMPv2-Trap-PDU,
|
||
report Report-PDU }
|
||
|
||
-- PDUs
|
||
|
||
GetRequest-PDU ::= [0] IMPLICIT PDU
|
||
|
||
GetNextRequest-PDU ::= [1] IMPLICIT PDU
|
||
|
||
Response-PDU ::= [2] IMPLICIT PDU
|
||
|
||
SetRequest-PDU ::= [3] IMPLICIT PDU
|
||
|
||
-- [4] is obsolete
|
||
|
||
GetBulkRequest-PDU ::= [5] IMPLICIT BulkPDU
|
||
|
||
InformRequest-PDU ::= [6] IMPLICIT PDU
|
||
|
||
SNMPv2-Trap-PDU ::= [7] IMPLICIT PDU
|
||
|
||
-- Usage and precise semantics of Report-PDU are not defined
|
||
-- in this document. Any SNMP administrative framework making
|
||
-- use of this PDU must define its usage and semantics.
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 7]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
Report-PDU ::= [8] IMPLICIT PDU
|
||
|
||
max-bindings INTEGER ::= 2147483647
|
||
|
||
PDU ::= SEQUENCE {
|
||
request-id INTEGER (-214783648..214783647),
|
||
|
||
error-status -- sometimes ignored
|
||
INTEGER {
|
||
noError(0),
|
||
tooBig(1),
|
||
noSuchName(2), -- for proxy compatibility
|
||
badValue(3), -- for proxy compatibility
|
||
readOnly(4), -- for proxy compatibility
|
||
genErr(5),
|
||
noAccess(6),
|
||
wrongType(7),
|
||
wrongLength(8),
|
||
wrongEncoding(9),
|
||
wrongValue(10),
|
||
noCreation(11),
|
||
inconsistentValue(12),
|
||
resourceUnavailable(13),
|
||
commitFailed(14),
|
||
undoFailed(15),
|
||
authorizationError(16),
|
||
notWritable(17),
|
||
inconsistentName(18)
|
||
},
|
||
|
||
error-index -- sometimes ignored
|
||
INTEGER (0..max-bindings),
|
||
|
||
variable-bindings -- values are sometimes ignored
|
||
VarBindList
|
||
}
|
||
|
||
BulkPDU ::= -- must be identical in
|
||
SEQUENCE { -- structure to PDU
|
||
request-id INTEGER (-214783648..214783647),
|
||
non-repeaters INTEGER (0..max-bindings),
|
||
max-repetitions INTEGER (0..max-bindings),
|
||
|
||
variable-bindings -- values are ignored
|
||
VarBindList
|
||
}
|
||
|
||
-- variable binding
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 8]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
VarBind ::= SEQUENCE {
|
||
name ObjectName,
|
||
|
||
CHOICE {
|
||
value ObjectSyntax,
|
||
unSpecified NULL, -- in retrieval requests
|
||
|
||
-- exceptions in responses
|
||
noSuchObject [0] IMPLICIT NULL,
|
||
noSuchInstance [1] IMPLICIT NULL,
|
||
endOfMibView [2] IMPLICIT NULL
|
||
}
|
||
}
|
||
|
||
-- variable-binding list
|
||
|
||
VarBindList ::= SEQUENCE (SIZE (0..max-bindings)) OF VarBind
|
||
|
||
END
|
||
|
||
4. Protocol Specification
|
||
|
||
4.1. Common Constructs
|
||
|
||
The value of the request-id field in a Response-PDU takes the value
|
||
of the request-id field in the request PDU to which it is a response.
|
||
By use of the request-id value, an application 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 request-id also provides a
|
||
simple means of identifying messages duplicated by the network. Use
|
||
of the same request-id on a retransmission of a request allows the
|
||
response to either the original transmission or the retransmission to
|
||
satisfy the request. However, in order to calculate the round trip
|
||
time for transmission and processing of a request-response
|
||
transaction, the application needs to use a different request-id
|
||
value on a retransmitted request. The latter strategy is recommended
|
||
for use in the majority of situations.
|
||
|
||
A non-zero value of the error-status field in a Response-PDU is used
|
||
to indicate that an error occurred to prevent the processing of the
|
||
request. In these cases, a non-zero value of the Response-PDU's
|
||
error-index field provides additional information by identifying
|
||
which variable binding in the list caused the error. A variable
|
||
binding is identified by its index value. The first variable binding
|
||
in a variable-binding list is index one, the second is index two,
|
||
etc.
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 9]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
SNMP limits OBJECT IDENTIFIER values to a maximum of 128 sub-
|
||
identifiers, where each sub-identifier has a maximum value of
|
||
2**32-1.
|
||
|
||
4.2. PDU Processing
|
||
|
||
In the elements of procedure below, any field of a PDU which is not
|
||
referenced by the relevant procedure is ignored by the receiving SNMP
|
||
entity. However, all components of a PDU, including those whose
|
||
values are ignored by the receiving SNMP entity, must have valid
|
||
ASN.1 syntax and encoding. For example, some PDUs (e.g., the
|
||
GetRequest-PDU) are concerned only with the name of a variable and
|
||
not its value. In this case, the value portion of the variable
|
||
binding is ignored by the receiving SNMP entity. The unSpecified
|
||
value is defined for use as the value portion of such bindings.
|
||
|
||
On generating a management communication, the message "wrapper" to
|
||
encapsulate the PDU is generated according to the "Elements of
|
||
Procedure" of the administrative framework in use. The definition of
|
||
"max-bindings" imposes an upper bound on the number of variable
|
||
bindings. In practice, the size of a message is also limited by
|
||
constraints on the maximum message size. A compliant implementation
|
||
must support as many variable bindings in a PDU or BulkPDU as fit
|
||
into the overall maximum message size limit of the SNMP engine, but
|
||
no more than 2147483647 variable bindings.
|
||
|
||
On receiving a management communication, the "Elements of Procedure"
|
||
of the administrative framework in use is followed, and if those
|
||
procedures indicate that the operation contained within the message
|
||
is to be performed locally, then those procedures also indicate the
|
||
MIB view which is visible to the operation.
|
||
|
||
4.2.1. The GetRequest-PDU
|
||
|
||
A GetRequest-PDU is generated and transmitted at the request of an
|
||
application.
|
||
|
||
Upon receipt of a GetRequest-PDU, the receiving SNMP entity processes
|
||
each variable binding in the variable-binding list to produce a
|
||
Response-PDU. All fields of the Response-PDU have the same values as
|
||
the corresponding fields of the received request except as indicated
|
||
below. Each variable binding is processed as follows:
|
||
|
||
(1) If the variable binding's name exactly matches the name of a
|
||
variable accessible by this request, then the variable
|
||
binding's value field is set to the value of the named
|
||
variable.
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 10]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
(2) Otherwise, if the variable binding's name does not have an
|
||
OBJECT IDENTIFIER prefix which exactly matches the OBJECT
|
||
IDENTIFIER prefix of any (potential) variable accessible by
|
||
this request, then its value field is set to "noSuchObject".
|
||
|
||
(3) Otherwise, the variable binding's value field is set to
|
||
"noSuchInstance".
|
||
|
||
If the processing of any variable binding fails for a reason other
|
||
than listed above, then the Response-PDU is re-formatted with the
|
||
same values in its request-id and variable-bindings fields as the
|
||
received GetRequest-PDU, with the value of its error-status field set
|
||
to "genErr", and the value of its error-index field is set to the
|
||
index of the failed variable binding.
|
||
|
||
Otherwise, the value of the Response-PDU's error-status field is set
|
||
to "noError", and the value of its error-index field is zero.
|
||
|
||
The generated Response-PDU is then encapsulated into a message. If
|
||
the size of the resultant message is less than or equal to both a
|
||
local constraint and the maximum message size of the originator, it
|
||
is transmitted to the originator of the GetRequest-PDU.
|
||
|
||
Otherwise, an alternate Response-PDU is generated. This alternate
|
||
Response-PDU is formatted with the same value in its request-id field
|
||
as the received GetRequest-PDU, with the value of its error-status
|
||
field set to "tooBig", the value of its error-index field set to
|
||
zero, and an empty variable-bindings field. This alternate
|
||
Response-PDU is then encapsulated into a message. If the size of the
|
||
resultant message is less than or equal to both a local constraint
|
||
and the maximum message size of the originator, it is transmitted to
|
||
the originator of the GetRequest-PDU. Otherwise, the snmpSilentDrops
|
||
[RFC3418] counter is incremented and the resultant message is
|
||
discarded.
|
||
|
||
4.2.2. The GetNextRequest-PDU
|
||
|
||
A GetNextRequest-PDU is generated and transmitted at the request of
|
||
an application.
|
||
|
||
Upon receipt of a GetNextRequest-PDU, the receiving SNMP entity
|
||
processes each variable binding in the variable-binding list to
|
||
produce a Response-PDU. All fields of the Response-PDU have the same
|
||
values as the corresponding fields of the received request except as
|
||
indicated below. Each variable binding is processed as follows:
|
||
|
||
(1) The variable is located which is in the lexicographically
|
||
ordered list of the names of all variables which are
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 11]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
accessible by this request and whose name is the first
|
||
lexicographic successor of the variable binding's name in
|
||
the incoming GetNextRequest-PDU. The corresponding variable
|
||
binding's name and value fields in the Response-PDU are set
|
||
to the name and value of the located variable.
|
||
|
||
(2) If the requested variable binding's name does not
|
||
lexicographically precede the name of any variable
|
||
accessible by this request, i.e., there is no lexicographic
|
||
successor, then the corresponding variable binding produced
|
||
in the Response-PDU has its value field set to
|
||
"endOfMibView", and its name field set to the variable
|
||
binding's name in the request.
|
||
|
||
If the processing of any variable binding fails for a reason other
|
||
than listed above, then the Response-PDU is re-formatted with the
|
||
same values in its request-id and variable-bindings fields as the
|
||
received GetNextRequest-PDU, with the value of its error-status field
|
||
set to "genErr", and the value of its error-index field is set to the
|
||
index of the failed variable binding.
|
||
|
||
Otherwise, the value of the Response-PDU's error-status field is set
|
||
to "noError", and the value of its error-index field is zero.
|
||
|
||
The generated Response-PDU is then encapsulated into a message. If
|
||
the size of the resultant message is less than or equal to both a
|
||
local constraint and the maximum message size of the originator, it
|
||
is transmitted to the originator of the GetNextRequest-PDU.
|
||
|
||
Otherwise, an alternate Response-PDU is generated. This alternate
|
||
Response-PDU is formatted with the same values in its request-id
|
||
field as the received GetNextRequest-PDU, with the value of its
|
||
error-status field set to "tooBig", the value of its error-index
|
||
field set to zero, and an empty variable-bindings field. This
|
||
alternate Response-PDU is then encapsulated into a message. If the
|
||
size of the resultant message is less than or equal to both a local
|
||
constraint and the maximum message size of the originator, it is
|
||
transmitted to the originator of the GetNextRequest-PDU. Otherwise,
|
||
the snmpSilentDrops [RFC3418] counter is incremented and the
|
||
resultant message is discarded.
|
||
|
||
4.2.2.1. Example of Table Traversal
|
||
|
||
An important use of the GetNextRequest-PDU is the traversal of
|
||
conceptual tables of information within a MIB. The semantics of this
|
||
type of request, together with the method of identifying individual
|
||
instances of objects in the MIB, provides access to related objects
|
||
in the MIB as if they enjoyed a tabular organization.
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 12]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
In the protocol exchange sketched below, an application retrieves the
|
||
media-dependent physical address and the address-mapping type for
|
||
each entry in the IP net-to-media Address Translation Table [RFC1213]
|
||
of a particular network element. It also retrieves the value of
|
||
sysUpTime [RFC3418], at which the mappings existed. Suppose that the
|
||
command responder's IP net-to-media table has three entries:
|
||
|
||
Interface-Number Network-Address Physical-Address Type
|
||
|
||
1 10.0.0.51 00:00:10:01:23:45 static
|
||
1 9.2.3.4 00:00:10:54:32:10 dynamic
|
||
2 10.0.0.15 00:00:10:98:76:54 dynamic
|
||
|
||
The SNMP entity supporting a command generator application begins by
|
||
sending a GetNextRequest-PDU containing the indicated OBJECT
|
||
IDENTIFIER values as the requested variable names:
|
||
|
||
GetNextRequest ( sysUpTime,
|
||
ipNetToMediaPhysAddress,
|
||
ipNetToMediaType )
|
||
|
||
The SNMP entity supporting a command responder application responds
|
||
with a Response-PDU:
|
||
|
||
Response (( sysUpTime.0 = "123456" ),
|
||
( ipNetToMediaPhysAddress.1.9.2.3.4 = "000010543210" ),
|
||
( ipNetToMediaType.1.9.2.3.4 = "dynamic" ))
|
||
|
||
The SNMP entity supporting the command generator application
|
||
continues with:
|
||
|
||
GetNextRequest ( sysUpTime,
|
||
ipNetToMediaPhysAddress.1.9.2.3.4,
|
||
ipNetToMediaType.1.9.2.3.4 )
|
||
|
||
The SNMP entity supporting the command responder application responds
|
||
with:
|
||
|
||
Response (( sysUpTime.0 = "123461" ),
|
||
( ipNetToMediaPhysAddress.1.10.0.0.51 = "000010012345" ),
|
||
( ipNetToMediaType.1.10.0.0.51 = "static" ))
|
||
|
||
The SNMP entity supporting the command generator application
|
||
continues with:
|
||
|
||
GetNextRequest ( sysUpTime,
|
||
ipNetToMediaPhysAddress.1.10.0.0.51,
|
||
ipNetToMediaType.1.10.0.0.51 )
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 13]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
The SNMP entity supporting the command responder application responds
|
||
with:
|
||
|
||
Response (( sysUpTime.0 = "123466" ),
|
||
( ipNetToMediaPhysAddress.2.10.0.0.15 = "000010987654" ),
|
||
( ipNetToMediaType.2.10.0.0.15 = "dynamic" ))
|
||
|
||
The SNMP entity supporting the command generator application
|
||
continues with:
|
||
|
||
GetNextRequest ( sysUpTime,
|
||
ipNetToMediaPhysAddress.2.10.0.0.15,
|
||
ipNetToMediaType.2.10.0.0.15 )
|
||
|
||
As there are no further entries in the table, the SNMP entity
|
||
supporting the command responder application responds with the
|
||
variables that are next in the lexicographical ordering of the
|
||
accessible object names, for example:
|
||
|
||
Response (( sysUpTime.0 = "123471" ),
|
||
( ipNetToMediaNetAddress.1.9.2.3.4 = "9.2.3.4" ),
|
||
( ipRoutingDiscards.0 = "2" ))
|
||
|
||
Note how, having reached the end of the column for
|
||
ipNetToMediaPhysAddress, the second variable binding from the command
|
||
responder application has now "wrapped" to the first row in the next
|
||
column. Furthermore, note how, having reached the end of the
|
||
ipNetToMediaTable for the third variable binding, the command
|
||
responder application has responded with the next available object,
|
||
which is outside that table. This response signals the end of the
|
||
table to the command generator application.
|
||
|
||
4.2.3. The GetBulkRequest-PDU
|
||
|
||
A GetBulkRequest-PDU is generated and transmitted at the request of
|
||
an application. The purpose of the GetBulkRequest-PDU is to request
|
||
the transfer of a potentially large amount of data, including, but
|
||
not limited to, the efficient and rapid retrieval of large tables.
|
||
|
||
Upon receipt of a GetBulkRequest-PDU, the receiving SNMP entity
|
||
processes each variable binding in the variable-binding list to
|
||
produce a Response-PDU with its request-id field having the same
|
||
value as in the request.
|
||
|
||
For the GetBulkRequest-PDU type, the successful processing of each
|
||
variable binding in the request generates zero or more variable
|
||
bindings in the Response-PDU. That is, the one-to-one mapping
|
||
between the variable bindings of the GetRequest-PDU, GetNextRequest-
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 14]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
PDU, and SetRequest-PDU types and the resultant Response-PDUs does
|
||
not apply for the mapping between the variable bindings of a
|
||
GetBulkRequest-PDU and the resultant Response-PDU.
|
||
|
||
The values of the non-repeaters and max-repetitions fields in the
|
||
request specify the processing requested. One variable binding in
|
||
the Response-PDU is requested for the first N variable bindings in
|
||
the request and M variable bindings are requested for each of the R
|
||
remaining variable bindings in the request. Consequently, the total
|
||
number of requested variable bindings communicated by the request is
|
||
given by N + (M * R), where N is the minimum of: a) the value of the
|
||
non-repeaters field in the request, and b) the number of variable
|
||
bindings in the request; M is the value of the max-repetitions field
|
||
in the request; and R is the maximum of: a) number of variable
|
||
bindings in the request - N, and b) zero.
|
||
|
||
The receiving SNMP entity produces a Response-PDU with up to the
|
||
total number of requested variable bindings communicated by the
|
||
request. The request-id shall have the same value as the received
|
||
GetBulkRequest-PDU.
|
||
|
||
If N is greater than zero, the first through the (N)-th variable
|
||
bindings of the Response-PDU are each produced as follows:
|
||
|
||
(1) The variable is located which is in the lexicographically
|
||
ordered list of the names of all variables which are accessible
|
||
by this request and whose name is the first lexicographic
|
||
successor of the variable binding's name in the incoming
|
||
GetBulkRequest-PDU. The corresponding variable binding's name
|
||
and value fields in the Response-PDU are set to the name and
|
||
value of the located variable.
|
||
|
||
(2) If the requested variable binding's name does not
|
||
lexicographically precede the name of any variable accessible
|
||
by this request, i.e., there is no lexicographic successor,
|
||
then the corresponding variable binding produced in the
|
||
Response-PDU has its value field set to "endOfMibView", and its
|
||
name field set to the variable binding's name in the request.
|
||
|
||
If M and R are non-zero, the (N + 1)-th and subsequent variable
|
||
bindings of the Response-PDU are each produced in a similar manner.
|
||
For each iteration i, such that i is greater than zero and less than
|
||
or equal to M, and for each repeated variable, r, such that r is
|
||
greater than zero and less than or equal to R, the (N + ( (i-1) * R )
|
||
+ r)-th variable binding of the Response-PDU is produced as follows:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 15]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
(1) The variable which is in the lexicographically ordered list of
|
||
the names of all variables which are accessible by this request
|
||
and whose name is the (i)-th lexicographic successor of the (N
|
||
+ r)-th variable binding's name in the incoming
|
||
GetBulkRequest-PDU is located and the variable binding's name
|
||
and value fields are set to the name and value of the located
|
||
variable.
|
||
|
||
(2) If there is no (i)-th lexicographic successor, then the
|
||
corresponding variable binding produced in the Response-PDU has
|
||
its value field set to "endOfMibView", and its name field set
|
||
to either the last lexicographic successor, or if there are no
|
||
lexicographic successors, to the (N + r)-th variable binding's
|
||
name in the request.
|
||
|
||
While the maximum number of variable bindings in the Response-PDU is
|
||
bounded by N + (M * R), the response may be generated with a lesser
|
||
number of variable bindings (possibly zero) for either of three
|
||
reasons.
|
||
|
||
(1) If the size of the message encapsulating the Response-PDU
|
||
containing the requested number of variable bindings would be
|
||
greater than either a local constraint or the maximum message
|
||
size of the originator, then the response is generated with a
|
||
lesser number of variable bindings. This lesser number is the
|
||
ordered set of variable bindings with some of the variable
|
||
bindings at the end of the set removed, such that the size of
|
||
the message encapsulating the Response-PDU is approximately
|
||
equal to but no greater than either a local constraint or the
|
||
maximum message size of the originator. Note that the number
|
||
of variable bindings removed has no relationship to the values
|
||
of N, M, or R.
|
||
|
||
(2) The response may also be generated with a lesser number of
|
||
variable bindings if for some value of iteration i, such that i
|
||
is greater than zero and less than or equal to M, that all of
|
||
the generated variable bindings have the value field set to
|
||
"endOfMibView". In this case, the variable bindings may be
|
||
truncated after the (N + (i * R))-th variable binding.
|
||
|
||
(3) In the event that the processing of a request with many
|
||
repetitions requires a significantly greater amount of
|
||
processing time than a normal request, then a command responder
|
||
application may terminate the request with less than the full
|
||
number of repetitions, providing at least one repetition is
|
||
completed.
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 16]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
If the processing of any variable binding fails for a reason other
|
||
than listed above, then the Response-PDU is re-formatted with the
|
||
same values in its request-id and variable-bindings fields as the
|
||
received GetBulkRequest-PDU, with the value of its error-status field
|
||
set to "genErr", and the value of its error-index field is set to the
|
||
index of the variable binding in the original request which
|
||
corresponds to the failed variable binding.
|
||
|
||
Otherwise, the value of the Response-PDU's error-status field is set
|
||
to "noError", and the value of its error-index field to zero.
|
||
|
||
The generated Response-PDU (possibly with an empty variable-bindings
|
||
field) is then encapsulated into a message. If the size of the
|
||
resultant message is less than or equal to both a local constraint
|
||
and the maximum message size of the originator, it is transmitted to
|
||
the originator of the GetBulkRequest-PDU. Otherwise, the
|
||
snmpSilentDrops [RFC3418] counter is incremented and the resultant
|
||
message is discarded.
|
||
|
||
4.2.3.1. Another Example of Table Traversal
|
||
|
||
This example demonstrates how the GetBulkRequest-PDU can be used as
|
||
an alternative to the GetNextRequest-PDU. The same traversal of the
|
||
IP net-to-media table as shown in Section 4.2.2.1 is achieved with
|
||
fewer exchanges.
|
||
|
||
The SNMP entity supporting the command generator application begins
|
||
by sending a GetBulkRequest-PDU with the modest max-repetitions value
|
||
of 2, and containing the indicated OBJECT IDENTIFIER values as the
|
||
requested variable names:
|
||
|
||
GetBulkRequest [ non-repeaters = 1, max-repetitions = 2 ]
|
||
( sysUpTime,
|
||
ipNetToMediaPhysAddress,
|
||
ipNetToMediaType )
|
||
|
||
The SNMP entity supporting the command responder application responds
|
||
with a Response-PDU:
|
||
|
||
Response (( sysUpTime.0 = "123456" ),
|
||
( ipNetToMediaPhysAddress.1.9.2.3.4 = "000010543210" ),
|
||
( ipNetToMediaType.1.9.2.3.4 = "dynamic" ),
|
||
( ipNetToMediaPhysAddress.1.10.0.0.51 = "000010012345" ),
|
||
( ipNetToMediaType.1.10.0.0.51 = "static" ))
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 17]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
The SNMP entity supporting the command generator application
|
||
continues with:
|
||
|
||
GetBulkRequest [ non-repeaters = 1, max-repetitions = 2 ]
|
||
( sysUpTime,
|
||
ipNetToMediaPhysAddress.1.10.0.0.51,
|
||
ipNetToMediaType.1.10.0.0.51 )
|
||
|
||
The SNMP entity supporting the command responder application responds
|
||
with:
|
||
|
||
Response (( sysUpTime.0 = "123466" ),
|
||
( ipNetToMediaPhysAddress.2.10.0.0.15 = "000010987654" ),
|
||
( ipNetToMediaType.2.10.0.0.15 = "dynamic" ),
|
||
( ipNetToMediaNetAddress.1.9.2.3.4 = "9.2.3.4" ),
|
||
( ipRoutingDiscards.0 = "2" ))
|
||
|
||
Note how, as in the first example, the variable bindings in the
|
||
response indicate that the end of the table has been reached. The
|
||
fourth variable binding does so by returning information from the
|
||
next available column; the fifth variable binding does so by
|
||
returning information from the first available object
|
||
lexicographically following the table. This response signals the end
|
||
of the table to the command generator application.
|
||
|
||
4.2.4. The Response-PDU
|
||
|
||
The Response-PDU is generated by an SNMP entity only upon receipt of
|
||
a GetRequest-PDU, GetNextRequest-PDU, GetBulkRequest-PDU,
|
||
SetRequest-PDU, or InformRequest-PDU, as described elsewhere in this
|
||
document.
|
||
|
||
If the error-status field of the Response-PDU is non-zero, the value
|
||
fields of the variable bindings in the variable binding list are
|
||
ignored.
|
||
|
||
If both the error-status field and the error-index field of the
|
||
Response-PDU are non-zero, then the value of the error-index field is
|
||
the index of the variable binding (in the variable-binding list of
|
||
the corresponding request) for which the request failed. The first
|
||
variable binding in a request's variable-binding list is index one,
|
||
the second is index two, etc.
|
||
|
||
A compliant SNMP entity supporting a command generator application
|
||
must be able to properly receive and handle a Response-PDU with an
|
||
error-status field equal to "noSuchName", "badValue", or "readOnly".
|
||
(See sections 1.3 and 4.3 of [RFC2576].)
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 18]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
Upon receipt of a Response-PDU, the receiving SNMP entity presents
|
||
its contents to the application which generated the request with the
|
||
same request-id value. For more details, see [RFC3412].
|
||
|
||
4.2.5. The SetRequest-PDU
|
||
|
||
A SetRequest-PDU is generated and transmitted at the request of an
|
||
application.
|
||
|
||
Upon receipt of a SetRequest-PDU, the receiving SNMP entity
|
||
determines the size of a message encapsulating a Response-PDU having
|
||
the same values in its request-id and variable-bindings fields as the
|
||
received SetRequest-PDU, and the largest possible sizes of the
|
||
error-status and error-index fields. If the determined message size
|
||
is greater than either a local constraint or the maximum message size
|
||
of the originator, then an alternate Response-PDU is generated,
|
||
transmitted to the originator of the SetRequest-PDU, and processing
|
||
of the SetRequest-PDU terminates immediately thereafter. This
|
||
alternate Response-PDU is formatted with the same values in its
|
||
request-id field as the received SetRequest-PDU, with the value of
|
||
its error-status field set to "tooBig", the value of its error-index
|
||
field set to zero, and an empty variable-bindings field. This
|
||
alternate Response-PDU is then encapsulated into a message. If the
|
||
size of the resultant message is less than or equal to both a local
|
||
constraint and the maximum message size of the originator, it is
|
||
transmitted to the originator of the SetRequest-PDU. Otherwise, the
|
||
snmpSilentDrops [RFC3418] counter is incremented and the resultant
|
||
message is discarded. Regardless, processing of the SetRequest-PDU
|
||
terminates.
|
||
|
||
Otherwise, the receiving SNMP entity processes each variable binding
|
||
in the variable-binding list to produce a Response-PDU. All fields
|
||
of the Response-PDU have the same values as the corresponding fields
|
||
of the received request except as indicated below.
|
||
|
||
The variable bindings are conceptually processed as a two phase
|
||
operation. In the first phase, each variable binding is validated;
|
||
if all validations are successful, then each variable is altered in
|
||
the second phase. Of course, implementors are at liberty to
|
||
implement either the first, or second, or both, of these conceptual
|
||
phases as multiple implementation phases. Indeed, such multiple
|
||
implementation phases may be necessary in some cases to ensure
|
||
consistency.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 19]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
The following validations are performed in the first phase on each
|
||
variable binding until they are all successful, or until one fails:
|
||
|
||
(1) If the variable binding's name specifies an existing or non-
|
||
existent variable to which this request is/would be denied
|
||
access because it is/would not be in the appropriate MIB view,
|
||
then the value of the Response-PDU's error-status field is set
|
||
to "noAccess", and the value of its error-index field is set to
|
||
the index of the failed variable binding.
|
||
|
||
(2) Otherwise, if there are no variables which share the same
|
||
OBJECT IDENTIFIER prefix as the variable binding's name, and
|
||
which are able to be created or modified no matter what new
|
||
value is specified, then the value of the Response-PDU's
|
||
error-status field is set to "notWritable", and the value of
|
||
its error-index field is set to the index of the failed
|
||
variable binding.
|
||
|
||
(3) Otherwise, if the variable binding's value field specifies,
|
||
according to the ASN.1 language, a type which is inconsistent
|
||
with that required for all variables which share the same
|
||
OBJECT IDENTIFIER prefix as the variable binding's name, then
|
||
the value of the Response-PDU's error-status field is set to
|
||
"wrongType", and the value of its error-index field is set to
|
||
the index of the failed variable binding.
|
||
|
||
(4) Otherwise, if the variable binding's value field specifies,
|
||
according to the ASN.1 language, a length which is inconsistent
|
||
with that required for all variables which share the same
|
||
OBJECT IDENTIFIER prefix as the variable binding's name, then
|
||
the value of the Response-PDU's error-status field is set to
|
||
"wrongLength", and the value of its error-index field is set to
|
||
the index of the failed variable binding.
|
||
|
||
(5) Otherwise, if the variable binding's value field contains an
|
||
ASN.1 encoding which is inconsistent with that field's ASN.1
|
||
tag, then the value of the Response-PDU's error-status field is
|
||
set to "wrongEncoding", and the value of its error-index field
|
||
is set to the index of the failed variable binding. (Note that
|
||
not all implementation strategies will generate this error.)
|
||
|
||
(6) Otherwise, if the variable binding's value field specifies a
|
||
value which could under no circumstances be assigned to the
|
||
variable, then the value of the Response-PDU's error-status
|
||
field is set to "wrongValue", and the value of its error-index
|
||
field is set to the index of the failed variable binding.
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 20]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
(7) Otherwise, if the variable binding's name specifies a variable
|
||
which does not exist and could not ever be created (even though
|
||
some variables sharing the same OBJECT IDENTIFIER prefix might
|
||
under some circumstances be able to be created), then the value
|
||
of the Response-PDU's error-status field is set to
|
||
"noCreation", and the value of its error-index field is set to
|
||
the index of the failed variable binding.
|
||
|
||
(8) Otherwise, if the variable binding's name specifies a variable
|
||
which does not exist but can not be created under the present
|
||
circumstances (even though it could be created under other
|
||
circumstances), then the value of the Response-PDU's error-
|
||
status field is set to "inconsistentName", and the value of its
|
||
error-index field is set to the index of the failed variable
|
||
binding.
|
||
|
||
(9) Otherwise, if the variable binding's name specifies a variable
|
||
which exists but can not be modified no matter what new value
|
||
is specified, then the value of the Response-PDU's error-status
|
||
field is set to "notWritable", and the value of its error-index
|
||
field is set to the index of the failed variable binding.
|
||
|
||
(10) Otherwise, if the variable binding's value field specifies a
|
||
value that could under other circumstances be held by the
|
||
variable, but is presently inconsistent or otherwise unable to
|
||
be assigned to the variable, then the value of the Response-
|
||
PDU's error-status field is set to "inconsistentValue", and the
|
||
value of its error-index field is set to the index of the
|
||
failed variable binding.
|
||
|
||
(11) When, during the above steps, the assignment of the value
|
||
specified by the variable binding's value field to the
|
||
specified variable requires the allocation of a resource which
|
||
is presently unavailable, then the value of the Response-PDU's
|
||
error-status field is set to "resourceUnavailable", and the
|
||
value of its error-index field is set to the index of the
|
||
failed variable binding.
|
||
|
||
(12) If the processing of the variable binding fails for a reason
|
||
other than listed above, then the value of the Response-PDU's
|
||
error-status field is set to "genErr", and the value of its
|
||
error-index field is set to the index of the failed variable
|
||
binding.
|
||
|
||
(13) Otherwise, the validation of the variable binding succeeds.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 21]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
At the end of the first phase, if the validation of all variable
|
||
bindings succeeded, then the value of the Response-PDU's error-status
|
||
field is set to "noError" and the value of its error-index field is
|
||
zero, and processing continues as follows.
|
||
|
||
For each variable binding in the request, the named variable is
|
||
created if necessary, and the specified value is assigned to it.
|
||
Each of these variable assignments occurs as if simultaneously with
|
||
respect to all other assignments specified in the same request.
|
||
However, if the same variable is named more than once in a single
|
||
request, with different associated values, then the actual assignment
|
||
made to that variable is implementation-specific.
|
||
|
||
If any of these assignments fail (even after all the previous
|
||
validations), then all other assignments are undone, and the
|
||
Response-PDU is modified to have the value of its error-status field
|
||
set to "commitFailed", and the value of its error-index field set to
|
||
the index of the failed variable binding.
|
||
|
||
If and only if it is not possible to undo all the assignments, then
|
||
the Response-PDU is modified to have the value of its error-status
|
||
field set to "undoFailed", and the value of its error-index field is
|
||
set to zero. Note that implementations are strongly encouraged to
|
||
take all possible measures to avoid use of either "commitFailed" or
|
||
"undoFailed" - these two error-status codes are not to be taken as
|
||
license to take the easy way out in an implementation.
|
||
|
||
Finally, the generated Response-PDU is encapsulated into a message,
|
||
and transmitted to the originator of the SetRequest-PDU.
|
||
|
||
4.2.6. The SNMPv2-Trap-PDU
|
||
|
||
An SNMPv2-Trap-PDU is generated and transmitted by an SNMP entity on
|
||
behalf of a notification originator application. The SNMPv2-Trap-PDU
|
||
is often used to notify a notification receiver application at a
|
||
logically remote SNMP entity that an event has occurred or that a
|
||
condition is present. There is no confirmation associated with this
|
||
notification delivery mechanism.
|
||
|
||
The destination(s) to which an SNMPv2-Trap-PDU is sent is determined
|
||
in an implementation-dependent fashion by the SNMP entity. The first
|
||
two variable bindings in the variable binding list of an SNMPv2-
|
||
Trap-PDU are sysUpTime.0 [RFC3418] and snmpTrapOID.0 [RFC3418]
|
||
respectively. If the OBJECTS clause is present in the invocation of
|
||
the corresponding NOTIFICATION-TYPE macro, then each corresponding
|
||
variable, as instantiated by this notification, is copied, in order,
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 22]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
to the variable-bindings field. If any additional variables are
|
||
being included (at the option of the generating SNMP entity), then
|
||
each is copied to the variable-bindings field.
|
||
|
||
4.2.7. The InformRequest-PDU
|
||
|
||
An InformRequest-PDU is generated and transmitted by an SNMP entity
|
||
on behalf of a notification originator application. The
|
||
InformRequest-PDU is often used to notify a notification receiver
|
||
application that an event has occurred or that a condition is
|
||
present. This is a confirmed notification delivery mechanism,
|
||
although there is, of course, no guarantee of delivery.
|
||
|
||
The destination(s) to which an InformRequest-PDU is sent is specified
|
||
by the notification originator application. The first two variable
|
||
bindings in the variable binding list of an InformRequest-PDU are
|
||
sysUpTime.0 [RFC3418] and snmpTrapOID.0 [RFC3418] respectively. If
|
||
the OBJECTS clause is present in the invocation of the corresponding
|
||
NOTIFICATION-TYPE macro, then each corresponding variable, as
|
||
instantiated by this notification, is copied, in order, to the
|
||
variable-bindings field. If any additional variables are being
|
||
included (at the option of the generating SNMP entity), then each is
|
||
copied to the variable-bindings field.
|
||
|
||
Upon receipt of an InformRequest-PDU, the receiving SNMP entity
|
||
determines the size of a message encapsulating a Response-PDU with
|
||
the same values in its request-id, error-status, error-index and
|
||
variable-bindings fields as the received InformRequest-PDU. If the
|
||
determined message size is greater than either a local constraint or
|
||
the maximum message size of the originator, then an alternate
|
||
Response-PDU is generated, transmitted to the originator of the
|
||
InformRequest-PDU, and processing of the InformRequest-PDU terminates
|
||
immediately thereafter. This alternate Response-PDU is formatted
|
||
with the same values in its request-id field as the received
|
||
InformRequest-PDU, with the value of its error-status field set to
|
||
"tooBig", the value of its error-index field set to zero, and an
|
||
empty variable-bindings field. This alternate Response-PDU is then
|
||
encapsulated into a message. If the size of the resultant message is
|
||
less than or equal to both a local constraint and the maximum message
|
||
size of the originator, it is transmitted to the originator of the
|
||
InformRequest-PDU. Otherwise, the snmpSilentDrops [RFC3418] counter
|
||
is incremented and the resultant message is discarded. Regardless,
|
||
processing of the InformRequest-PDU terminates.
|
||
|
||
Otherwise, the receiving SNMP entity:
|
||
|
||
(1) presents its contents to the appropriate application;
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 23]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
(2) generates a Response-PDU with the same values in its request-id
|
||
and variable-bindings fields as the received InformRequest-PDU,
|
||
with the value of its error-status field set to "noError" and
|
||
the value of its error-index field set to zero; and
|
||
|
||
(3) transmits the generated Response-PDU to the originator of the
|
||
InformRequest-PDU.
|
||
|
||
5. Notice on 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.
|
||
|
||
6. Acknowledgments
|
||
|
||
This document is the product of the SNMPv3 Working Group. Some
|
||
special thanks are in order to the following Working Group members:
|
||
|
||
Randy Bush
|
||
Jeffrey D. Case
|
||
Mike Daniele
|
||
Rob Frye
|
||
Lauren Heintz
|
||
Keith McCloghrie
|
||
Russ Mundy
|
||
David T. Perkins
|
||
Randy Presuhn
|
||
Aleksey Romanov
|
||
Juergen Schoenwaelder
|
||
Bert Wijnen
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 24]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
This version of the document, edited by Randy Presuhn, was initially
|
||
based on the work of a design team whose members were:
|
||
|
||
Jeffrey D. Case
|
||
Keith McCloghrie
|
||
David T. Perkins
|
||
Randy Presuhn
|
||
Juergen Schoenwaelder
|
||
|
||
The previous versions of this document, edited by Keith McCloghrie,
|
||
was the result of significant work by four major contributors:
|
||
|
||
Jeffrey D. Case
|
||
Keith McCloghrie
|
||
Marshall T. Rose
|
||
Steven Waldbusser
|
||
|
||
Additionally, the contributions of the SNMPv2 Working Group to the
|
||
previous versions are also acknowledged. In particular, a special
|
||
thanks is extended for the contributions of:
|
||
|
||
Alexander I. Alten
|
||
Dave Arneson
|
||
Uri Blumenthal
|
||
Doug Book
|
||
Kim Curran
|
||
Jim Galvin
|
||
Maria Greene
|
||
Iain Hanson
|
||
Dave Harrington
|
||
Nguyen Hien
|
||
Jeff Johnson
|
||
Michael Kornegay
|
||
Deirdre Kostick
|
||
David Levi
|
||
Daniel Mahoney
|
||
Bob Natale
|
||
Brian O'Keefe
|
||
Andrew Pearson
|
||
Dave Perkins
|
||
Randy Presuhn
|
||
Aleksey Romanov
|
||
Shawn Routhier
|
||
Jon Saperia
|
||
Juergen Schoenwaelder
|
||
Bob Stewart
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 25]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
Kaj Tesink
|
||
Glenn Waters
|
||
Bert Wijnen
|
||
|
||
7. Security Considerations
|
||
|
||
The protocol defined in this document by itself does not provide a
|
||
secure environment. Even if the network itself is secure (for
|
||
example by using IPSec), there is no control as to who on the secure
|
||
network is allowed access to management information.
|
||
|
||
It is recommended that the implementors consider the security
|
||
features as provided by the SNMPv3 framework. Specifically, the use
|
||
of the User-based Security Model STD 62, RFC 3414 [RFC3414] and the
|
||
View-based Access Control Model STD 62, RFC 3415 [RFC3415] is
|
||
recommended.
|
||
|
||
It is then a customer/user responsibility to ensure that the SNMP
|
||
entity is properly configured so that:
|
||
|
||
- only those principals (users) having legitimate rights can
|
||
access or modify the values of any MIB objects supported by
|
||
that entity;
|
||
|
||
- the occurrence of particular events on the entity will be
|
||
communicated appropriately;
|
||
|
||
- the entity responds appropriately and with due credence to
|
||
events and information that have been communicated to it.
|
||
|
||
8. References
|
||
|
||
8.1. Normative References
|
||
|
||
[RFC768] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
|
||
August 1980.
|
||
|
||
[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.
|
||
|
||
[RFC2579] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J.,
|
||
Rose, M. and S. Waldbusser, "Textual Conventions for
|
||
SMIv2", STD 58, RFC 2579, April 1999.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 26]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
[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.
|
||
|
||
[RFC3412] Case, J., Harrington, D., Presuhn, R. and B. Wijnen,
|
||
"Message Processing and Dispatching for the Simple
|
||
Network Management Protocol (SNMP)", STD 62, RFC 3412,
|
||
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.
|
||
|
||
[RFC3417] Presuhn, R., Case, J., McCloghrie, K., Rose, M. and S.
|
||
Waldbusser, "Transport Mappings for the Simple Network
|
||
Management Protocol", 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.
|
||
|
||
[ASN1] Information processing systems - Open Systems
|
||
Interconnection - Specification of Abstract Syntax
|
||
Notation One (ASN.1), International Organization for
|
||
Standardization. International Standard 8824, December
|
||
1987.
|
||
|
||
8.2. Informative References
|
||
|
||
[FRAG] Kent, C. and J. Mogul, "Fragmentation Considered
|
||
Harmful," Proceedings, ACM SIGCOMM '87, Stowe, VT, August
|
||
1987.
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 27]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
[RFC1155] Rose, M. and K. McCloghrie, "Structure and Identification
|
||
of Management Information for TCP/IP-based Internets",
|
||
STD 16, RFC 1155, May 1990.
|
||
|
||
[RFC1157] Case, J., Fedor, M., Schoffstall, M. and J. Davin,
|
||
"Simple Network Management Protocol", STD 15, RFC 1157,
|
||
May 1990.
|
||
|
||
[RFC1212] Rose, M. and K. McCloghrie, "Concise MIB Definitions",
|
||
STD 16, RFC 1212, March 1991.
|
||
|
||
[RFC1213] McCloghrie, K. and M. Rose, Editors, "Management
|
||
Information Base for Network Management of TCP/IP-based
|
||
internets: MIB-II", STD 17, RFC 1213, March 1991.
|
||
|
||
[RFC1215] Rose, M., "A Convention for Defining Traps for use with
|
||
the SNMP", RFC 1215, March 1991.
|
||
|
||
[RFC1901] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser,
|
||
"Introduction to Community-based SNMPv2", RFC 1901,
|
||
January 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.
|
||
|
||
[RFC2863] McCloghrie, K. and F. Kastenholz, "The Interfaces Group
|
||
MIB", RFC 2863, June 2000.
|
||
|
||
[RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, RFC
|
||
2914, September 2000.
|
||
|
||
[RFC3410] Case, J., Mundy, R., Partain, D. and B. Stewart,
|
||
"Introduction and Applicability Statements for Internet-
|
||
Standard Management Framework", RFC 3410, December 2002.
|
||
|
||
9. Changes from RFC 1905
|
||
|
||
These are the changes from RFC 1905:
|
||
|
||
- Corrected spelling error in copyright statement;
|
||
|
||
- Updated copyright date;
|
||
|
||
- Updated with new editor's name and contact information;
|
||
|
||
- Added notice on intellectual property;
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 28]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
- Cosmetic fixes to layout and typography;
|
||
|
||
- Added table of contents;
|
||
|
||
- Title changed;
|
||
|
||
- Updated document headers and footers;
|
||
|
||
- Deleted the old clause 2.3, entitled "Access to Management
|
||
Information";
|
||
|
||
- Changed the way in which request-id was defined, though with
|
||
the same ultimate syntax and semantics, to avoid coupling with
|
||
SMI. This does not affect the protocol in any way;
|
||
|
||
- Replaced the word "exception" with the word "error" in the old
|
||
clause 4.1. This does not affect the protocol in any way;
|
||
|
||
- Deleted the first two paragraphs of the old clause 4.2;
|
||
|
||
- Clarified the maximum number of variable bindings that an
|
||
implementation must support in a PDU. This does not affect the
|
||
protocol in any way;
|
||
|
||
- Replaced occurrences of "SNMPv2 application" with
|
||
"application";
|
||
|
||
- Deleted three sentences in old clause 4.2.3 describing the
|
||
handling of an impossible situation. This does not affect the
|
||
protocol in any way;
|
||
|
||
- Clarified the use of the SNMPv2-Trap-Pdu in the old clause
|
||
4.2.6. This does not affect the protocol in any way;
|
||
|
||
- Aligned description of the use of the InformRequest-Pdu in old
|
||
clause 4.2.7 with the architecture. This does not affect the
|
||
protocol in any way;
|
||
|
||
- Updated references;
|
||
|
||
- Re-wrote introduction clause;
|
||
|
||
- Replaced manager/agent/SNMPv2 entity terminology with
|
||
terminology from RFC 2571. This does not affect the protocol
|
||
in any way;
|
||
|
||
- Eliminated IMPORTS from the SMI, replaced with equivalent in-
|
||
line ASN.1. This does not affect the protocol in any way;
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 29]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
- Added notes calling attention to two different manifestations
|
||
of reaching the end of a table in the table walk examples;
|
||
|
||
- Added content to security considerations clause;
|
||
|
||
- Updated ASN.1 comment on use of Report-PDU. This does not
|
||
affect the protocol in any way;
|
||
|
||
- Updated acknowledgments section;
|
||
|
||
- Included information on handling of BITS;
|
||
|
||
- Deleted spurious comma in ASN.1 definition of PDUs;
|
||
|
||
- Added abstract;
|
||
|
||
- Made handling of additional variable bindings in informs
|
||
consistent with that for traps. This was a correction of an
|
||
editorial oversight, and reflects implementation practice;
|
||
|
||
- Added reference to RFC 2914.
|
||
|
||
10. Editor's Address
|
||
|
||
Randy Presuhn
|
||
BMC Software, Inc.
|
||
2141 North First Street
|
||
San Jose, CA 95131
|
||
USA
|
||
|
||
Phone: +1 408 546 1006
|
||
EMail: randy_presuhn@bmc.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 30]
|
||
|
||
RFC 3416 Protocol Operations for SNMP December 2002
|
||
|
||
|
||
11. 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.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Presuhn, et al. Standards Track [Page 31]
|
||
|