diff options
Diffstat (limited to 'doc/rfc/rfc2257.txt')
-rw-r--r-- | doc/rfc/rfc2257.txt | 4483 |
1 files changed, 4483 insertions, 0 deletions
diff --git a/doc/rfc/rfc2257.txt b/doc/rfc/rfc2257.txt new file mode 100644 index 0000000..10bf14e --- /dev/null +++ b/doc/rfc/rfc2257.txt @@ -0,0 +1,4483 @@ + + + + + + +Network Working Group M. Daniele +Request for Comments: 2257 Digital Equipment Corporation +Category: Standards Track B. Wijnen + T.J. Watson Research Center, IBM Corp. + D. Francisco, Ed. + Cisco Systems, Inc. + January 1998 + + 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 (1998). All Rights Reserved. + +Table of Contents + + 1 Introduction......................................................4 + + 2 The SNMP Framework................................................4 + 2.1 A Note on Terminology.........................................4 + + 3 Extending the MIB.................................................5 + 3.1 Motivation for AgentX.........................................5 + + 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 + + 5 AgentX Encodings.................................................10 + 5.1 Object Identifier............................................11 + 5.2 SearchRange..................................................13 + 5.3 Octet String.................................................14 + 5.4 Value Representation.........................................14 + + 6 Protocol Definitions.............................................16 + 6.1 AgentX PDU Header............................................16 + + + +Daniele, et. al. Standards Track [Page 1] + +RFC 2257 AgentX January 1998 + + + 6.1.1 Context..................................................19 + 6.2 AgentX PDUs..................................................20 + 6.2.1 The agentx-Open-PDU......................................20 + 6.2.2 The agentx-Close-PDU.....................................21 + 6.2.3 The agentx-Register-PDU..................................22 + 6.2.4 The agentx-Unregister-PDU................................25 + 6.2.5 The agentx-Get-PDU.......................................27 + 6.2.6 The agentx-GetNext-PDU...................................29 + 6.2.7 The agentx-GetBulk-PDU...................................30 + 6.2.8 The agentx-TestSet-PDU...................................31 + 6.2.9 The agentx-CommitSet, -UndoSet, -CleanupSet + PDUs.....................................................33 + 6.2.10 The agentx-Notify-PDU...................................33 + 6.2.11 The agentx-Ping-PDU.....................................34 + 6.2.12 The agentx-IndexAllocate-PDU............................35 + 6.2.13 The agentx-IndexDeallocate-PDU..........................36 + 6.2.14 The agentx-AddAgentCaps-PDU.............................37 + 6.2.15 The agentx-RemoveAgentCaps-PDU..........................38 + 6.2.16 The agentx-Response-PDU.................................39 + + 7 Elements of Procedure............................................41 + 7.1 Processing AgentX Administrative Messages....................42 + 7.1.1 Processing the agentx-Open-PDU...........................42 + 7.1.2 Processing the agentx-IndexAllocate-PDU..................43 + 7.1.3 Using the agentx-IndexAllocate-PDU.......................45 + 7.1.4 Processing the agentx-IndexDeallocate-PDU................47 + 7.1.5 Processing the agentx-Register-PDU.......................48 + 7.1.5.1 Handling Duplicate OID Ranges........................50 + 7.1.6 Processing the agentx-Unregister-PDU.....................51 + 7.1.7 Processing the agentx-AddAgentCaps-PDU...................51 + 7.1.8 Processing the agentx-RemoveAgentCaps-PDU................52 + 7.1.9 Processing the agentx-Close-PDU..........................52 + 7.1.10 Detecting Connection Loss...............................53 + 7.1.11 Processing the agentx-Notify-PDU........................53 + 7.1.12 Processing the agentx-Ping-PDU..........................54 + 7.2 Processing Received SNMP Protocol Messages...................54 + 7.2.1 Dispatching AgentX PDUs..................................55 + 7.2.1.1 agentx-Get-PDU.......................................57 + 7.2.1.2 agentx-GetNext-PDU...................................58 + 7.2.1.3 agentx-GetBulk-PDU...................................59 + 7.2.1.4 agentx-TestSet-PDU...................................60 + 7.2.1.5 Dispatch.............................................60 + 7.2.2 Subagent Processing of agentx-Get, GetNext, + GetBulk-PDUs.............................................61 + 7.2.2.1 Subagent Processing of the agentx-Get-PDU............61 + 7.2.2.2 Subagent Processing of the + agentx-GetNext-PDU...................................62 + + + + +Daniele, et. al. Standards Track [Page 2] + +RFC 2257 AgentX January 1998 + + + 7.2.2.3 Subagent Processing of the + agentx-GetBulk-PDU...................................62 + 7.2.3 Subagent Processing of agentx-TestSet, + -CommitSet, -UndoSet, -CleanupSet-PDUs...................63 + 7.2.3.1 Subagent Processing of the + agentx-TestSet-PDU...................................64 + 7.2.3.2 Subagent Processing of the + agentx-CommitSet-PDU.................................65 + 7.2.3.3 Subagent Processing of the + agentx-UndoSet-PDU...................................65 + 7.2.3.4 Subagent Processing of the + agentx-CleanupSet-PDU................................65 + 7.2.4 Master Agent Processing of AgentX Responses..............66 + 7.2.4.1 Common Processing of All AgentX Response + PDUs.................................................66 + 7.2.4.2 Processing of Responses to agentx-Get-PDUs...........66 + 7.2.4.3 Processing of Responses to + agentx-GetNext-PDU and agentx-GetBulk-PDU............67 + 7.2.4.4 Processing of Responses to + agentx-TestSet-PDUs..................................68 + 7.2.4.5 Processing of Responses to + agentx-CommitSet-PDUs................................68 + 7.2.4.6 Processing of Responses to + agentx-UndoSet-PDUs..................................69 + 7.2.5 Sending the SNMP Response-PDU............................69 + 7.2.6 MIB Views................................................69 + 7.3 State Transitions............................................70 + 7.3.1 Set Transaction States...................................70 + 7.3.2 Transport Connection States..............................71 + 7.3.3 Session States...........................................73 + + 8 Transport Mappings...............................................74 + 8.1 AgentX over TCP..............................................74 + 8.1.1 Well-known Values........................................74 + 8.1.2 Operation................................................74 + 8.2 AgentX over UNIX-domain Sockets..............................75 + 8.2.1 Well-known Values........................................75 + 8.2.2 Operation................................................75 + + 9 Security Considerations..........................................76 + + 10 Acknowledgements................................................77 + + 11 Authors' and Editor's Addresses.................................77 + + 12 References......................................................78 + + 13 Full Copyright Statement........................................80 + + + +Daniele, et. al. Standards Track [Page 3] + +RFC 2257 AgentX January 1998 + + +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. + +2. The SNMP Framework + + A management system contains: several (potentially many) nodes, each + with a processing entity, termed an agent, which has access to + management instrumentation; at least one management station; and, a + management protocol, used to convey management information between + the agents and management stations. Operations of the protocol are + carried out under an administrative framework which defines + authentication, authorization, access control, and privacy policies. + + Management stations execute management applications which monitor and + control managed elements. Managed elements are devices such as + hosts, routers, terminal servers, etc., which are monitored and + controlled via access to their management information. + + Management information is viewed as a collection of managed objects, + residing in a virtual information store, termed the Management + Information Base (MIB). Collections of related objects are defined + in MIB modules. These modules are written using a subset of OSI's + Abstract Syntax Notation One (ASN.1) [1], termed the Structure of + Management Information (SMI) (see RFC 1902 [2]). + +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 SMI (RFC + 1902, [2]) or the textual conventions based on the SMI (RFC 1903 + [3]). 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 + + + + + +Daniele, et. al. Standards Track [Page 4] + +RFC 2257 AgentX January 1998 + + + instance. The OBJECT IDENTIFIER of the corresponding object-type is + called the OBJECT IDENTIFIER prefix of the variable. For the purpose + of exposition, the original Internet-standard + + Network Management Framework, as described in RFCs 1155 (STD 16), + 1157 (STD 15), and 1212 (STD 16), is termed the SNMP version 1 + framework (SNMPv1). The current framework, as described in RFCs + 1902-1908, is termed the SNMP version 2 framework (SNMPv2). + +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. + + Neither the SNMP version 1 nor version 2 framework describes how the + set of managed objects supported by a particular agent may be changed + dynamically. + +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. + + + + + + +Daniele, et. al. Standards Track [Page 5] + +RFC 2257 AgentX January 1998 + + + 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 + + - a single processing entity called the master agent, which sends + and receives SNMP protocol messages in an agent role (as + specified by the SNMP version 1 and version 2 framework + documents) but typically has little or no direct access to + management information. + + - 0 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. + + + + + +Daniele, et. al. Standards Track [Page 6] + +RFC 2257 AgentX January 1998 + + + 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 [5], and for any MIB objects relevant to any administrative + framework it supports. + + - 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 an AgentX session 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. + + + + + +Daniele, et. al. Standards Track [Page 7] + +RFC 2257 AgentX January 1998 + + +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. + + 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 "complex tables". Complex tables + here are defined as tables permitting row creation, or whose MIB + also defines an object that counts entries in the table. Examples + include the MIB-2 ifTable (due to ifNumber), and the RMON + historyControlTable. + + + + + + + +Daniele, et. al. Standards Track [Page 8] + +RFC 2257 AgentX January 1998 + + + 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). + + 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). Again, this is + an implementation issue. + + Scenarios in this category 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 + 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. + + + + + + + +Daniele, et. al. Standards Track [Page 9] + +RFC 2257 AgentX January 1998 + + + 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 + typically required for independently developed subagents to + coexist. The set of supported extensible agent configurations is + described above, in Section 4.2. + + 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 [1]), but are transmitted as + + + +Daniele, et. al. Standards Track [Page 10] + +RFC 2257 AgentX January 1998 + + + 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: + + 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. + + + + +Daniele, et. al. Standards Track [Page 11] + +RFC 2257 AgentX January 1998 + + + 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. + + A null Object Identifier consists of the 4-byte header with all bytes + set to 0. + + 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + +Daniele, et. al. Standards Track [Page 12] + +RFC 2257 AgentX January 1998 + + +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 indicates the non-inclusive end of the + range, and its "include" field is always 0. + + 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. + + + + +Daniele, et. al. Standards Track [Page 13] + +RFC 2257 AgentX January 1998 + + +5.3. Octet String + + An octet string is represented by a contiguous series of bytes, + beginning with a 4-byte integer 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. + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + + + +Daniele, et. al. Standards Track [Page 14] + +RFC 2257 AgentX January 1998 + + + (v.data) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + VarBind fields: + + v.type + + Indicates the variable binding's syntax, and must be one of + the following values: + + 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. If the NETWORK_BYTE_ORDER bit is set + in h.flags, the bytes are ordered most significant to least + significant, otherwise they are ordered least significant + to most significant. + + - Counter64 is encoded as 8 contiguous bytes. If the + NETWORK_BYTE_ORDER bit is set in h.flags, the bytes are + ordered most significant to least significant, otherwise + they are ordered least significant to most significant. + + + + +Daniele, et. al. Standards Track [Page 15] + +RFC 2257 AgentX January 1998 + + + - 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. + + 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. + + 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). + + + +Daniele, et. al. Standards Track [Page 16] + +RFC 2257 AgentX January 1998 + + + 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), + 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) + + 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. + + + + +Daniele, et. al. Standards Track [Page 17] + +RFC 2257 AgentX January 1998 + + + 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. + + 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 sessionID that it will pass back in the corresponding + agentx-Response-PDU. From that point on, that same sessionID + 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 sessionID, 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 [4]), nor + can it be, since a master agent might receive SNMP requests + with the same request-ids 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. + + + + + + + +Daniele, et. al. Standards Track [Page 18] + +RFC 2257 AgentX January 1998 + + + 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 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 v2c frameworks, 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. + Future versions of the SNMP will likely formalize this notion of + "context". + + 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. + + 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. + + + + + + +Daniele, et. al. Standards Track [Page 19] + +RFC 2257 AgentX January 1998 + + +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. + + (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: + + + +Daniele, et. al. Standards Track [Page 20] + +RFC 2257 AgentX January 1998 + + + o.timeout + + The length of time, in seconds, that a master agent should + allow to elapse after dispatching a message to a subagent + before it regards the subagent as not responding. This is a + subagent-wide default value that may be overridden by values + associated with specific registered MIB regions. The default + value of 0 indicates that no subagent-wide value is requested. + + 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: + + + + + + + + +Daniele, et. al. Standards Track [Page 21] + +RFC 2257 AgentX January 1998 + + + 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: + + 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 22] + +RFC 2257 AgentX January 1998 + + + (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.region) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 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 to a subagent + before it regards the subagent as not responding. r.timeout + applies only to messages that concern MIB objects within + r.region. It overrides both the subagent-wide 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 23] + +RFC 2257 AgentX January 1998 + + + r.priority + + A value between 1 and 255, used to achieve a desired + configuration when different subagents register identical or + overlapping regions. Subagents with no particular knowledge of + priority should register with the default value of 255 (lowest + priority). + + In the master agent's dispatching algorithm, smaller values of + r.priority take precedence over larger values, as described in + section 7.1.5.1. + + r.region + + An Object Identifier that, in conjunction with r.range_subid, + indicates a region of the MIB that a subagent wishes to + support. It may be a fully-qualified instance name, a partial + instance name, a MIB table, an entire MIB, or ranges of any of + these. + + 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.region 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.region's sub- + identifiers. If this value is 0, no range is specified. + Otherwise the "r.range_subid"-th sub-identifier in r.region is + a range lower bound, and the range upper bound sub-identifier + (r.upper_bound) immediately follows r.region. + + This permits registering a conceptual row with a single PDU. + For example, the following PDU would register row 7 of the RFC + 1573 ifTable (1.3.6.1.2.1.2.2.1.1-22.7): + + + + + + + +Daniele, et. al. Standards Track [Page 24] + +RFC 2257 AgentX January 1998 + + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (3) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | r.timeout | r.priority | 5 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (r.region) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 6 | 2 | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 2 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 7 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (r.upper_bound) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 22 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +6.2.4. The agentx-Unregister-PDU + + The agentx-Unregister-PDU is sent by a subagent to remove a + previously registered MIB region from the master agent's OID space. + + + + + + + + +Daniele, et. al. Standards Track [Page 25] + +RFC 2257 AgentX January 1998 + + + (AgentX header) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.version (1) | h.type (4) | h.flags | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.sessionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.transactionID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.packetID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | h.payload_length | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (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.region) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 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: + + + + + + +Daniele, et. al. Standards Track [Page 26] + +RFC 2257 AgentX January 1998 + + + u.context + + An optional non-default context. + + u.priority + + The priority at which this region was originally registered. + + u.region + + Indicates a previously-registered region of the MIB that a + subagent no longer wishes to support. + +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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + +Daniele, et. al. Standards Track [Page 27] + +RFC 2257 AgentX January 1998 + + + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (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 + subagent. + + + + + + + + + + + + +Daniele, et. al. Standards Track [Page 28] + +RFC 2257 AgentX January 1998 + + +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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + +Daniele, et. al. Standards Track [Page 29] + +RFC 2257 AgentX January 1998 + + + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + + (start n) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | include | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + (end n) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +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 30] + +RFC 2257 AgentX January 1998 + + + (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) as in agentx-GetNext-PDU above + ... + +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) + + + + + + +Daniele, et. al. Standards Track [Page 31] + +RFC 2257 AgentX January 1998 + + + (VarBind 1) + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | v.type | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | n_subid | prefix | 0 | <reserved> | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #1 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | sub-identifier #n_subid | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | data | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + + + (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. + + + + + + +Daniele, et. al. Standards Track [Page 32] + +RFC 2257 AgentX January 1998 + + + 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. + +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: + + + + + +Daniele, et. al. Standards Track [Page 33] + +RFC 2257 AgentX January 1998 + + + 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. + + - 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: + + + + +Daniele, et. al. Standards Track [Page 34] + +RFC 2257 AgentX January 1998 + + + 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.3 (Using the agentx-IndexAllocate-PDU) for suggested usage. + + (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. + + + + + + +Daniele, et. al. Standards Track [Page 35] + +RFC 2257 AgentX January 1998 + + + 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. + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | 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. + + + + + +Daniele, et. al. Standards Track [Page 36] + +RFC 2257 AgentX January 1998 + + +6.2.14. The agentx-AddAgentCaps-PDU + + An agentx-AddAgentCaps-PDU is generated by a subagent to inform the + master agent of its agent capabilities. + + (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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + +Daniele, et. al. Standards Track [Page 37] + +RFC 2257 AgentX January 1998 + + + ... + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Octet L - 1 | Octet L | Optional Padding | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + 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 RFC 1904 [10].) + + 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. + + (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 38] + +RFC 2257 AgentX January 1998 + + + (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. + +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 | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + + + + +Daniele, et. al. Standards Track [Page 39] + +RFC 2257 AgentX January 1998 + + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | res.sysUpTime | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | res.error | res.index | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + ... + + An agentx-Response-PDU contains the following fields: + + h.sessionID + + If this is a response to a 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. + + res.sysUpTime + + This field contains the current value of sysUpTime for the + indicated context. It is relevant only in agentx response PDUs + sent from the master agent to a subagent in response to the + following agentx PDUs: + + agentx-Open-PDU (1), + agentx-Close-PDU (2), + agentx-Register-PDU (3), + agentx-Unregister-PDU (4), + agentx-Ping-PDU (13), + agentx-IndexAllocate-PDU (14), + agentx-IndexDeallocate-PDU (15), + agentx-AddAgentCaps-PDU (16), + agentx-RemoveAgentCaps-PDU (17) + + + +Daniele, et. al. Standards Track [Page 40] + +RFC 2257 AgentX January 1998 + + + 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 (including `noError'). Values are + limited to those defined for errors in the SNMPv2 SMI (RFC 1905 + [4]), and the following AgentX-specific values: + + openFailed (256), + notOpen (257), + indexWrongType (258), + indexAlreadyAllocated (259), + indexNoneAvailable (260), + indexNotAllocated (261), + unsupportedContext (262), + duplicateRegistration (263), + unknownRegistration (264), + unknownAgentCaps (265) + + 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.) + + A VarBindList may follow these latter two fields, 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. + + Specific error conditions and associated actions are described in + various places. Other error conditions not specifically mentioned + fall into one of two categories, "parse" errors and "protocol" + errors. + + A parse error occurs when a receiving entity cannot decode the PDU. + For instance, a VarBind contains an unknown type, or a PDU contains a + malformed Object Identifier. + + + + +Daniele, et. al. Standards Track [Page 41] + +RFC 2257 AgentX January 1998 + + + A protocol error occurs when a receiving entity can parse a PDU, but + the resulting data is unspecified. For instance, an agentx- + Response-PDU is successfully parsed, but contains an unknown + res.error value. + + An implementation may choose either to ignore such messages, or to + close the session on which they are received, using the appropriate + reason code as defined in the agentx-Close-PDU. + + 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., connection + 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. + +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 and res.sysUpTime is set to + the value of sysUpTime.0 for the indicated context. + + 2) If the master agent is unable to open an AgentX session for + any reason, it may refuse the session establishment request, + sending in reply the agentx-Response-PDU, with res.error field set + to `openFailed'. + + 3) 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. + + + + + +Daniele, et. al. Standards Track [Page 42] + +RFC 2257 AgentX January 1998 + + + 4) The master agent retains session-specific information + from the PDU for this subagent: + + - 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 subagent. + + - The o.id and o.descr fields are used for informational + purposes. (Such purposes are implementation-specific for now, + and may be used in a possible future standard AgentX MIB.) + + 5) The agentx-Response-PDU is sent with the res.error field + set to `noError'. + + At this point, 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 + processes it as follows: + + 1) An agentx-Response-PDU is created and res.sysUpTime is set to + the value of sysUpTime.0 for the default context. + + 2) If h.sessionID does not correspond to a currently established + session with this subagent, the agentx-Response-PDU is sent in + reply with res.error set to `notOpen'. + + + + + + + +Daniele, et. al. Standards Track [Page 43] + +RFC 2257 AgentX January 1998 + + + 3) If the NON_DEFAULT_CONTEXT bit is set, and the master agent + supports only a default context, the agentx-Response-PDU is + returned with res.error set to `unsupportedContext', and the + requested allocation fails. Otherwise: The value of res.sysUpTime + is set to the value of sysUpTime.0 for the indicated context. + + 4) 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 name of the index for which a value is to be + allocated. + + - v.type is the syntax of the index object. + + - 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'. + + + +Daniele, et. al. Standards Track [Page 44] + +RFC 2257 AgentX January 1998 + + + 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'. + + 5) If all VarBinds are processed successfully, the + agentx-Response-PDU is sent in reply with res.error set to + `noError'. 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. + +7.1.3. Using the agentx-IndexAllocate-PDU + + 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. + + Each subagent sharing a table should first request allocation of + index values, then use those index values to qualify MIB regions in + its subsequent registrations. + + 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. + + 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 specific index value - an index value that is not currently + allocated - 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 1573 [11]), + snmpFddiSMTIndex in the FDDI MIB (RFC 1285 [12]), or + sysApplInstallPkgIndex in the System Application MIB [13]). The need + for subagents to share tables using such indexes is the main + motivation for index allocation in AgentX. + + + + + + + +Daniele, et. al. Standards Track [Page 45] + +RFC 2257 AgentX January 1998 + + + Example 1: + + A subagent implements an interface, and wishes to register a + single row of the RFC 1573 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. + + But the registration may fail. Index allocation and MIB region + registration are not coupled in the master agent. Some other + subagent may have already registered ifTable row 7 without first + having requested allocation of the index. 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. If subagents 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. + + If the registration failed, the subagent should 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 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. + + 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. + + + + +Daniele, et. al. Standards Track [Page 46] + +RFC 2257 AgentX January 1998 + + + 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. + +7.1.4 Processing the agentx-IndexDeallocate-PDU + + When the master agent receives an agentx-IndexDeallocate-PDU, it + processes it as follows: + + 1) An agentx-Response-PDU is created and res.sysUpTime is set to + the value of sysUpTime.0 for the default context. + + 2) If h.sessionID does not correspond to a currently + established session with this subagent, the agentx-Response-PDU is + sent in reply with res.error set to `notOpen'. + + 3) If the NON_DEFAULT_CONTEXT bit is set, and the master agent + supports only a default context, the agentx-Response-PDU is + returned with res.error set to `unsupportedContext', and the + requested deallocation fails. Otherwise: The value of + res.sysUpTime is set to the value of sysUpTime.0 for the indicated + context. + + 4) 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 subagent, the VarBind fails and res.error is + set to `indexNotAllocated'. + + + + +Daniele, et. al. Standards Track [Page 47] + +RFC 2257 AgentX January 1998 + + + 5) If all VarBinds are processed successfully, res.error is + set to `noError' 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 + for the particular index. + +7.1.5. Processing the agentx-Register-PDU + + When the master agent receives an agentx-Register-PDU, it processes + it as follows: + + 1) An agentx-Response-PDU is created and res.sysUpTime is set to + the value of sysUpTime.0 for the default context. + + 2) If h.sessionID does not correspond to a currently + established session with this subagent, the agentx-Response-PDU is + sent in reply with res.error set to `notOpen'. + + 3) If the NON_DEFAULT_CONTEXT bit is set, and the master agent + supports only a default context, the agentx-Response-PDU is + returned with res.error set to `unsupportedContext', and the + requested registration fails. Otherwise: The value of + res.sysUpTime is set to the value of sysUpTime.0 for the indicated + 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. + + 4) Characterize the request. + + If r.region (or any of its set of Object Identifiers, if r.range + is non-zero) is exactly the same as any currently registered value + of r.region (or any of its set of Object Identifiers), this + registration is termed a duplicate region. + + If r.region (or any of its set of Object Identifiers, if r.range + is non-zero) is a subtree of, or contains, any currently + registered value of r.region (or any of its set of Object + Identifiers), this registration is termed an overlapping region. + + If the NON_DEFAULT_CONTEXT bit is set, this region is to be + logically registered within the context indicated by r.context. + + + + +Daniele, et. al. Standards Track [Page 48] + +RFC 2257 AgentX January 1998 + + + Otherwise this region is to be logically registered within the + default context. + + A registration that would result in a duplicate region with the + same priority and within the same context as that of a current + registration is termed a duplicate registration. + + 5) Otherwise, if this is a duplicate registration, the + agentx-Response-PDU is returned with res.error set to + `duplicateRegistration', and the requested registration fails. + + 6) Otherwise, the agentx-Response-PDU is returned with res.error + set to `noError'. + + The master agent adds this region to its registered OID space for + the indicated context, to be considered during the dispatching + phase for subsequently received SNMP protocol messages. + + Note: The following algorithm describes maintaining a set of OID + ranges derived from "splitting" registered regions. The algorithm + for operational dispatching is also stated in terms of these OID + ranges. + + These OID ranges are a useful explanatory device, but are not + required for a correct implementation. + + - If r.region (R1) is a subtree of a currently registered + region (R2), split R2 into 3 new regions (R2a, R2b, and R2c) + such that R2b is an exact duplicate of R1. Now remove R2 and + add R1, R2a, R2b, and R2c to the master agent's + lexicographically ordered set of ranges (the registered OID + space). Note: Though newly-added ranges R1 and R2b are + identical in terms of the MIB objects they contain, they are + registered by different subagents, possibly at different + priorities. + + For instance, if subagent S2 registered "ip" (R2 is + 1.3.6.1.2.1.4) and subagent S1 subsequently registered + "ipNetToMediaTable" (R1 is 1.3.6.1.2.1.4.22), the resulting set + of registered regions would be: + + 1.3.6.1.2.1.4 up to but not including 1.3.6.1.2.1.4.22 (by S2) + 1.3.6.1.2.1.4.22 up to but not including 1.3.6.1.2.1.4.23 (by S2) + 1.3.6.1.2.1.4.22 up to but not including 1.3.6.1.2.1.4.23 (by S1) + 1.3.6.1.2.1.4.23 up to but not including 1.3.6.1.2.1.5 (by S2) + + + + + + +Daniele, et. al. Standards Track [Page 49] + +RFC 2257 AgentX January 1998 + + + - If r.region (R1) overlaps one or more currently registered + regions, then for each overlapped region (R2) split R1 into 3 + new ranges (R1a, R1b, R1c) such that R1b is an exact + duplicate of R2. Add R1b and R2 into the lexicographically + ordered set of regions. Apply (5) above iteratively to R1a and + R1c (since they may overlap, or be subtrees of, other regions). + + For instance, given the currently registered regions in the + example above, if subagent S3 now registers mib-2 (R1 is + 1.3.6.1.2.1) the resulting set of regions would be: + + 1.3.6.1.2.1 up to but not including 1.3.6.1.2.1.4 (by S3) + 1.3.6.1.2.1.4 up to but not including 1.3.6.1.2.1.4.22 (by S2) + 1.3.6.1.2.1.4 up to but not including 1.3.6.1.2.1.4.22 (by S3) + 1.3.6.1.2.1.4.22 up to but not including 1.3.6.1.2.1.4.23 (by S2) + 1.3.6.1.2.1.4.22 up to but not including 1.3.6.1.2.1.4.23 (by S1) + 1.3.6.1.2.1.4.22 up to but not including 1.3.6.1.2.1.4.23 (by S3) + 1.3.6.1.2.1.4.23 up to but not including 1.3.6.1.2.1.5 (by S2) + 1.3.6.1.2.1.4.23 up to but not including 1.3.6.1.2.1.5 (by S3) + 1.3.6.1.2.1.5 up to but not including 1.3.6.1.2.2 (by S3) + + Note that at registration time a region may be split into multiple + OID ranges due to pre-existing registrations, or as a result of any + subsequent registration. This region splitting is transparent to + subagents. Hence the master agent must always be able to associate + any OID range with the information contained in its original agentx- + Register-PDU. + +7.1.5.1. Handling Duplicate OID Ranges + + As a result of this registration algorithm there are likely to be + duplicate OID ranges (regions of identical MIB objects registered to + different subagents) in the master agent's registered OID space. + Whenever the master agent's dispatching algorithm (see 7.2.1, + Dispatching AgentX PDUs) results in a duplicate OID range, the + master agent selects one to use, termed the 'authoritative region', + as follows: + + 1) Choose the one whose original agentx-Register-PDU + r.region contained the most subids, i.e., the most specific + r.region. 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 regions. Choose the + one whose original agentx-Register-PDU specified the smaller + value of r.priority. + + + + +Daniele, et. al. Standards Track [Page 50] + +RFC 2257 AgentX January 1998 + + +7.1.6. Processing the agentx-Unregister-PDU + + 1) An agentx-Response-PDU is created and res.sysUpTime is set to + the value of sysUpTime.0 for the default context. + + 2) If h.sessionID does not correspond to a currently + established session with this subagent, the agentx-Response-PDU is + sent in reply with res.error set to `notOpen'. + + 3) If the NON_DEFAULT_CONTEXT bit is set, and the master agent + supports only a default context, the agentx-Response-PDU is + returned with res.error set to `unsupportedContext', and the + requested unregistration fails. Otherwise: The value of + res.sysUpTime is set to the value of sysUpTime.0 for the indicated + context. + + 4) If u.region, u.priority, 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'. + + 5) Otherwise, the agentx-Response-PDU is sent in reply with res.error + set to `noError', and the previous registration is removed: + + - The master agent removes u.region from its registered OID space + within the indicated context. If the original region had been + split, all such related regions are removed. + + For instance, given the example registry above, if subagent S2 + unregisters "ip", the resulting registry would be: + + 1.3.6.1.2.1 up to but not including 1.3.6.1.2.1.4 (by S3) + 1.3.6.1.2.1.4 up to but not including 1.3.6.1.2.1.4.22 (by S3) + 1.3.6.1.2.1.4.22 up to but not including 1.3.6.1.2.1.4.23 (by S1) + 1.3.6.1.2.1.4.22 up to but not including 1.3.6.1.2.1.4.23 (by S3) + 1.3.6.1.2.1.4.23 up to but not including 1.3.6.1.2.1.5 (by S3) + 1.3.6.1.2.1.5 up to but not including 1.3.6.1.2.2 (by S3) + +7.1.7. Processing the agentx-AddAgentCaps-PDU + + When the master agent receives an agentx-AddAgentCaps-PDU, it + processes it as follows: + + 1) An agentx-Response-PDU is created and res.sysUpTime is set to + the value of sysUpTime.0 for the default context. + + + + + + +Daniele, et. al. Standards Track [Page 51] + +RFC 2257 AgentX January 1998 + + + 2) If h.sessionID does not correspond to a currently + established session with this subagent, the agentx-Response-PDU is + sent in reply with res.error set to `notOpen'. + + 3) If the NON_DEFAULT_CONTEXT bit is set, and the master agent + supports only a default context, the agentx-Response-PDU is + returned with res.error set to `unsupportedContext', and the + requested operation fails. Otherwise: The value of res.sysUpTime + is set to the value of sysUpTime.0 for the indicated context. + + 4) Otherwise, the master agent adds the subagent's capabilities + information to the sysORTable for the indicated context. An + agentx-Response-PDU is sent in reply with res.error set to + `noError'. + +7.1.8. Processing the agentx-RemoveAgentCaps-PDU + + 1) An agentx-Response-PDU is created and res.sysUpTime is set to + the value of sysUpTime.0 for the default context. + + 2) If h.sessionID does not correspond to a currently + established session with this subagent, the agentx-Response-PDU is + sent in reply with res.error set to `notOpen'. + + 3) If the NON_DEFAULT_CONTEXT bit is set, and the master agent + supports only a default context, the agentx-Response-PDU is + returned with res.error set to `unsupportedContext', and the + requested operation fails. Otherwise: The value of res.sysUpTime + is set to the value of sysUpTime.0 for the indicated context. + + 4) 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'. + + 5) Otherwise the master agent deletes the corresponding sysORTable + entry and sends in reply the agentx-Response-PDU, with res.error + set to `noError'. + +7.1.9. Processing the agentx-Close-PDU + + When the master agent receives an agentx-Close-PDU, it processes it + as follows: + + 1) An agentx-Response-PDU is created and res.sysUpTime is set to + the value of sysUpTime.0 for the default context. + + + + + +Daniele, et. al. Standards Track [Page 52] + +RFC 2257 AgentX January 1998 + + + 2) If h.sessionID does not correspond to a currently + established session with this subagent, the agentx-Response-PDU is + sent in reply with res.error set to `notOpen'. + + 3) Otherwise, the master agent closes the AgentX session + as described below. No agentx-Response-PDU is sent. + + - All MIB regions that have been registered during this session + are unregistered, as described in 7.1.6. + + - All index values allocated during this session are freed, as + described in section 7.1.4. + + - All sysORID values that were registered during this session + are removed, as described in section 7.1.8. + + The master agent does not maintain state for closed sessions. If a + subagent wishes to re-establish a session after receiving an agentx- + Close-PDU, it needs to re-register MIB regions, agent capabilities, + etc. + +7.1.10. 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 7.1.9, step 3). + +7.1.11. 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 [8]. + + The master agent processes the agentx-Notify-PDU as follows: + + 1) If h.sessionID does not correspond to a currently + established session with this subagent, an agentx-Response-PDU + is sent in reply with res.error set to `notOpen', and + res.sysUpTime set to the value of sysUpTime.0 for the indicated + context. + + 2) The VarBindList is parsed. If it does not contain a value for + sysUpTime.0, the master agent supplies the current value of + sysUpTime.0 for the indicated context. If the next VarBind + (either the first or second VarBind; see section 6.2.10.1) is + not snmpTrapOID.0, the master agent ceases further processing + of the notification. + + + + +Daniele, et. al. Standards Track [Page 53] + +RFC 2257 AgentX January 1998 + + + 3) 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 [9]. + + Except in the case of a `notOpen' error as described in (1) + above, no agentx-Response-PDU is sent to the subagent when the + master agent finishes processing the notification. + +7.1.12. Processing the agentx-Ping-PDU + + When the master agent receives an agentx-Ping-PDU, it processes it as + follows: + + 1) An agentx-Response-PDU is created and res.sysUpTime is set to + the value of sysUpTime.0 for the default context. + + 2) If h.sessionID does not correspond to a currently + established session with this subagent, the agentx-Response-PDU is + sent in reply with res.error set to `notOpen'. + + 3) If the NON_DEFAULT_CONTEXT bit is set, and the master agent + supports only a default context, the agentx-Response-PDU is + returned with res.error set to `unsupportedContext'. Otherwise: + The value of res.sysUpTime is set to the value of sysUpTime.0 for + the indicated context. + + 4) The agentx-Response-PDU is sent, with res.error set to + `noError'. + + 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 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 PDUs, the master agent applies + the Elements of Procedure defined in section 4.1 of RFC 1157 [6] that + apply to receiving entities. (For other versions of SNMP, the master + agent applies the access control policy defined in the Elements of + Procedure for those versions.) + + + + +Daniele, et. al. Standards Track [Page 54] + +RFC 2257 AgentX January 1998 + + + In the SNMPv1 or v2c frameworks, 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. + + 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. + + Note: In the following procedures, an object identifier is said to be + "contained" within an OID range when both of the following are true: + + - The object identifier does not lexicographically precede + the range. + + - The object identifier lexicographically precedes the end + of the range. + + General Rules of Procedure + + While processing a particular SNMP request, the master agent may send + one or more AgentX PDUs to one or more subagents. The following + rules of procedure apply in general to the AgentX master agent. PDU- + specific rules are listed in the applicable sections. + + 1) Honoring the registry + + Because AgentX supports overlapping registrations, 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.5.1). + + + + + + + +Daniele, et. al. Standards Track [Page 55] + +RFC 2257 AgentX January 1998 + + + 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 OID + range that was registered by a subagent other than the target + subagent. 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. + + 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 Test/Set transaction. + + + + + +Daniele, et. al. Standards Track [Page 56] + +RFC 2257 AgentX January 1998 + + + c) When processing an SNMP Get, GetNext, or GetBulk request, + the master agent may send a single AgentX PDU to the + subagent 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, the master agent's 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. + +7.2.1.1. agentx-Get-PDU + + Each variable binding in the SNMP request PDU is processed as + follows: + + (1) Identify the target OID range. + + Within a lexicographically ordered set of OID ranges, valid for + the indicated context, locate the authoritative region that + contains the binding's name. + + + + + +Daniele, et. al. Standards Track [Page 57] + +RFC 2257 AgentX January 1998 + + + (2) If no such OID range 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 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 OID range. + + Within a lexicographically ordered set of OID ranges, valid for + the indicated context, locate + + a) the authoritative OID range that contains the variable + binding's name and is not a fully qualified instance, or + + b) the authoritative OID range that is the first + lexicographical successor to the variable binding's name. + + (2) If no such OID range 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: + + + + + +Daniele, et. al. Standards Track [Page 58] + +RFC 2257 AgentX January 1998 + + + - Create an agentx-GetNext-PDU for the session, with + the header fields initialized as described above (see 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 OID is encoded into the starting + OID, and its "include" field is set to 1. + +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 [4]. Please + refer to it for details on the format of the SNMP GetBulkRequest-PDU + itself.) + + Each variable binding in the request PDU is processed as follows: + + (1) Identify the authoritative target OID range and target session, + exactly as described for the agentx-GetNext-PDU (see 7.2.1.2). + + (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 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. + + + +Daniele, et. al. Standards Track [Page 59] + +RFC 2257 AgentX January 1998 + + +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 OID range. + + 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 OID range exists, this variable binding fails with an + error of `notWritable'. Processing is complete for this request. + + (3) Identify the single subagent responsible for this OID range, + termed the target subagent, and the applicable session, 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-TestSet-PDU for the session, with the + header fields initialized as described above (see 6.1 AgentX + PDU Header). + + (5) Add a VarBind to the end of the target session's PDU + for this variable binding, as described in section 5.4. + + 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 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). + + + + + + + +Daniele, et. al. Standards Track [Page 60] + +RFC 2257 AgentX January 1998 + + +7.2.2. 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. + + The agentx-Response-PDU header fields are identical to the received + request PDU except that, at the start of processing, the subagent + initializes h.type to Response, res.error to `noError', res.index to + 0, and the VarBindList to null. + + 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.2.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. + + (4) Otherwise, the VarBind is set to `noSuchInstance' + in the manner described in section 5.4, Value Representation. + + + + + + + +Daniele, et. al. Standards Track [Page 61] + +RFC 2257 AgentX January 1998 + + +7.2.2.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, for which the + following are all true: + + - 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 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, 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.2.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 + 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: + + + +Daniele, et. al. Standards Track [Page 62] + +RFC 2257 AgentX January 1998 + + + 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.3. 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 each PDU. + + 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, to inform the master agent of the state of the + operation. + + + + +Daniele, et. al. Standards Track [Page 63] + +RFC 2257 AgentX January 1998 + + + The agentx-Response-PDU header fields are identical to the received + request PDU except that, at the start of processing, the subagent + initializes h.type to Response, res.error to `noError', and res.index + to 0. + + These Response-PDUs do not contain a VarBindList. + +7.2.3.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 [4]. 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 + SMI) values: + + 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. + + 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. + + + + + +Daniele, et. al. Standards Track [Page 64] + +RFC 2257 AgentX January 1998 + + +7.2.3.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 [4]) 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 SMI) values: + + noError (0), + commitFailed (14) + + If this value is `commitFailed', the res.index field must be set to + the index of the VarBind for which the operation failed. Otherwise + res.index is set to 0. + +7.2.3.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 [4]. + + After carrying out the undo process, the subagent sends in reply an + agentx-Response-PDU whose res.index field is set to 0, and whose + res.error field is set to one of the following (SNMPv2 SMI) values: + + noError (0), + undoFailed (15) + + If this value is `undoFailed', the res.index field must be set to the + index of the VarBind 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.3.4. + +7.2.3.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. + + + + + + +Daniele, et. al. Standards Track [Page 65] + +RFC 2257 AgentX January 1998 + + +7.2.4. 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.4.1. Common Processing of All AgentX Response PDUs + + 1) If a subagent does not respond 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 subagent that times out on three consecutive requests is + considered unable to respond, and the master agent must close + the AgentX session as described in 7.1.9, 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.4.2. Processing of Responses to agentx-Get-PDUs + + After common processing of the subagent's response to an agentx-Get- + PDU (see 7.2.4.1 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, and its error index 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.5, Sending the + SNMP Response-PDU). + + + + +Daniele, et. al. Standards Track [Page 66] + +RFC 2257 AgentX January 1998 + + + 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.4.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 7.2.4.1 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, and its error index to the index of the VarBind + 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.5, 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: + + 3) A new iteration of AgentX request dispatching is initiated + (as described in section 7.2.1.1), in which only those VarBinds + whose v.type is `endOfMibView' are processed. + + 4) For each such VarBind, a target OID range is identified + which is the lexicographical successor to the target OID range + for this VarBind on the last iteration. The target subagent is + the one that registered the target OID range. The target session + is the one in which the target OID range was registered. + + If an agentx-GetNext- or GetBulk-PDU is being dispatched, the + starting OID in the SearchRanges is set to the target OID range, + and its "include" field is set to 1. + + 5) The value of transactionID must be identical to the value + used during the previous iteration. + + + + + +Daniele, et. al. Standards Track [Page 67] + +RFC 2257 AgentX January 1998 + + + 6) The AgentX PDUs are sent to the subagent(s), and the responses + are received and processed according to the steps described in + section 7.2.4. + + 7) This process continues iteratively until a complete SNMP + Response-PDU has been built, or until there remain no target OID + range lexicographical successors. + +7.2.4.4. Processing of Responses to agentx-TestSet-PDUs + + After common processing of the subagent's response to an agentx- + TestSet-PDU (see 7.2.4.1 above), processing continues with the + further 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. + + 1) If any target subagent'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 each target subagent that has + been sent a agentx-TestSet-PDU. + + Processing is complete; the SNMP response PDU is constructed as + described below in 7.2.4.6. + + 2) Otherwise an agentx-CommitSet-PDU is sent to each target + subagent. + +7.2.4.5. Processing of Responses to agentx-CommitSet-PDUs + + After common processing of the subagent's response to an agentx- + CommitSet-PDU (see 7.2.4.1 above), processing continues with the + following steps: + + 1) If any response is not `noError', all other + agentx-Response-PDUs received due to processing this SNMP request + are ignored. + + An agentx-UndoSet-PDU is sent to each target subagent that has + been sent a agentx-CommitSet-PDU. All other subagents are sent a + agentx-CleanupSet-PDU. + + 2) Otherwise an agentx-CleanupSet-PDU is sent to each target + subagent. Processing is complete; the SNMP response PDU is + constructed as described below in 7.2.4.6. + + + +Daniele, et. al. Standards Track [Page 68] + +RFC 2257 AgentX January 1998 + + +7.2.4.6. Processing of Responses to agentx-UndoSet-PDUs + + After common processing of the subagent's response to an agentx- + UndoSet-PDU (see 7.2.4.1 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, and its error index to the + index of the VarBind corresponding to the failed VarBind in the + agentx-TestSet-PDU. + + Otherwise the SNMP response PDU's error code is set to `noError' + and its error index to 0. + +7.2.5. Sending the SNMP Response-PDU + + Once the processing described in sections 7.2.1 - 7.2.4 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 SNMP + version 1 framework. In such cases the required mapping is that + defined in RFC 2089 [9]. (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.6. 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 of this + memo are not intended to constrain the internal architecture of any + conformant implementation. In particular, the master agent + procedures described in sections 7.2.1 and 7.2.4 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 defines subagent behavior in such a way that alteration + of SearchRanges may be used in such optimizations. + + + + + + +Daniele, et. al. Standards Track [Page 69] + +RFC 2257 AgentX January 1998 + + +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: + + STATE + +----------------+--------------+---------+--------+-------- + | A | B | C | D | E + | (Initial | TestOK | Commit | Test | Commit + | State) | | OK | Fail | Fail + | | | | | + EVENT | | | | | + ---------+----------------+--------------+---------+--------+-------- + | 7.2.3.1 | | | | + Receive | All varbinds | | | | + TestSet | OK? | X | X | X | X + PDU | Yes ->B | | | | + | No ->D | | | | + ---------+----------------+--------------+---------+--------+-------- + | | 7.2.3.2 | | | + Receive | | NoError? | | | + Commit- | X | Yes ->C | X | X | X + Set PDU | | No ->E | | | + ---------+----------------+--------------+---------+--------+-------- + Receive | | | 7.2.3.3 | |7.2.4.5 + UndoSet | X | X | ->done | X | ->done + PDU | | | | | + ---------+----------------+--------------+---------+--------+-------- + Receive | | 7.2.4.4 | 7.2.3.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 + + + +Daniele, et. al. Standards Track [Page 70] + +RFC 2257 AgentX January 1998 + + + 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) + +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: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Daniele, et. al. Standards Track [Page 71] + +RFC 2257 AgentX January 1998 + + + STATE + +--------------+-------------- + | A | B + | No transport | Transport + | | connected + | | + EVENT | | + ----------------+--------------+-------------- + Transport | | + connect | ->B | X + indication | | + ----------------+--------------+-------------- + Receive | | if duplicate + Open-PDU | | session id, + | | 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 72] + +RFC 2257 AgentX January 1998 + + +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.9 + Receive | X | + Close PDU | | ->A + ---------------+-------------+---------------- + Receive | | 7.1.5 + Register PDU | X | + | | ->B + ---------------+-------------+---------------- + Receive | | 7.1.6 + Unregister | X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | + Get PDU | | + GetNext PDU | | + GetBulk PDU | X | X + TestSet PDU | | + CommitSet PDU | | + UndoSet PDU | | + CleanupSet PDU | | + ---------------+-------------+---------------- + Receive | | 7.1.11 + Notify PDU | X | + | | ->B + ---------------+-------------+---------------- + Receive Ping | | 7.1.12 + PDU | X | + | | ->B + ---------------+-------------+---------------- + (continued next page) + + + + + +Daniele, et. al. Standards Track [Page 73] + +RFC 2257 AgentX January 1998 + + + ---------------+-------------+---------------- + Receive | | 7.1.2 + IndexAllocate | X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | 7.1.4 + IndexDeallocate| X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | 7.1.7 + AddAgentxCaps | X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | 7.1.8 + RemoveAgentxCap| X | + PDU | | ->B + ---------------+-------------+---------------- + Receive | | 7.2.4 + 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. + + All AgentX PDUs are presented individually to the TCP, to be sent as + the data portion of a TCP PDU. + + + +Daniele, et. al. Standards Track [Page 74] + +RFC 2257 AgentX January 1998 + + +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. + + All AgentX PDUs are presented individually to the socket layer, to be + sent in the data stream. + + +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). + + + + + +Daniele, et. al. Standards Track [Page 75] + +RFC 2257 AgentX January 1998 + + + 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.5). + 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". + + If a network transport is used, currently there is no inherent + security. Transport Layer Security or SSL could be used to control + subagent connections, but that is beyond the scope of this document. + + Thus it is recommended 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. + + + + +Daniele, et. al. Standards Track [Page 76] + +RFC 2257 AgentX January 1998 + + +10. Acknowledgements + + The initial development of this memo was heavily influenced by the + DPI 2.0 specification RFC 1592 [7]. + + 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, Dave + Keeney, Harmen van der Linde, Bob Natale, Randy Presuhn, Aleksey + Romanov, Don Ryan, and Juergen Schoenwaelder. + + 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 + +11. Authors' and Editor's Addresses + + Mike Daniele + Digital Equipment Corporation + 110 Spit Brook Rd + Nashua, NH 03062 + + Phone: +1-603-881-1423 + EMail: daniele@zk3.dec.com + + + Bert Wijnen + IBM Professional Services + Watsonweg 2 + 1423 ND Uithoorn + The Netherlands + + Phone: +31-79-322-8316 + EMail: wijnen@vnet.ibm.com + + + + + + + + +Daniele, et. al. Standards Track [Page 77] + +RFC 2257 AgentX January 1998 + + + 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 + +12. References + +[1] Information processing systems - Open Systems Interconnection - + Specification of Abstract Syntax Notation One (ASN.1), + International Organization for Standardization. International + Standard 8824, (December, 1987). + +[2] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, + "Structure of Management Information for Version 2 of the Simple + Network Management Protocol (SNMPv2)", RFC 1902, January 1996. + +[3] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, + "Textual Conventions for Version 2 of the Simple Network Management + Protocol (SNMPv2)", RFC 1903, January 1996. + +[4] 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. + +[5] 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. + +[6] Case, J., Fedor, M., Schoffstall, M., and J. Davin, "Simple Network + Management Protocol", STD 15, RFC 1157, SNMP Research, Performance + Systems International, MIT Laboratory for Computer Science, May + 1990. + +[7] 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. + +[8] 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. + +[9] 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 78] + +RFC 2257 AgentX January 1998 + + +[10] Case, J., McCloghrie, K., Rose, M. and S. Waldbusser, + "Conformance Statements for Version 2 of the Simple Network + Management Protocol (SNMPv2)", RFC 1904, January 1996. + +[11] McCloghrie, K. and F. Kastenholz, "Evolution of the + Interfaces Group of MIB-II", RFC 1573, January 1994. + +[12] Case, J., "FDDI Management Information Base", RFC 1285, + January 1992. + +[13] Application MIB Working Group, Krupczak, C., and J. Saperia, + "Definitions of System-Level Managed Objects for Applications", + draft-ietf-applmib-sysapplmib-08.txt, 15 Apr 1997. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Daniele, et. al. Standards Track [Page 79] + +RFC 2257 AgentX January 1998 + + +13. Full Copyright Statement + + Copyright (C) The Internet Society (1998). All Rights Reserved. + + This document and translations of it may be copied and furnished to + others, and derivative works that comment on or otherwise explain it + or assist in its implementation may be prepared, copied, published + and distributed, in whole or in part, without restriction of any + kind, provided that the above copyright notice and this paragraph are + included on all such copies and derivative works. However, this + document itself may not be modified in any way, such as by removing + the copyright notice or references to the Internet Society or other + Internet organizations, except as needed for the purpose of + developing Internet standards in which case the procedures for + copyrights defined in the Internet Standards process must be + followed, or as required to translate it into languages other than + English. + + The limited permissions granted above are perpetual and will not be + revoked by the Internet Society or its successors or assigns. + + This document and the information contained herein is provided on an + "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING + TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION + HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + + + + + + + + + + + + + + + + + + + + + + + + +Daniele, et. al. Standards Track [Page 80] + |