draft-ietf-snmpv2-proto-ds-05.txt   rfc1905.txt 
Internet Draft Protocol Operations for SNMPv2 October 1995 Network Working Group SNMPv2 Working Group
Request for Comments: 1905 J. Case
Obsoletes: 1448 SNMP Research, Inc.
Category: Standards Track K. McCloghrie
Cisco Systems, Inc.
M. Rose
Dover Beach Consulting, Inc.
S. Waldbusser
International Network Services
January 1996
Protocol Operations Protocol Operations
for Version 2 of the for Version 2 of the
Simple Network Management Protocol (SNMPv2) Simple Network Management Protocol (SNMPv2)
11 October 1995 | Status of this Memo
draft-ietf-snmpv2-proto-ds-05.txt |
Keith McCloghrie
Editor +
Cisco Systems, Inc.
kzm@cisco.com
Status of this Memo -
This document is an Internet-Draft. Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its areas, and
its working groups. Note that other groups may also distribute working
documents as Internet-Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet- Drafts as reference material
or to cite them other than as ``work in progress.''
To learn the current status of any Internet-Draft, please check the This document specifies an Internet standards track protocol for the
``1id-abstracts.txt'' listing contained in the Internet- Drafts Shadow Internet community, and requests discussion and suggestions for
Directories on ds.internic.net (US East Coast), nic.nordu.net (Europe), improvements. Please refer to the current edition of the "Internet
ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific Rim). Official Protocol Standards" (STD 1) for the standardization state
and status of this protocol. Distribution of this memo is unlimited.
1. Introduction 1. Introduction
A management system contains: several (potentially many) nodes, each A management system contains: several (potentially many) nodes, each
with a processing entity, termed an agent, which has access to with a processing entity, termed an agent, which has access to
management instrumentation; at least one management station; and, a management instrumentation; at least one management station; and, a
management protocol, used to convey management information between the management protocol, used to convey management information between
agents and management stations. Operations of the protocol are carried the agents and management stations. Operations of the protocol are
out under an administrative framework which defines authentication, carried out under an administrative framework which defines
authorization, access control, and privacy policies. authentication, authorization, access control, and privacy policies.
Management stations execute management applications which monitor and Management stations execute management applications which monitor and
control managed elements. Managed elements are devices such as hosts, control managed elements. Managed elements are devices such as
routers, terminal servers, etc., which are monitored and controlled via hosts, routers, terminal servers, etc., which are monitored and
access to their management information. controlled via access to their management information.
Management information is viewed as a collection of managed objects, Management information is viewed as a collection of managed objects,
residing in a virtual information store, termed the Management residing in a virtual information store, termed the Management
Information Base (MIB). Collections of related objects are defined in Information Base (MIB). Collections of related objects are defined
MIB modules. These modules are written using a subset of OSI's Abstract in MIB modules. These modules are written using a subset of OSI's
Syntax Notation One (ASN.1) [1], termed the Structure of Management Abstract Syntax Notation One (ASN.1) [1], termed the Structure of
Information (SMI) [2]. Management Information (SMI) [2].
The management protocol, version 2 of the Simple Network Management The management protocol, version 2 of the Simple Network Management
Protocol, provides for the exchange of messages which convey management Protocol, provides for the exchange of messages which convey
information between the agents and the management stations. The form of management information between the agents and the management
these messages is a message "wrapper" which encapsulates a Protocol Data stations. The form of these messages is a message "wrapper" which
Unit (PDU). The form and meaning of the "wrapper" is determined by an encapsulates a Protocol Data Unit (PDU). The form and meaning of the
administrative framework which defines both authentication and "wrapper" is determined by an administrative framework which defines
authorization policies. both authentication and authorization policies.
It is the purpose of this document, Protocol Operations for SNMPv2, to It is the purpose of this document, Protocol Operations for SNMPv2,
define the operations of the protocol with respect to the sending and to define the operations of the protocol with respect to the sending
receiving of the PDUs. and receiving of the PDUs.
1.1. A Note on Terminology 1.1. A Note on Terminology
For the purpose of exposition, the original Internet-standard Network For the purpose of exposition, the original Internet-standard Network
Management Framework, as described in RFCs 1155, 1157, and 1212, is Management Framework, as described in RFCs 1155 (STD 16), 1157 (STD
termed the SNMP version 1 framework (SNMPv1). The current framework is | 15), and 1212 (STD 16), is termed the SNMP version 1 framework
termed the SNMP version 2 framework (SNMPv2), as described in [3]. | (SNMPv1). The current framework is termed the SNMP version 2
framework (SNMPv2).
2. Overview 2. Overview
2.1. Roles of Protocol Entities 2.1. Roles of Protocol Entities
A SNMPv2 entity may operate in a manager role or an agent role. A SNMPv2 entity may operate in a manager role or an agent role.
A SNMPv2 entity acts in an agent role when it performs SNMPv2 management A SNMPv2 entity acts in an agent role when it performs SNMPv2
operations in response to received SNMPv2 protocol messages (other than management operations in response to received SNMPv2 protocol
an inform notification) or when it sends trap notifications. messages (other than an inform notification) or when it sends trap
notifications.
A SNMPv2 entity acts in a manager role when it initiates SNMPv2 A SNMPv2 entity acts in a manager role when it initiates SNMPv2
management operations by the generation of SNMPv2 protocol messages or management operations by the generation of SNMPv2 protocol messages
when it performs SNMPv2 management operations in response to received or when it performs SNMPv2 management operations in response to
trap or inform notifications. received trap or inform notifications.
A SNMPv2 entity may support either or both roles, as dictated by its A SNMPv2 entity may support either or both roles, as dictated by its
implementation and configuration. Further, a SNMPv2 entity can also act implementation and configuration. Further, a SNMPv2 entity can also
in the role of a proxy agent, in which it appears to be acting in an act in the role of a proxy agent, in which it appears to be acting in
agent role, but satisfies management requests by acting in a manager an agent role, but satisfies management requests by acting in a
role with a remote entity. manager role with a remote entity.
2.2. Management Information 2.2. Management Information
The term, variable, refers to an instance of a non-aggregate object type The term, variable, refers to an instance of a non-aggregate object
defined according to the conventions set forth in the SMI [2] or the type defined according to the conventions set forth in the SMI [2] or
textual conventions based on the SMI [4]. The term, variable binding, the textual conventions based on the SMI [3]. The term, variable
normally refers to the pairing of the name of a variable and its binding, normally refers to the pairing of the name of a variable and
associated value. However, if certain kinds of exceptional conditions its associated value. However, if certain kinds of exceptional
occur during processing of a retrieval request, a variable binding will conditions occur during processing of a retrieval request, a variable
pair a name and an indication of that exception. binding will pair a name and an indication of that exception.
A variable-binding list is a simple list of variable bindings. A variable-binding list is a simple list of variable bindings.
The name of a variable is an OBJECT IDENTIFIER which is the The name of a variable is an OBJECT IDENTIFIER which is the
concatenation of the OBJECT IDENTIFIER of the corresponding object-type concatenation of the OBJECT IDENTIFIER of the corresponding object-
together with an OBJECT IDENTIFIER fragment identifying the instance. type together with an OBJECT IDENTIFIER fragment identifying the
The OBJECT IDENTIFIER of the corresponding object-type is called the instance. The OBJECT IDENTIFIER of the corresponding object-type is
OBJECT IDENTIFIER prefix of the variable. called the OBJECT IDENTIFIER prefix of the variable.
2.3. Access to Management Information 2.3. Access to Management Information
Three types of access to management information are provided by the Three types of access to management information are provided by the
protocol. One type is a request-response interaction, in which a SNMPv2 protocol. One type is a request-response interaction, in which a
entity, acting in a manager role, sends a request to a SNMPv2 entity, SNMPv2 entity, acting in a manager role, sends a request to a SNMPv2
acting in an agent role, and the latter SNMPv2 entity then responds to entity, acting in an agent role, and the latter SNMPv2 entity then
the request. This type is used to retrieve or modify management responds to the request. This type is used to retrieve or modify
information associated with the managed device. management information associated with the managed device.
A second type is also a request-response interaction, in which a SNMPv2 A second type is also a request-response interaction, in which a
entity, acting in a manager role, sends a request to a SNMPv2 entity, SNMPv2 entity, acting in a manager role, sends a request to a SNMPv2
also acting in a manager role, and the latter SNMPv2 entity then entity, also acting in a manager role, and the latter SNMPv2 entity
responds to the request. This type is used to notify a SNMPv2 entity, then responds to the request. This type is used to notify a SNMPv2
acting in a manager role, of management information associated with entity, acting in a manager role, of management information
another SNMPv2 entity, also acting in a manager role. associated with another SNMPv2 entity, also acting in a manager role.
The third type of access is an unconfirmed interaction, in which a The third type of access is an unconfirmed interaction, in which a
SNMPv2 entity, acting in an agent role, sends a unsolicited message, SNMPv2 entity, acting in an agent role, sends a unsolicited message,
termed a trap, to a SNMPv2 entity, acting in a manager role, and no termed a trap, to a SNMPv2 entity, acting in a manager role, and no
response is returned. This type is used to notify a SNMPv2 entity, response is returned. This type is used to notify a SNMPv2 entity,
acting in a manager role, of an exceptional situation, which has acting in a manager role, of an exceptional situation, which has
resulted in changes to management information associated with the resulted in changes to management information associated with the
managed device. managed device.
2.4. Retransmission of Requests 2.4. Retransmission of Requests
For all types of request in this protocol, the receiver is required For all types of request in this protocol, the receiver is required
under normal circumstances, to generate and transmit a response to the under normal circumstances, to generate and transmit a response to
originator of the request. Whether or not a request should be the originator of the request. Whether or not a request should be
retransmitted if no corresponding response is received in an appropriate retransmitted if no corresponding response is received in an
time interval, is at the discretion of the application originating the appropriate time interval, is at the discretion of the application
request. This will normally depend on the urgency of the request. originating the request. This will normally depend on the urgency of
However, such an application needs to act responsibly in respect to the the request. However, such an application needs to act responsibly
frequency and duration of re-transmissions. in respect to the frequency and duration of re-transmissions.
2.5. Message Sizes 2.5. Message Sizes
The maximum size of a SNMPv2 message is limited to the minimum of: The maximum size of a SNMPv2 message is limited to the minimum of:
(1) the maximum message size which the destination SNMPv2 entity can (1) the maximum message size which the destination SNMPv2 entity can
accept; and, accept; and,
(2) the maximum message size which the source SNMPv2 entity can (2) the maximum message size which the source SNMPv2 entity can
generate. generate.
The former may be known on a per-recipient basis; and in the absence of | The former may be known on a per-recipient basis; and in the absence
such knowledge, | of such knowledge, is indicated by transport domain used when sending
is indicated by transport domain used when sending the message. The the message. The latter is imposed by implementation-specific local
latter is imposed by implementation-specific local constraints. constraints.
Each transport mapping for the SNMPv2 indicates the minimum message size Each transport mapping for the SNMPv2 indicates the minimum message
which a SNMPv2 implementation must be able to produce or consume. size which a SNMPv2 implementation must be able to produce or
Although implementations are encouraged to support larger values consume. Although implementations are encouraged to support larger
whenever possible, a conformant implementation must never generate values whenever possible, a conformant implementation must never
messages larger than allowed by the receiving SNMPv2 entity. generate messages larger than allowed by the receiving SNMPv2 entity.
One of the aims of the GetBulkRequest-PDU, specified in this protocol, One of the aims of the GetBulkRequest-PDU, specified in this
is to minimize the number of protocol exchanges required to retrieve a protocol, is to minimize the number of protocol exchanges required to
large amount of management information. As such, this PDU type allows a retrieve a large amount of management information. As such, this PDU
SNMPv2 entity acting in a manager role to request that the response be type allows a SNMPv2 entity acting in a manager role to request that
as large as possible given the constraints on message sizes. These the response be as large as possible given the constraints on message
constraints include the limits on the size of messages which the SNMPv2 sizes. These constraints include the limits on the size of messages
entity acting in an agent role can generate, and the SNMPv2 entity which the SNMPv2 entity acting in an agent role can generate, and the
acting in a manager role can receive. SNMPv2 entity acting in a manager role can receive.
However, it is possible that such maximum sized messages may be larger However, it is possible that such maximum sized messages may be
than the Path MTU of the path across the network traversed by the larger than the Path MTU of the path across the network traversed by
messages. In this situation, such messages are subject to the messages. In this situation, such messages are subject to
fragmentation. Fragmentation is generally considered to be harmful [5], fragmentation. Fragmentation is generally considered to be harmful
since among other problems, it leads to a decrease in the reliability of [4], since among other problems, it leads to a decrease in the
the transfer of the messages. Thus, a SNMPv2 entity which sends a reliability of the transfer of the messages. Thus, a SNMPv2 entity
GetBulkRequest-PDU must take care to set its parameters accordingly, so which sends a GetBulkRequest-PDU must take care to set its parameters
as to reduce the risk of fragmentation. In particular, under conditions accordingly, so as to reduce the risk of fragmentation. In
of network stress, only small values should be used for max-repetitions. particular, under conditions of network stress, only small values
should be used for max-repetitions.
2.6. Transport Mappings 2.6. Transport Mappings
It is important to note that the exchange of SNMPv2 messages requires It is important to note that the exchange of SNMPv2 messages requires
only an unreliable datagram service, with every message being entirely only an unreliable datagram service, with every message being
and independently contained in a single transport datagram. Specific entirely and independently contained in a single transport datagram.
transport mappings and encoding rules are specified elsewhere [6]. Specific transport mappings and encoding rules are specified
However, the preferred mapping is the use of the User Datagram Protocol elsewhere [5]. However, the preferred mapping is the use of the User
[7]. Datagram Protocol [6].
3. Definitions 3. Definitions
SNMPv2-PDU DEFINITIONS ::= BEGIN SNMPv2-PDU DEFINITIONS ::= BEGIN
IMPORTS IMPORTS
ObjectName, ObjectSyntax, Integer32 ObjectName, ObjectSyntax, Integer32
FROM SNMPv2-SMI; FROM SNMPv2-SMI;
-- protocol data units -- protocol data units
skipping to change at page 7, line 37 skipping to change at page 6, line 30
IMPLICIT BulkPDU IMPLICIT BulkPDU
InformRequest-PDU ::= InformRequest-PDU ::=
[6] [6]
IMPLICIT PDU IMPLICIT PDU
SNMPv2-Trap-PDU ::= SNMPv2-Trap-PDU ::=
[7] [7]
IMPLICIT PDU IMPLICIT PDU
-- Usage and precise semantics of Report-PDU are not presently | -- Usage and precise semantics of Report-PDU are not presently
-- defined. Any SNMP administrative framework making use of | -- defined. Any SNMP administrative framework making use of
-- this PDU must define its usage and semantics. | -- this PDU must define its usage and semantics.
Report-PDU ::= Report-PDU ::=
[8] [8]
IMPLICIT PDU IMPLICIT PDU
max-bindings max-bindings
INTEGER ::= 2147483647 INTEGER ::= 2147483647
PDU ::= PDU ::=
SEQUENCE { SEQUENCE {
request-id request-id
skipping to change at page 11, line 9 skipping to change at page 8, line 33
VarBindList ::= VarBindList ::=
SEQUENCE (SIZE (0..max-bindings)) OF SEQUENCE (SIZE (0..max-bindings)) OF
VarBind VarBind
END END
4. Protocol Specification 4. Protocol Specification
4.1. Common Constructs 4.1. Common Constructs
The value of the request-id field in a Response-PDU takes the value of The value of the request-id field in a Response-PDU takes the value
the request-id field in the request PDU to which it is a response. By of the request-id field in the request PDU to which it is a response.
use of the request-id value, a SNMPv2 application can distinguish the By use of the request-id value, a SNMPv2 application can distinguish
(potentially multiple) outstanding requests, and thereby correlate the (potentially multiple) outstanding requests, and thereby
incoming responses with outstanding requests. In cases where an correlate incoming responses with outstanding requests. In cases
unreliable datagram service is used, the request-id also provides a where an unreliable datagram service is used, the request-id also
simple means of identifying messages duplicated by the network. Use of provides a simple means of identifying messages duplicated by the
the same request-id on a retransmission of a request allows the response network. Use of the same request-id on a retransmission of a request
to either the original transmission or the retransmission to satisfy the allows the response to either the original transmission or the
request. However, in order to calculate the round trip time for retransmission to satisfy the request. However, in order to
transmission and processing of a request-response transaction, the calculate the round trip time for transmission and processing of a
SNMPv2 application needs to use a different request-id value on a request-response transaction, the SNMPv2 application needs to use a
retransmitted request. The latter strategy is recommended for use in different request-id value on a retransmitted request. The latter
the majority of situations. 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 A non-zero value of the error-status field in a Response-PDU is used
indicate that an exception occurred to prevent the processing of the to indicate that an exception occurred to prevent the processing of
request. In these cases, a non-zero value of the Response-PDU's error- the request. In these cases, a non-zero value of the Response-PDU's
index field provides additional information by identifying which error-index field provides additional information by identifying
variable binding in the list caused the exception. A variable binding which variable binding in the list caused the exception. A variable
is identified by its index value. The first variable binding in a binding is identified by its index value. The first variable binding
variable-binding list is index one, the second is index two, etc. in a variable-binding list is index one, the second is index two,
etc.
SNMPv2 limits OBJECT IDENTIFIER values to a maximum of 128 sub- SNMPv2 limits OBJECT IDENTIFIER values to a maximum of 128 sub-
identifiers, where each sub-identifier has a maximum value of 2**32-1. identifiers, where each sub-identifier has a maximum value of 2**32-
1.
4.2. PDU Processing 4.2. PDU Processing
It is mandatory that all SNMPv2 entities acting in an agent role be able It is mandatory that all SNMPv2 entities acting in an agent role be
to generate the following PDU types: Response-PDU and SNMPv2-Trap-PDU; able to generate the following PDU types: Response-PDU and SNMPv2-
further, all such implementations must be able to receive the following Trap-PDU; further, all such implementations must be able to receive
PDU types: GetRequest-PDU, GetNextRequest-PDU, GetBulkRequest-PDU, and the following PDU types: GetRequest-PDU, GetNextRequest-PDU,
SetRequest-PDU. GetBulkRequest-PDU, and SetRequest-PDU.
It is mandatory that all SNMPv2 entities acting in a manager role be It is mandatory that all SNMPv2 entities acting in a manager role be
able to generate the following PDU types: GetRequest-PDU, able to generate the following PDU types: GetRequest-PDU,
GetNextRequest-PDU, GetBulkRequest-PDU, SetRequest-PDU, InformRequest- GetNextRequest-PDU, GetBulkRequest-PDU, SetRequest-PDU,
PDU, and Response-PDU; further, all such implementations must be able to InformRequest-PDU, and Response-PDU; further, all such
receive the following PDU types: Response-PDU, SNMPv2-Trap-PDU, implementations must be able to receive the following PDU types:
InformRequest-PDU; Response-PDU, SNMPv2-Trap-PDU,
In the elements of procedure below, any field of a PDU which is not InformRequest-PDU;
referenced by the relevant procedure is ignored by the receiving SNMPv2
entity. However, all components of a PDU, including those whose values
are ignored by the receiving SNMPv2 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 SNMPv2 entity. The unSpecified value is defined for use as
the value portion of such bindings.
On generating a management communication, the message "wrapper" to In the elements of procedure below, any field of a PDU which is not
encapsulate the PDU is generated according to the "Elements of referenced by the relevant procedure is ignored by the receiving
Procedure" of the administrative framework in use is followed (for | SNMPv2 entity. However, all components of a PDU, including those
example, see [3]). | whose values are ignored by the receiving SNMPv2 entity, must have
While the definition of "max-bindings" does impose an upper-bound on the valid ASN.1 syntax and encoding. For example, some PDUs (e.g., the
number of variable bindings, in practice, the size of a message is GetRequest-PDU) are concerned only with the name of a variable and
limited only by constraints on the maximum message size -- it is not not its value. In this case, the value portion of the variable
limited by the number of variable bindings. binding is ignored by the receiving SNMPv2 entity. The unSpecified
value is defined for use as the value portion of such bindings.
On receiving a management communication, the "Elements of Procedure" of | On generating a management communication, the message "wrapper" to
the administrative framework in use is followed (for example, see [3]), | encapsulate the PDU is generated according to the "Elements of
and if those procedures indicate that the operation contained within the Procedure" of the administrative framework in use is followed. While
message is to be performed locally, then those procedures also indicate the definition of "max-bindings" does impose an upper-bound on the
the MIB view which is visible to the operation. number of variable bindings, in practice, the size of a message is
limited only by constraints on the maximum message size -- it is not
limited by the number of 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 4.2.1. The GetRequest-PDU
A GetRequest-PDU is generated and transmitted at the request of a SNMPv2 A GetRequest-PDU is generated and transmitted at the request of a
application. SNMPv2 application.
Upon receipt of a GetRequest-PDU, the receiving SNMPv2 entity processes Upon receipt of a GetRequest-PDU, the receiving SNMPv2 entity
each variable binding in the variable-binding list to produce a processes each variable binding in the variable-binding list to
Response-PDU. All fields of the Response-PDU have the same values as produce a Response-PDU. All fields of the Response-PDU have the same
the corresponding fields of the received request except as indicated values as the corresponding fields of the received request except as
below. Each variable binding is processed as follows: indicated below. Each variable binding is processed as follows:
(1) If the variable binding's name exactly matches the name of a (1) If the variable binding's name exactly matches the name of a
variable accessible by this request, then the variable binding's variable accessible by this request, then the variable binding's
value field is set to the value of the named variable. value field is set to the value of the named variable.
(2) Otherwise, if the variable binding's name does not have an OBJECT (2) Otherwise, if the variable binding's name does not have an OBJECT
IDENTIFIER prefix which exactly matches the OBJECT IDENTIFIER IDENTIFIER prefix which exactly matches the OBJECT IDENTIFIER
prefix of any (potential) variable accessible by this request, then prefix of any (potential) variable accessible by this request, then
its value field is set to `noSuchObject'. its value field is set to `noSuchObject'.
(3) Otherwise, the variable binding's value field is set to to (3) Otherwise, the variable binding's value field is set to
`noSuchInstance'. `noSuchInstance'.
If the processing of any variable binding fails for a reason other than If the processing of any variable binding fails for a reason other
listed above, then the Response-PDU is re-formatted with the same values than listed above, then the Response-PDU is re-formatted with the
in its request-id and variable-bindings fields as the received same values in its request-id and variable-bindings fields as the
GetRequest-PDU, with the value of its error-status field set to received GetRequest-PDU, with the value of its error-status field set
`genErr', and the value of its error-index field is set to the index of to `genErr', and the value of its error-index field is set to the
the failed variable binding. index of the failed variable binding.
Otherwise, the value of the Response-PDU's error-status field is set to Otherwise, the value of the Response-PDU's error-status field is set
`noError', and the value of its error-index field is zero. to `noError', and the value of its error-index field is zero.
The generated Response-PDU is then encapsulated into a message. If the The generated Response-PDU is then encapsulated into a message. If
size of the resultant message is less than or equal to both a local the size of the resultant message is less than or equal to both a
constraint and the maximum message size of the originator, it is local constraint and the maximum message size of the originator, it
transmitted to the originator of the GetRequest-PDU. is transmitted to the originator of the GetRequest-PDU.
Otherwise, an alternate Response-PDU is generated. This alternate Otherwise, an alternate Response-PDU is generated. This alternate
Response-PDU is formatted with the same value in its request-id field as Response-PDU is formatted with the same value in its request-id field
the received GetRequest-PDU, with the value of its error-status field as the received GetRequest-PDU, with the value of its error-status
set to `tooBig', the value of its error-index field set to zero, and an field set to `tooBig', the value of its error-index field set to
empty variable-bindings field. This alternate Response-PDU is then zero, and an empty variable-bindings field. This alternate
encapsulated into a message. If the size of the resultant message is Response-PDU is then encapsulated into a message. If the size of the
less than or equal to both a local constraint and the maximum message resultant message is less than or equal to both a local constraint
size of the originator, it is transmitted to the originator of the and the maximum message size of the originator, it is transmitted to
GetRequest-PDU. Otherwise, the snmpSilentDrops | the originator of the GetRequest-PDU. Otherwise, the snmpSilentDrops
[10] counter is incremented and the resultant message is discarded. [9] counter is incremented and the resultant message is discarded.
4.2.2. The GetNextRequest-PDU 4.2.2. The GetNextRequest-PDU
A GetNextRequest-PDU is generated and transmitted at the request of a A GetNextRequest-PDU is generated and transmitted at the request of a
SNMPv2 application. SNMPv2 application.
Upon receipt of a GetNextRequest-PDU, the receiving SNMPv2 entity Upon receipt of a GetNextRequest-PDU, the receiving SNMPv2 entity
processes each variable binding in the variable-binding list to produce processes each variable binding in the variable-binding list to
a Response-PDU. All fields of the Response-PDU have the same values as produce a Response-PDU. All fields of the Response-PDU have the same
the corresponding fields of the received request except as indicated values as the corresponding fields of the received request except as
below. Each variable binding is processed as follows: indicated below. Each variable binding is processed as follows:
(1) The variable is located which is in the lexicographically ordered (1) The variable is located which is in the lexicographically ordered
list of the names of all variables which are accessible by this list of the names of all variables which are accessible by this
request and whose name is the first lexicographic successor of the request and whose name is the first lexicographic successor of the
variable binding's name in the incoming GetNextRequest-PDU. The variable binding's name in the incoming GetNextRequest-PDU. The
corresponding variable binding's name and value fields in the corresponding variable binding's name and value fields in the
Response-PDU are set to the name and value of the located variable. Response-PDU are set to the name and value of the located variable.
(2) If the requested variable binding's name does not lexicographically (2) If the requested variable binding's name does not lexicographically
precede the name of any variable accessible by this request, i.e., precede the name of any variable accessible by this request, i.e.,
there is no lexicographic successor, then the corresponding there is no lexicographic successor, then the corresponding
variable binding produced in the Response-PDU has its value field variable binding produced in the Response-PDU has its value field
set to `endOfMibView', and its name field set to the variable set to `endOfMibView', and its name field set to the variable
binding's name in the request. binding's name in the request.
If the processing of any variable binding fails for a reason other than If the processing of any variable binding fails for a reason other
listed above, then the Response-PDU is re-formatted with the same values than listed above, then the Response-PDU is re-formatted with the
in its request-id and variable-bindings fields as the received same values in its request-id and variable-bindings fields as the
GetNextRequest-PDU, with the value of its error-status field set to received GetNextRequest-PDU, with the value of its error-status field
`genErr', and the value of its error-index field is set to the index of set to `genErr', and the value of its error-index field is set to the
the failed variable binding. index of the failed variable binding.
Otherwise, the value of the Response-PDU's error-status field is set to Otherwise, the value of the Response-PDU's error-status field is set
`noError', and the value of its error-index field is zero. to `noError', and the value of its error-index field is zero.
The generated Response-PDU is then encapsulated into a message. If the The generated Response-PDU is then encapsulated into a message. If
size of the resultant message is less than or equal to both a local the size of the resultant message is less than or equal to both a
constraint and the maximum message size of the originator, it is local constraint and the maximum message size of the originator, it
transmitted to the originator of the GetNextRequest-PDU. is transmitted to the originator of the GetNextRequest-PDU.
Otherwise, an alternate Response-PDU is generated. This alternate Otherwise, an alternate Response-PDU is generated. This alternate
Response-PDU is formatted with the same values in its request-id field Response-PDU is formatted with the same values in its request-id
as the received GetNextRequest-PDU, with the value of its error-status field as the received GetNextRequest-PDU, with the value of its
field set to `tooBig', the value of its error-index field set to zero, error-status field set to `tooBig', the value of its error-index
and an empty variable-bindings field. This alternate Response-PDU is field set to zero, and an empty variable-bindings field. This
then encapsulated into a message. If the size of the resultant message alternate Response-PDU is then encapsulated into a message. If the
is less than or equal to both a local constraint and the maximum message size of the resultant message is less than or equal to both a local
size of the originator, it is transmitted to the originator of the constraint and the maximum message size of the originator, it is
GetNextRequest-PDU. Otherwise, the snmpSilentDrops | transmitted to the originator of the GetNextRequest-PDU. Otherwise,
[10] counter is incremented and the resultant message is discarded. the snmpSilentDrops [9] counter is incremented and the resultant
message is discarded.
4.2.2.1. Example of Table Traversal 4.2.2.1. Example of Table Traversal
An important use of the GetNextRequest-PDU is the traversal of An important use of the GetNextRequest-PDU is the traversal of
conceptual tables of information within a MIB. The semantics of this conceptual tables of information within a MIB. The semantics of this
type of request, together with the method of identifying individual type of request, together with the method of identifying individual
instances of objects in the MIB, provides access to related objects in instances of objects in the MIB, provides access to related objects
the MIB as if they enjoyed a tabular organization. in the MIB as if they enjoyed a tabular organization.
In the protocol exchange sketched below, a SNMPv2 application retrieves In the protocol exchange sketched below, a SNMPv2 application
the media-dependent physical address and the address-mapping type for retrieves the media-dependent physical address and the address-
each entry in the IP net-to-media Address Translation Table [8] of a mapping type for each entry in the IP net-to-media Address
particular network element. It also retrieves the value of sysUpTime Translation Table [7] of a particular network element. It also
[10], at which the mappings existed. Suppose that the agent's IP net- retrieves the value of sysUpTime [9], at which the mappings existed.
to-media table has three entries: Suppose that the agent's IP net-to-media table has three entries:
Interface-Number Network-Address Physical-Address Type Interface-Number Network-Address Physical-Address Type
1 10.0.0.51 00:00:10:01:23:45 static 1 10.0.0.51 00:00:10:01:23:45 static
1 9.2.3.4 00:00:10:54:32:10 dynamic 1 9.2.3.4 00:00:10:54:32:10 dynamic
2 10.0.0.15 00:00:10:98:76:54 dynamic 2 10.0.0.15 00:00:10:98:76:54 dynamic
The SNMPv2 entity acting in a manager role begins by sending a The SNMPv2 entity acting in a manager role begins by sending a
GetNextRequest-PDU containing the indicated OBJECT IDENTIFIER values as GetNextRequest-PDU containing the indicated OBJECT IDENTIFIER values
the requested variable names: as the requested variable names:
GetNextRequest ( sysUpTime, GetNextRequest ( sysUpTime,
ipNetToMediaPhysAddress, ipNetToMediaPhysAddress,
ipNetToMediaType ) ipNetToMediaType )
The SNMPv2 entity acting in an agent role responds with a Response-PDU: The SNMPv2 entity acting in an agent role responds with a Response-
PDU:
Response (( sysUpTime.0 = "123456" ), Response (( sysUpTime.0 = "123456" ),
( ipNetToMediaPhysAddress.1.9.2.3.4 = ( ipNetToMediaPhysAddress.1.9.2.3.4 =
"000010543210" ), "000010543210" ),
( ipNetToMediaType.1.9.2.3.4 = "dynamic" )) ( ipNetToMediaType.1.9.2.3.4 = "dynamic" ))
The SNMPv2 entity acting in a manager role continues with: The SNMPv2 entity acting in a manager role continues with:
GetNextRequest ( sysUpTime, GetNextRequest ( sysUpTime,
ipNetToMediaPhysAddress.1.9.2.3.4, ipNetToMediaPhysAddress.1.9.2.3.4,
ipNetToMediaType.1.9.2.3.4 ) ipNetToMediaType.1.9.2.3.4 )
The SNMPv2 entity acting in an agent role responds with: The SNMPv2 entity acting in an agent role responds with:
Response (( sysUpTime.0 = "123461" ), Response (( sysUpTime.0 = "123461" ),
( ipNetToMediaPhysAddress.1.10.0.0.51 = ( ipNetToMediaPhysAddress.1.10.0.0.51 =
"000010012345" ), "000010012345" ),
( ipNetToMediaType.1.10.0.0.51 = "static" )) ( ipNetToMediaType.1.10.0.0.51 = "static" ))
The SNMPv2 entity acting in a manager role continues with: The SNMPv2 entity acting in a manager role continues with:
GetNextRequest ( sysUpTime, GetNextRequest ( sysUpTime,
ipNetToMediaPhysAddress.1.10.0.0.51, ipNetToMediaPhysAddress.1.10.0.0.51,
ipNetToMediaType.1.10.0.0.51 ) ipNetToMediaType.1.10.0.0.51 )
The SNMPv2 entity acting in an agent role responds with: The SNMPv2 entity acting in an agent role responds with:
Response (( sysUpTime.0 = "123466" ), Response (( sysUpTime.0 = "123466" ),
( ipNetToMediaPhysAddress.2.10.0.0.15 = ( ipNetToMediaPhysAddress.2.10.0.0.15 =
"000010987654" ), "000010987654" ),
( ipNetToMediaType.2.10.0.0.15 = "dynamic" )) ( ipNetToMediaType.2.10.0.0.15 = "dynamic" ))
The SNMPv2 entity acting in a manager role continues with: The SNMPv2 entity acting in a manager role continues with:
GetNextRequest ( sysUpTime, GetNextRequest ( sysUpTime,
ipNetToMediaPhysAddress.2.10.0.0.15, ipNetToMediaPhysAddress.2.10.0.0.15,
ipNetToMediaType.2.10.0.0.15 ) ipNetToMediaType.2.10.0.0.15 )
As there are no further entries in the table, the SNMPv2 entity acting As there are no further entries in the table, the SNMPv2 entity
in an agent role responds with the variables that are next in the acting in an agent role responds with the variables that are next in
lexicographical ordering of the accessible object names, for example: the lexicographical ordering of the accessible object names, for
example:
Response (( sysUpTime.0 = "123471" ), Response (( sysUpTime.0 = "123471" ),
( ipNetToMediaNetAddress.1.9.2.3.4 = ( ipNetToMediaNetAddress.1.9.2.3.4 =
"9.2.3.4" ), "9.2.3.4" ),
( ipRoutingDiscards.0 = "2" )) ( ipRoutingDiscards.0 = "2" ))
This response signals the end of the table to the SNMPv2 entity acting This response signals the end of the table to the SNMPv2 entity
in a manager role. acting in a manager role.
4.2.3. The GetBulkRequest-PDU 4.2.3. The GetBulkRequest-PDU
A GetBulkRequest-PDU is generated and transmitted at the request of a A GetBulkRequest-PDU is generated and transmitted at the request of a
SNMPv2 application. The purpose of the GetBulkRequest-PDU is to request SNMPv2 application. The purpose of the GetBulkRequest-PDU is to
the transfer of a potentially large amount of data, including, but not request the transfer of a potentially large amount of data,
limited to, the efficient and rapid retrieval of large tables. including, but not limited to, the efficient and rapid retrieval of
large tables.
Upon receipt of a GetBulkRequest-PDU, the receiving SNMPv2 entity Upon receipt of a GetBulkRequest-PDU, the receiving SNMPv2 entity
processes each variable binding in the variable-binding list to produce processes each variable binding in the variable-binding list to
a Response-PDU with its request-id field having the same value as in the produce a Response-PDU with its request-id field having the same
request. Processing begins by examining the values in the non-repeaters value as in the request. Processing begins by examining the values
and max-repetitions fields. If the value in the non-repeaters field is in the non-repeaters and max-repetitions fields. If the value in the
less than zero, then the value of the field is set to zero. Similarly, non-repeaters field is less than zero, then the value of the field is
if the value in the max-repetitions field is less than zero, then the set to zero. Similarly, if the value in the max-repetitions field is
value of the field is set to zero. less than zero, then the value of the field is set to zero.
For the GetBulkRequest-PDU type, the successful processing of each For the GetBulkRequest-PDU type, the successful processing of each
variable binding in the request generates zero or more variable bindings variable binding in the request generates zero or more variable
in the Response-PDU. That is, the one-to-one mapping between the bindings in the Response-PDU. That is, the one-to-one mapping
variable bindings of the GetRequest-PDU, GetNextRequest-PDU, and between the variable bindings of the GetRequest-PDU, GetNextRequest-
SetRequest-PDU types and the resultant Response-PDUs does not apply for PDU, and SetRequest-PDU types and the resultant Response-PDUs does
the mapping between the variable bindings of a GetBulkRequest-PDU and not apply for the mapping between the variable bindings of a
the resultant Response-PDU. GetBulkRequest-PDU and the resultant Response-PDU.
The values of the non-repeaters and max-repetitions fields in the The values of the non-repeaters and max-repetitions fields in the
request specify the processing requested. One variable binding in the request specify the processing requested. One variable binding in
Response-PDU is requested for the first N variable bindings in the the Response-PDU is requested for the first N variable bindings in
request and M variable bindings are requested for each of the R the request and M variable bindings are requested for each of the R
remaining variable bindings in the request. Consequently, the total remaining variable bindings in the request. Consequently, the total
number of requested variable bindings communicated by the request is 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 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 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 bindings in the request; M is the value of the max-repetitions field
the request; and R is the maximum of: a) number of variable bindings in in the request; and R is the maximum of: a) number of variable
the request - N, and b) zero. bindings in the request - N, and b) zero.
The receiving SNMPv2 entity produces a Response-PDU with up to the total The receiving SNMPv2 entity produces a Response-PDU with up to the
number of requested variable bindings communicated by the request. The total number of requested variable bindings communicated by the
request-id shall have the same value as the received GetBulkRequest-PDU. 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 If N is greater than zero, the first through the (N)-th variable
bindings of the Response-PDU are each produced as follows: bindings of the Response-PDU are each produced as follows:
(1) The variable is located which is in the lexicographically ordered (1) The variable is located which is in the lexicographically ordered
list of the names of all variables which are accessible by this list of the names of all variables which are accessible by this
request and whose name is the first lexicographic successor of the request and whose name is the first lexicographic successor of the
variable binding's name in the incoming GetBulkRequest-PDU. The variable binding's name in the incoming GetBulkRequest-PDU. The
corresponding variable binding's name and value fields in the corresponding variable binding's name and value fields in the
Response-PDU are set to the name and value of the located variable. Response-PDU are set to the name and value of the located variable.
(2) If the requested variable binding's name does not lexicographically (2) If the requested variable binding's name does not lexicographically
precede the name of any variable accessible by this request, i.e., precede the name of any variable accessible by this request, i.e.,
there is no lexicographic successor, then the corresponding there is no lexicographic successor, then the corresponding
variable binding produced in the Response-PDU has its value field variable binding produced in the Response-PDU has its value field
set to `endOfMibView', and its name field set to the variable set to `endOfMibView', and its name field set to the variable
binding's name in the request. binding's name in the request.
If M and R are non-zero, the (N + 1)-th and subsequent variable bindings If M and R are non-zero, the (N + 1)-th and subsequent variable
of the Response-PDU are each produced in a similar manner. For each bindings of the Response-PDU are each produced in a similar manner.
iteration i, such that i is greater than zero and less than or equal to For each iteration i, such that i is greater than zero and less than
M, and for each repeated variable, r, such that r is greater than zero or equal to M, and for each repeated variable, r, such that r is
and less than or equal to R, the (N + ( (i-1) * R ) + r)-th variable greater than zero and less than or equal to R, the (N + ( (i-1) * R )
binding of the Response-PDU is produced as follows: + r)-th variable binding of the Response-PDU is produced as follows:
(1) The variable which is in the lexicographically ordered list of the (1) The variable which is in the lexicographically ordered list of the
names of all variables which are accessible by this request and names of all variables which are accessible by this request and
whose name is the (i)-th lexicographic successor of the (N + r)-th whose name is the (i)-th lexicographic successor of the (N + r)-th
variable binding's name in the incoming GetBulkRequest-PDU is variable binding's name in the incoming GetBulkRequest-PDU is
located and the variable binding's name and value fields are set to located and the variable binding's name and value fields are set to
the name and value of the located variable. the name and value of the located variable.
(2) If there is no (i)-th lexicographic successor, then the (2) If there is no (i)-th lexicographic successor, then the
corresponding variable binding produced in the Response-PDU has its corresponding variable binding produced in the Response-PDU has its
value field set to `endOfMibView', and its name field set to either value field set to `endOfMibView', and its name field set to either
the last lexicographic successor, or if there are no lexicographic the last lexicographic successor, or if there are no lexicographic
successors, to the (N + r)-th variable binding's name in the successors, to the (N + r)-th variable binding's name in the
request. request.
While the maximum number of variable bindings in the Response-PDU is 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 bounded by N + (M * R), the response may be generated with a lesser
number of variable bindings (possibly zero) for either of three reasons. number of variable bindings (possibly zero) for either of three
reasons.
(1) If the size of the message encapsulating the Response-PDU (1) If the size of the message encapsulating the Response-PDU
containing the requested number of variable bindings would be containing the requested number of variable bindings would be
greater than either a local constraint or the maximum message size greater than either a local constraint or the maximum message size
of the originator, then the response is generated with a lesser of the originator, then the response is generated with a lesser
number of variable bindings. This lesser number is the ordered set number of variable bindings. This lesser number is the ordered set
of variable bindings with some of the variable bindings at the end of variable bindings with some of the variable bindings at the end
of the set removed, such that the size of the message encapsulating of the set removed, such that the size of the message encapsulating
the Response-PDU is approximately equal to but no greater than the Response-PDU is approximately equal to but no greater than
either a local constraint or the maximum message size of the either a local constraint or the maximum message size of the
skipping to change at page 19, line 11 skipping to change at page 16, line 18
variable bindings have the value field set to the `endOfMibView'. variable bindings have the value field set to the `endOfMibView'.
In this case, the variable bindings may be truncated after the (N + In this case, the variable bindings may be truncated after the (N +
(i * R))-th variable binding. (i * R))-th variable binding.
(3) In the event that the processing of a request with many repetitions (3) In the event that the processing of a request with many repetitions
requires a significantly greater amount of processing time than a requires a significantly greater amount of processing time than a
normal request, then an agent may terminate the request with less normal request, then an agent may terminate the request with less
than the full number of repetitions, providing at least one than the full number of repetitions, providing at least one
repetition is completed. repetition is completed.
If the processing of any variable binding fails for a reason other than If the processing of any variable binding fails for a reason other
listed above, then the Response-PDU is re-formatted with the same values than listed above, then the Response-PDU is re-formatted with the
in its request-id and variable-bindings fields as the received same values in its request-id and variable-bindings fields as the
GetBulkRequest-PDU, with the value of its error-status field set to received GetBulkRequest-PDU, with the value of its error-status field
`genErr', and the value of its error-index field is set to the index of set to `genErr', and the value of its error-index field is set to the
the variable binding in the original request which corresponds to the index of the variable binding in the original request which
failed variable binding. corresponds to the failed variable binding.
Otherwise, the value of the Response-PDU's error-status field is set to Otherwise, the value of the Response-PDU's error-status field is set
`noError', and the value of its error-index field to zero. to `noError', and the value of its error-index field to zero.
The generated Response-PDU (possibly with an empty variable-bindings The generated Response-PDU (possibly with an empty variable-bindings
field) is then encapsulated into a message. If the size of the 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 resultant message is less than or equal to both a local constraint
the maximum message size of the originator, it is transmitted to the and the maximum message size of the originator, it is transmitted to
originator of the GetBulkRequest-PDU. Otherwise, the snmpSilentDrops | the originator of the GetBulkRequest-PDU. Otherwise, the
[10] counter is incremented and the resultant message is discarded. snmpSilentDrops [9] counter is incremented and the resultant message
is discarded.
4.2.3.1. Another Example of Table Traversal 4.2.3.1. Another Example of Table Traversal
This example demonstrates how the GetBulkRequest-PDU can be used as an This example demonstrates how the GetBulkRequest-PDU can be used as
alternative to the GetNextRequest-PDU. The same traversal of the IP an alternative to the GetNextRequest-PDU. The same traversal of the
net-to-media table as shown in Section 4.2.2.1 is achieved with fewer IP net-to-media table as shown in Section 4.2.2.1 is achieved with
exchanges. fewer exchanges.
The SNMPv2 entity acting in a manager role begins by sending a The SNMPv2 entity acting in a manager role begins by sending a
GetBulkRequest-PDU with the modest max-repetitions value of 2, and GetBulkRequest-PDU with the modest max-repetitions value of 2, and
containing the indicated OBJECT IDENTIFIER values as the requested containing the indicated OBJECT IDENTIFIER values as the requested
variable names: variable names:
GetBulkRequest [ non-repeaters = 1, max-repetitions = 2 ] GetBulkRequest [ non-repeaters = 1, max-repetitions = 2 ]
( sysUpTime, ( sysUpTime,
ipNetToMediaPhysAddress, ipNetToMediaPhysAddress,
ipNetToMediaType ) ipNetToMediaType )
The SNMPv2 entity acting in an agent role responds with a Response-PDU: The SNMPv2 entity acting in an agent role responds with a Response-PDU:
Response (( sysUpTime.0 = "123456" ), Response (( sysUpTime.0 = "123456" ),
( ipNetToMediaPhysAddress.1.9.2.3.4 = ( ipNetToMediaPhysAddress.1.9.2.3.4 =
"000010543210" ), "000010543210" ),
( ipNetToMediaType.1.9.2.3.4 = "dynamic" ), ( ipNetToMediaType.1.9.2.3.4 = "dynamic" ),
( ipNetToMediaPhysAddress.1.10.0.0.51 = ( ipNetToMediaPhysAddress.1.10.0.0.51 =
"000010012345" ), "000010012345" ),
( ipNetToMediaType.1.10.0.0.51 = "static" )) ( ipNetToMediaType.1.10.0.0.51 = "static" ))
The SNMPv2 entity acting in a manager role continues with: The SNMPv2 entity acting in a manager role continues with:
GetBulkRequest [ non-repeaters = 1, max-repetitions = 2 ] GetBulkRequest [ non-repeaters = 1, max-repetitions = 2 ]
( sysUpTime, ( sysUpTime,
ipNetToMediaPhysAddress.1.10.0.0.51, ipNetToMediaPhysAddress.1.10.0.0.51,
ipNetToMediaType.1.10.0.0.51 ) ipNetToMediaType.1.10.0.0.51 )
The SNMPv2 entity acting in an agent role responds with: The SNMPv2 entity acting in an agent role responds with:
Response (( sysUpTime.0 = "123466" ), Response (( sysUpTime.0 = "123466" ),
( ipNetToMediaPhysAddress.2.10.0.0.15 = ( ipNetToMediaPhysAddress.2.10.0.0.15 =
"000010987654" ), "000010987654" ),
( ipNetToMediaType.2.10.0.0.15 = ( ipNetToMediaType.2.10.0.0.15 =
"dynamic" ), "dynamic" ),
( ipNetToMediaNetAddress.1.9.2.3.4 = ( ipNetToMediaNetAddress.1.9.2.3.4 =
"9.2.3.4" ), "9.2.3.4" ),
( ipRoutingDiscards.0 = "2" )) ( ipRoutingDiscards.0 = "2" ))
This response signals the end of the table to the SNMPv2 entity acting This response signals the end of the table to the SNMPv2 entity
in a manager role. acting in a manager role.
4.2.4. The Response-PDU 4.2.4. The Response-PDU
The Response-PDU is generated by a SNMPv2 entity only upon receipt of a The Response-PDU is generated by a SNMPv2 entity only upon receipt of
GetRequest-PDU, GetNextRequest-PDU, GetBulkRequest-PDU, SetRequest-PDU, a GetRequest-PDU, GetNextRequest-PDU, GetBulkRequest-PDU,
or InformRequest-PDU, as described elsewhere in this document. 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 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 fields of the variable bindings in the variable binding list are
ignored. ignored.
If both the error-status field and the error-index field of the 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 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 the index of the variable binding (in the variable-binding list of
corresponding request) for which the request failed. The first variable the corresponding request) for which the request failed. The first
binding in a request's variable-binding list is index one, the second is variable binding in a request's variable-binding list is index one,
index two, etc. the second is index two, etc.
A compliant SNMPv2 entity acting in a manager role must be able to A compliant SNMPv2 entity acting in a manager role must be able to
properly receive and handle a Response-PDU with an error-status field properly receive and handle a Response-PDU with an error-status field
equal to `noSuchName', `badValue', or `readOnly'. (See Section 3.1.2 of equal to `noSuchName', `badValue', or `readOnly'. (See Section 3.1.2
[9].) of [8].)
Upon receipt of a Response-PDU, the receiving SNMPv2 entity presents its Upon receipt of a Response-PDU, the receiving SNMPv2 entity presents
contents to the SNMPv2 application which generated the request with the its contents to the SNMPv2 application which generated the request
same request-id value. with the same request-id value.
4.2.5. The SetRequest-PDU 4.2.5. The SetRequest-PDU
A SetRequest-PDU is generated and transmitted at the request of a SNMPv2 A SetRequest-PDU is generated and transmitted at the request of a
application. SNMPv2 application.
Upon receipt of a SetRequest-PDU, the receiving SNMPv2 entity determines Upon receipt of a SetRequest-PDU, the receiving SNMPv2 entity
the size of a message encapsulating a Response-PDU having the same determines the size of a message encapsulating a Response-PDU having
values in its request-id and variable-bindings fields as the received the same values in its request-id and variable-bindings fields as the
SetRequest-PDU, and the largest possible sizes of the error-status and received SetRequest-PDU, and the largest possible sizes of the
error-index fields. If the determined message size is greater than error-status and error-index fields. If the determined message size
either a local constraint or the maximum message size of the originator, is greater than either a local constraint or the maximum message size
then an alternate Response-PDU is generated, transmitted to the of the originator, then an alternate Response-PDU is generated,
originator of the SetRequest-PDU, and processing of the SetRequest-PDU transmitted to the originator of the SetRequest-PDU, and processing
terminates immediately thereafter. This alternate Response-PDU is of the SetRequest-PDU terminates immediately thereafter. This
formatted with the same values in its request-id field as the received alternate Response-PDU is formatted with the same values in its
SetRequest-PDU, with the value of its error-status field set to request-id field as the received SetRequest-PDU, with the value of
`tooBig', the value of its error-index field set to zero, and an empty its error-status field set to `tooBig', the value of its error-index
variable-bindings field. This alternate Response-PDU is then field set to zero, and an empty variable-bindings field. This
encapsulated into a message. If the size of the resultant message is alternate Response-PDU is then encapsulated into a message. If the
less than or equal to both a local constraint and the maximum message size of the resultant message is less than or equal to both a local
size of the originator, it is transmitted to the originator of the constraint and the maximum message size of the originator, it is
SetRequest-PDU. Otherwise, the snmpSilentDrops | transmitted to the originator of the SetRequest-PDU. Otherwise, the
[10] counter is incremented and the resultant message is discarded. snmpSilentDrops [9] counter is incremented and the resultant message
Regardless, processing of the SetRequest-PDU terminates. is discarded. Regardless, processing of the SetRequest-PDU
terminates.
Otherwise, the receiving SNMPv2 entity processes each variable binding Otherwise, the receiving SNMPv2 entity processes each variable
in the variable-binding list to produce a Response-PDU. All fields of binding in the variable-binding list to produce a Response-PDU. All
the Response-PDU have the same values as the corresponding fields of the fields of the Response-PDU have the same values as the corresponding
received request except as indicated below. fields of the received request except as indicated below.
The variable bindings are conceptually processed as a two phase The variable bindings are conceptually processed as a two phase
operation. In the first phase, each variable binding is validated; if operation. In the first phase, each variable binding is validated;
all validations are successful, then each variable is altered in the if all validations are successful, then each variable is altered in
second phase. Of course, implementors are at liberty to implement the second phase. Of course, implementors are at liberty to
either the first, or second, or both, of these conceptual phases as implement either the first, or second, or both, of these conceptual
multiple implementation phases. Indeed, such multiple implementation phases as multiple implementation phases. Indeed, such multiple
phases may be necessary in some cases to ensure consistency. implementation phases may be necessary in some cases to ensure
consistency.
The following validations are performed in the first phase on each The following validations are performed in the first phase on each
variable binding until they are all successful, or until one fails: variable binding until they are all successful, or until one fails:
(1) If the variable binding's name specifies an existing or non- (1) If the variable binding's name specifies an existing or non-
existent variable to which this request is/would be denied access existent variable to which this request is/would be denied access
because it is/would not be in the appropriate MIB view, then the 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 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 `noAccess', and the value of its error-index field is set to the
index of the failed variable binding. index of the failed variable binding.
(2) Otherwise, if there are no variables which share the same OBJECT (2) Otherwise, if there are no variables which share the same OBJECT
IDENTIFIER prefix as the variable binding's name, and which are IDENTIFIER prefix as the variable binding's name, and which are
skipping to change at page 24, line 12 skipping to change at page 20, line 44
field is set to `resourceUnavailable', and the value of its error- field is set to `resourceUnavailable', and the value of its error-
index field is set to the index of the failed variable binding. 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 (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- 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 status field is set to `genErr', and the value of its error-index
field is set to the index of the failed variable binding. field is set to the index of the failed variable binding.
(13) Otherwise, the validation of the variable binding succeeds. (13) Otherwise, the validation of the variable binding succeeds.
At the end of the first phase, if the validation of all variable 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 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 field is set to `noError' and the value of its error-index field is
zero, and processing continues as follows. zero, and processing continues as follows.
For each variable binding in the request, the named variable is created For each variable binding in the request, the named variable is
if necessary, and the specified value is assigned to it. Each of these created if necessary, and the specified value is assigned to it.
variable assignments occurs as if simultaneously with respect to all Each of these variable assignments occurs as if simultaneously with
other assignments specified in the same request. However, if the same respect to all other assignments specified in the same request.
variable is named more than once in a single request, with different However, if the same variable is named more than once in a single
associated values, then the actual assignment made to that variable is request, with different associated values, then the actual assignment
implementation-specific. made to that variable is implementation-specific.
If any of these assignments fail (even after all the previous If any of these assignments fail (even after all the previous
validations), then all other assignments are undone, and the Response- validations), then all other assignments are undone, and the
PDU is modified to have the value of its error-status field set to Response-PDU is modified to have the value of its error-status field
`commitFailed', and the value of its error-index field set to the index set to `commitFailed', and the value of its error-index field set to
of the failed variable binding. the index of the failed variable binding.
If and only if it is not possible to undo all the assignments, then the If and only if it is not possible to undo all the assignments, then
Response-PDU is modified to have the value of its error-status field set the Response-PDU is modified to have the value of its error-status
to `undoFailed', and the value of its error-index field is set to zero. field set to `undoFailed', and the value of its error-index field is
Note that implementations are strongly encouraged to take all possible set to zero. Note that implementations are strongly encouraged to
measures to avoid use of either `commitFailed' or `undoFailed' - these take all possible measures to avoid use of either `commitFailed' or
two error-status codes are not to be taken as license to take the easy `undoFailed' - these two error-status codes are not to be taken as
way out in an implementation. license to take the easy way out in an implementation.
Finally, the generated Response-PDU is encapsulated into a message, and Finally, the generated Response-PDU is encapsulated into a message,
transmitted to the originator of the SetRequest-PDU. and transmitted to the originator of the SetRequest-PDU.
4.2.6. The SNMPv2-Trap-PDU 4.2.6. The SNMPv2-Trap-PDU
A SNMPv2-Trap-PDU is generated and transmitted by a SNMPv2 entity acting A SNMPv2-Trap-PDU is generated and transmitted by a SNMPv2 entity
in an agent role when an exceptional situation occurs. acting in an agent role when an exceptional situation occurs.
The destination(s) to which a SNMPv2-Trap-PDU is sent is determined in The destination(s) to which a SNMPv2-Trap-PDU is sent is determined
an implementation-dependent fashion by the SNMPv2 entity. The first two in an implementation-dependent fashion by the SNMPv2 entity. The
variable bindings in the variable binding list of an SNMPv2-Trap-PDU are first two variable bindings in the variable binding list of an
sysUpTime.0 [10] and snmpTrapOID.0 [10] respectively. If the OBJECTS SNMPv2-Trap-PDU are sysUpTime.0 [9] and snmpTrapOID.0 [9]
clause is present in the invocation of the corresponding NOTIFICATION- respectively. If the OBJECTS clause is present in the invocation of
TYPE macro, then each corresponding variable, as instantiated by this the corresponding NOTIFICATION-TYPE macro, then each corresponding
notification, is copied, in order, to the variable-bindings field. If variable, as instantiated by this notification, is copied, in order,
any additional variables are being included (at the option of the to the variable-bindings field. If any additional variables are
generating SNMPv2 entity), then each is copied to the variable-bindings being included (at the option of the generating SNMPv2 entity), then
field. each is copied to the variable-bindings field.
4.2.7. The InformRequest-PDU 4.2.7. The InformRequest-PDU
An InformRequest-PDU is generated and transmitted at the request of an An InformRequest-PDU is generated and transmitted at the request of
application in a SNMPv2 entity acting in a manager role, that wishes to an application in a SNMPv2 entity acting in a manager role, that
notify another application (in a SNMPv2 entity also acting in a manager wishes to notify another application (in a SNMPv2 entity also acting
role) of information in a MIB view which is remote to the receiving in a manager role) of information in a MIB view which is remote to
application. the receiving application.
The destination(s) to which an InformRequest-PDU is sent is specified by The destination(s) to which an InformRequest-PDU is sent is specified
the requesting application. The first two variable bindings in the by the requesting application. The first two variable bindings in
variable binding list of an InformRequest-PDU are sysUpTime.0 [10] and the variable binding list of an InformRequest-PDU are sysUpTime.0 [9]
snmpTrapOID.0 [10] respectively. If the OBJECTS clause is present in and snmpTrapOID.0 [9] respectively. If the OBJECTS clause is present
the invocation of the corresponding NOTIFICATION-TYPE macro, then each in the invocation of the corresponding NOTIFICATION-TYPE macro, then
corresponding variable, as instantiated by this notification, is copied, each corresponding variable, as instantiated by this notification, is
in order, to the variable-bindings field. copied, in order, to the variable-bindings field.
Upon receipt of an InformRequest-PDU, the receiving SNMPv2 entity Upon receipt of an InformRequest-PDU, the receiving SNMPv2 entity
determines the size of a message encapsulating a Response-PDU with the determines the size of a message encapsulating a Response-PDU with
same values in its request-id, error-status, error-index and variable- the same values in its request-id, error-status, error-index and
bindings fields as the received InformRequest-PDU. If the determined variable-bindings fields as the received InformRequest-PDU. If the
message size is greater than either a local constraint or the maximum determined message size is greater than either a local constraint or
message size of the originator, then an alternate Response-PDU is the maximum message size of the originator, then an alternate
generated, transmitted to the originator of the InformRequest-PDU, and Response-PDU is generated, transmitted to the originator of the
processing of the InformRequest-PDU terminates immediately thereafter. InformRequest-PDU, and processing of the InformRequest-PDU terminates
This alternate Response-PDU is formatted with the same values in its immediately thereafter. This alternate Response-PDU is formatted
request-id field as the received InformRequest-PDU, with the value of with the same values in its request-id field as the received
its error-status field set to `tooBig', the value of its error-index InformRequest-PDU, with the value of its error-status field set to
field set to zero, and an empty variable-bindings field. This alternate `tooBig', the value of its error-index field set to zero, and an
Response-PDU is then encapsulated into a message. If the size of the empty variable-bindings field. This alternate Response-PDU is then
resultant message is less than or equal to both a local constraint and encapsulated into a message. If the size of the resultant message is
the maximum message size of the originator, it is transmitted to the less than or equal to both a local constraint and the maximum message
originator of the InformRequest-PDU. Otherwise, the snmpSilentDrops | size of the originator, it is transmitted to the originator of the
[10] counter is incremented and the resultant message is discarded. InformRequest-PDU. Otherwise, the snmpSilentDrops [9] counter is
Regardless, processing of the InformRequest-PDU terminates. incremented and the resultant message is discarded. Regardless,
processing of the InformRequest-PDU terminates.
Otherwise, the receiving SNMPv2 entity: Otherwise, the receiving SNMPv2 entity:
(1) presents its contents to the appropriate SNMPv2 application; (1) presents its contents to the appropriate SNMPv2 application;
(2) generates a Response-PDU with the same values in its request-id and (2) generates a Response-PDU with the same values in its request-id and
variable-bindings fields as the received InformRequest-PDU, with variable-bindings fields as the received InformRequest-PDU, with
the value of its error-status field is set to `noError' and the the value of its error-status field is set to `noError' and the
value of its error-index field is zero; and value of its error-index field is zero; and
(3) transmits the generated Response-PDU to the originator of the (3) transmits the generated Response-PDU to the originator of the
InformRequest-PDU. InformRequest-PDU.
5. Acknowledgements 5. Security Considerations
This document is the result of significant work by the four major Security issues are not discussed in this memo.
contributors:
Jeffrey Case (SNMP Research, case@snmp.com) 6. Editor's Address
Keith McCloghrie (Cisco Systems, kzm@cisco.com)
Marshall Rose (Dover Beach Consulting, mrose@dbc.mtview.ca.us)
Steven Waldbusser (International Network Services, stevew@uni.ins.com)
In addition, the contributions of the SNMPv2 Working Group are Keith McCloghrie
acknowledged. In particular, a special thanks is extended for the Cisco Systems, Inc.
contributions of: 170 West Tasman Drive
San Jose, CA 95134-1706
US
Phone: +1 408 526 5260
EMail: kzm@cisco.com
7. Acknowledgements
This document is the result of significant work by the four major
contributors:
Jeffrey D. Case (SNMP Research, case@snmp.com)
Keith McCloghrie (Cisco Systems, kzm@cisco.com)
Marshall T. Rose (Dover Beach Consulting, mrose@dbc.mtview.ca.us)
Steven Waldbusser (International Network Services, stevew@uni.ins.com)
In addition, the contributions of the SNMPv2 Working Group are
acknowledged. In particular, a special thanks is extended for the
contributions of:
Alexander I. Alten (Novell) Alexander I. Alten (Novell)
Dave Arneson (Cabletron) Dave Arneson (Cabletron)
Uri Blumenthal (IBM) Uri Blumenthal (IBM)
Doug Book (Chipcom) Doug Book (Chipcom)
Kim Curran (Bell-Northern Research) Kim Curran (Bell-Northern Research)
Jim Galvin (Trusted Information Systems) Jim Galvin (Trusted Information Systems)
Maria Greene (Ascom Timeplex) Maria Greene (Ascom Timeplex)
Iain Hanson (Digital) Iain Hanson (Digital)
Dave Harrington (Cabletron) Dave Harrington (Cabletron)
skipping to change at page 28, line 5 skipping to change at page 24, line 9
Dave Perkins (Peer Networks) Dave Perkins (Peer Networks)
Randy Presuhn (Peer Networks) Randy Presuhn (Peer Networks)
Aleksey Romanov (Quality Quorum) Aleksey Romanov (Quality Quorum)
Shawn Routhier (Epilogue) Shawn Routhier (Epilogue)
Jon Saperia (BGS Systems) Jon Saperia (BGS Systems)
Bob Stewart (Cisco Systems, bstewart@cisco.com), chair Bob Stewart (Cisco Systems, bstewart@cisco.com), chair
Kaj Tesink (Bellcore) Kaj Tesink (Bellcore)
Glenn Waters (Bell-Northern Research) Glenn Waters (Bell-Northern Research)
Bert Wijnen (IBM) Bert Wijnen (IBM)
6. References 8. References
[1] Information processing systems - Open Systems Interconnection - [1] Information processing systems - Open Systems Interconnection -
Specification of Abstract Syntax Notation One (ASN.1), Specification of Abstract Syntax Notation One (ASN.1),
International Organization for Standardization. International International Organization for Standardization. International
Standard 8824, (December, 1987). Standard 8824, (December, 1987).
[2] McCloghrie, K., Editor, | [2] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
"Structure of Management Information for Version 2 of the Simple S. Waldbusser, "Structure of Management Information for Version 2
Network Management Protocol (SNMPv2)", Internet Draft, Cisco | of the Simple Network Management Protocol (SNMPv2)", RFC 1902,
Systems, September 1995. | January 1996.
[3] McCloghrie, K., Editor, |
"Introduction to Version 2 of the Internet-standard Network
Management Framework", Internet Draft, Cisco Systems, September |
1995. |
[4] McCloghrie, K., Editor, | [3] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
"Textual Conventions for Version 2 of the Simple Network Management S. Waldbusser, "Textual Conventions for Version 2 of the Simple
Protocol (SNMPv2)", Internet Draft, Cisco Systems, September 1995. | Network Management Protocol (SNMPv2)", RFC 1903, January 1996.
[5] C. Kent, J. Mogul, Fragmentation Considered Harmful, Proceedings, [4] Kent, C., and J. Mogul, Fragmentation Considered Harmful,
ACM SIGCOMM '87, Stowe, VT, (August 1987). Proceedings, ACM SIGCOMM '87, Stowe, VT, (August 1987).
[6] McCloghrie, K., Editor, | [5] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
"Transport Mappings for Version 2 of the Simple Network Management S. Waldbusser, "Transport Mappings for Version 2 of the Simple
Protocol (SNMPv2)", Internet Draft, Cisco Systems, September 1995. | Network Management Protocol (SNMPv2)", RFC 1906, January 1996.
[7] Postel, J., "User Datagram Protocol", STD 6, RFC 768, [6] Postel, J., "User Datagram Protocol", STD 6, RFC 768,
USC/Information Sciences Institute, August 1980. USC/Information Sciences Institute, August 1980.
[8] McCloghrie, K., Editor, | [7] McCloghrie, K., and M. Rose, Editors, "Management Information
"SNMPv2 Management Information Base for the Internet Protocol", Base for Network Management of TCP/IP-based internets:
Internet Draft, Cisco Systems, September 1995. | MIB-II", STD 17, RFC 1213, March 1991.
[9] McCloghrie, K., Editor, |
"Coexistence between Version 1 and Version 2 of the Internet-
standard Network Management Framework", Internet Draft, Cisco |
Systems, September 1995. |
[10] McCloghrie, K., Editor, |
"Management Information Base for Version 2 of the Simple Network
Management Protocol (SNMPv2)", Internet Draft, Cisco Systems, |
September 1995. |
7. Security Considerations
Security issues are not discussed in this memo.
8. Editor's Address
Keith McCloghrie -
Cisco Systems, Inc.
170 West Tasman Drive
San Jose, CA 95134-1706
US
Phone: +1 408 526 5260
Email: kzm@cisco.com
Table of Contents - [8] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
S. Waldbusser, "Coexistence between Version 1 and Version 2
of the Internet-standard Network Management Framework", RFC 1908,
January 1996.
1 Introduction .................................................... 2 [9] SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
1.1 A Note on Terminology ......................................... 2 S. Waldbusser, "Management Information Base for Version 2 of the
2 Overview ........................................................ 3 Simple Network Management Protocol (SNMPv2)", RFC 1907,
2.1 Roles of Protocol Entities .................................... 3 January 1996.
2.2 Management Information ........................................ 3
2.3 Access to Management Information .............................. 3
2.4 Retransmission of Requests .................................... 4
2.5 Message Sizes ................................................. 4
2.6 Transport Mappings ............................................ 5
3 Definitions ..................................................... 6
4 Protocol Specification .......................................... 11
4.1 Common Constructs ............................................. 11
4.2 PDU Processing ................................................ 11
4.2.1 The GetRequest-PDU .......................................... 12
4.2.2 The GetNextRequest-PDU ...................................... 13
4.2.2.1 Example of Table Traversal ................................ 14
4.2.3 The GetBulkRequest-PDU ...................................... 16
4.2.3.1 Another Example of Table Traversal ........................ 19
4.2.4 The Response-PDU ............................................ 20
4.2.5 The SetRequest-PDU .......................................... 21
4.2.6 The SNMPv2-Trap-PDU ......................................... 24
4.2.7 The InformRequest-PDU ....................................... 25
5 Acknowledgements ................................................ 27
6 References ...................................................... 28
7 Security Considerations ......................................... 29
8 Editor's Address ................................................ 29
 End of changes. 111 change blocks. 
540 lines changed or deleted 537 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/