Network Working Group M. Rose
Request for Comments: 1227 Performance Systems International, Inc.
May 1991
SNMP MUX Protocol and MIB
1. Introduction
On typical kernel/user systems, an agent speaking the SNMP [1] is often implemented as a user-process, that reads kernel variables in order to realize the Internet-standard MIB [2]. This approach works fine as long as all of the information needed by the SNMP agent resides in either the kernel or in stable storage (i.e., files). However, when other user-processes are employed to implement other network services, such as routing protocols, communication between the SNMP agent and other processes is problematic.
Rose [Page 1]
RFC 1227 SMUX May 1991
In order to solve this problem, a new protocol, the SNMP multiplexing (SMUX) protocol is introduced. When a user-process, termed a SMUX peer, wishes to export a MIB module, it initiates a SMUX association to the local SNMP agent, registers itself, and (later) fields management operations for objects in the MIB module.
2. Architecture
There are two approaches that can be taken when trying to integrate arbitrary MIB modules with the SNMP agent: request-response and cache-ahead.
Rose [Page 2]
RFC 1227 SMUX May 1991
Obviously, the SMUX peer which employs the cache-ahead model acts as a "firewall" for those user-processes which actually implement the managed objects in the given MIB module.
3. Protocol
The SMUX protocol is simple: the SNMP agent listens for incoming connections. Upon establishing a connection, the SMUX peer issues an OpenPDU to initialize the SMUX association. If the SNMP agent declines the association, it issues a closePDU and closes the connection. If the SNMP agent accepts the association, no response is issued by the SNMP agent.
3.1. Tricky Things
Although straight-forward, there are a few nuances.
Rose [Page 3]
RFC 1227 SMUX May 1991 3.1.1. RegistrationAssociated with each registration is an integer priority, from 0 to (2^31)-1. The lower the value, the higher the priority.
3.1.2. Removing Registration
A SMUX peer may remove registrations for only those subtrees which it has registered. If the priority given in the RReqPDU is -1, then the registration of highest priority is selected for deletion. Otherwise, only that registration with the precise priority is selected.
3.1.3. Atomic Sets
A simple two-phase commit protocol is used between the SNMP agent and the SMUX peers. When an SNMP SetRequest-PDU is received, the SNMP agent determines which SMUX peers will participate in the transaction. For each of these peers, at least one SNMP SetRequest- PDU is sent, with only those variables of interest to that peer.
Rose [Page 4]
RFC 1227 SMUX May 1991
The SNMP agent examines all of the responses. If at least one SMUX peer refused the operation, then a SMUX SOutPDU is sent to each SMUX peer, with value rollback, telling the SMUX peer to discard any knowledge of the requested operation.
3.1.4. Variables in Requests
When constructing an SNMP GetRequest-PDU or GetNextRequest-PDU for a SMUX peer, the SNMP agent may send one, or more than one variable in a single request. In all cases, the SNMP agent should process each variable sequentially, and block accordingly when a SMUX peer is contacted.
3.1.5. Request-ID
When the SNMP agent constructs an SNMP GetRequest-PDU, GetNextRequest-PDU, or SetRequest-PDU, for a SMUX peer, the request_id field of the SNMP takes a special meaning: if an SNMP agent generates multiple PDUs for a SMUX peer, upon receipt of a single PDU from the network management station, then the request_id field of the PDUs sent to the SMUX peer must take the same value (which need bear no relationship to the value of the request_id field of the PDU originally received by the SNMP agent.)
3.1.6. The powerful get-next operator
Each SMUX peer acts as though it contains the entire MIB when processing a SNMP GetNext-PDU from the SNMP agent. This means that the SNMP agent must check each variable returned in the SNMP GetResponse-PDU generated by the SMUX peer to ensure that each variable is still within the same registered subtree as caused the SNMP GetNext-PDU to be sent to that peer. For each variable which is not, the SNMP agent must include it in a SNMP GetNext-PDU to the peer for the succeeding registered subtree, until responses are available for all variables within their expected registered subtree.
Rose [Page 5]
RFC 1227 SMUX May 1991 3.2. Protocol Data UnitsThe SMUX protocol data units are defined using Abstract Syntax Notation One (ASN.1) [3]:
Rose [Page 6]
RFC 1227 SMUX May 1991
SimpleOpen
Rose [Page 7]
RFC 1227 SMUX May 1991
INTEGER {
3.3. Mappings on Transport Service
The SMUX protocol may be mapped onto any CO-mode transport service. At present, only one such mapping is defined.
3.3.1. Mapping onto the TCP
When using the TCP to provide the transport-backing for the SMUX protocol, the SNMP agent listens on TCP port 199.
Rose [Page 8]
RFC 1227 SMUX May 1991 4. MIB for the SMUXThe MIB objects for the SMUX are implemented by the local SNMP agent:
Rose [Page 9]
RFC 1227 SMUX May 1991
"An index which uniquely identifies a SMUX peer."
Rose [Page 10]
RFC 1227 SMUX May 1991
smuxTreeEntry OBJECT-TYPE
Rose [Page 11]
RFC 1227 SMUX May 1991
Setting this object to the value invalid(2) has the effect of invaliding the corresponding entry in the smuxTreeTable. It is an implementation- specific matter as to whether the agent removes an invalidated entry from the table. Accordingly, management stations must be prepared to receive tabular information from agents that correspond to entries not currently in use. Proper interpretation of such entries requires examination of the relative smuxTstatus object."
5. Acknowledgements
SMUX was designed one afternoon by these people:
6. References
[1] Case, J., Fedor, M., Schoffstall, M., and J. Davin, "Simple
Rose [Page 12]
RFC 1227 SMUX May 1991
[4] Information processing systems - Open Systems Interconnection -
7. Security Considerations
Security issues are not discussed in this memo.
8. Author's Address
Marshall T. Rose Performance Systems International, Inc. 5201 Great America Parkway Suite 3106 Santa Clara, CA 95054