diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc2741.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc2741.txt')
-rw-r--r-- | doc/rfc/rfc2741.txt | 5099 |
1 files changed, 5099 insertions, 0 deletions
diff --git a/doc/rfc/rfc2741.txt b/doc/rfc/rfc2741.txt new file mode 100644 index 0000000..0a2a561 --- /dev/null +++ b/doc/rfc/rfc2741.txt @@ -0,0 +1,5099 @@ + + + + + + +Network Working Group M. Daniele +Request for Comments: 2741 Compaq Computer Corporation +Obsoletes: 2257 B. Wijnen +Category: Standards Track T.J. Watson Research Center, IBM Corp. + M. Ellison, Ed. + Ellison Software Consulting, Inc. + D. Francisco. Ed. + Cisco Systems, Inc. + January 2000 + + + Agent Extensibility (AgentX) Protocol + Version 1 + +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 (2000). All Rights Reserved. + +Abstract + + This memo defines a standardized framework for extensible SNMP + agents. It defines processing entities called master agents and + subagents, a protocol (AgentX) used to communicate between them, and + the elements of procedure by which the extensible agent processes + SNMP protocol messages. This memo obsoletes RFC 2257. + +Table of Contents + + 1. Introduction.....................................................4 + 2. The SNMP Management Framework....................................4 + 2.1. A Note on Terminology........................................5 + 3. Extending the MIB................................................5 + 3.1. Motivation for AgentX........................................6 + 4. AgentX Framework.................................................6 + 4.1. AgentX Roles.................................................7 + 4.2. Applicability................................................8 + 4.3. Design Features of AgentX....................................9 + 4.4. Non-Goals...................................................10 + + + + + +Daniele, et al. Standards Track [Page 1] + +RFC 2741 AgentX January 2000 + + + 5. AgentX Encodings................................................11 + 5.1. Object Identifier...........................................11 + 5.2. SearchRange.................................................13 + 5.3. Octet String................................................14 + 5.4. Value Representation........................................15 + 6. Protocol Definitions............................................17 + 6.1. AgentX PDU Header...........................................17 + 6.1.1. Context.................................................20 + 6.2. AgentX PDUs.................................................20 + 6.2.1. The agentx-Open-PDU.....................................20 + 6.2.2. The agentx-Close-PDU....................................22 + 6.2.3. The agentx-Register-PDU.................................23 + 6.2.4. The agentx-Unregister-PDU...............................27 + 6.2.5. The agentx-Get-PDU......................................29 + 6.2.6. The agentx-GetNext-PDU..................................30 + 6.2.7. The agentx-GetBulk-PDU..................................32 + 6.2.8. The agentx-TestSet-PDU..................................34 + 6.2.9. The agentx-CommitSet, -UndoSet, -CleanupSet PDUs........35 + 6.2.10. The agentx-Notify-PDU..................................36 + 6.2.11. The agentx-Ping-PDU....................................37 + 6.2.12. The agentx-IndexAllocate-PDU...........................37 + 6.2.13. The agentx-IndexDeallocate-PDU.........................38 + 6.2.14. The agentx-AddAgentCaps-PDU............................39 + 6.2.15. The agentx-RemoveAgentCaps-PDU.........................41 + 6.2.16. The agentx-Response-PDU................................43 + 7. Elements of Procedure...........................................45 + 7.1. Processing AgentX Administrative Messages...................45 + 7.1.1. Processing the agentx-Open-PDU..........................46 + 7.1.2. Processing the agentx-IndexAllocate-PDU.................47 + 7.1.3. Processing the agentx-IndexDeallocate-PDU...............49 + 7.1.4. Processing the agentx-Register-PDU......................50 + 7.1.4.1. Handling Duplicate and Overlapping Subtrees.........50 + 7.1.4.2. Registering Stuff...................................51 + 7.1.4.2.1. Registration Priority...........................51 + 7.1.4.2.2. Index Allocation................................51 + 7.1.4.2.3. Examples........................................53 + 7.1.5. Processing the agentx-Unregister-PDU....................55 + 7.1.6. Processing the agentx-AddAgentCaps-PDU..................55 + 7.1.7. Processing the agentx-RemoveAgentCaps-PDU...............55 + 7.1.8. Processing the agentx-Close-PDU.........................56 + 7.1.9. Detecting Connection Loss...............................56 + 7.1.10. Processing the agentx-Notify-PDU.......................56 + 7.1.11. Processing the agentx-Ping-PDU.........................57 + 7.2. Processing Received SNMP Protocol Messages..................58 + 7.2.1. Dispatching AgentX PDUs.................................58 + 7.2.1.1. agentx-Get-PDU......................................61 + 7.2.1.2. agentx-GetNext-PDU..................................61 + 7.2.1.3. agentx-GetBulk-PDU..................................62 + + + +Daniele, et al. Standards Track [Page 2] + +RFC 2741 AgentX January 2000 + + + 7.2.1.4. agentx-TestSet-PDU..................................63 + 7.2.1.5. Dispatch............................................64 + 7.2.2. Subagent Processing.....................................64 + 7.2.3. Subagent Processing of agentx-Get, GetNext, GetBulk-PDUs65 + 7.2.3.1. Subagent Processing of the agentx-Get-PDU...........65 + 7.2.3.2. Subagent Processing of the agentx-GetNext-PDU.......66 + 7.2.3.3. Subagent Processing of the agentx-GetBulk-PDU.......66 + 7.2.4. Subagent Processing of agentx-TestSet, -CommitSet, + -UndoSet, -CleanupSet-PDUs..............................67 + 7.2.4.1. Subagent Processing of the agentx-TestSet-PDU.......68 + 7.2.4.2. Subagent Processing of the agentx-CommitSet-PDU.....69 + 7.2.4.3. Subagent Processing of the agentx-UndoSet-PDU.......69 + 7.2.4.4. Subagent Processing of the agentx-CleanupSet-PDU....70 + 7.2.5. Master Agent Processing of AgentX Responses.............70 + 7.2.5.1. Common Processing of All AgentX Response PDUs.......70 + 7.2.5.2. Processing of Responses to agentx-Get-PDUs..........70 + 7.2.5.3. Processing of Responses to agentx-GetNext-PDU and + agentx-GetBulk-PDU..................................71 + 7.2.5.4. Processing of Responses to agentx-TestSet-PDUs......72 + 7.2.5.5. Processing of Responses to agentx-CommitSet-PDUs....73 + 7.2.5.6. Processing of Responses to agentx-UndoSet-PDUs......74 + 7.2.6. Sending the SNMP Response-PDU...........................74 + 7.2.7. MIB Views...............................................74 + 7.3. State Transitions...........................................75 + 7.3.1. Set Transaction States..................................75 + 7.3.2. Transport Connection States.............................77 + 7.3.3. Session States..........................................78 + 8. Transport Mappings..............................................79 + 8.1. AgentX over TCP.............................................79 + 8.1.1. Well-known Values.......................................79 + 8.1.2. Operation...............................................79 + 8.2. AgentX over UNIX-domain Sockets.............................80 + 8.2.1. Well-known Values.......................................80 + 8.2.2. Operation...............................................80 + 9. Security Considerations.........................................81 + 10. Acknowledgements...............................................82 + 11. Authors' and Editor's Addresses................................83 + 12. References.....................................................84 + 13. Notices........................................................86 + Appendix A. Changes relative to RFC 2257 ..........................87 + Full Copyright Statement ..........................................91 + + + + + + + + + + +Daniele, et al. Standards Track [Page 3] + +RFC 2741 AgentX January 2000 + + +1. Introduction + + This memo defines a standardized framework for extensible SNMP + agents. It defines processing entities called master agents and + subagents, a protocol (AgentX) used to communicate between them, and + the elements of procedure by which the extensible agent processes + SNMP protocol messages. + + This memo obsoletes RFC 2257. It is worth noting that most of the + changes are for the purpose of clarification. The only changes + affecting AgentX protocol messages on the wire are: + + - The agentx-Notify-PDU and agentx-Close-PDU now generate an + agentx-Response-PDU + + - Three new error codes are available: parseFailed(266), + requestDenied(267), and processingError(268) + + Appendix A provides a detailed list of changes relative to RFC 2257. + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in [27]. + +2. The SNMP Management Framework + + The SNMP Management Framework presently consists of five major + components: + + An overall architecture, described in RFC 2571 [1]. + + 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 [2], STD 16, RFC 1212 [3] and RFC 1215 [4]. The second + version, called SMIv2, is described in STD 58, RFC 2578 [5], STD 58, + RFC 2579 [6] and STD 58, RFC 2580 [7]. + + Message protocols for transferring management information. The first + version of the SNMP message protocol is called SNMPv1 and described + in STD 15, RFC 1157 [8]. A second version of the SNMP message + protocol, which is not an Internet standards track protocol, is + called SNMPv2c and described in RFC 1901 [9] and RFC 1906 [10]. The + third version of the message protocol is called SNMPv3 and described + in RFC 1906 [10], RFC 2572 [11] and RFC 2574 [12]. + + Protocol operations for accessing management information. The first + set of protocol operations and associated PDU formats is described in + + + +Daniele, et al. Standards Track [Page 4] + +RFC 2741 AgentX January 2000 + + + STD 15, RFC 1157 [8]. A second set of protocol operations and + associated PDU formats is described in RFC 1905 [13]. + + A set of fundamental applications described in RFC 2573 [14] and the + view-based access control mechanism described in RFC 2575 [15]. + + A more detailed introduction to the current SNMP Management Framework + can be found in RFC 2570 [16]. + + 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. + +2.1. A Note on Terminology + + The term "variable" refers to an instance of a non-aggregate object + type defined according to the conventions set forth in the SMIv2 (STD + 58, RFC 2578, [5]) or the textual conventions based on the SMIv2 (STD + 58, RFC 2579 [6]). 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. + +3. Extending the MIB + + New MIB modules that extend the Internet-standard MIB are + continuously being defined by various IETF working groups. It is + also common for enterprises or individuals to create or extend + enterprise-specific or experimental MIBs. + + As a result, managed devices are frequently complex collections of + manageable components that have been independently installed on a + managed node. Each component provides instrumentation for the + managed objects defined in the MIB module(s) it implements. + + The SNMP framework does not describe how the set of managed objects + supported by a particular agent may be changed dynamically. + + + + + +Daniele, et al. Standards Track [Page 5] + +RFC 2741 AgentX January 2000 + + +3.1. Motivation for AgentX + + This very real need to dynamically extend the management objects + within a node has given rise to a variety of "extensible agents", + which typically comprise + + - a "master" agent that is available on the standard transport + address and that accepts SNMP protocol messages + + - a set of "subagents" that each contain management + instrumentation + + - a protocol that operates between the master agent and + subagents, permitting subagents to "connect" to the master + agent, and the master agent to multiplex received SNMP protocol + messages amongst the subagents. + + - a set of tools to aid subagent development, and a runtime (API) + environment that hides much of the protocol operation between a + subagent and the master agent. + + The wide deployment of extensible SNMP agents, coupled with the lack + of Internet standards in this area, makes it difficult to field + SNMP-manageable applications. A vendor may have to support several + different subagent environments (APIs) in order to support different + target platforms. + + It can also become quite cumbersome to configure subagents and + (possibly multiple) master agents on a particular managed node. + + Specifying a standard protocol for agent extensibility (AgentX) + provides the technical foundation required to solve both of these + problems. Independently developed AgentX-capable master agents and + subagents will be able to interoperate at the protocol level. + Vendors can continue to differentiate their products in all other + respects. + +4. AgentX Framework + + Within the SNMP framework, a managed node contains a processing + entity, called an agent, which has access to management information. + + Within the AgentX framework, an agent is further defined to consist + of: + + + + + + + +Daniele, et al. Standards Track [Page 6] + +RFC 2741 AgentX January 2000 + + + - a single processing entity called the master agent, which sends + and receives SNMP protocol messages in an agent role (as + specified by the SNMP framework documents) but typically has + little or no direct access to management information. + + - zero or more processing entities called subagents, which are + "shielded" from the SNMP protocol messages processed by the + master agent, but which have access to management information. + + The master and subagent entities communicate via AgentX protocol + messages, as specified in this memo. Other interfaces (if any) on + these entities, and their associated protocols, are outside the scope + of this document. While some of the AgentX protocol messages appear + similar in syntax and semantics to the SNMP, bear in mind that AgentX + is not SNMP. + + The internal operations of AgentX are invisible to an SNMP entity + operating in a manager role. From a manager's point of view, an + extensible agent behaves exactly as would a non-extensible + (monolithic) agent that has access to the same management + instrumentation. + + This transparency to managers is a fundamental requirement of AgentX, + and is what differentiates AgentX subagents from SNMP proxy agents. + +4.1. AgentX Roles + + An entity acting in a master agent role performs the following + functions: + + - Accepts AgentX session establishment requests from subagents. + + - Accepts registration of MIB regions by subagents. + + - Sends and accepts SNMP protocol messages on the agent's + specified transport addresses. + + - Implements the agent role Elements of Procedure specified for + the administrative framework applicable to the SNMP protocol + message, except where they specify performing management + operations. (The application of MIB views, and the access + control policy for the managed node, are implemented by the + master agent.) + + - Provides instrumentation for the MIB objects defined in RFC + 1907 [17], and for any MIB objects relevant to any + administrative framework it supports. + + + + +Daniele, et al. Standards Track [Page 7] + +RFC 2741 AgentX January 2000 + + + - Sends and receives AgentX protocol messages to access + management information, based on the current registry of MIB + regions. + + - Forwards notifications on behalf of subagents. + + An entity acting in a subagent role performs the following functions: + + - Initiates AgentX sessions with the master agent. + + - Registers MIB regions with the master agent. + + - Instantiates managed objects. + + - Binds OIDs within its registered MIB regions to actual + variables. + + - Performs management operations on variables. + + - Initiates notifications. + +4.2. Applicability + + It is intended that this memo specify the smallest amount of required + behavior necessary to achieve the largest benefit, that is, to cover + a very large number of possible MIB implementations and + configurations with minimum complexity and low "cost of entry". + + This section discusses several typical usage scenarios. + + 1) Subagents implement separate MIB modules -- for example, subagent + `A' implements "mib-2", subagent `B' implements "host-resources". + + It is anticipated that this will be the most common subagent + configuration. + + 2) Subagents implement rows in a "simple table". A simple table is + one in which row creation is not specified, and for which the MIB + does not define an object that counts entries in the table. + Examples of simple tables are rdbmsDbTable, udpTable, and + hrSWRunTable. + + This is the most commonly defined type of MIB table, and probably + represents the next most typical configuration that AgentX would + support. + + + + + + +Daniele, et al. Standards Track [Page 8] + +RFC 2741 AgentX January 2000 + + + 3) Subagents share MIBs along non-row partitions. Subagents register + "chunks" of the MIB that represent multiple rows, due to the + nature of the MIB's index structure. Examples include registering + ipNetToMediaEntry.n, where n represents the ifIndex value for an + interface implemented by the subagent, and tcpConnEntry.a.b.c.d, + where a.b.c.d represents an IP address on an interface implemented + by the subagent. + + AgentX supports these three common configurations, and all + permutations of them, completely. The consensus is that they + comprise a very large majority of current and likely future uses of + multi-vendor extensible agent configurations. + + 4) Subagents implement rows in tables that permit row creation, for + example, the RMON historyControlTable. To implement row creation + in such tables, at least one AgentX subagent must register at a + point "higher" in the OID tree than an individual row (per + AgentX's dispatching procedure). + + 5) Subagents implement rows in tables whose MIB also defines an + object that counts entries in the table, for example the MIB-2 + ifTable (due to ifNumber). The subagent that implements such a + counter object (like ifNumber) must go beyond AgentX to correctly + implement it. This is an implementation issue (and most new MIB + designs no longer include such objects). + + Scenarios in these latter 2 categories were thought to occur somewhat + rarely in configurations where subagents are independently + implemented by different vendors. The focus of a standard protocol, + however, must be in just those areas where multi-vendor + interoperability must be assured. + + Note that it would be inefficient (due to AgentX registration + overhead) to share a table among AgentX subagents if the table + contains very dynamic instances, and each subagent registers fully + qualified instances. ipRouteTable could be an example of such a + table in some environments. + +4.3. Design Features of AgentX + + The primary features of the design described in this memo are: + + 1) A general architectural division of labor between master agent and + subagent: The master agent is MIB ignorant and SNMP omniscient, + while the subagent is SNMP ignorant and MIB omniscient (for the + MIB variables it instantiates). That is, master agents, + exclusively, are concerned with SNMP protocol operations and the + translations to and from AgentX protocol operations needed to + + + +Daniele, et al. Standards Track [Page 9] + +RFC 2741 AgentX January 2000 + + + carry them out; subagents are exclusively concerned with + management instrumentation; and neither should intrude on the + other's territory. + + 2) A standard protocol and "rules of engagement" to enable + interoperability between management instrumentation and extensible + agents. + + 3) Mechanisms for independently developed subagents to integrate into + the extensible agent on a particular managed node in such a way + that they need not be aware of any other existing subagents. + + 4) A simple, deterministic registry and dispatching algorithm. For a + given extensible agent configuration, there is a single subagent + who is "authoritative" for any particular region of the MIB (where + "region" may extend from an entire MIB down to a single object- + instance). + + 5) Performance considerations. It is likely that the master agent + and all subagents will reside on the same host, and in such cases + AgentX is more a form of inter-process communication than a + traditional communications protocol. + + Some of the design decisions made with this in mind include: + + - 32-bit alignment of data within PDUs + + - Native byte-order encoding by subagents + + - Large AgentX PDU payload sizes. + +4.4. Non-Goals + + 1) Subagent-to-subagent communication. This is out of scope, due to + the security ramifications and complexity involved. + + 2) Subagent access (via the master agent) to MIB variables. This is + not addressed, since various other mechanisms are available and it + was not a fundamental requirement. + + 3) The ability to accommodate every conceivable extensible agent + configuration option. This was the most contentious aspect in the + development of this protocol. In essence, certain features + currently available in some commercial extensible agent products + are not included in AgentX. Although useful or even vital in some + implementation strategies, the rough consensus was that these + features were not appropriate for an Internet Standard, or not + + + + +Daniele, et al. Standards Track [Page 10] + +RFC 2741 AgentX January 2000 + + + typically required for independently developed subagents to + coexist. The set of supported extensible agent configurations is + described above, in Section 4.2, "Applicability". + + Some possible future version of the AgentX protocol may provide + coverage for one or more of these "non-goals" or for new goals that + might be identified after greater deployment experience. + +5. AgentX Encodings + + AgentX PDUs consist of a common header, followed by PDU-specific data + of variable length. Unlike SNMP PDUs, AgentX PDUs are not encoded + using the BER (as specified in ISO 8824 [18]), but are transmitted as + a contiguous byte stream. The data within this stream is organized + to provide natural alignment with respect to the start of the PDU, + permitting direct (integer) access by the processing entities. + + The first four fields in the header are single-byte values. A bit + (NETWORK_BYTE_ORDER) in the third field (h.flags) is used to indicate + the byte ordering of all multi-byte integer values in the PDU, + including those which follow in the header itself. This is described + in more detail in Section 6.1, "AgentX PDU Header", below. + + PDUs are depicted in this memo using the following convention (where + byte 1 is the first transmitted byte): + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | byte 1 | byte 2 | byte 3 | byte 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | byte 5 | byte 6 | byte 7 | byte 8 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Fields marked "<reserved>" are reserved for future use and must be + zero-filled. + +5.1. Object Identifier + + An object identifier is encoded as a 4-byte header, followed by a + variable number of contiguous 4-byte fields representing sub- + identifiers. This representation (termed Object Identifier) is as + follows: + + + + + + + + + + +Daniele, et al. Standards Track [Page 11] + +RFC 2741 AgentX January 2000 + + + Object Identifier + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | include | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Object Identifier header fields: + + n_subid + + The number (0-128) of sub-identifiers in the object identifier. + An ordered list of "n_subid" 4-byte sub-identifiers follows the + 4-byte header. + + prefix + + An unsigned value used to reduce the length of object + identifier encodings. A non-zero value "x" is interpreted as + the first sub-identifier after "internet" (1.3.6.1), and + indicates an implicit prefix "internet.x" to the actual sub- + identifiers encoded in the Object Identifier. For example, a + prefix field value 2 indicates an implicit prefix "1.3.6.1.2". + A value of 0 in the prefix field indicates there is no prefix + to the sub-identifiers. + + include + + Used only when the Object Identifier is the start of a + SearchRange, as described in section 5.2, "SearchRange". + + sub-identifier 1, 2, ... n_subid + + A 4-byte unsigned integer, encoded according to the header's + NETWORK_BYTE_ORDER bit. + + A null Object Identifier consists of the 4-byte header with all bytes + set to 0. + + + + + + + + + +Daniele, et al. Standards Track [Page 12] + +RFC 2741 AgentX January 2000 + + + Examples: + + sysDescr.0 (1.3.6.1.2.1.1.1.0) + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 4 | 2 | 0 | 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + 1.2.3.4 + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 4 | 0 | 0 | 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 3 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +5.2. SearchRange + + A SearchRange consists of two Object Identifiers. In its + communication with a subagent, the master agent uses a SearchRange to + identify a requested variable binding, and, in GetNext and GetBulk + operations, to set an upper bound on the names of managed object + instances the subagent may send in reply. + + The first Object Identifier in a SearchRange (called the starting + OID) indicates the beginning of the range. It is frequently (but not + necessarily) the name of a requested variable binding. + + The "include" field in this OID's header is a boolean value (0 or 1) + indicating whether or not the starting OID is included in the range. + + The second object identifier (ending OID) indicates the non-inclusive + end of the range, and its "include" field is always 0. A null value + for ending OID indicates an unbounded SearchRange. + + + +Daniele, et al. Standards Track [Page 13] + +RFC 2741 AgentX January 2000 + + + Example: To indicate a search range from 1.3.6.1.2.1.25.2 + (inclusive) to 1.3.6.1.2.1.25.2.1 (exclusive), the SearchRange would + be: + + (start) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 3 | 2 | 1 | 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 25 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (end) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 4 | 2 | 0 | 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 25 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + A SearchRangeList is a contiguous list of SearchRanges. + +5.3. Octet String + + An octet string is represented by a contiguous series of bytes, + beginning with a 4-byte integer (encoded according to the header's + NETWORK_BYTE_ORDER bit) whose value is the number of octets in the + octet string, followed by the octets themselves. This representation + is termed an Octet String. If the last octet does not end on a 4- + byte offset from the start of the Octet String, padding bytes are + appended to achieve alignment of following data. This padding must + be added even if the Octet String is the last item in the PDU. + Padding bytes must be zero filled. + + + + + + + + + + +Daniele, et al. Standards Track [Page 14] + +RFC 2741 AgentX January 2000 + + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + A null Octet String consists of a 4-byte length field set to 0. + +5.4. Value Representation + + Variable bindings may be encoded within the variable-length portion + of some PDUs. The representation of a variable binding (termed a + VarBind) consists of a 2-byte type field, a name (Object Identifier), + and the actual value data. + + VarBind + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | v.type | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (v.name) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (v.data) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + VarBind fields: + + v.type + + Indicates the variable binding's syntax, and must be one of the + following values: + + + +Daniele, et al. Standards Track [Page 15] + +RFC 2741 AgentX January 2000 + + + Integer (2), + Octet String (4), + Null (5), + Object Identifier (6), + IpAddress (64), + Counter32 (65), + Gauge32 (66), + TimeTicks (67), + Opaque (68), + Counter64 (70), + noSuchObject (128), + noSuchInstance (129), + endOfMibView (130) + + v.name + + The Object Identifier which names the variable. + + v.data + + The actual value, encoded as follows: + + - Integer, Counter32, Gauge32, and TimeTicks are encoded as 4 + contiguous bytes, according to the header's + NETWORK_BYTE_ORDER bit. + + - Counter64 is encoded as 8 contiguous bytes, according to + the header's NETWORK_BYTE_ORDER bit. + + - Object Identifiers are encoded as described in section 5.1, + Object Identifier. + + - IpAddress, Opaque, and Octet String are all octet strings + and are encoded as described in section 5.3, "Octet + String", Octet String. Note that the octets used to + represent IpAddress are always ordered most significant to + least significant. + + Value data always follows v.name whenever v.type is one of + the above types. These data bytes are present even if they + will not be used (as, for example, in certain types of + index allocation). + + - Null, noSuchObject, noSuchInstance, and endOfMibView do not + contain any encoded value. Value data never follows v.name + in these cases. + + + + + +Daniele, et al. Standards Track [Page 16] + +RFC 2741 AgentX January 2000 + + + Note that the VarBind itself does not contain the value size. + That information is implied for the fixed-length types, and + explicitly contained in the encodings of variable-length types + Object Identifier and Octet String). + + A VarBindList is a contiguous list of VarBinds. Within a + VarBindList, a particular VarBind is identified by an index value. + The first VarBind in a VarBindList has index value 1, the second has + index value 2, and so on. + +6. Protocol Definitions + +6.1. AgentX PDU Header + + The AgentX PDU header is a fixed-format, 20-octet structure: + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version | h.type | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + An AgentX PDU header contains the following fields: + + h.version + + The version of the AgentX protocol (1 for this memo). + + h.type + + The PDU type; one of the following values: + + agentx-Open-PDU (1), + agentx-Close-PDU (2), + agentx-Register-PDU (3), + agentx-Unregister-PDU (4), + agentx-Get-PDU (5), + agentx-GetNext-PDU (6), + agentx-GetBulk-PDU (7), + agentx-TestSet-PDU (8), + agentx-CommitSet-PDU (9), + agentx-UndoSet-PDU (10), + + + +Daniele, et al. Standards Track [Page 17] + +RFC 2741 AgentX January 2000 + + + agentx-CleanupSet-PDU (11), + agentx-Notify-PDU (12), + agentx-Ping-PDU (13), + agentx-IndexAllocate-PDU (14), + agentx-IndexDeallocate-PDU (15), + agentx-AddAgentCaps-PDU (16), + agentx-RemoveAgentCaps-PDU (17), + agentx-Response-PDU (18) + + The set of PDU types for "administrative processing" are 1-4 + and 12-17. The set of PDU types for "SNMP request + processing" are 5-11. + + h.flags + + A bitmask, with bit 0 the least significant bit. The bit + definitions are as follows: + + Bit Definition + --- ---------- + 0 INSTANCE_REGISTRATION + 1 NEW_INDEX + 2 ANY_INDEX + 3 NON_DEFAULT_CONTEXT + 4 NETWORK_BYTE_ORDER + 5-7 (reserved) + + The NETWORK_BYTE_ORDER bit applies to all multi-byte integer + values in the entire AgentX packet, including the remaining + header fields. If set, then network byte order (most + significant byte first; "big endian") is used. If not set, + then least significant byte first ("little endian") is used. + + The NETWORK_BYTE_ORDER bit applies to all AgentX PDUs. + + The NON_DEFAULT_CONTEXT bit is used only in the AgentX PDUs + described in section 6.1.1, "Context". + + The NEW_INDEX and ANY_INDEX bits are used only within the + agentx-IndexAllocate-, and -IndexDeallocate-PDUs. + + The INSTANCE_REGISTRATION bit is used only within the + agentx-Register-PDU. + + + + + + + + +Daniele, et al. Standards Track [Page 18] + +RFC 2741 AgentX January 2000 + + + h.sessionID + + The session ID uniquely identifies a session over which + AgentX PDUs are exchanged between a subagent and the master + agent. The session ID has no significance and no defined + value in the agentx-Open-PDU sent by a subagent to open a + session with the master agent; in this case, the master + agent will assign a unique session ID that it will pass back + in the corresponding agentx-Response-PDU. From that point + on, that same session ID will appear in every AgentX PDU + exchanged over that session between the master and the + subagent. A subagent may establish multiple AgentX sessions + by sending multiple agentx-Open-PDUs to the master agent. + + In master agents that support multiple transport protocols, + the sessionID should be globally unique rather than unique + just to a particular transport. + + h.transactionID + + The transaction ID uniquely identifies, for a given session, + the single SNMP management request (and single SNMP PDU) + with which an AgentX PDU is associated. If a single SNMP + management request results in multiple AgentX PDUs being + sent by the master agent with the same session ID, each of + these AgentX PDUs must contain the same transaction ID; + conversely, AgentX PDUs sent during a particular session, + that result from distinct SNMP management requests, must + have distinct transaction IDs within the limits of the 32- + bit field). + + Note that the transaction ID is not the same as the SNMP + PDU's request-id (as described in section 4.1 of RFC 1905 + [13], nor is it the same as the SNMP Message's msgID (as + described in section 6.2 of RFC 2572 [11]), nor can it be, + since a master agent might receive SNMP requests with the + same request-ids or msgIDs from different managers. + + The transaction ID has no significance and no defined value + in AgentX administrative PDUs, i.e., AgentX PDUs that are + not associated with an SNMP management request. + + h.packetID + + A packet ID generated by the sender for all AgentX PDUs + except the agentx-Response-PDU. In an agentx-Response-PDU, + the packet ID must be the same as that in the received + AgentX PDU to which it is a response. A master agent might + + + +Daniele, et al. Standards Track [Page 19] + +RFC 2741 AgentX January 2000 + + + use this field to associate subagent response PDUs with + their corresponding request PDUs. A subagent might use this + field to correlate responses to multiple (batched) + registrations. + + h.payload_length + + The size in octets of the PDU contents, excluding the 20- + byte header. As a result of the encoding schemes and PDU + layouts, this value will always be either 0, or a multiple + of 4. + +6.1.1. Context + + In the SNMPv1 or SNMPv2c, the community string may be used as an + index into a local repository of configuration information that may + include community profiles or more complex context information. In + SNMPv3 this notion of "context" is formalized (see section 3.3.1 in + RFC 2571 [1]. + + AgentX provides a mechanism for transmitting a context specification + within relevant PDUs, but does not place any constraints on the + content of that specification. + + An optional context field may be present in the agentx-Register-, + UnRegister-, AddAgentCaps-, RemoveAgentCaps-, Get-, GetNext-, + GetBulk-, IndexAllocate-, IndexDeallocate-, Notify-, TestSet-, and + Ping- PDUs. + + If the NON_DEFAULT_CONTEXT bit in the AgentX header field h.flags is + clear, then there is no context field in the PDU, and the operation + refers to the default context. (This does not mean there is a zero- + length Octet String, it means there is no Octet String present.) If + the NON_DEFAULT_CONTEXT bit is set, then a context field immediately + follows the AgentX header, and the operation refers to that specific + context. The context is represented as an Octet String. There are + no constraints on its length or contents. + + Thus, all of these AgentX PDUs (that is, those listed immediately + above) refer to, or "indicate" a context, which is either the default + context, or a non-default context explicitly named in the PDU. + +6.2. AgentX PDUs + +6.2.1. The agentx-Open-PDU + + An agentx-Open-PDU is generated by a subagent to request + establishment of an AgentX session with the master agent. + + + +Daniele, et al. Standards Track [Page 20] + +RFC 2741 AgentX January 2000 + + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (1) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | o.timeout | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (o.id) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | subidentifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | subidentifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (o.descr) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + An agentx-Open-PDU contains the following fields: + + o.timeout + + The length of time, in seconds, that a master agent should + allow to elapse after dispatching a message on a session + before it regards the subagent as not responding. This is + the default value for the session, and may be overridden by + + + + +Daniele, et al. Standards Track [Page 21] + +RFC 2741 AgentX January 2000 + + + values associated with specific registered MIB regions. The + default value of 0 indicates that there is no session-wide + default value. + + o.id + + An Object Identifier that identifies the subagent. + Subagents that do not support such an notion may send a null + Object Identifier. + + o.descr + + An Octet String containing a DisplayString describing the + subagent. + +6.2.2. The agentx-Close-PDU + + An agentx-Close-PDU issued by either a subagent or the master agent + terminates an AgentX session. + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (2) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | c.reason | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + An agentx-Close-PDU contains the following field: + + c.reason + + An enumerated value that gives the reason that the master + agent or subagent closed the AgentX session. This field may + take one of the following values: + + + + + + + +Daniele, et al. Standards Track [Page 22] + +RFC 2741 AgentX January 2000 + + + reasonOther(1) + None of the following reasons + + reasonParseError(2) + Too many AgentX parse errors from peer + + reasonProtocolError(3) + Too many AgentX protocol errors from peer + + + reasonTimeouts(4) + Too many timeouts waiting for peer + + reasonShutdown(5) + Sending entity is shutting down + + reasonByManager(6) + Due to Set operation; this reason code can be used only + by the master agent, in response to an SNMP management + request. + +6.2.3. The agentx-Register-PDU + + An agentx-Register-PDU is generated by a subagent for each region of + the MIB variable naming tree (within one or more contexts) that it + wishes to support. + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (3) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 23] + +RFC 2741 AgentX January 2000 + + + (r.context) (OPTIONAL) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | r.timeout | r.priority | r.range_subid | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (r.subtree) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (r.upper_bound) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | optional upper-bound sub-identifier | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + An agentx-Register-PDU contains the following fields: + + r.context + + An optional non-default context. + + r.timeout + + The length of time, in seconds, that a master agent should + allow to elapse after dispatching a message on a session + before it regards the subagent as not responding. r.timeout + applies only to messages that concern MIB objects within + r.subtree. It overrides both the session's default value + (if any) indicated when the AgentX session with the master + agent was established, and the master agent's default + timeout. The default value for r.timeout is 0 (no + override). + + + +Daniele, et al. Standards Track [Page 24] + +RFC 2741 AgentX January 2000 + + + r.priority + + A value between 1 and 255, used to achieve a desired + configuration when different sessions register identical or + overlapping regions. Subagents with no particular knowledge + of priority should register with the default value of 127. + + In the master agent's dispatching algorithm, smaller values + of r.priority take precedence over larger values, as + described in section 7.1.4.1, "Handling Duplicate and + Overlapping Subtrees". + + r.subtree + + An Object Identifier that names the basic subtree of a MIB + region for which a subagent indicates its support. The term + "subtree" is used generically here, it may represent a + fully-qualified instance name, a partial instance name, a + MIB table, an entire MIB, etc. + + The choice of what to register is implementation-specific; + this memo does not specify permissible values. Standard + practice however is for a subagent to register at the + highest level of the naming tree that makes sense. + Registration of fully- qualified instances is typically done + only when a subagent can perform management operations only + on particular rows of a conceptual table. + + If r.subtree is in fact a fully qualified instance name, the + INSTANCE_REGISTRATION bit in h.flags must be set, otherwise + it must be cleared. The master agent may save this + information to optimize subsequent operational dispatching. + + r.range_subid + + Permits specifying a range in place of one of r.subtree's + sub-identifiers. If this value is 0, no range is being + specified and there is no r.upper_bound field present in the + PDU. In this case the MIB region being registered is the + single subtree named by r.subtree. + + Otherwise the "r.range_subid"-th sub-identifier in r.subtree + is a range lower bound, and the range upper bound sub- + identifier (r.upper_bound) immediately follows r.subtree. + In this case the MIB region being registered is the union of + the subtrees formed by enumerating this range. + + + + + +Daniele, et al. Standards Track [Page 25] + +RFC 2741 AgentX January 2000 + + + Note that r.range_subid indicates the (1-based) index of + this sub-identifier within the OID represented by r.subtree, + regardless of whether or not r.subtree is encoded using a + prefix. (See the example below.) + + r.upper_bound + + The upper bound of a sub-identifier's range. This field is + present only if r.range_subid is not 0. + + The use of r.range_subid and r.upper_bound provide a general + shorthand mechanism for specifying a MIB region. For + example, if r.subtree is the OID 1.3.6.1.2.1.2.2.1.1.7, + r.range_subid is 10, and r.upper_bound is 22, the specified + MIB region can be denoted 1.3.6.1.2.1.2.2.1.[1-22].7. + Registering this region is equivalent to registering the + union of subtrees + + 1.3.6.1.2.1.2.2.1.1.7 + 1.3.6.1.2.1.2.2.1.2.7 + 1.3.6.1.2.1.2.2.1.3.7 + ... + 1.3.6.1.2.1.2.2.1.22.7 + + One expected use of this mechanism is registering a + conceptual row with a single PDU. In the example above, the + MIB region happens to be row 7 of the RFC 1573 ifTable. The + actual PDU would be: + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (3) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | r.timeout | r.priority | 10 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + +Daniele, et al. Standards Track [Page 26] + +RFC 2741 AgentX January 2000 + + + (r.subtree) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 6 | 2 | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 7 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (r.upper_bound) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 22 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Note again that here r.range_subid is 10, even though n_subid in + r.subtree is only 6. + + r.range_subid may be used at any level within a subtree, it need not + represent row-level registration. This mechanism may be used in any + way that is convenient for a subagent to achieve its registrations. + +6.2.4. The agentx-Unregister-PDU + + The agentx-Unregister-PDU is sent by a subagent to remove a MIB + region that was previously registered on this session. + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (4) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + +Daniele, et al. Standards Track [Page 27] + +RFC 2741 AgentX January 2000 + + + (u.context) OPTIONAL + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | <reserved> | u.priority | u.range_subid | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (u.subtree) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (u.upper_bound) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | optional upper-bound sub-identifier | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + An agentx-Unregister-PDU contains the following fields: + + u.context + + An optional non-default context. + + u.priority + + The priority at which this region was originally registered. + + u.subtree + + Indicates a previously-registered region of the MIB that a + subagent no longer wishes to support. + + + + + + +Daniele, et al. Standards Track [Page 28] + +RFC 2741 AgentX January 2000 + + + u.range_subid + + Indicates a sub-identifier in u.subtree is a range lower + bound. + + u.upper_bound + + The upper bound of the range sub-identifier. This field is + present in the PDU only if u.range_subid is not 0. + +6.2.5. The agentx-Get-PDU + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (5) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (g.context) OPTIONAL + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (g.sr) + + (start 1) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | include | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + +Daniele, et al. Standards Track [Page 29] + +RFC 2741 AgentX January 2000 + + + (end 1) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 0 | 0 | 0 | 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + (start n) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | include | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (end n) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 0 | 0 | 0 | 0 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + An agentx-Get-PDU contains the following fields: + + g.context + + An optional non-default context. + + g.sr + + A SearchRangeList containing the requested variables for + this session. Within the agentx-Get-PDU, the Ending OIDs + within SearchRanges are null-valued Object Identifiers. + +6.2.6. The agentx-GetNext-PDU + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (6) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + +Daniele, et al. Standards Track [Page 30] + +RFC 2741 AgentX January 2000 + + + (g.context) OPTIONAL + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (g.sr) + + (start 1) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | include | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (end 1) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + + (start n) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | include | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + +Daniele, et al. Standards Track [Page 31] + +RFC 2741 AgentX January 2000 + + + (end n) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + + An agentx-GetNext-PDU contains the following fields: + + g.context + + An optional non-default context. + + g.sr + + A SearchRangeList containing the requested variables for + this session. + +6.2.7. The agentx-GetBulk-PDU + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (7) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 32] + +RFC 2741 AgentX January 2000 + + + (g.context) OPTIONAL + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | g.non_repeaters | g.max_repetitions | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (g.sr) + ... + + An agentx-GetBulk-PDU contains the following fields: + + g.context + + An optional non-default context. + + g.non_repeaters + + The number of variables in the SearchRangeList that are not + repeaters. + + g.max_repetitions + + The maximum number of repetitions requested for repeating + variables. + + g.sr + + A SearchRangeList containing the requested variables for + this session. + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 33] + +RFC 2741 AgentX January 2000 + + +6.2.8. The agentx-TestSet-PDU + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (8) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (t.context) OPTIONAL + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (t.vb) + + (VarBind 1) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | v.type | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + + + + +Daniele, et al. Standards Track [Page 34] + +RFC 2741 AgentX January 2000 + + + (VarBind n) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | v.type | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + An agentx-TestSet-PDU contains the following fields: + + t.context + + An optional non-default context. + + t.vb + + A VarBindList containing the requested VarBinds for this + subagent. + +6.2.9. The agentx-CommitSet, -UndoSet, -CleanupSet PDUs + + These PDUs consist of the AgentX header only. + + The agentx-CommitSet-, -UndoSet-, and -Cleanup-PDUs are used in + processing an SNMP SetRequest operation. + + + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 35] + +RFC 2741 AgentX January 2000 + + +6.2.10. The agentx-Notify-PDU + + An agentx-Notify-PDU is sent by a subagent to cause the master agent + to forward a notification. + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (12) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (n.context) OPTIONAL + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (n.vb) + ... + + An agentx-Notify-PDU contains the following fields: + + n.context + + An optional non-default context. + + n.vb + + A VarBindList whose contents define the actual PDU to be + sent. This memo places the following restrictions on its + contents: + + - If the subagent supplies sysUpTime.0, it must be + present as the first varbind. + + + + + +Daniele, et al. Standards Track [Page 36] + +RFC 2741 AgentX January 2000 + + + - snmpTrapOID.0 must be present, as the second varbind + if sysUpTime.0 was supplied, as the first if it was + not. + +6.2.11. The agentx-Ping-PDU + + The agentx-Ping-PDU is sent by a subagent to the master agent to + monitor the master agent's ability to receive and send AgentX PDUs + over their AgentX session. + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (13) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (p.context) OPTIONAL + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + An agentx-Ping-PDU may contain the following field: + + p.context + + An optional non-default context. + + Using p.context a subagent can retrieve the sysUpTime value for a + specific context, if required. + +6.2.12. The agentx-IndexAllocate-PDU + + An agentx-IndexAllocate-PDU is sent by a subagent to request + allocation of a value for specific index objects. Refer to section + 7.1.4.2, "Registering Stuff", for suggested usage. + + + +Daniele, et al. Standards Track [Page 37] + +RFC 2741 AgentX January 2000 + + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (14) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (i.context) OPTIONAL + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (i.vb) + ... + + An agentx-IndexAllocate-PDU contains the following fields: + + i.context + + An optional non-default context. + + i.vb + + A VarBindList containing the index names and values + requested for allocation. + +6.2.13. The agentx-IndexDeallocate-PDU + + An agentx-IndexDeallocate-PDU is sent by a subagent to release + previously allocated index values. + + + + + + + + + +Daniele, et al. Standards Track [Page 38] + +RFC 2741 AgentX January 2000 + + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (15) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (i.context) OPTIONAL + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Padding (as required) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (i.vb) + ... + + An agentx-IndexDeallocate-PDU contains the following fields: + + i.context + + An optional non-default context. + + i.vb + + A VarBindList containing the index names and values to be + released. + +6.2.14. The agentx-AddAgentCaps-PDU + + An agentx-AddAgentCaps-PDU is generated by a subagent to inform the + master agent of agent capabilities for the specified session. + + + + + + + + + + +Daniele, et al. Standards Track [Page 39] + +RFC 2741 AgentX January 2000 + + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (16) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (a.context) (OPTIONAL) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Optional Padding | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (a.id) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (a.descr) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Optional Padding | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + +Daniele, et al. Standards Track [Page 40] + +RFC 2741 AgentX January 2000 + + + An agentx-AddAgentCaps-PDU contains the following fields: + + a.context + + An optional non-default context. + + a.id + + An Object Identifier containing the value of an invocation + of the AGENT-CAPABILITIES macro, which the master agent + exports as a value of sysORID for the indicated context. + (Recall that the value of an invocation of an AGENT- + CAPABILITIES macro is an object identifier that describes a + precise level of support with respect to implemented MIB + modules. A more complete discussion of the AGENT- + CAPABILITIES macro and related sysORID values can be found + in section 6 of STD 58, RFC 2580 [7].) + + a.descr + + An Octet String containing a DisplayString to be used as the + value of sysORDescr corresponding to the sysORID value + above. + +6.2.15. The agentx-RemoveAgentCaps-PDU + + An agentx-RemoveAgentCaps-PDU is generated by a subagent to request + that the master agent stop exporting a particular value of sysORID. + This value must have previously been advertised by the subagent in an + agentx-AddAgentCaps-PDU for this session. + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (17) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + + +Daniele, et al. Standards Track [Page 41] + +RFC 2741 AgentX January 2000 + + + (a.context) (OPTIONAL) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet String Length (L) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet 1 | Octet 2 | Octet 3 | Octet 4 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Optional Padding | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (a.id) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + An agentx-RemoveAgentCaps-PDU contains the following fields: + + a.context + + An optional non-default context. + + a.id + + An ObjectIdentifier containing the value of sysORID that + should no longer be exported. + + + + + + + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 42] + +RFC 2741 AgentX January 2000 + + +6.2.16. The agentx-Response-PDU + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (18) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | res.sysUpTime | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | res.error | res.index | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + + An agentx-Response-PDU contains the following fields: + + h.sessionID + + If this is a response to an agentx-Open-PDU, then it + contains the new and unique sessionID (as assigned by the + master agent) for this session. + + Otherwise it must be identical to the h.sessionID value in + the PDU to which this PDU is a response. + + h.transactionID + + Must be identical to the h.transactionID value in the PDU to + which this PDU is a response. + + In an agentx response PDU from the master agent to the + subagent, the value of h.transactionID has no significance + and can be ignored by the subagent. + + h.packetID + + Must be identical to the h.packetID value in the PDU to + which this PDU is a response. + + + + + + +Daniele, et al. Standards Track [Page 43] + +RFC 2741 AgentX January 2000 + + + res.sysUpTime + + This field contains the current value of sysUpTime for the + context indicated within the PDU to which this PDU is a + response. It is relevant only in agentx response PDUs sent + from the master agent to a subagent in response to the set + of administrative PDUs listed in section 6.1, "AgentX PDU + Header". + + In an agentx response PDU from the subagent to the master + agent, the value of res.sysUpTime has no significance and is + ignored by the master agent. + + res.error + + Indicates error status. Within responses to the set of + "administrative" PDU types listed in section 6.1, "AgentX + PDU Header", values are limited to the following: + + noAgentXError (0), + openFailed (256), + notOpen (257), + indexWrongType (258), + indexAlreadyAllocated (259), + indexNoneAvailable (260), + indexNotAllocated (261), + unsupportedContext (262), + duplicateRegistration (263), + unknownRegistration (264), + unknownAgentCaps (265), + parseError (266), + requestDenied (267), + processingError (268) + + Within responses to the set of "SNMP request processing" PDU + types listed in section 6.1, "AgentX PDU Header", values may + also include those defined for errors in the SNMPv2 PDU (RFC + 1905 [13]). + + res.index + + In error cases, this is the index of the failed variable + binding within a received request PDU. (Note: As explained + in section 5.4, "Value Representation", the index values of + variable bindings within a variable binding list are 1- + based.) + + + + + +Daniele, et al. Standards Track [Page 44] + +RFC 2741 AgentX January 2000 + + + A VarBindList may follow res.index, depending on which AgentX PDU is + being responded to. These data are specified in the subsequent + elements of procedure. + +7. Elements of Procedure + + This section describes the actions of protocol entities (master + agents and subagents) implementing the AgentX protocol. Note, + however, that it is not intended to constrain the internal + architecture of any conformant implementation. + + The actions of AgentX protocol entities can be broadly categorized + under two headings, each of which is described separately: + + (1) processing AgentX administrative messages (e.g., registration + requests from a subagent to a master agent); and + + (2) processing SNMP messages (the coordinated actions of a master + agent and one or more subagents in processing, for example, a + received SNMP GetRequest-PDU). + +7.1. Processing AgentX Administrative Messages + + This subsection describes the actions of AgentX protocol entities in + processing AgentX administrative messages. Such messages include + those involved in establishing and terminating an AgentX session + between a subagent and a master agent, those by which a subagent + requests allocation of instance index values, and those by which a + subagent communicates to a master agent which MIB regions it + supports. + + Processing is defined specifically for each PDU type in its own + section. For the master agent, many of these PDU types require the + same initial processing steps. This common processing is defined + here, and referenced as needed in the PDU type-specific descriptions. + + Common Processing: + + The master agent initially processes a received AgentX PDU as + follows: + + 1) An agentx-Response-PDU is created, res.sysUpTime is set to the + value of sysUpTime.0 for the default context, res.error is set + to `noAgentXError', and res.index is set to 0. + + 2) If the received PDU cannot be parsed, res.error is set to ` + parseError'. Examples of a parse error are: + + + + +Daniele, et al. Standards Track [Page 45] + +RFC 2741 AgentX January 2000 + + + - PDU length (h.payload) too short to contain current + construct (Object Identifier header indicates more sub- + identifiers, VarBind v.type indicates data follows, etc) + + - An unrecognized value is encountered for h.type, v.type, + etc. + + 3) Otherwise, if h.sessionID does not correspond to a currently + established session with this subagent, res.error is set to + `notOpen'. + + 4) Otherwise, if the NON_DEFAULT_CONTEXT bit is set and the master + agent does not support the indicated context, res.error is set + to `unsupportedContext'. If the master agent does support the + indicated context, the value of res.sysUpTime is set to the + value of sysUpTime.0 for that context. + + Note: Non-default contexts might be added on the fly by the master + agent, or the master agent might require such non-default + contexts to be pre-configured. The choice is + implementation-specific. + + 5) If resources cannot be allocated or some other condition + prevents processing, res.error is set to `processingError'. + + 6) At this point, if res.error is not `noAgentXError', the + received PDU is not processed further. If the received PDU's + header was successfully parsed, the AgentX-Response-PDU is sent + in reply. If the received PDU contained a VarBindList which + was successfully parsed, the AgentX-Response-PDU contains the + identical VarBindList. If the received PDU's header was not + successfully parsed or for some other reason the master agent + cannot send a reply, processing is complete. + +7.1.1. Processing the agentx-Open-PDU + + When the master agent receives an agentx-Open-PDU, it processes it as + follows: + + 1) An agentx-Response-PDU is created, res.sysUpTime is set to the + value of sysUpTime.0 for the default context, res.error is set to + `noAgentXError', and res.index is set to 0. + + 2) If the received PDU cannot be parsed, res.error is set to + `parseError'. + + 3) Otherwise, if the master agent is unable to open an AgentX session + for any reason, res.error is set to `openFailed'. + + + +Daniele, et al. Standards Track [Page 46] + +RFC 2741 AgentX January 2000 + + + 4) Otherwise: The master agent assigns a sessionID to the new + session and puts the value in the h.sessionID field of the + agentx-Response-PDU. This value must be unique among all existing + open sessions. + + The master agent retains session-specific information from the PDU + for this session: + + - The NETWORK_BYTE_ORDER value in h.flags is retained. All + subsequent AgentX protocol operations initiated by the master + agent for this session must use this byte ordering and set this + bit accordingly. + + The subagent typically sets this bit to correspond to its native + byte ordering, and typically does not vary byte ordering for an + initiated session. The master agent must be able to decode each + PDU according to the h.flag NETWORK_BYTE_ORDER bit in the PDU, but + does not need to toggle its retained value for the session if the + subagent varies its byte ordering. + + - The o.timeout value is used in calculating response timeout + conditions for this session. This field is also referenced in + the AgentX MIB (a work-in-progress) by the agentxSessionTimeout + object. + + - The o.id and o.descr fields are used for informational + purposes. These two fields are also referenced in the AgentX + MIB (a work-in-progress) by the agentxSessionObjectID object, + and by the agentxSessionDescr object. + + 5) The agentx-Response-PDU is sent with the res.error field + indicating the result of the session initiation. + + If processing was successful, an AgentX session is considered + established between the master agent and the subagent. An AgentX + session is a distinct channel for the exchange of AgentX protocol + messages between a master agent and one subagent, qualified by the + session-specific attributes listed in 4) above. AgentX session + establishment is initiated by the subagent. An AgentX session can be + terminated by either the master agent or the subagent. + +7.1.2. Processing the agentx-IndexAllocate-PDU + + When the master agent receives an agentx-IndexAllocate-PDU, it + performs the common processing described in section 7.1, "Processing + AgentX Administrative Messages". If as a result res.error is + `noAgentXError', processing continues as follows: + + + + +Daniele, et al. Standards Track [Page 47] + +RFC 2741 AgentX January 2000 + + + 1) Each VarBind in the VarBindList is processed until either all are + successful, or one fails. If any VarBind fails, the agentx- + Response-PDU is sent in reply containing the original VarBindList, + with res.index set to indicate the failed VarBind, and with + res.error set as described subsequently. All other VarBinds are + ignored; no index values are allocated. + + VarBinds are processed as follows: + + - v.name is the OID prefix of the MIB OBJECT-TYPE for which a + value is to be allocated. + + - v.type is the syntax of the MIB OBJECT-TYPE for which a value is + to be allocated. + + - v.data indicates the specific index value requested. If the + NEW_INDEX or the ANY_INDEX bit is set, the actual value in + v.data is ignored and an appropriate index value is generated. + + a) If there are no currently allocated index values for v.name in + the indicated context, and v.type does not correspond to a + valid index type value, the VarBind fails and res.error is set + to `indexWrongType'. + + b) If there are currently allocated index values for v.name in the + indicated context, but the syntax of those values does not + match v.type, the VarBind fails and res.error is set to + `indexWrongType'. + + c) Otherwise, if both the NEW_INDEX and ANY_INDEX bits are clear, + allocation of a specific index value is being requested. If + the requested index is already allocated for v.name in the + indicated context, the VarBind fails and res.error is set to + `indexAlreadyAllocated'. + + d) Otherwise, if the NEW_INDEX bit is set, the master agent should + generate the next available index value for v.name in the + indicated context, with the constraint that this value must not + have been allocated (even if subsequently released) to any + subagent since the last re-initialization of the master agent. + If no such value can be generated, the VarBind fails and + res.error is set to `indexNoneAvailable'. + + e) Otherwise, if the ANY_INDEX bit is set, the master agent should + generate an index value for v.name in the indicated context, + with the constraint that this value is not currently allocated + to any subagent. If no such value can be generated, then the + VarBind fails and res.error is set to `indexNoneAvailable'. + + + +Daniele, et al. Standards Track [Page 48] + +RFC 2741 AgentX January 2000 + + + 2) If all VarBinds are processed successfully, the agentx-Response- + PDU is sent in reply with res.error set to `noAgentXError'. A + VarBindList is included that is identical to the one sent in the + agentx-IndexAllocate-PDU, except that VarBinds requesting a + NEW_INDEX or ANY_INDEX value are generated with an appropriate + value. + + See section 7.1.4.2, "Registering Stuff" for more information on + how subagents should perform index allocations. + +7.1.3. Processing the agentx-IndexDeallocate-PDU + + When the master agent receives an agentx-IndexDeallocate-PDU, it + performs the common processing described in section 7.1, "Processing + AgentX Administrative Messages". If as a result res.error is + `noAgentXError', processing continues as follows: + + 1) Each VarBind in the VarBindList is processed until either all are + successful, or one fails. If any VarBind fails, the agentx- + Response-PDU is sent in reply, containing the original + VarBindList, with res.index set to indicate the failed VarBind, + and with res.error set as described subsequently. All other + VarBinds are ignored; no index values are released. + + VarBinds are processed as follows: + + - v.name is the name of the index for which a value is to be + released + + - v.type is the syntax of the index object + + - v.data indicates the specific index value to be released. The + NEW_INDEX and ANY_INDEX bits are ignored. + + a) If the index value for the named index is not currently + allocated to this session, the VarBind fails and res.error is + set to `indexNotAllocated'. + + 2) If all VarBinds are processed successfully, res.error is set to + `noAgentXError' and the agentx-Response-PDU is sent. A + VarBindList is included which is identical to the one sent in the + agentx-IndexDeallocate-PDU. + + All released index values are now available, and may be used in + response to subsequent allocation requests for ANY_INDEX values and + in response to subsequent allocation requests for the particular + index value. + + + + +Daniele, et al. Standards Track [Page 49] + +RFC 2741 AgentX January 2000 + + +7.1.4. Processing the agentx-Register-PDU + + When the master agent receives an agentx-Register-PDU, it performs + the common processing described in section 7.1, "Processing AgentX + Administrative Messages". If as a result res.error is + `noAgentXError', processing continues as follows: + + If any of the union of subtrees defined by this MIB region is exactly + the same as any subtree defined by a MIB region currently registered + within the indicated context, those subtrees are termed "duplicate + subtrees". + + If any of the union of subtrees defined by this MIB region overlaps, + or is itself overlapped by, any subtree defined by a MIB region + currently registered within the indicated context, those subtrees are + termed "overlapping subtrees". + + 1) If this registration would result in duplicate subtrees registered + with the same value of r.priority, the request fails and an + agentx-Response-PDU is returned with res.error set to + `duplicateRegistration'. + + 2) Otherwise, if the master agent does not wish to permit this + registration for implementation-specific reasons, the request + fails and an agentx-Response-PDU is returned with res.error set to + `requestDenied'. + + 3) Otherwise, the agentx-Response-PDU is returned with res.error set + to `noAgentXError'. + + The master agent adds this MIB region to its registration data + store for the indicated context, to be considered during the + dispatching phase for subsequently received SNMP protocol + messages. + +7.1.4.1. Handling Duplicate and Overlapping Subtrees + + As a result of this registration algorithm there are likely to be + duplicate and/or overlapping subtrees within the registration data + store of the master agent. Whenever the master agent's dispatching + algorithm (see section 7.2.1, "Dispatching AgentX PDUs") determines + that there are multiple subtrees that could potentially contain the + same MIB object instances, the master agent selects one to use, + termed the 'authoritative region', as follows: + + + + + + + +Daniele, et al. Standards Track [Page 50] + +RFC 2741 AgentX January 2000 + + + 1) Choose the one whose original agentx-Register-PDU r.subtree + contained the most subids, i.e., the most specific r.subtree. + Note: The presence or absence of a range subid has no bearing + on how "specific" one object identifier is compared to another. + + 2) If still ambiguous, there were duplicate subtrees. Choose the + one whose original agentx-Register-PDU specified the smaller + value of r.priority. + +7.1.4.2. Registering Stuff + + This section describes more fully how AgentX subagents use the + agentx-IndexAllocate-PDU and agentx-Register-PDU to achieve desired + configurations. + +7.1.4.2.1. Registration Priority + + The r.priority field in the agentx-Register-PDU is intended to be + manipulated by human administrators to achieve a desired subagent + configuration. Typically this would be needed where a legacy + application registers a specific subtree, and a different + (configurable) application may need to become authoritative for the + identical subtree. + + The result of this configuration (the same subtree registered on + different sessions with different priorities) is that the session + using the better priority (see section 7.1.4.1, "Handling Duplicate + and Overlapping Subtrees") will be authoritative. The other session + will simply never be dispatched to. + + This is useful in the case described above, but is NOT useful in + other cases, particularly when subagents share tables indexed by + arbitrary values (see below). In general, subagents should register + using the default priority (127). + +7.1.4.2.2. Index Allocation + + Index allocation is a service provided by an AgentX master agent. It + provides generic support for sharing MIB conceptual tables among + subagents who are assumed to have no knowledge of each other. + + The master agent maintains a database of index objects (OIDs), and, + for each index, the values that have been allocated for it. It is + unaware of what MIB variables (if any) the index objects represent. + + + + + + + +Daniele, et al. Standards Track [Page 51] + +RFC 2741 AgentX January 2000 + + + By convention, subagents use the MIB variable listed in the INDEX + clause as the index object for which values must be allocated. For + tables indexed by multiple variables, values may be allocated for + each index (although this is frequently unnecessary; see example 2 + below). The subagent may request allocation of + + a) a specific index value + b) an index value that is not currently allocated + c) an index value that has never been allocated + + The last two alternatives reflect the uniqueness and constancy + requirements present in many MIB specifications for arbitrary integer + indexes (e.g., ifIndex in the IF-MIB (RFC 2233 [19]), + snmpFddiSMTIndex in the FDDI MIB (RFC 1285 [20]), or + sysApplInstallPkgIndex in the System Application MIB (RFC 2287 + [21])). The need for subagents to share tables using such indexes is + the main motivation for index allocation in AgentX. + + It is important to note that index allocation and MIB region + registration are not coupled in the master agent. The current state + of index allocations is not considered when processing registration + requests, and the current registry is not considered when processing + index allocation requests. (This is mainly to accommodate non-AgentX + subagents.) + + AgentX subagents should follow the model of "first request allocation + of an index, then register the corresponding region". Then a + successful index allocation request gives a subagent a good hint (but + no guarantee) of what it should be able to register. The + registration may fail (with `duplicateRegistration') because some + other subagent session has already registered that row of the table. + + The recommended mechanism for subagents to register conceptual rows + in a shared table is + + 1) Successfully allocate an index value. + + 2) Use that value to fully qualify the MIB region(s), and attempt to + register using the default priority. + + 3) If the registration fails with `duplicateRegistration' deallocate + the previously allocated index value(s) for this row and go to + step 1). + + + + + + + + +Daniele, et al. Standards Track [Page 52] + +RFC 2741 AgentX January 2000 + + + Note that index allocation is necessary only when the index in + question is an arbitrary value, and hence the subagent has no other + reasonable way to determine which index values to use. When index + values have intrinsic meaning it is not expected that subagents will + allocate their index values. + + For example, RFC 1514's table of running software processes + (hrSWRunTable) is indexed by the system's native process identifier + (pid). A subagent implementing the row of hrSWRunTable corresponding + to its own process would simply register the region defining that + row's object instances without allocating index values. + +7.1.4.2.3. Examples + + Example 1: + + A subagent implements an interface, and wishes to register a + single row of the RFC 2233 ifTable. It requests an allocation for + the index object "ifIndex", for a value that has never been + allocated (since ifIndex values must be unique). The master agent + returns the value "7". + + The subagent now attempts to register row 7 of ifTable, by + specifying a MIB region in the agentx-Register-PDU of + 1.3.6.1.2.1.2.2.1.[1-22].7. If the registration succeeds, no + further processing is required. The master agent will dispatch to + this subagent correctly. + + If the registration failed with `duplicateRegistration', the + subagent should deallocate the failed index, request allocation of + a new index i, and attempt to register ifTable.[1-22].i, until + successful. + + Example 2: + + This same subagent wishes to register ipNetToMediaTable rows + corresponding to its interface (ifIndex i). Due to the structure + of this table, no further index allocation need be done. The + subagent can register the MIB region ipNetToMediaTable.[1-4].i, It + is claiming responsibility for all rows of the table whose value + of ipNetToMediaIfIndex is i. + + + + + + + + + + +Daniele, et al. Standards Track [Page 53] + +RFC 2741 AgentX January 2000 + + + Example 3: + + A network device consists of a set of processors, each of which + accepts network connections for a unique set of IP addresses. + Further, each processor contains a subagent that implements + tcpConnTable. In order to represent tcpConnTable for the entire + managed device, the subagents need to share tcpConnTable. + + In this case, no index allocation need be done at all. Each + subagent can register a MIB region of tcpConnTable.[1-5].a.b.c.d, + where a.b.c.d represents an unique IP address of the individual + processor. + + Each subagent is claiming responsibility for the region of + tcpConnTable where the value of tcpConnLocalAddress is a.b.c.d. + + Example 4: + + The Application Management MIB (RFC 2564 [22]) uses two objects to + index several tables. A partial description of them is: + + applSrvIndex OBJECT-TYPE + SYNTAX Unsigned32 (1..'ffffffff'h) + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "An applSrvIndex is the system-unique identifier + of an instance of a service. The value is unique + not only across all instances of a given service, + but also across all services in a system." + + applSrvName OBJECT-TYPE + SYNTAX SnmpAdminString + MAX-ACCESS read-only + STATUS current + DESCRIPTION + "The human-readable name of a service. Where + appropriate, as in the case where a service can + be identified in terms of a single protocol, the + strings should be established names such as those + assigned by IANA and found in STD 2 [23], or + defined by some other authority. In some cases + private conventions apply and the string should + in these cases be consistent with these + non-standard conventions. An applicability + statement may specify the service name(s) to be + used." + + + + +Daniele, et al. Standards Track [Page 54] + +RFC 2741 AgentX January 2000 + + + Since applSrvIndex is an arbitrary value, it would be reasonable + for subagents to allocate values for this index. applSrvName + however has intrinsic meaning and any values a subagent would use + should be known a priori, hence it is not reasonable for subagents + to allocate values of this index. + +7.1.5. Processing the agentx-Unregister-PDU + + When the master agent receives an agentx-Unregister-PDU, it performs + the common processing described in section 7.1, "Processing AgentX + Administrative Messages". If as a result res.error is ` + noAgentXError', processing continues as follows: + + 1) If u.subtree, u.priority, u.range_subid (and if u.range_subid is + not 0, u.upper_bound), and the indicated context do not match an + existing registration made during this session, the agentx- + Response-PDU is returned with res.error set to ` + unknownRegistration'. + + 2) Otherwise, the agentx-Response-PDU is sent in reply with res.error + set to `noAgentXError', and the previous registration is removed + from the registration data store. + +7.1.6. Processing the agentx-AddAgentCaps-PDU + + When the master agent receives an agentx-AddAgentCaps-PDU, it + performs the common processing described in section 7.1, "Processing + AgentX Administrative Messages". If as a result res.error is ` + noAgentXError', processing continues as follows: + + 1) The master agent adds this agent capabilities information to the + sysORTable for the indicated context. An agentx-Response-PDU is + sent in reply with res.error set to `noAgentXError'. + +7.1.7. Processing the agentx-RemoveAgentCaps-PDU + + When the master agent receives an agentx-RemoveAgentCaps-PDU, it + performs the common processing described in section 7.1, "Processing + AgentX Administrative Messages". If as a result res.error is + `noAgentXError', processing continues as follows: + + 1) If the combination of a.id and the optional a.context does not + represent a sysORTable entry that was added by this subagent + during this session, the agentx-Response-PDU is returned with + res.error set to `unknownAgentCaps'. + + + + + + +Daniele, et al. Standards Track [Page 55] + +RFC 2741 AgentX January 2000 + + + 2) Otherwise the master agent deletes the corresponding sysORTable + entry and sends in reply the agentx-Response-PDU, with res.error + set to `noAgentXError'. + +7.1.8. Processing the agentx-Close-PDU + + When the master agent receives an agentx-Close-PDU, it performs the + common processing described in section 7.1, "Processing AgentX + Administrative Messages", with the exception that step 4) is not + performed since the agentx-Close-PDU does may not contain a context + field. If as a result res.error is `noAgentXError', processing + continues as follows: + + 1) The master agent closes the AgentX session as described below, and + sends in reply the agentx-Response-PDU with res.error set to + `noAgentXError': + + - All MIB regions that have been registered during this session + are unregistered, as described in section 7.1.5, "Processing + the agentx-Unregister-PDU". + + - All index values allocated during this session are freed, as + described in section 7.1.3, "Processing the agentx- + IndexDeallocate-PDU". + + - All sysORID values that were registered during this session are + removed, as described in section 7.1.7, "Processing the + agentx-RemoveAgentCaps-PDU". + + The master agent does not maintain state for closed sessions. If a + subagent wishes to re-establish a session after it has been closed, + it needs to re-register MIB regions, agent capabilities, etc. + +7.1.9. Detecting Connection Loss + + If a master agent is able to detect (from the underlying transport) + that a subagent cannot receive AgentX PDUs, it should close all + affected AgentX sessions as described in section 7.1.8, "Processing + the agentx-Close-PDU", step 1). + +7.1.10. Processing the agentx-Notify-PDU + + A subagent sending SNMPv1 trap information must map this into + (minimally) a value of snmpTrapOID.0, as described in 3.1.2 of RFC + 1908 [24]. + + + + + + +Daniele, et al. Standards Track [Page 56] + +RFC 2741 AgentX January 2000 + + + When the master agent receives an agentx-Notify-PDU, it performs the + common processing described in section 7.1, "Processing AgentX + Administrative Messages". If as a result res.error is + `noAgentXError', processing continues as follows: + + 1) If the first VarBind is sysUpTime.0; + + (a) if the second VarBind is not snmpTrapOID.0, res.error is set + to `processingError' and res.index to 2 + + (b) otherwise these two VarBinds are used as the first two + VarBinds within the generated notification. + + 2) If the first VarBind is not sysUpTime.0; + + (a) if the first VarBind is not snmpTrapOID.0, res.error is set + to `processingError' and res.index to 1 + + (b) otherwise this VarBind is used for snmpTrapOID.0 within the + generated notification, and the master agent uses the current + value of sysUpTime.0 for the indicated context as sysUpTime.0 + within the notification. + + 3) An agentx-Response-PDU is sent containing the original + VarBindList, and with res.error and res.index set as described + above. If res.error is `noAgentXError', notifications are sent + according to the implementation-specific configuration of the + master agent. If SNMPv1 Trap PDUs are generated, the recommended + mapping is as described in RFC 2089 [25]. If res.error indicates + an error in processing, no notifications are generated. + + Note that the master agent's successful response indicates the + agentx-Notify-PDU was received and validated. It does not + indicate that any particular notifications were actually generated + or received by notification targets. + +7.1.11. Processing the agentx-Ping-PDU + + When the master agent receives an agentx-Ping-PDU, it performs the + common processing described in section 7.1, "Processing AgentX + Administrative Messages". If as a result res.error is ` + noAgentXError', processing continues as follows: + + + + + + + + + +Daniele, et al. Standards Track [Page 57] + +RFC 2741 AgentX January 2000 + + + 1) An agentx-Response-PDU is sent in reply. + + If a subagent does not receive a response to its pings, or if it is + able to detect (from the underlying transport) that the master agent + is not able to receive AgentX messages, then it eventually must + initiate a new AgentX session, re-register its MIB regions, etc. + +7.2. Processing Received SNMP Protocol Messages + + When an SNMP GetRequest, GetNextRequest, GetBulkRequest, or + SetRequest protocol message is received by the master agent, the + master agent applies its access control policy. + + In particular, for SNMPv1 or SNMPv2c protocol messages, the master + agent applies the Elements of Procedure defined in section 4.1 of STD + 15, RFC 1157 [8] that apply to receiving entities. For SNMPv3, the + master agent applies an Access Control Model, possibly the View-based + Access Control Model (see RFC 2575 [15]), as described in section + 3.1.2 and section 4.3 of RFC 2571 [1]. + + For SNMPv1 and SNMPv2c, the master agent uses the community string as + an index into a local repository of configuration information that + may include community profiles or more complex context information. + For SNMPv3, the master agent uses the SNMP Context (see section 3.3.1 + of RFC 2571 [1]) for these purposes. + + If application of the access control policy results in a valid SNMP + request PDU, then an SNMP Response-PDU is constructed from + information gathered in the exchange of AgentX PDUs between the + master agent and one or more subagents. Upon receipt and initial + validation of an SNMP request PDU, a master agent uses the procedures + described below to dispatch AgentX PDUs to the proper subagents, + marshal the subagent responses, and construct an SNMP response PDU. + +7.2.1. Dispatching AgentX PDUs + + Upon receipt and initial validation of an SNMP request PDU, a master + agent uses the procedures described below to dispatch AgentX PDUs to + the proper subagents. + + General Rules of Procedure + + While processing a particular SNMP request, the master agent may send + one or more AgentX PDUs on one or more subagent sessions. The + following rules of procedure apply in general to the AgentX master + agent. PDU-specific rules are listed in the applicable sections. + + + + + +Daniele, et al. Standards Track [Page 58] + +RFC 2741 AgentX January 2000 + + + 1) Honoring the registry + + Because AgentX supports registration of duplicate and overlapping + regions, it is possible for the master agent to obtain a value for + a requested varbind from within multiple registered MIB regions. + + The master agent must ensure that the value (or exception) + actually returned in the SNMP response PDU is taken from the + authoritative region (as defined in section 7.1.4.1, "Handling + Duplicate and Overlapping Subtrees"). + + 2) GetNext and GetBulk Processing + + The master agent may choose to send agentx-Get-PDUs while + servicing an SNMP GetNextRequest-PDU. The master agent may choose + to send agentx-Get-PDUs or agentx-GetNext-PDUs while servicing an + SNMP GetBulkRequest-PDU. One possible reason for this would be if + the current iteration has targeted instance-level registrations. + + The master agent may choose to "scope" the possible instances + returned by a subagent by specifying an ending OID in the + SearchRange. If such scoping is used, typically the ending OID + would be the first lexicographical successor to the target region + that was registered on a session other than the target session. + Regardless of this choice, rule (1) must be obeyed. + + The master agent may require multiple request-response iterations + on the same subagent session, to determine the final value of all + requested variables. + + All AgentX PDUs sent on the session while processing a given SNMP + request must contain identical values of transactionID. Each + different SNMP request processed by the master agent must present + a unique value of transactionID (within the limits of the 32-bit + field) to the session. + + 3) Number and order of variables sent per AgentX PDU + + For Get/GetNext/GetBulk operations, at any stage of the possibly + iterative process, the master agent may need to dispatch several + SearchRanges to a particular subagent session. The master agent + may send one, some, or all of the SearchRanges in a single AgentX + PDU. + + The master agent must ensure that the correct contents and + ordering of the VarBindList in the SNMP Response-PDU are + maintained. + + + + +Daniele, et al. Standards Track [Page 59] + +RFC 2741 AgentX January 2000 + + + The following rules govern the number of VarBinds in a given + AgentX PDU: + + a) The subagent must support processing of AgentX PDUs with + multiple VarBinds. + + b) When processing an SNMP Set request, the master agent must + send all of the VarBinds applicable to a particular subagent + session in a single agentx-TestSet-PDU. + + c) When processing an SNMP Get, GetNext, or GetBulk request, + the master agent may send a single AgentX PDU on the session + with all applicable VarBinds, or multiple PDUs with single + VarBinds, or something in between those extremes. The + determination of which method to use in a particular case is + implementation-specific. + + 4) Timeout Values + + The master agent chooses a timeout value for each MIB region being + queried, which is + + a) the value specified during registration of the MIB region, + if it was non-zero + + b) otherwise, the value specified during establishment of the + session in which this region was subsequently registered, if + that value was non-zero + + c) otherwise, or, if the specified value is not practical, the + master agent's implementaton-specific default value + + When an AgentX PDU that references multiple MIB regions is + dispatched, the timeout value used for the PDU is the maximum + value of the timeouts so determined for each of the referenced MIB + regions. + + 5) Context + + If the master agent has determined that a specific non-default + context is associated with the SNMP request PDU, that context is + encoded into the AgentX PDU's context field and the + NON_DEFAULT_CONTEXT bit is set in h.flags. + + Otherwise, no context Octet String is added to the PDU, and the + NON_DEFAULT_CONTEXT bit is cleared. + + + + + +Daniele, et al. Standards Track [Page 60] + +RFC 2741 AgentX January 2000 + + +7.2.1.1. agentx-Get-PDU + + Each variable binding in the SNMP request PDU is processed as + follows: + + (1) Identify the target MIB region. + + Within a lexicographically ordered set of registered MIB + regions, valid for the indicated context, locate the + authoritative region (according to section 7.1.4.1, "Handling + Duplicate and Overlapping Subtrees") that contains the binding's + name. + + (2) If no such region exists, the variable binding is not processed + further, and its value is set to `noSuchObject'. + + (3) Identify the subagent session in which this region was + registered, termed the target session. + + (4) If this is the first variable binding to be dispatched over the + target session in a request-response exchange entailed in the + processing of this management request: + + - Create an agentx-Get-PDU for this session, with the header + fields initialized as described above (see section 6.1, + "AgentX PDU Header"). + + (5) Add a SearchRange to the end of the target session's PDU for + this variable binding. + + - The variable binding's name is encoded into the starting OID. + + - The ending OID is encoded as null. + +7.2.1.2. agentx-GetNext-PDU + + Each variable binding in the SNMP request PDU is processed as + follows: + + (1) Identify the target MIB region. + + Within a lexicographically ordered set of registered MIB + regions, valid for the indicated context, locate the + authoritative region (according to section 7.1.4.1, "Handling + Duplicate and Overlapping Subtrees") that + + a) contains the variable binding's name and is not a fully + qualified instance, or + + + +Daniele, et al. Standards Track [Page 61] + +RFC 2741 AgentX January 2000 + + + b) is the first lexicographical successor to the variable + binding's name. + + (2) If no such region exists, the variable binding is not processed + further, and its value is set to `endOfMibView'. + + (3) Identify the subagent session in which this region was + registered, termed the target session. + + (4) If this is the first variable binding to be dispatched over the + target session in a request-response exchange entailed in the + processing of this management request: + + - Create an agentx-GetNext-PDU for the session, with the header + fields initialized as described above (see section 6.1, + "AgentX PDU Header"). + + (5) Add a SearchRange to the end of the target session's agentx- + GetNext-PDU for this variable binding. + + - if (1a) applies, the variable binding's name is encoded into + the starting OID, and the OID's "include" field is set to 0. + + - if (1b) applies, the target region's r.subtree is encoded + into the starting OID, and its "include" field is set to 1. + (This is the recommended method. An implementation may + choose to use a Starting OID value that precedes r.subtree, + in which case the include bit must be 0. A starting OID + value that succeeds r.subtree is not permitted.) + + - the Ending OID for the SearchRange is encoded to be either + NULL, or a value that lexicographically succeeds the Starting + OID. This is an implementation-specific choice depending on + how the master agent wishes to "scope" the possible returned + instances. + +7.2.1.3. agentx-GetBulk-PDU + + (Note: The outline of the following procedure is based closely on + section 4.2.3, "The GetBulkRequest-PDU" of RFC 1905 [13]. Please + refer to it for details on the format of the SNMP GetBulkRequest-PDU + itself.) + + + + + + + + + +Daniele, et al. Standards Track [Page 62] + +RFC 2741 AgentX January 2000 + + + Each variable binding in the request PDU is processed as follows: + + (1) Identify the authoritative target region and target session, + exactly as described for the agentx-GetNext-PDU (see section + 7.2.1.2, "agentx-GetNext-PDU"). + + (2) If this is the first variable binding to be dispatched over the + target session in a request-response exchange entailed in the + processing of this management request: + + - Create an agentx-GetBulk-PDU for the session, with the header + fields initialized as described above (see section 6.1, + "AgentX PDU Header"). + + (3) Add a SearchRange to the end of the target session's agentx- + GetBulk-PDU for this variable binding, as described for the + agentx-GetNext-PDU. If the variable binding was a non-repeater + in the original request PDU, it must be a non-repeater in the + agentx-GetBulk-PDU. + + The value of g.max_repetitions in the agentx-GetBulk-PDU may be less + than (but not greater than) the value in the original request PDU. + + The master agent may make such alterations due to simple sanity + checking, optimizations for the current iteration based on the + registry, the maximum possible size of a potential Response-PDU, + known constraints of the AgentX transport, or any other + implementation-specific constraint. + +7.2.1.4. agentx-TestSet-PDU + + AgentX employs test-commit-undo-cleanup phases to achieve "as if + simultaneous" semantics of the SNMP SetRequest-PDU within the + extensible agent. The initial phase involves the agentx-TestSet-PDU. + + Each variable binding in the SNMP request PDU is processed in order, + as follows: + + (1) Identify the target MIB region and target session exactly as + described in section 7.2.1.1, "agentx-Get-PDU", step 1). + + Within a lexicographically ordered set of OID ranges, valid for + the indicated context, locate the authoritative range that + contains the variable binding's name. + + (2) If no such target region exists, this variable binding fails + with an error of `notWritable'. Processing is complete for this + request. + + + +Daniele, et al. Standards Track [Page 63] + +RFC 2741 AgentX January 2000 + + + (3) If this is the first variable binding to be dispatched over the + target session in a request-response exchange entailed in the + processing of this management request: + + - create an agentx-TestSet-PDU for the session, with the header + fields initialized as described above (see section 6.1, + "AgentX PDU Header"). + + (4) Add a VarBind to the end of the target session's PDU for this + variable binding, as described in section 5.4, "Value + Representation". + + Note that all VarBinds applicable to a given session must be sent in + a single agentx-TestSet-PDU. + +7.2.1.5. Dispatch + + A timeout value is calculated for each PDU to be sent, which is the + maximum value of the timeouts determined for each of the PDU's + SearchRanges (as described above in section 7.2.1, "Dispatching + AgentX PDUs", item 4). Each pending PDU is mapped (via its + h.sessionID value) to a particular transport domain/endpoint, as + described in section 8 (Transport Mappings). + +7.2.2. Subagent Processing + + A subagent initially processes a received AgentX PDU as follows: + + - If the received PDU is an agentx-Response-PDU: + + 1) If there are any errors parsing or interpreting the PDU, it is + silently dropped. + + 2) Otherwise the response is matched to the original request via + h.packetID, and handled in an implementation-specific manner. For + example, if this response indicates an error attempting to + register a MIB region, the subagent may wish to register a + different region, or log an error and halt, etc. + + - If the received PDU is any other type: + + 1) an agentx-Response-PDU is created whose header fields are + identical to the received request PDU except that h.type is set to + Response, res.error to `noError', res.index to 0, and the + VarBindList to null. + + 2) If the received PDU cannot be parsed, res.error is set to + `parseError'. + + + +Daniele, et al. Standards Track [Page 64] + +RFC 2741 AgentX January 2000 + + + 3) Otherwise, if h.sessionID does not correspond to a currently + established session, res.error is set to `notOpen'. + + 4) At this point, if res.error is not `noError', the received PDU is + not processed further. If the received PDU's header was + successfully parsed, the AgentX-Response-PDU is sent in reply. If + the received PDU's header was not successfully parsed or for some + other reason the subagent cannot send a reply, processing is + complete. + +7.2.3. Subagent Processing of agentx-Get, GetNext, GetBulk-PDUs + + A conformant AgentX subagent must support the agentx-Get, -GetNext, + and -GetBulk PDUs, and must support multiple variables being supplied + in each PDU. + + When a subagent receives an agentx-Get-, GetNext-, or GetBulk-PDU, it + performs the indicated management operations and returns an agentx- + Response-PDU. + + Each SearchRange in the request PDU's SearchRangeList is processed as + described below, and a VarBind is added in the corresponding location + of the agentx-Response-PDU's VarbindList. If processing should fail + for any reason not described below, res.error is set to `genErr', + res.index to the index of the failed SearchRange, the VarBindList is + reset to null, and this agentx-Response-PDU is returned to the master + agent. + +7.2.3.1. Subagent Processing of the agentx-Get-PDU + + Upon the subagent's receipt of an agentx-Get-PDU, each SearchRange in + the request is processed as follows: + + (1) The starting OID is copied to v.name. + + (2) If the starting OID exactly matches the name of a variable + instantiated by this subagent within the indicated context and + session, v.type and v.data are encoded to represent the + variable's syntax and value, as described in section 5.4, "Value + Representation". + + (3) Otherwise, if the starting OID does not match the object + identifier prefix of any variable instantiated within the + indicated context and session, the VarBind is set to + `noSuchObject', in the manner described in section 5.4, "Value + Representation". + + + + + +Daniele, et al. Standards Track [Page 65] + +RFC 2741 AgentX January 2000 + + + (4) Otherwise, the VarBind is set to `noSuchInstance' in the manner + described in section 5.4, "Value Representation". + +7.2.3.2. Subagent Processing of the agentx-GetNext-PDU + + Upon the subagent's receipt of an agentx-GetNext-PDU, each + SearchRange in the request is processed as follows: + + (1) The subagent searches for a variable within the + lexicographically ordered list of variable names for all + variables it instantiates (without regard to registration of + regions) within the indicated context and session, as follows: + + - if the "include" field of the starting OID is 0, the + variable's name is the closest lexicographical successor to + the starting OID. + + - if the "include" field of the starting OID is 1, the + variable's name is either equal to, or the closest + lexicographical successor to, the starting OID. + + - If the ending OID is not null, the variable's name + lexicographically precedes the ending OID. + + If a variable is successfully located, v.name is set to that + variable's name. v.type and v.data are encoded to represent the + variable's syntax and value, as described in section 5.4, "Value + Representation". + + (2) If the subagent cannot locate an appropriate variable, v.name is + set to the starting OID, and the VarBind is set to ` + endOfMibView', in the manner described in section 5.4, "Value + Representation". + +7.2.3.3. Subagent Processing of the agentx-GetBulk-PDU + + A maximum of N + (M * R) VarBinds are returned, where + + N equals g.non_repeaters, + M equals g.max_repetitions, and + R is (number of SearchRanges in the GetBulk request) - N. + + The first N SearchRanges are processed exactly as for the agentx- + GetNext-PDU. + + If M and R are both non-zero, the remaining R SearchRanges are + processed iteratively to produce potentially many VarBinds. For each + iteration i, such that i is greater than zero and less than or equal + + + +Daniele, et al. Standards Track [Page 66] + +RFC 2741 AgentX January 2000 + + + to M, and for each repeated SearchRange s, such that s is greater + than zero and less than or equal to R, the (N+((i-1)*R)+s)-th VarBind + is added to the agentx-Response-PDU as follows: + + 1) The subagent searches for a variable within the + lexicographically ordered list of variable names for all + variables it instantiates (without regard to registration of + regions) within the indicated context and session, for which + the following are all true: + + - The variable's name is the (i)-th lexicographical successor + to the (N+s)-th requested OID. + + (Note that if i is 0 and the "include" field is 1, the + variable's name may be equivalent to, or the first + lexicographical successor to, the (N+s)-th requested OID.) + + - If the ending OID is not null, the variable's name + lexicographically precedes the ending OID. + + If all of these conditions are met, v.name is set to the located + variable's name. v.type and v.data are encoded to represent the + variable's syntax and value, as described in section 5.4, "Value + Representation". + + 2) If no such variable exists, the VarBind is set to ` + endOfMibView' as described in section 5.4, "Value + Representation". v.name is set to v.name of the (N+((i- + 2)*R)+s)-th VarBind unless i is currently 1, in which case it + is set to the value of the starting OID in the (N+s)-th + SearchRange. + + Note that further iterative processing should stop if + + - For any iteration i, all s values of v.type are ` + endOfMibView'. + + - An AgentX transport constraint or other implementation- + specific constraint is reached. + +7.2.4. Subagent Processing of agentx-TestSet, -CommitSet, -UndoSet, + -CleanupSet-PDUs + + A conformant AgentX subagent must support the agentx-TestSet, + -CommitSet, -UndoSet, and -CleanupSet PDUs, and must support multiple + variables being supplied in the agentx-TestSet-PDU. + + + + + +Daniele, et al. Standards Track [Page 67] + +RFC 2741 AgentX January 2000 + + + These four PDUs are used to collectively perform the indicated + management operation. An agentx-Response-PDU is sent in reply to + each of the PDUs (except -CleanupSet), to inform the master agent of + the state of the operation. + + The master agent must serialize Set transactions for each session. + That is, a session need not handle multiple concurrent Set + transactions. + + These Response-PDUs do not contain a VarBindList. + +7.2.4.1. Subagent Processing of the agentx-TestSet-PDU + + Upon the subagent's receipt of an agentx-TestSet-PDU, each VarBind in + the PDU is validated until they are all successful, or until one + fails, as described in section 4.2.5 of RFC 1905 [13]. The subagent + validates variables with respect to the context and session indicated + in the testSet-PDU. + + If each VarBind is successful, the subagent has a further + responsibility to ensure the availability of all resources (memory, + write access, etc.) required for successfully carrying out a + subsequent agentx-CommitSet operation. If this cannot be guaranteed, + the subagent should set res.error to `resourceUnavailable'. As a + result of this validation step, an agentx-Response-PDU is sent in + reply whose res.error field is set to one of the following SNMPv2 PDU + error-status values (see section 3, "Definitions", in RFC 1905 [13]): + + noError (0), + genErr (5), + noAccess (6), + wrongType (7), + wrongLength (8), + wrongEncoding (9), + wrongValue (10), + noCreation (11), + inconsistentValue (12), + resourceUnavailable (13), + notWritable (17), + inconsistentName (18) + + If this value is not `noError', the res.index field must be set to + the index of the VarBind for which validation failed. + + + + + + + + +Daniele, et al. Standards Track [Page 68] + +RFC 2741 AgentX January 2000 + + + Implementation of rigorous validation code may be one of the most + demanding aspects of subagent development. Implementors are strongly + encouraged to do this right, so as to avoid if at all possible the + extensible agent's having to return `commitFailed' or `undoFailed' + during subsequent processing. + +7.2.4.2. Subagent Processing of the agentx-CommitSet-PDU + + The agentx-CommitSet-PDU indicates that the subagent should actually + perform (as described in the post-validation sections of 4.2.5 of RFC + 1905 [13]) the management operation indicated by the previous + TestSet-PDU. After carrying out the management operation, the + subagent sends in reply an agentx-Response-PDU whose res.error field + is set to one of the following SNMPv2 PDU error-status values (see + section 3, "Definitions", in RFC 1905 [13]): + + noError (0), + commitFailed (14) + + If this value is `commitFailed', the res.index field must be set to + the index of the VarBind (as it occurred in the agentx-TestSet-PDU) + for which the operation failed. Otherwise res.index is set to 0. + +7.2.4.3. Subagent Processing of the agentx-UndoSet-PDU + + The agentx-UndoSet-PDU indicates that the subagent should undo the + management operation requested in a preceding CommitSet-PDU. The + undo process is as described in section 4.2.5 of RFC 1905 [13]. + + After carrying out the undo process, the subagent sends in reply an + agentx-Response-PDU whose res.error field is set to one of the + following SNMPv2 PDU error-status values (see section 3, + "Definitions", in RFC 1905 [13]): + + noError (0), + undoFailed (15) + + If this value is `undoFailed', the res.index field must be set to the + index of the VarBind (as it occurred in the agentx-TestSet-PDU) for + which the operation failed. Otherwise res.index is set to 0. + + This PDU also signals the end of processing of the management + operation initiated by the previous TestSet-PDU. The subagent should + release resources, etc. as described in section 7.2.4.4, "Subagent + Processing of the agentx-CleanupSet-PDU". + + + + + + +Daniele, et al. Standards Track [Page 69] + +RFC 2741 AgentX January 2000 + + +7.2.4.4. Subagent Processing of the agentx-CleanupSet-PDU + + The agentx-CleanupSet-PDU signals the end of processing of the + management operation requested in the previous TestSet-PDU. This is + an indication to the subagent that it may now release any resources + it may have reserved in order to carry out the management request. + No response is sent by the subagent. + +7.2.5. Master Agent Processing of AgentX Responses + + The master agent now marshals all subagent AgentX response PDUs and + builds an SNMP response PDU. In the next several subsections, the + initial processing of all subagent AgentX response PDUs is described, + followed by descriptions of subsequent processing for each specific + subagent Response. + +7.2.5.1. Common Processing of All AgentX Response PDUs + + 1) If a response is not received on a session within the timeout + interval for this dispatch, it is treated as if the subagent had + returned `genErr' and processed as described below. + + A timeout may be due to a variety of reasons, and does not + necessarily denote a failed or malfunctioning subagent. As such, + the master agent's response to a subagent timeout is + implementation-specific, but with the following constraint: + + A session that times out on three consecutive AgentX requests is + considered unable to respond, and the master agent must close the + AgentX session as described in section 7.1.8, "Processing the + agentx-Close-PDU", step (2). + + 2) Otherwise, the h.packetID, h.sessionID, and h.transactionID fields + of the AgentX response PDU are used to correlate subagent + responses. If the response does not pertain to this SNMP + operation, it is ignored. + + 3) Otherwise, the responses are processed jointly to form the SNMP + response PDU. + +7.2.5.2. Processing of Responses to agentx-Get-PDUs + + After common processing of the subagent's response to an agentx-Get- + PDU (see section 7.2.5.1, "Common Processing of All AgentX Response + PDUs", above), processing continues with the following steps: + + + + + + +Daniele, et al. Standards Track [Page 70] + +RFC 2741 AgentX January 2000 + + + 1) For any received AgentX response PDU, if res.error is not + `noError', the SNMP response PDU's error code is set to this + value. If res.error contains an AgentX specific value (e.g. + `parseError'), the SNMP response PDU's error code is set to a + value of genErr instead. Also, the SNMP response PDU's error + index is set to the index of the variable binding corresponding to + the failed VarBind in the subagent's AgentX response PDU. + + All other AgentX response PDUs received due to processing this + SNMP request are ignored. Processing is complete; the SNMP + Response PDU is ready to be sent (see section 7.2.6, "Sending the + SNMP Response-PDU"). + + 2) Otherwise, the content of each VarBind in the AgentX response PDU + is used to update the corresponding variable binding in the SNMP + Response-PDU. + +7.2.5.3. Processing of Responses to agentx-GetNext-PDU and + agentx-GetBulk-PDU + + After common processing of the subagent's response to an agentx- + GetNext-PDU or agentx-GetBulk-PDU (see section 7.2.5.1, "Common + Processing of All AgentX Response PDUs", above), processing continues + with the following steps: + + 1) For any received AgentX response PDU, if res.error is not + `noError', the SNMP response PDU's error code is set to this + value. If res.error contains an AgentX specific value (e.g. + `parseError'), the SNMP response PDU's error code is set to a + value of genErr instead. Also, the SNMP response PDU's error + index is set to the index of the variable binding corresponding to + the failed VarBind in the subagent's AgentX response PDU. + + All other AgentX response PDUs received due to processing this + SNMP request are ignored. Processing is complete; the SNMP + response PDU is ready to be sent (see section 7.2.6, "Sending the + SNMP Response-PDU"). + + 2) Otherwise, the content of each VarBind in the AgentX response PDU + is used to update the corresponding VarBind in the SNMP response + PDU. + + After all expected AgentX response PDUs have been processed, if any + VarBinds still contain the value `endOfMibView' in their v.type + fields, processing must continue: + + + + + + +Daniele, et al. Standards Track [Page 71] + +RFC 2741 AgentX January 2000 + + + 3) A new iteration of AgentX request dispatching is initiated (as + described in section 7.2.1.2, "agentx-GetNext-PDU"), in which only + those VarBinds whose v.type is `endOfMibView' are processed. + + 4) For each such VarBind, an authoritative target MIB region is + identified in which the master agent expects to find suitable MIB + variables. The target session is the one on which this new target + region was registered. + + The starting OID in each SearchRange is set to the value of v.name + for the corresponding VarBind, and its "include" field is set to + 0. + + 5) The value of transactionID must be identical to the value used + during the previous iteration. + + 6) The AgentX PDUs are sent on the target session(s), and the + responses are received and processed according to the steps + described in section 7.2.5, "Master Agent Processing of AgentX + Responses". + + 7) This process continues iteratively until a complete SNMP + Response-PDU has been built, or until there remain no + authoritative MIB regions to query. + + Note that r.subtree for the new target region identified in step 4) + may not lexicographically succeed r.subtree for the region that has + returned `endOfMibView'. For example, consider the following + registry: + + session A `mib-2' (1.3.6.1.2.1) + session B `ip' (1.3.6.1.2.1.4) + session C `tcp' (1.3.6.1.2.1.6) + + If while processing a GetNext-Request-PDU session B returns + `endOfMibView' for a variable name within 1.3.6.1.2.1.4, the target + MIB region identified in step 4) would be 1.3.6.1.2.1 (since it may + contain variables whose names precede 1.3.6.1.2.1.6). + + Note also that if session A returned variables from within + 1.3.6.1.2.1.6, they must be discarded since session A is NOT + authoritative for that region. + +7.2.5.4. Processing of Responses to agentx-TestSet-PDUs + + After common processing of the subagent's response to an agentx- + TestSet-PDU (see section 7.2.5.1, "Common Processing of All AgentX + Response PDUs", above), processing continues with the further + + + +Daniele, et al. Standards Track [Page 72] + +RFC 2741 AgentX January 2000 + + + exchange of AgentX PDUs. The value of h.transactionID in the + agentx-CommitSet, -UndoSet, and -CleanupSet-PDUs must be identical to + the value sent in the testSet-PDU. + + The state transitions and PDU sequences are depicted in section 7.3, + "State Transitions". + + The set of all sessions who have been sent an agentx-TestSet-PDU for + this particular transaction are referred to below as "involved + sessions". + + 1) If any target session's response is not `noError', all other + agentx-Response-PDUs received due to processing this SNMP request + are ignored. + + An agentx-CleanupSet-PDU is sent to all involved sessions. + Processing is complete; the SNMP response PDU is constructed as + described below in 7.2.6, "Sending the SNMP Response-PDU". + + 2) Otherwise an agentx-CommitSet-PDU is sent to all involved + sessions. + +7.2.5.5. Processing of Responses to agentx-CommitSet-PDUs + + After common processing of the subagent's response to an agentx- + CommitSet-PDU (see section 7.2.5.1, "Common Processing of All AgentX + Response PDUs", above), processing continues with the following + steps: + + 1) If any response is not `noError', the SNMP response PDU's error + code is set to this value. If res.error contains an AgentX + specific value (e.g. `parseError'), the SNMP response PDU's error + code is set to a value of genErr instead. Also, the SNMP response + PDU's error index is set to the index of the VarBind corresponding + to the failed VarBind in the agentx-TestSet-PDU. + + An agentx-UndoSet-PDU is sent to each target session that has been + sent an agentx-CommitSet-PDU. An agentx-CleanupSet-PDU is sent to + the remainder of the involved sessions. + + 2) Otherwise an agentx-CleanupSet-PDU is sent to all involved + sessions. Processing is complete; the SNMP response PDU is + constructed as described below in section 7.2.6, "Sending the SNMP + Response-PDU". + + + + + + + +Daniele, et al. Standards Track [Page 73] + +RFC 2741 AgentX January 2000 + + +7.2.5.6. Processing of Responses to agentx-UndoSet-PDUs + + After common processing of the subagent's response to an agentx- + UndoSet-PDU (see section 7.2.5.1, "Common Processing of All AgentX + Response PDUs", above), processing continues with the following + steps: + + 1) If any response is `undoFailed' the SNMP response PDU's error code + is set to this value. Also, the SNMP response PDU's error index + is set to 0. + + 2) Otherwise, if any response is not `noError' the SNMP response + PDU's error code is set to this value. Also, the SNMP response + PDU's error index is set to the index of the VarBind corresponding + to the failed VarBind in the agentx-TestSet-PDU. If res.error is + an AgentX specific value (e.g. `parseError'), the SNMP response + PDU's error code is set to a value of genErr instead. + + 3) Otherwise the SNMP response PDU's error code and error index were + set in section 7.2.5.5 step 1) + +7.2.6. Sending the SNMP Response-PDU + + Once the processing described in section 7.2.5, "Master Agent + Processing of AgentX Responses" is complete, there is an SNMP + response PDU available. The master agent now implements the Elements + of Procedure for the applicable version of the SNMP protocol in order + to encapsulate the PDU into a message, and transmit it to the + originator of the SNMP management request. Note that this may + involve altering the PDU contents (for instance, to replace the + original VarBinds if an error condition is to be returned). + + The response PDU may also be altered in order to support the SNMPv1 + PDU. In such cases the required PDU mapping is that defined in RFC + 2089 [25]. (Note in particular that the rules for handling Counter64 + syntax may require re-sending AgentX GetBulk or GetNext PDUs until a + VarBind of suitable syntax is returned.) + +7.2.7. MIB Views + + AgentX subagents are not aware of MIB views, since view information + is not contained in AgentX PDUs. + + As stated above, the descriptions of procedures in section 7, + "Elements of Procedure", of this memo are not intended to constrain + the internal architecture of any conformant implementation. In + particular, the master agent procedures described in section 7.2.1, + + + + +Daniele, et al. Standards Track [Page 74] + +RFC 2741 AgentX January 2000 + + + "Dispatching AgentX PDUs" and in section 7.2.5, "Master Agent + Processing of AgentX Responses" may be altered so as to optimize + AgentX exchanges when implementing MIB views. + + Such optimizations are beyond the scope of this memo. But note that + section 7.2.3, "Subagent Processing of agentx-Get, GetNext, GetBulk- + PDUs", defines subagent behavior in such a way that alteration of + SearchRanges may be used in such optimizations. + +7.3. State Transitions + + State diagrams are presented from the master agent's perspective for + transport connection and session establishment, and from the + subagent's perspective for Set transaction processing. + +7.3.1. Set Transaction States + + The following table presents, from the subagent's perspective, the + state transitions involved in Set transaction processing: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 75] + +RFC 2741 AgentX January 2000 + + + STATE + +---------------+--------------+---------+--------+-------- + | A | B | C | D | E + | (Initial | TestOK | Commit | Test | Commit + | State) | | OK | Fail | Fail + | | | | | + EVENT | | | | | + ---------+---------------+--------------+---------+--------+-------- + | 7.2.4.1 | | | | + Receive | All varbinds | | | | + TestSet | OK? | X | X | X | X + PDU | Yes ->B | | | | + | No ->D | | | | + ---------+---------------+--------------+---------+--------+-------- + | | 7.2.4.2 | | | + Receive | | NoError? | | | + Commit- | X | Yes ->C | X | X | X + Set PDU | | No ->E | | | + ---------+---------------+--------------+---------+--------+-------- + Receive | | | 7.2.4.3 | |7.2.4.3 + UndoSet | X | X | ->done | X | ->done + PDU | | | | | + ---------+---------------+--------------+---------+--------+-------- + Receive | | 7.2.4.4 | 7.2.4.4 |7.2.4.4 | + Cleanup- | X | ->done | ->done | ->done | X + Set PDU | | | | | + ---------+---------------+--------------+---------+--------+-------- + Session | | rollback | undo | | + Loss | ->done | ->done | ->done | ->done | ->done + ---------+---------------+--------------+---------+--------+-------- + + There are three possible sequences that a subagent may follow for a + particular set transaction: + + 1) TestSet CommitSet CleanupSet + 2) TestSet CommitSet UndoSet + 3) TestSet CleanupSet + + Note that a single PDU sequence may result in multiple paths through + the finite state machine (FSM). For example, the sequence + + TestSet CommitSet UndoSet + + may walk through either of these two state sequences: + + (initial) TestOK CommitOK (done) + (initial) TestOK CommitFail (done) + + + + +Daniele, et al. Standards Track [Page 76] + +RFC 2741 AgentX January 2000 + + +7.3.2. Transport Connection States + + The following table presents, from the master agent's perspective, + the state transitions involved in transport connection setup and + teardown: + STATE + +--------------+-------------- + | A | B + | No transport | Transport + | | connected + | | + EVENT | | + ----------------+--------------+-------------- + Transport | | + connect | ->B | X + indication | | + ----------------+--------------+-------------- + Receive | | if no resources + Open-PDU | | available + | | reject, else + | X | establish + | | session + | | + | | ->B + ----------------+--------------+-------------- + Receive | | if matching + Response-PDU | | session id, + | | feed to that + | X | session's FSM + | | else ignore + | | + | | ->B + ----------------+--------------+-------------- + Receive other | | if matching + PDUs | | session id, + | | feed to that + | X | session's FSM + | | else reject + | | + | | ->B + ----------------+--------------+-------------- + Transport | |notify all + disconnect | |sessions on + indication | X |this transport + | | + | | ->A + ----------------+--------------+-------------- + + + + +Daniele, et al. Standards Track [Page 77] + +RFC 2741 AgentX January 2000 + + +7.3.3. Session States + + The following table presents, from the master agent's perspective, + the state transitions involved in session setup and teardown: + + STATE + +-------------+---------------- + | A | B + | No session | Session + | | established + EVENT | | + ---------------+-------------+---------------- + | 7.1.1 | + Receive | | X + Open PDU | ->B | + ---------------+-------------+---------------- + | | 7.1.8 + Receive | X | + Close PDU | | ->A + ---------------+-------------+---------------- + Receive | | 7.1.4 + Register PDU | X | + | | ->B + ---------------+-------------+---------------- + Receive | | 7.1.5 + Unregister | X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | + Get PDU | | + GetNext PDU | | + GetBulk PDU | X | X + TestSet PDU | | + CommitSet PDU | | + UndoSet PDU | | + CleanupSet PDU | | + ---------------+-------------+---------------- + Receive | | 7.1.10 + Notify PDU | X | + | | ->B + ---------------+-------------+---------------- + Receive Ping | | 7.1.11 + PDU | X | + | | ->B + ---------------+-------------+---------------- + (continued next page) + + + + + +Daniele, et al. Standards Track [Page 78] + +RFC 2741 AgentX January 2000 + + + ---------------+-------------+---------------- + Receive | | 7.1.2 + IndexAllocate | X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | 7.1.3 + IndexDeallocate| X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | 7.1.6 + AddAgentxCaps | X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | 7.1.7 + RemoveAgentxCap| X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | 7.2.5 + Response PDU | X | + | | ->B + ---------------+-------------+---------------- + Receive | | + Other PDU | X | X + ---------------+-------------+---------------- + +8. Transport Mappings + + The same AgentX PDU formats, encodings, and elements of procedure are + used regardless of the underlying transport. + +8.1. AgentX over TCP + +8.1.1. Well-known Values + + The master agent accepts TCP connection requests for the well-known + port 705. Subagents connect to the master agent using this port + number. + +8.1.2. Operation + + Once a TCP connection has been established, the AgentX peers use this + connection to carry all AgentX PDUs. Multiple AgentX sessions may be + established using the same TCP connection. AgentX PDUs are sent + within an AgentX session. AgentX peers are responsible for mapping + the h.sessionID to a particular TCP connection. + + + + + + +Daniele, et al. Standards Track [Page 79] + +RFC 2741 AgentX January 2000 + + + The AgentX entity must not "interleave" AgentX PDUs within the TCP + byte stream. All the bytes of one PDU must be sent before any bytes + of a different PDU. The receiving entity must be prepared for TCP to + deliver byte sequences that do not coincide with AgentX PDU + boundaries. + +8.2. AgentX over UNIX-domain Sockets + + Many (BSD-derived) implementations of the UNIX operating system + support the UNIX pathname address family (AF_UNIX) for socket + communications. This provides a convenient method of sending and + receiving data between processes on the same host. + + Mapping AgentX to this transport is useful for environments that + + - wish to guarantee subagents are running on the same managed + node as the master agent, and where + + - sockets provide better performance than TCP or UDP, especially + in the presence of heavy network I/O + +8.2.1. Well-known Values + + The master agent creates a well-known UNIX-domain socket endpoint + called "/var/agentx/master". (It may create other, implementation- + specific endpoints.) + + This endpoint name uses the character set encoding native to the + managed node, and represents a UNIX-domain stream (SOCK_STREAM) + socket. + +8.2.2. Operation + + Once a connection has been established, the AgentX peers use this + connection to carry all AgentX PDUs. + + Multiple AgentX sessions may be established using the same + connection. AgentX PDUs are sent within an AgentX session. AgentX + peers are responsible for mapping the h.sessionID to a particular + connection. + + The AgentX entity must not "interleave" AgentX PDUs within the socket + byte stream. All the bytes of one PDU must be sent before any bytes + of a different PDU. The receiving entity must be prepared for the + socket to deliver byte sequences that do not coincide with AgentX PDU + boundaries. + + + + + +Daniele, et al. Standards Track [Page 80] + +RFC 2741 AgentX January 2000 + + +9. Security Considerations + + This memo defines a protocol between two processing entities, one of + which (the master agent) is assumed to perform authentication of + received SNMP requests and to control access to management + information. The master agent performs these security operations + independently of the other processing entity (the subagent). + + Security considerations require three questions to be answered: + + 1. Is a particular subagent allowed to initiate a session with a + particular master agent? + + 2. During an AgentX session, is any SNMP security-related + information (for example, community names) passed from the + master agent to the subagent? + + 3. During an AgentX session, what part of the MIB tree is this + subagent allowed to register? + + The answer to the third question is: A subagent can register any + subtree (subject to AgentX elements of procedure, section 7.1.4, + "Processing the agentx-Register-PDU"). Currently there is no access + control mechanism defined in AgentX. A concern here is that a + malicious subagent that registers an unauthorized "sensitive" + subtree, could see modification requests to those objects, or by + giving its own clever answer to NMS queries, could cause the NMS to + do something that leads to information disclosure or other damage. + + The answer to the second question is: No. + + Now we can answer the first question. AgentX does not contain a + mechanism for authorizing/refusing session initiations. Thus, + controlling subagent access to the master agent may only be done at a + lower layer (e.g., transport). + + An AgentX subagent can connect to a master agent using either a + network transport mechanism (e.g., TCP), or a "local" mechanism + (e.g., shared memory, named pipes). + + In the case where a local transport mechanism is used and both + subagent and master agent are running on the same host, connection + authorization can be delegated to the operating system features. The + answer to the first security question then becomes: "If and only if + the subagent has sufficient privileges, then the operating system + will allow the connection". + + + + + +Daniele, et al. Standards Track [Page 81] + +RFC 2741 AgentX January 2000 + + + If a network transport is used, currently there is no inherent + security. Transport Layer Security, SSL, or IPsec SHOULD be used to + control and protect subagent connections in this mode of operation. + + However, we RECOMMEND that subagents always run on the same host as + the master agent and that operating system features be used to ensure + that only properly authorized subagents can establish connections to + the master agent. + +10. Acknowledgements + + The initial development of this memo was heavily influenced by the + DPI 2.0 specification RFC 1592 [26]. + + This document was produced by the IETF Agent Extensibility (AgentX) + Working Group, and benefited especially from the contributions of the + following working group members: + + David Battle, Uri Blumenthal, Jeff Case, Maria Greene, Lauren + Heintz, Dave Keeney, Harmen van der Linde, Bob Natale, Aleksey + Romanov, Don Ryan, and Juergen Schoenwaelder. + + An honorable mention is extended to Randy Presuhn in recognition for + his numerous technical contributions to this specification; for his + many answers provided on (and hosting of) the AgentX e-mail list and + ftp site, and, for the valued support and guidance Randy provided to + the Working Group chair. + + The AgentX Working Group is chaired by: + + Bob Natale + ACE*COMM Corporation + 704 Quince Orchard Road + Gaithersburg, MD 20878 + + Phone: +1-301-721-3000 + Fax: +1-301-721-3001 + EMail: bnatale@acecomm.com + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 82] + +RFC 2741 AgentX January 2000 + + +11. Authors' and Editor's Addresses + + Mike Daniele + Compaq Computer Corporation + 110 Spit Brook Rd + Nashua, NH 03062 + + Phone: +1-603-881-1423 + EMail: daniele@zk3.dec.com + + + Bert Wijnen + IBM T.J.Watson Research + Schagen 33 + 3461 GL Linschoten + Netherlands + + Phone: +31-348-432-794 + EMail: wijnen@vnet.ibm.com + + + Mark Ellison (WG editor) + Ellison Software Consulting, Inc. + 38 Salem Road + Atkinson, NH 03811 + + Phone: +1-603-362-9270 + EMail: ellison@world.std.com + + + Dale Francisco (editor) + Cisco Systems + 150 Castilian Dr + Goleta CA 93117 + + Phone: +1-805-961-3642 + Fax: +1-805-961-3600 + EMail: dfrancis@cisco.com + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 83] + +RFC 2741 AgentX January 2000 + + +12. References + + [1] Harrington, D., Presuhn, R. and B. Wijnen, "An Architecture for + Describing SNMP Management Frameworks", RFC 2571, April 1999. + + [2] Rose, M. and K. McCloghrie, "Structure and Identification of + Management Information for TCP/IP-based Internets", STD 16, RFC + 1155, May 1990. + + [3] Rose, M. and K. McCloghrie, "Concise MIB Definitions", STD 16, + RFC 1212, March 1991. + + [4] Rose, M., "A Convention for Defining Traps for use with the + SNMP", RFC 1215, March 1991. + + [5] 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. + + [6] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, + M. and S. Waldbusser, "Textual Conventions for SMIv2", STD 58, + RFC 2579, April 1999. + + [7] McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose, + M. and S. Waldbusser, "Conformance Statements for SMIv2", STD + 58, RFC 2580, April 1999. + + [8] Case, J., Fedor, M., Schoffstall, M. and J. Davin, "Simple + Network Management Protocol", STD 15, RFC 1157, May 1990. + + [9] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, + "Introduction to Community-based SNMPv2", RFC 1901, January + 1996. + + [10] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, + "Transport Mappings for Version 2 of the Simple Network + Management Protocol (SNMPv2)", RFC 1906, January 1996. + + [11] Case, J., Harrington D., Presuhn R. and B. Wijnen, "Message + Processing and Dispatching for the Simple Network Management + Protocol (SNMP)", RFC 2572, April 1999. + + [12] Blumenthal, U. and B. Wijnen, "User-based Security Model (USM) + for version 3 of the Simple Network Management Protocol + (SNMPv3)", RFC 2574, April 1999. + + + + + + +Daniele, et al. Standards Track [Page 84] + +RFC 2741 AgentX January 2000 + + + [13] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, "Protocol + Operations for Version 2 of the Simple Network Management + Protocol (SNMPv2)", RFC 1905, January 1996. + + [14] Levi, D., Meyer, P. and B. Stewart, "SNMPv3 Applications", RFC + 2573, April 1999. + + [15] Wijnen, B., Presuhn, R. and K. McCloghrie, "View-based Access + Control Model (VACM) for the Simple Network Management Protocol + (SNMP)", RFC 2575, April 1999. + + [16] Case, J., Mundy, R., Partain, D. and B. Stewart, "Introduction + to Version 3 of the Internet-standard Network Management + Framework", RFC 2570, April 1999. + + [17] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, + "Management Information Base for Version 2 of the Simple + Network Management Protocol (SNMPv2)", RFC 1907, January 1996. + + [18] Information processing systems - Open Systems Interconnection - + Specification of Abstract Syntax Notation One (ASN.1), + International Organization for Standardization. International + Standard 8824, (December, 1987). + + [19] McCloghrie, K. and F. Kastenholz, "The Interfaces Group MIB + using SMIv2", RFC 2233, November 1997. + + [20] Case, J., "FDDI Management Information Base", RFC 1285, January + 1992. + + [21] Krupczak, C. and J. Saperia, "Definitions of System-Level + Managed Objects for Applications", RFC 2287, April 1997. + + [22] Kalbfleisch, C., Krupczak, C., Presuhn, R. and J. Saperia, + "Application Management MIB", RFC 2564, May 1999. + + [23] Reynolds, J. and J. Postel, "Assigned Numbers", STD 2, RFC + 1700, October 1994. + + [24] 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. + + [25] Wijnen, B. and D. Levi, "V2ToV1: Mapping SNMPv2 onto SNMPv1 + Within a Bilingual SNMP Agent", RFC 2089, January 1997. + + + + + + +Daniele, et al. Standards Track [Page 85] + +RFC 2741 AgentX January 2000 + + + [26] Wijnen, B., Carpenter, G., Curran, K., Sehgal, A. and G. + Waters, "Simple Network Management Protocol: Distributed + Protocol Interface, Version 2.0", RFC 1592, March 1994. + + [27] Bradner, S., "Key words for use in RFCs to Indicate Requirement + Levels", BCP 14, RFC 2119, March 1997. + +13. Notices + + 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. + + + + + + + + + + + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 86] + +RFC 2741 AgentX January 2000 + + +A. Changes relative to RFC 2257 + + Changes on the wire: + + - The agentx-Notify-PDU and agentx-Close-PDU now generate an + agentx-Response-PDU. + + - The res.error field may contain three new error codes: + parseFailed(266), requestDenied(267), and processingError(268). + + Clarifications to the text of the memo: + + - Modified the text of step (4) in section 4.2, "Applicability" + to separate the two concerns of row creation, and counters that + count rows. + + - The use of the r.range_subid field is more clearly defined in + section 6.2.3, "The agentx-Register-PDU". + + - Default priority (127) for registration added to the + description of r.priority in section 6.2.3, "The agentx- + Register-PDU". + + - Made the distinction of "administrative processing" PDUs and + "SNMP request processing" PDUs in section 6.1, "AgentX PDU + Header" description of h.type. This distinction is used in the + Elements of Procedure relative to the res.sysuptime and + res.error fields. + + - Rewrote portions of text in section 6.2.3, "The agentx- + Register-PDU" to be more explicit about the following points: + + - There is a default registration priority of 127. + - Improved the description of r.range_subid, independent of + the prefix in r.region. + - Improved description and examples of how to use the + registration mechanism. + - Added a description for r.upper_bound. + - changed r.region to r.subtree (because the text used the + terms "region", "range", and "OID range" in too loose a + fashion. r.subtree can not represent anything more by + itself than a simple subtree. In conjunction with + r.range_subid and r.upper_bound, it can represent a + "region", that is, a union of subtrees) + + - Modified the text in section 6.2.4, "The agentx-Unregister-PDU" to + include a description of u.range_subid and u.upper_bound + + + + +Daniele, et al. Standards Track [Page 87] + +RFC 2741 AgentX January 2000 + + + - Added use of the `requestDenied' error code in section 7.1.4, + "Processing the agentx-Register-PDU". + + - Removed text in section 7, "Elements of Procedure" on parse errors + and protocol errors. + + - Added a new section, 7.1, "Processing AgentX Administrative + Messages" which defines common processing and how to use the + `parseError' and `processingError' instead of closing a session, + and how to handle context. + + - Removed the common processing text from the other administrative + processing Elements of Procedure sections, and added a reference + to section 7.1, "Processing AgentX Administrative Messages". The + affected sections are: + + - 7.1.2, "Processing the agentx-IndexAllocate-PDU" + - 7.1.3, "Processing the agentx-IndexDeallocate-PDU" + - 7.1.4, "Processing the agentx-Register-PDU" + - 7.1.5, "Processing the agentx-Unregister-PDU" + - 7.1.6, "Processing the agentx-AddAgentCaps-PDU" + - 7.1.7, "Processing the agentx-RemoveAgentCaps-PDU" + - 7.1.8, "Processing the agentx-Close-PDU" + - 7.1.10, "Processing the agentx-Notify-PDU" + - 7.1.11, "Processing the agentx-Ping-PDU" + + - Reworked the text in section 7.1.1, "Processing the + agentx-Open-PDU" to include new error codes, and, to eliminate + reference to an indicated context. + + - Modified the text in Section 7.1.10, "Processing the + agentx-Notify-PDU" to state that context checking is performed. + + - Substantially modified the text in section 7.1.4.1, "Handling + Duplicate and Overlapping Subtrees". + + - Removed the section on "Using the agentx-IndexAllocate-PDU" and + added section 7.1.4.2, "Registering Stuff". This change is + intended to provide a more concise and a more cohesive + description of how things are supposed to work. + + - Modified the test in section 7.1.5, "Processing the + agentx-Unregister-PDU" to require a match on u.range_subid and + on u.upper_bound when these fields were applicable in the + corresponding agentx-Register-PDU. + + + + + + +Daniele, et al. Standards Track [Page 88] + +RFC 2741 AgentX January 2000 + + + - Removed all references to "splitting", and all uses of the term + "OID range". The text now refers to regions or subtrees + directly, and relies on rule (1), "Honoring the Registry", in + section 7.2.1, "Dispatching AgentX PDUs". + + - Modified text in clause 4(c) of section 7.2.1, "Dispatching + AgentX PDUs", clarifying that the master agent can use its + implementation-specific default timeout value when the timeout + value registered by the subagent is impractical. + + - Added text in section 7.2.2, "Subagent Processing" describing + common processing. + + - Added an example to the text in section 7.2.5.3, "Processing of + Responses to agentx-GetNext-PDU and agentx-GetBulk-PDU", + and, removed the definition of "contains" from this section. + + - Modified text in step (1) of section 7.2.5.5, "Processing of + Responses to agentx-CommitSet-PDUs", eliminating directive for + master agent to ignore additional responses to + agentx-CommitSet-PDUs after the first error response. + + - Modified text in section 7.2.5.6, "Processing of Responses to + agentx-UndoSet-PDUs", cleaning up commit/undo elements of + procedure per feedback received on the AgentX email list. + + - Modified the text in section 8.1.2, "Operation" to explicitly + prohibit interleaved sends, and, added a caution about + exchanging AgentX messages via TCP. + + - Modified text to be more explicit that the OID in the + agentx-Allocate-PDU is an OBJECT-TYPE and does not contain any + instance sub-identifiers. + + - Replaced the term "subagent" with the term "session" in many + places throughout the text. + + - Modified the text relative to master agent processing of the + agentx-TestSet-PDU, agentx-CommitSet-PDU, and the + agentx-UndoSet-PDU to explicitly state that only "involved" + sessions receive an agentx-CommitSet-PDU, and possibly, an + agentx-UndoSet-PDU. + + - Modified the text to use the term "transaction", instead of + "packet" (and others), where appropriate. This helps + distinguish the overall transaction from a particular sequence + of packets or PDUs. + + + + +Daniele, et al. Standards Track [Page 89] + +RFC 2741 AgentX January 2000 + + + - Modified the text to explicitly state that a session is not + required to support concurrent sets. + + - Added section 13, "Notices". + + - Added text to section 1, Introduction, relative to BCP 14 key + words. + + - Modified text to section 9, Security Considerations, to include + use of BCP 14 key words. + + - Modified text to section 9, Security Considerations, to include + IPSEC as a suggested Transport Layer Security. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 90] + +RFC 2741 AgentX January 2000 + + +Full Copyright Statement + + Copyright (C) The Internet Society (2000). 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. + + + + + + + + + + + + + + + + + + + +Daniele, et al. Standards Track [Page 91] + |