As per Relevance of the word processing, we have this rfc below:
Network Working Group M.
Request for Comments: 2741 Compaq Computer
Obsoletes: 2257 B.
Category: Standards Track T.J. Watson Research Center, IBM Corp
M. Ellison, Ed
Ellison Software Consulting, Inc
D. Francisco. Ed
Cisco Systems, Inc
January 2000
Agent Extensibility (AgentX)
Version 1
Status of this
This document specifies an Internet standards track protocol for
Internet community, and requests discussion and suggestions
improvements. Please refer to the current edition of the "
Official Protocol Standards" (STD 1) for the standardization
and status of this protocol. Distribution of this memo is unlimited
Copyright
Copyright (C) The Internet Society (2000). All Rights Reserved
This memo defines a standardized framework for extensible
agents. It defines processing entities called master agents
subagents, a protocol (AgentX) used to communicate between them,
the elements of procedure by which the extensible agent
SNMP protocol messages. This memo obsoletes RFC 2257.
Table of
1. Introduction.....................................................4
2. The SNMP Management Framework....................................4
2.1. A Note on Terminology........................................5
3. Extending the MIB................................................5
3.1. Motivation for AgentX........................................6
4. AgentX Framework.................................................6
4.1. AgentX Roles.................................................7
4.2. Applicability................................................8
4.3. Design Features of AgentX....................................9
4.4. Non-Goals...................................................10
Daniele, et al. Standards Track [Page 1]
RFC 2741 AgentX January 2000
5. AgentX Encodings................................................11
5.1. Object Identifier...........................................11
5.2. SearchRange.................................................13
5.3. Octet String................................................14
5.4. Value Representation........................................15
6. Protocol Definitions............................................17
6.1. AgentX PDU Header...........................................17
6.1.1. Context.................................................20
6.2. AgentX PDUs.................................................20
6.2.1. The agentx-Open-PDU.....................................20
6.2.2. The agentx-Close-PDU....................................22
6.2.3. The agentx-Register-PDU.................................23
6.2.4. The agentx-Unregister-PDU...............................27
6.2.5. The agentx-Get-PDU......................................29
6.2.6. The agentx-GetNext-PDU..................................30
6.2.7. The agentx-GetBulk-PDU..................................32
6.2.8. The agentx-TestSet-PDU..................................34
6.2.9. The agentx-CommitSet, -UndoSet, -CleanupSet PDUs........35
6.2.10. The agentx-Notify-PDU..................................36
6.2.11. The agentx-Ping-PDU....................................37
6.2.12. The agentx-IndexAllocate-PDU...........................37
6.2.13. The agentx-IndexDeallocate-PDU.........................38
6.2.14. The agentx-AddAgentCaps-PDU............................39
6.2.15. The agentx-RemoveAgentCaps-PDU.........................41
6.2.16. The agentx-Response-PDU................................43
7. Elements of Procedure...........................................45
7.1. Processing AgentX Administrative Messages...................45
7.1.1. Processing the agentx-Open-PDU..........................46
7.1.2. Processing the agentx-IndexAllocate-PDU.................47
7.1.3. Processing the agentx-IndexDeallocate-PDU...............49
7.1.4. Processing the agentx-Register-PDU......................50
7.1.4.1. Handling Duplicate and Overlapping Subtrees.........50
7.1.4.2. Registering Stuff...................................51
7.1.4.2.1. Registration Priority...........................51
7.1.4.2.2. Index Allocation................................51
7.1.4.2.3. Examples........................................53
7.1.5. Processing the agentx-Unregister-PDU....................55
7.1.6. Processing the agentx-AddAgentCaps-PDU..................55
7.1.7. Processing the agentx-RemoveAgentCaps-PDU...............55
7.1.8. Processing the agentx-Close-PDU.........................56
7.1.9. Detecting Connection Loss...............................56
7.1.10. Processing the agentx-Notify-PDU.......................56
7.1.11. Processing the agentx-Ping-PDU.........................57
7.2. Processing Received SNMP Protocol Messages..................58
7.2.1. Dispatching AgentX PDUs.................................58
7.2.1.1. agentx-Get-PDU......................................61
7.2.1.2. agentx-GetNext-PDU..................................61
7.2.1.3. agentx-GetBulk-PDU..................................62
Daniele, et al. Standards Track [Page 2]
RFC 2741 AgentX January 2000
7.2.1.4. agentx-TestSet-PDU..................................63
7.2.1.5. Dispatch............................................64
7.2.2. Subagent Processing.....................................64
7.2.3. Subagent Processing of agentx-Get, GetNext, GetBulk-PDUs65
7.2.3.1. Subagent Processing of the agentx-Get-PDU...........65
7.2.3.2. Subagent Processing of the agentx-GetNext-PDU.......66
7.2.3.3. Subagent Processing of the agentx-GetBulk-PDU.......66
7.2.4. Subagent Processing of agentx-TestSet, -CommitSet
-UndoSet, -CleanupSet-PDUs..............................67
7.2.4.1. Subagent Processing of the agentx-TestSet-PDU.......68
7.2.4.2. Subagent Processing of the agentx-CommitSet-PDU.....69
7.2.4.3. Subagent Processing of the agentx-UndoSet-PDU.......69
7.2.4.4. Subagent Processing of the agentx-CleanupSet-PDU....70
7.2.5. Master Agent Processing of AgentX Responses.............70
7.2.5.1. Common Processing of All AgentX Response PDUs.......70
7.2.5.2. Processing of Responses to agentx-Get-PDUs..........70
7.2.5.3. Processing of Responses to agentx-GetNext-PDU
agentx-GetBulk-PDU..................................71
7.2.5.4. Processing of Responses to agentx-TestSet-PDUs......72
7.2.5.5. Processing of Responses to agentx-CommitSet-PDUs....73
7.2.5.6. Processing of Responses to agentx-UndoSet-PDUs......74
7.2.6. Sending the SNMP Response-PDU...........................74
7.2.7. MIB Views...............................................74
7.3. State Transitions...........................................75
7.3.1. Set Transaction States..................................75
7.3.2. Transport Connection States.............................77
7.3.3. Session States..........................................78
8. Transport Mappings..............................................79
8.1. AgentX over TCP.............................................79
8.1.1. Well-known Values.......................................79
8.1.2. Operation...............................................79
8.2. AgentX over UNIX-domain Sockets.............................80
8.2.1. Well-known Values.......................................80
8.2.2. Operation...............................................80
9. Security Considerations.........................................81
10. Acknowledgements...............................................82
11. Authors' and Editor's Addresses................................83
12. References.....................................................84
13. Notices........................................................86
Appendix A. Changes relative to RFC 2257 ..........................87
Full Copyright Statement ..........................................91
Daniele, et al. Standards Track [Page 3]
RFC 2741 AgentX January 2000
1.
This memo defines a standardized framework for extensible
agents. It defines processing entities called master agents
subagents, a protocol (AgentX) used to communicate between them,
the elements of procedure by which the extensible agent
SNMP protocol messages
This memo obsoletes RFC 2257. It is worth noting that most of
changes are for the purpose of clarification. The only
affecting AgentX protocol messages on the wire are
- The agentx-Notify-PDU and agentx-Close-PDU now generate
agentx-Response-
- Three new error codes are available: parseFailed(266),
requestDenied(267), and processingError(268)
Appendix A provides a detailed list of changes relative to RFC 2257.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in
document are to be interpreted as described in [27].
2. The SNMP Management
The SNMP Management Framework presently consists of five
components
An overall architecture, described in RFC 2571 [1].
Mechanisms for describing and naming objects and events for
purpose of management. The first version of this Structure
Management Information (SMI) is called SMIv1 and described in STD 16,
RFC 1155 [2], STD 16, RFC 1212 [3] and RFC 1215 [4]. The
version, called SMIv2, is described in STD 58, RFC 2578 [5], STD 58,
RFC 2579 [6] and STD 58, RFC 2580 [7].
Message protocols for transferring management information. The
version of the SNMP message protocol is called SNMPv1 and
in STD 15, RFC 1157 [8]. A second version of the SNMP
protocol, which is not an Internet standards track protocol,
called SNMPv2c and described in RFC 1901 [9] and RFC 1906 [10].
third version of the message protocol is called SNMPv3 and
in RFC 1906 [10], RFC 2572 [11] and RFC 2574 [12].
Protocol operations for accessing management information. The
set of protocol operations and associated PDU formats is described
Daniele, et al. Standards Track [Page 4]
RFC 2741 AgentX January 2000
STD 15, RFC 1157 [8]. A second set of protocol operations
associated PDU formats is described in RFC 1905 [13].
A set of fundamental applications described in RFC 2573 [14] and
view-based access control mechanism described in RFC 2575 [15].
A more detailed introduction to the current SNMP Management
can be found in RFC 2570 [16].
Managed objects are accessed via a virtual information store,
the Management Information Base or MIB. Objects in the MIB
defined using the mechanisms defined in the SMI
2.1. A Note on
The term "variable" refers to an instance of a non-aggregate
type defined according to the conventions set forth in the SMIv2 (
58, RFC 2578, [5]) or the textual conventions based on the SMIv2 (
58, RFC 2579 [6]). The term "variable binding" normally refers
the pairing of the name of a variable and its associated value
However, if certain kinds of exceptional conditions occur
processing of a retrieval request, a variable binding will pair
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
concatenation of the OBJECT IDENTIFIER of the corresponding
type together with an OBJECT IDENTIFIER fragment identifying
instance. The OBJECT IDENTIFIER of the corresponding object-type
called the OBJECT IDENTIFIER prefix of the variable
3. Extending the
New MIB modules that extend the Internet-standard MIB
continuously being defined by various IETF working groups. It
also common for enterprises or individuals to create or
enterprise-specific or experimental MIBs
As a result, managed devices are frequently complex collections
manageable components that have been independently installed on
managed node. Each component provides instrumentation for
managed objects defined in the MIB module(s) it implements
The SNMP framework does not describe how the set of managed
supported by a particular agent may be changed dynamically
Daniele, et al. Standards Track [Page 5]
RFC 2741 AgentX January 2000
3.1. Motivation for
This very real need to dynamically extend the management
within a node has given rise to a variety of "extensible agents",
which typically
- a "master" agent that is available on the standard
address and that accepts SNMP protocol
- a set of "subagents" that each contain
- a protocol that operates between the master agent
subagents, permitting subagents to "connect" to the
agent, and the master agent to multiplex received SNMP
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
subagent and the master agent
The wide deployment of extensible SNMP agents, coupled with the
of Internet standards in this area, makes it difficult to
SNMP-manageable applications. A vendor may have to support
different subagent environments (APIs) in order to support
target platforms
It can also become quite cumbersome to configure subagents
(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
problems. Independently developed AgentX-capable master agents
subagents will be able to interoperate at the protocol level
Vendors can continue to differentiate their products in all
respects
4. AgentX
Within the SNMP framework, a managed node contains a
entity, called an agent, which has access to management information
Within the AgentX framework, an agent is further defined to
of
Daniele, et al. Standards Track [Page 6]
RFC 2741 AgentX January 2000
- a single processing entity called the master agent, which
and receives SNMP protocol messages in an agent role (
specified by the SNMP framework documents) but typically
little or no direct access to management information
- zero or more processing entities called subagents, which
"shielded" from the SNMP protocol messages processed by
master agent, but which have access to management information
The master and subagent entities communicate via AgentX
messages, as specified in this memo. Other interfaces (if any)
these entities, and their associated protocols, are outside the
of this document. While some of the AgentX protocol messages
similar in syntax and semantics to the SNMP, bear in mind that
is not SNMP
The internal operations of AgentX are invisible to an SNMP
operating in a manager role. From a manager's point of view,
extensible agent behaves exactly as would a non-
(monolithic) agent that has access to the same
instrumentation
This transparency to managers is a fundamental requirement of AgentX
and is what differentiates AgentX subagents from SNMP proxy agents
4.1. AgentX
An entity acting in a master agent role performs the
functions
- Accepts AgentX session establishment requests from subagents
- Accepts registration of MIB regions by subagents
- Sends and accepts SNMP protocol messages on the agent'
specified transport addresses
- Implements the agent role Elements of Procedure specified
the administrative framework applicable to the SNMP
message, except where they specify performing
operations. (The application of MIB views, and the
control policy for the managed node, are implemented by
master agent.)
- Provides instrumentation for the MIB objects defined in
1907 [17], and for any MIB objects relevant to
administrative framework it supports
Daniele, et al. Standards Track [Page 7]
RFC 2741 AgentX January 2000
- Sends and receives AgentX protocol messages to
management information, based on the current registry of
regions
- Forwards notifications on behalf of subagents
An entity acting in a subagent role performs the following functions
- Initiates AgentX sessions with the master agent
- Registers MIB regions with the master agent
- Instantiates managed objects
- Binds OIDs within its registered MIB regions to
variables
- Performs management operations on variables
- Initiates notifications
4.2.
It is intended that this memo specify the smallest amount of
behavior necessary to achieve the largest benefit, that is, to
a very large number of possible MIB implementations
configurations with minimum complexity and low "cost of entry".
This section discusses several typical usage scenarios
1) Subagents implement separate MIB modules -- for example,
`A' implements "mib-2", subagent `B' implements "host-resources".
It is anticipated that this will be the most common
configuration
2) Subagents implement rows in a "simple table". A simple table
one in which row creation is not specified, and for which the
does not define an object that counts entries in the table
Examples of simple tables are rdbmsDbTable, udpTable,
hrSWRunTable
This is the most commonly defined type of MIB table, and
represents the next most typical configuration that AgentX
support
Daniele, et al. Standards Track [Page 8]
RFC 2741 AgentX January 2000
3) Subagents share MIBs along non-row partitions. Subagents
"chunks" of the MIB that represent multiple rows, due to
nature of the MIB's index structure. Examples include
ipNetToMediaEntry.n, where n represents the ifIndex value for
interface implemented by the subagent, and tcpConnEntry.a.b.c.d
where a.b.c.d represents an IP address on an interface
by the subagent
AgentX supports these three common configurations, and
permutations of them, completely. The consensus is that
comprise a very large majority of current and likely future uses
multi-vendor extensible agent configurations
4) Subagents implement rows in tables that permit row creation,
example, the RMON historyControlTable. To implement row
in such tables, at least one AgentX subagent must register at
point "higher" in the OID tree than an individual row (
AgentX's dispatching procedure).
5) Subagents implement rows in tables whose MIB also defines
object that counts entries in the table, for example the MIB-2
ifTable (due to ifNumber). The subagent that implements such
counter object (like ifNumber) must go beyond AgentX to
implement it. This is an implementation issue (and most new
designs no longer include such objects).
Scenarios in these latter 2 categories were thought to occur
rarely in configurations where subagents are
implemented by different vendors. The focus of a standard protocol
however, must be in just those areas where multi-
interoperability must be assured
Note that it would be inefficient (due to AgentX
overhead) to share a table among AgentX subagents if the
contains very dynamic instances, and each subagent registers
qualified instances. ipRouteTable could be an example of such
table in some environments
4.3. Design Features of
The primary features of the design described in this memo are
1) A general architectural division of labor between master agent
subagent: The master agent is MIB ignorant and SNMP omniscient
while the subagent is SNMP ignorant and MIB omniscient (for
MIB variables it instantiates). That is, master agents
exclusively, are concerned with SNMP protocol operations and
translations to and from AgentX protocol operations needed
Daniele, et al. Standards Track [Page 9]
RFC 2741 AgentX January 2000
carry them out; subagents are exclusively concerned
management instrumentation; and neither should intrude on
other's territory
2) A standard protocol and "rules of engagement" to
interoperability between management instrumentation and
agents
3) Mechanisms for independently developed subagents to integrate
the extensible agent on a particular managed node in such a
that they need not be aware of any other existing subagents
4) A simple, deterministic registry and dispatching algorithm. For
given extensible agent configuration, there is a single
who is "authoritative" for any particular region of the MIB (
"region" may extend from an entire MIB down to a single object
instance).
5) Performance considerations. It is likely that the master
and all subagents will reside on the same host, and in such
AgentX is more a form of inter-process communication than
traditional communications protocol
Some of the design decisions made with this in mind include
- 32-bit alignment of data within
- Native byte-order encoding by
- Large AgentX PDU payload sizes
4.4. Non-
1) Subagent-to-subagent communication. This is out of scope, due
the security ramifications and complexity involved
2) Subagent access (via the master agent) to MIB variables. This
not addressed, since various other mechanisms are available and
was not a fundamental requirement
3) The ability to accommodate every conceivable extensible
configuration option. This was the most contentious aspect in
development of this protocol. In essence, certain
currently available in some commercial extensible agent
are not included in AgentX. Although useful or even vital in
implementation strategies, the rough consensus was that
features were not appropriate for an Internet Standard, or
Daniele, et al. Standards Track [Page 10]
RFC 2741 AgentX January 2000
typically required for independently developed subagents
coexist. The set of supported extensible agent configurations
described above, in Section 4.2, "Applicability".
Some possible future version of the AgentX protocol may
coverage for one or more of these "non-goals" or for new goals
might be identified after greater deployment experience
5. AgentX
AgentX PDUs consist of a common header, followed by PDU-specific
of variable length. Unlike SNMP PDUs, AgentX PDUs are not
using the BER (as specified in ISO 8824 [18]), but are transmitted
a contiguous byte stream. The data within this stream is
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
(NETWORK_BYTE_ORDER) in the third field (h.flags) is used to
the byte ordering of all multi-byte integer values in the PDU
including those which follow in the header itself. This is
in more detail in Section 6.1, "AgentX PDU Header", below
PDUs are depicted in this memo using the following convention (
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
zero-filled
5.1. Object
An object identifier is encoded as a 4-byte header, followed by
variable number of contiguous 4-byte fields representing sub
identifiers. This representation (termed Object Identifier) is
follows
Daniele, et al. Standards Track [Page 11]
RFC 2741 AgentX January 2000
Object
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | include | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Object Identifier header fields
n_
The number (0-128) of sub-identifiers in the object identifier
An ordered list of "n_subid" 4-byte sub-identifiers follows
4-byte header
An unsigned value used to reduce the length of
identifier encodings. A non-zero value "x" is interpreted
the first sub-identifier after "internet" (1.3.6.1),
indicates an implicit prefix "internet.x" to the actual sub
identifiers encoded in the Object Identifier. For example,
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
to the sub-identifiers
Used only when the Object Identifier is the start of
SearchRange, as described in section 5.2, "SearchRange".
sub-identifier 1, 2, ... n_
A 4-byte unsigned integer, encoded according to the header'
NETWORK_BYTE_ORDER bit
A null Object Identifier consists of the 4-byte header with all
set to 0.
Daniele, et al. Standards Track [Page 12]
RFC 2741 AgentX January 2000
Examples
sysDescr.0 (1.3.6.1.2.1.1.1.0)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4 | 2 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1.2.3.4
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4 | 0 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 3 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
5.2.
A SearchRange consists of two Object Identifiers. In
communication with a subagent, the master agent uses a SearchRange
identify a requested variable binding, and, in GetNext and
operations, to set an upper bound on the names of managed
instances the subagent may send in reply
The first Object Identifier in a SearchRange (called the
OID) indicates the beginning of the range. It is frequently (but
necessarily) the name of a requested variable binding
The "include" field in this OID's header is a boolean value (0 or 1)
indicating whether or not the starting OID is included in the range
The second object identifier (ending OID) indicates the non-
end of the range, and its "include" field is always 0. A null
for ending OID indicates an unbounded SearchRange
Daniele, et al. Standards Track [Page 13]
RFC 2741 AgentX January 2000
Example: To indicate a search range from 1.3.6.1.2.1.25.2
(inclusive) to 1.3.6.1.2.1.25.2.1 (exclusive), the SearchRange
be
(start
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 3 | 2 | 1 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 25 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(end
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4 | 2 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 25 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
A SearchRangeList is a contiguous list of SearchRanges
5.3. Octet
An octet string is represented by a contiguous series of bytes
beginning with a 4-byte integer (encoded according to the header'
NETWORK_BYTE_ORDER bit) whose value is the number of octets in
octet string, followed by the octets themselves. This
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
appended to achieve alignment of following data. This padding
be added even if the Octet String is the last item in the PDU
Padding bytes must be zero filled
Daniele, et al. Standards Track [Page 14]
RFC 2741 AgentX January 2000
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet String Length (L) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet 1 | Octet 2 | Octet 3 | Octet 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet L - 1 | Octet L | Padding (as required) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
A null Octet String consists of a 4-byte length field set to 0.
5.4. Value
Variable bindings may be encoded within the variable-length
of some PDUs. The representation of a variable binding (termed
VarBind) consists of a 2-byte type field, a name (Object Identifier),
and the actual value data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| v.type | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(v.name
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(v.data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
VarBind fields
v.
Indicates the variable binding's syntax, and must be one of
following values
Daniele, et al. Standards Track [Page 15]
RFC 2741 AgentX January 2000
Integer (2),
Octet String (4),
Null (5),
Object Identifier (6),
IpAddress (64),
Counter32 (65),
Gauge32 (66),
TimeTicks (67),
Opaque (68),
Counter64 (70),
noSuchObject (128),
noSuchInstance (129),
endOfMibView (130)
v.
The Object Identifier which names the variable
v.
The actual value, encoded as follows
- Integer, Counter32, Gauge32, and TimeTicks are encoded as 4
contiguous bytes, according to the header'
NETWORK_BYTE_ORDER bit
- Counter64 is encoded as 8 contiguous bytes, according
the header's NETWORK_BYTE_ORDER bit
- Object Identifiers are encoded as described in section 5.1,
Object Identifier
- IpAddress, Opaque, and Octet String are all octet
and are encoded as described in section 5.3, "
String", Octet String. Note that the octets used
represent IpAddress are always ordered most significant
least significant
Value data always follows v.name whenever v.type is one
the above types. These data bytes are present even if
will not be used (as, for example, in certain types
index allocation).
- Null, noSuchObject, noSuchInstance, and endOfMibView do
contain any encoded value. Value data never follows v.
in these cases
Daniele, et al. Standards Track [Page 16]
RFC 2741 AgentX January 2000
Note that the VarBind itself does not contain the value size
That information is implied for the fixed-length types,
explicitly contained in the encodings of variable-length
Object Identifier and Octet String).
A VarBindList is a contiguous list of VarBinds. Within
VarBindList, a particular VarBind is identified by an index value
The first VarBind in a VarBindList has index value 1, the second
index value 2, and so on
6. Protocol
6.1. AgentX PDU
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.
The version of the AgentX protocol (1 for this memo).
h.
The PDU type; one of the following values
agentx-Open-PDU (1),
agentx-Close-PDU (2),
agentx-Register-PDU (3),
agentx-Unregister-PDU (4),
agentx-Get-PDU (5),
agentx-GetNext-PDU (6),
agentx-GetBulk-PDU (7),
agentx-TestSet-PDU (8),
agentx-CommitSet-PDU (9),
agentx-UndoSet-PDU (10),
Daniele, et al. Standards Track [Page 17]
RFC 2741 AgentX January 2000
agentx-CleanupSet-PDU (11),
agentx-Notify-PDU (12),
agentx-Ping-PDU (13),
agentx-IndexAllocate-PDU (14),
agentx-IndexDeallocate-PDU (15),
agentx-AddAgentCaps-PDU (16),
agentx-RemoveAgentCaps-PDU (17),
agentx-Response-PDU (18)
The set of PDU types for "administrative processing" are 1-4
and 12-17. The set of PDU types for "SNMP
processing" are 5-11.
h.
A bitmask, with bit 0 the least significant bit. The
definitions are as follows
Bit
--- ----------
0 INSTANCE_
1 NEW_
2 ANY_
3 NON_DEFAULT_
4 NETWORK_BYTE_
5-7 (reserved
The NETWORK_BYTE_ORDER bit applies to all multi-byte
values in the entire AgentX packet, including the
header fields. If set, then network byte order (
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
described in section 6.1.1, "Context".
The NEW_INDEX and ANY_INDEX bits are used only within
agentx-IndexAllocate-, and -IndexDeallocate-PDUs
The INSTANCE_REGISTRATION bit is used only within
agentx-Register-PDU
Daniele, et al. Standards Track [Page 18]
RFC 2741 AgentX January 2000
h.
The session ID uniquely identifies a session over
AgentX PDUs are exchanged between a subagent and the
agent. The session ID has no significance and no
value in the agentx-Open-PDU sent by a subagent to open
session with the master agent; in this case, the
agent will assign a unique session ID that it will pass
in the corresponding agentx-Response-PDU. From that
on, that same session ID will appear in every AgentX
exchanged over that session between the master and
subagent. A subagent may establish multiple AgentX
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
just to a particular transport
h.
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
management request results in multiple AgentX PDUs
sent by the master agent with the same session ID, each
these AgentX PDUs must contain the same transaction ID
conversely, AgentX PDUs sent during a particular session
that result from distinct SNMP management requests,
have distinct transaction IDs within the limits of the 32-
bit field).
Note that the transaction ID is not the same as the
PDU's request-id (as described in section 4.1 of RFC 1905
[13], nor is it the same as the SNMP Message's msgID (
described in section 6.2 of RFC 2572 [11]), nor can it be
since a master agent might receive SNMP requests with
same request-ids or msgIDs from different managers
The transaction ID has no significance and no defined
in AgentX administrative PDUs, i.e., AgentX PDUs that
not associated with an SNMP management request
h.
A packet ID generated by the sender for all AgentX
except the agentx-Response-PDU. In an agentx-Response-PDU
the packet ID must be the same as that in the
AgentX PDU to which it is a response. A master agent
Daniele, et al. Standards Track [Page 19]
RFC 2741 AgentX January 2000
use this field to associate subagent response PDUs
their corresponding request PDUs. A subagent might use
field to correlate responses to multiple (batched
registrations
h.payload_
The size in octets of the PDU contents, excluding the 20-
byte header. As a result of the encoding schemes and
layouts, this value will always be either 0, or a
of 4.
6.1.1.
In the SNMPv1 or SNMPv2c, the community string may be used as
index into a local repository of configuration information that
include community profiles or more complex context information.
SNMPv3 this notion of "context" is formalized (see section 3.3.1
RFC 2571 [1].
AgentX provides a mechanism for transmitting a context
within relevant PDUs, but does not place any constraints on
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-,
Ping- PDUs
If the NON_DEFAULT_CONTEXT bit in the AgentX header field h.flags
clear, then there is no context field in the PDU, and the
refers to the default context. (This does not mean there is a zero
length Octet String, it means there is no Octet String present.)
the NON_DEFAULT_CONTEXT bit is set, then a context field
follows the AgentX header, and the operation refers to that
context. The context is represented as an Octet String. There
no constraints on its length or contents
Thus, all of these AgentX PDUs (that is, those listed
above) refer to, or "indicate" a context, which is either the
context, or a non-default context explicitly named in the PDU
6.2. AgentX
6.2.1. The agentx-Open-
An agentx-Open-PDU is generated by a subagent to
establishment of an AgentX session with the master agent
Daniele, et al. Standards Track [Page 20]
RFC 2741 AgentX January 2000
(AgentX header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version (1) | h.type (1) | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| o.timeout | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(o.id
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | 0 | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| subidentifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| subidentifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(o.descr
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet String Length (L) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet 1 | Octet 2 | Octet 3 | Octet 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet L - 1 | Octet L | Padding (as required) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
An agentx-Open-PDU contains the following fields
o.
The length of time, in seconds, that a master agent
allow to elapse after dispatching a message on a
before it regards the subagent as not responding. This
the default value for the session, and may be overridden
Daniele, et al. Standards Track [Page 21]
RFC 2741 AgentX January 2000
values associated with specific registered MIB regions.
default value of 0 indicates that there is no session-
default value
o.
An Object Identifier that identifies the subagent
Subagents that do not support such an notion may send a
Object Identifier
o.
An Octet String containing a DisplayString describing
subagent
6.2.2. The agentx-Close-
An agentx-Close-PDU issued by either a subagent or the master
terminates an AgentX session
(AgentX header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version (1) | h.type (2) | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| c.reason | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
An agentx-Close-PDU contains the following field
c.
An enumerated value that gives the reason that the
agent or subagent closed the AgentX session. This field
take one of the following values
Daniele, et al. Standards Track [Page 22]
RFC 2741 AgentX January 2000
reasonOther(1)
None of the following
reasonParseError(2)
Too many AgentX parse errors from
reasonProtocolError(3)
Too many AgentX protocol errors from
reasonTimeouts(4)
Too many timeouts waiting for
reasonShutdown(5)
Sending entity is shutting
reasonByManager(6)
Due to Set operation; this reason code can be used
by the master agent, in response to an SNMP
request
6.2.3. The agentx-Register-
An agentx-Register-PDU is generated by a subagent for each region
the MIB variable naming tree (within one or more contexts) that
wishes to support
(AgentX header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version (1) | h.type (3) | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Daniele, et al. Standards Track [Page 23]
RFC 2741 AgentX January 2000
(r.context) (OPTIONAL
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet String Length (L) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet 1 | Octet 2 | Octet 3 | Octet 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet L - 1 | Octet L | Padding (as required) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| r.timeout | r.priority | r.range_subid | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(r.subtree
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | 0 | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(r.upper_bound
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| optional upper-bound sub-identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
An agentx-Register-PDU contains the following fields
r.
An optional non-default context
r.
The length of time, in seconds, that a master agent
allow to elapse after dispatching a message on a
before it regards the subagent as not responding. r.
applies only to messages that concern MIB objects
r.subtree. It overrides both the session's default
(if any) indicated when the AgentX session with the
agent was established, and the master agent's
timeout. The default value for r.timeout is 0 (
override).
Daniele, et al. Standards Track [Page 24]
RFC 2741 AgentX January 2000
r.
A value between 1 and 255, used to achieve a
configuration when different sessions register identical
overlapping regions. Subagents with no particular
of priority should register with the default value of 127.
In the master agent's dispatching algorithm, smaller
of r.priority take precedence over larger values,
described in section 7.1.4.1, "Handling Duplicate
Overlapping Subtrees".
r.
An Object Identifier that names the basic subtree of a
region for which a subagent indicates its support. The
"subtree" is used generically here, it may represent
fully-qualified instance name, a partial instance name,
MIB table, an entire MIB, etc
The choice of what to register is implementation-specific
this memo does not specify permissible values.
practice however is for a subagent to register at
highest level of the naming tree that makes sense
Registration of fully- qualified instances is typically
only when a subagent can perform management operations
on particular rows of a conceptual table
If r.subtree is in fact a fully qualified instance name,
INSTANCE_REGISTRATION bit in h.flags must be set,
it must be cleared. The master agent may save
information to optimize subsequent operational dispatching
r.range_
Permits specifying a range in place of one of r.subtree'
sub-identifiers. If this value is 0, no range is
specified and there is no r.upper_bound field present in
PDU. In this case the MIB region being registered is
single subtree named by r.subtree
Otherwise the "r.range_subid"-th sub-identifier in r.
is a range lower bound, and the range upper bound sub
identifier (r.upper_bound) immediately follows r.subtree
In this case the MIB region being registered is the union
the subtrees formed by enumerating this range
Daniele, et al. Standards Track [Page 25]
RFC 2741 AgentX January 2000
Note that r.range_subid indicates the (1-based) index
this sub-identifier within the OID represented by r.subtree
regardless of whether or not r.subtree is encoded using
prefix. (See the example below.)
r.upper_
The upper bound of a sub-identifier's range. This field
present only if r.range_subid is not 0.
The use of r.range_subid and r.upper_bound provide a
shorthand mechanism for specifying a MIB region.
example, if r.subtree is the OID 1.3.6.1.2.1.2.2.1.1.7,
r.range_subid is 10, and r.upper_bound is 22, the
MIB region can be denoted 1.3.6.1.2.1.2.2.1.[1-22].7.
Registering this region is equivalent to registering
union of
1.3.6.1.2.1.2.2.1.1.7
1.3.6.1.2.1.2.2.1.2.7
1.3.6.1.2.1.2.2.1.3.7
...
1.3.6.1.2.1.2.2.1.22.7
One expected use of this mechanism is registering
conceptual row with a single PDU. In the example above,
MIB region happens to be row 7 of the RFC 1573 ifTable.
actual PDU would be
(AgentX header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version (1) | h.type (3) | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| r.timeout | r.priority | 10 | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Daniele, et al. Standards Track [Page 26]
RFC 2741 AgentX January 2000
(r.subtree
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 6 | 2 | 0 | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 7 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(r.upper_bound
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 22 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Note again that here r.range_subid is 10, even though n_subid
r.subtree is only 6.
r.range_subid may be used at any level within a subtree, it need
represent row-level registration. This mechanism may be used in
way that is convenient for a subagent to achieve its registrations
6.2.4. The agentx-Unregister-
The agentx-Unregister-PDU is sent by a subagent to remove a
region that was previously registered on this session
(AgentX header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version (1) | h.type (4) | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Daniele, et al. Standards Track [Page 27]
RFC 2741 AgentX January 2000
(u.context)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet String Length (L) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet 1 | Octet 2 | Octet 3 | Octet 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet L - 1 | Octet L | Padding (as required) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| <reserved> | u.priority | u.range_subid | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(u.subtree
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | 0 | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(u.upper_bound
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| optional upper-bound sub-identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
An agentx-Unregister-PDU contains the following fields
u.
An optional non-default context
u.
The priority at which this region was originally registered
u.
Indicates a previously-registered region of the MIB that
subagent no longer wishes to support
Daniele, et al. Standards Track [Page 28]
RFC 2741 AgentX January 2000
u.range_
Indicates a sub-identifier in u.subtree is a range
bound
u.upper_
The upper bound of the range sub-identifier. This field
present in the PDU only if u.range_subid is not 0.
6.2.5. The agentx-Get-
(AgentX header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version (1) | h.type (5) | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(g.context)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet String Length (L) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet 1 | Octet 2 | Octet 3 | Octet 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet L - 1 | Octet L | Padding (as required) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(g.sr
(start 1)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | include | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Daniele, et al. Standards Track [Page 29]
RFC 2741 AgentX January 2000
(end 1)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | 0 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
(start n
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | include | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(end n
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | 0 | 0 | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
An agentx-Get-PDU contains the following fields
g.
An optional non-default context
g.
A SearchRangeList containing the requested variables
this session. Within the agentx-Get-PDU, the Ending
within SearchRanges are null-valued Object Identifiers
6.2.6. The agentx-GetNext-
(AgentX header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version (1) | h.type (6) | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Daniele, et al. Standards Track [Page 30]
RFC 2741 AgentX January 2000
(g.context)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet String Length (L) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet 1 | Octet 2 | Octet 3 | Octet 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet L - 1 | Octet L | Padding (as required) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(g.sr
(start 1)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | include | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(end 1)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | 0 | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
(start n
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | include | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Daniele, et al. Standards Track [Page 31]
RFC 2741 AgentX January 2000
(end n
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| n_subid | prefix | 0 | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-identifier #n_subid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
An agentx-GetNext-PDU contains the following fields
g.
An optional non-default context
g.
A SearchRangeList containing the requested variables
this session
6.2.7. The agentx-GetBulk-
(AgentX header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version (1) | h.type (7) | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Daniele, et al. Standards Track [Page 32]
RFC 2741 AgentX January 2000
(g.context)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet String Length (L) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet 1 | Octet 2 | Octet 3 | Octet 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet L - 1 | Octet L | Padding (as required) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| g.non_repeaters | g.max_repetitions |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(g.sr
...
An agentx-GetBulk-PDU contains the following fields
g.
An optional non-default context
g.non_
The number of variables in the SearchRangeList that are
repeaters
g.max_
The maximum number of repetitions requested for
variables
g.
A SearchRangeList containing the requested variables
this session
Daniele, et al. Standards Track [Page 33]
RFC 2741 AgentX January 2000
6.2.8. The agentx-TestSet-
(AgentX header
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.version (1) | h.type (8) | h.flags | <reserved> |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.sessionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.transactionID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.packetID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| h.payload_length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
(t.context)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet String Length (L) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet 1 | Octet 2 | Octet 3 | Octet 4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Octet L - 1 | Octet L |