|
|
1.1 root 1: .\" smux.rf - SNMP MUX definitions
2: .de UL
3: .ti -.5i
4: -------
5: .br
6: ..
7: .ie \nh \{\
8: .ll 66
9: .po 2 \}
10: .el \{\
11: .ll 62
12: .pl 58
13: .nr sf R
14: .nr fm 0 \}
15: .he 'draft'SMUX'May 1990'
16: .fo 'M.T. Rose''[Page %]'
17: .de $0
18: .(x t
19: \\$2 \\$1
20: .)x
21: ..
22: .lp
23: .na
24: .nh
25: .ce
26: \fBSNMP MUX Protocol and MIB\fR
27: .sp 1
28: .ce
29: Sun May 13 14:53:58 1990
30: .sp 2
31: .ce
32: Marshall T. Rose
33: .sp 1
34: .ce 4
35: Performance Systems International, Inc.
36: 11800 Sunrise Valley Drive
37: Suite 1100
38: Reston, VA 22091
39: .sp 1
40: .ce
41: [email protected]
42: .sp 5
43: .sh 1 "Status of this Memo"
44: .lp
45: This document defines a mechanism by which multiple UNIX daemons
46: may communicate with the local SNMP agent on a host.
47: This is a local mechanism.
48:
49: .bp
50: .sh 1 "Introduction"
51: .lp
52: On kernel/user systems such as BSD UNIX,
53: an agent speaking the SNMP [1] is often implemented as a user-process,
54: which reads kernel variables in order to realize the Internet-standard
55: MIB [2].
56: This approach works fine as long as all of the information needed by
57: the SNMP agent resides in either the kernel or in stable storage
58: (i.e., files).
59: However,
60: when other user-processes are employed to implement other network
61: services,
62: such as routing protocols,
63: communication between the SNMP agent the and other processes is problematic.
64: .lp
65: In order to solve this problem,
66: a new protocol,
67: the SNMP multiplexing (SMUX) protocol is introduced.
68: When a user-process,
69: termed a SMUX peer,
70: wishes to export a MIB module,
71: it initiates a SMUX association to the local SNMP agent,
72: registers itself, and (later) fields management operations for objects
73: in the MIB module.
74: .lp
75: Carrying this approach to its fullest,
76: it is possible to generalize the SNMP agent so that it knows about
77: only the SNMP group of the Internet-standard MIB.
78: All other portions of the Internet-standard MIB can be implemented by
79: another process.
80: This is quite useful, for example, when a computer manufacturer wishes
81: to provide SNMP access for its operating system in binary form.
82: .lp
83: In addition to defining the SMUX protocol,
84: this document defines a MIB for the SMUX.
85: Obviously,
86: this MIB module must also be implemented in the local SNMP agent.
87:
88: .bp
89: .sh 1 "Architecture"
90: .lp
91: There are two approaches that can be taken when trying to integrate
92: arbitrary MIB modules with the SNMP agent: request-response and cache-ahead.
93: .lp
94: The request-response model simply propagates the SNMP requests
95: received by the SNMP agent to the user process which exported the MIB
96: module.
97: The SMUX peer then performs the operation and returns a response.
98: In turn,
99: the SNMP agent propagates this response back to the network management station.
100: The request-response model is said to be agent-driven since,
101: after registration,
102: the SNMP agent initiates all transactions.
103: .lp
104: The cache-ahead model requires that the SMUX peer,
105: after registration,
106: periodically updates the SNMP agent with the subtree for the MIB module
107: which has been registered.
108: The SNMP agent, upon receiving an SNMP request,
109: locally performs the operation,
110: and returns a response to the network management station.
111: The cache-ahead model is said to be peer-driven since,
112: after registration,
113: the SMUX peer initiates all transactions.
114: .lp
115: There are advantages and disadvantages to both approaches.
116: As such,
117: the architecture envisioned supports both models in the following
118: fashion:
119: the protocol between the SNMP agent and the SMUX peer is based on the
120: request-response model.
121: However,
122: the SMUX peer,
123: may itself be a user-process which employs the cache-ahead model with
124: other user-processes.
125: .lp
126: Obviously,
127: the SMUX peer which employs the cache-ahead model acts as a \*(lqfirewall\*(rq
128: for those user-processes which actually implement the managed objects
129: in the given MIB module.
130: .lp
131: Note that this document describes only the SMUX protocol,
132: for the request-response model.
133: Each SMUX peer is free to define a cache-ahead protocol specific for
134: the application at hand.
135:
136: .bp
137: .sh 1 "Protocol"
138: .lp
139: The SMUX protocol is simple:
140: the SNMP agent listens for incoming connections.
141: Upon establishing a connection,
142: the SMUX peer issues an OpenPDU to initialize the SMUX association.
143: If the SNMP agent declines the association,
144: it issues a closePDU and closes the connection.
145: If the SNMP agent accepts the association,
146: no response is issued by the SNMP agent.
147: .lp
148: For each subtree defined in a MIB module that the SMUX peer wishes to
149: register (or unregister),
150: the SMUX peer issues a RReqPDU.
151: When the SNMP agent receives such a PDU,
152: it issues a corresponding RRspPDU.
153: The SNMP agent returns RRspPDUs in the same order as the RReqPDUs were
154: received.
155: .lp
156: When the SMUX peer wishes to issue a trap,
157: it issues an SNMP Trap-PDU.
158: When the SNMP agent receives such a PDU,
159: it propagates this to the network management stations that it is
160: configured to send traps to.
161: .lp
162: When the SNMP agent receives an SNMP GetRequest-PDU,
163: GetNextRequest-PDU, or SetRequest-PDU which includes one or more
164: variable-bindings within a subtree registered by a SMUX peer,
165: the SNMP agent sends an equivalent SNMP PDU containing only those
166: variables within the subtree registered by that SMUX peer.
167: When the SMUX peer receives such a PDU,
168: it applies the indicated operation and issues a corresponding SNMP
169: GetResponse-PDU.
170: The SNMP agent then correlates this result and propagates the
171: resulting GetResponse-PDU to the network management station.
172: .lp
173: When either the SNMP agent or the SMUX peer wishes to release the SMUX
174: association,
175: the ClosePDU is issued and the connection is closed.
176:
177: .sh 2 "Tricky Things"
178: .lp
179: Although straight-forward, there are a few nuances.
180:
181: .sh 3 "Registration"
182: .lp
183: Associated with each registration is an integer priority,
184: from 0 to (2^31)-1.
185: The lower the value,
186: the higher the priority.
187: .lp
188: Multiple SMUX peers may register the same subtree.
189: However,
190: they must do so at different priorities
191: (i.e., a subtree and a priority uniquely identifies a SMUX peer).
192: As such,
193: if a SMUX peer wishes to register a subtree at a priority which is
194: already taken,
195: the SNMP agent repeatedly increments the integer value until an unused
196: priority is found.
197: .lp
198: When registering a subtree,
199: the special priority -1 may be used,
200: which selects the highest available priority.
201: .lp
202: Of course,
203: the SNMP agent may select an arbitrarily worse priority for a SMUX
204: peer,
205: based on local (configuration) information.
206: .lp
207: Note that when a subtree is registered,
208: the SMUX peer with the highest registration priority is exclusively
209: consulted for all operations on that subtree.
210: Further note that SNMP agents must enforce the
211: \*(lqsubtree mounting effect\*(rq,
212: which hides the registrations by other SMUX peers of objects within
213: the subtree.
214: For example,
215: if a SMUX peer registered \*(lqsysDescr\*(rq,
216: and later another SMUX peer registered \*(lqsystem\*(rq
217: (which scopes \*(lqsysDescr\*(rq),
218: then all requests for \*(lqsysDescr\*(rq would be given to the latter
219: SMUX peer.
220: .lp
221: An SNMP agent should disallow any attempt to register at or within the SNMP
222: and SMUX subtrees of the MIB.
223: Other subtrees may be disallowed as an implementation-specific option.
224:
225: .sh 3 "Removing Registration"
226: .lp
227: A SMUX peer may remove registrations for only those subtrees which it
228: has registered.
229: If the priority given in the RReq-PDU is -1,
230: then the registration of highest priority is selected for deletion.
231: Otherwise, only that registration with the precise registration
232: is selected.
233:
234: .sh 3 "Variables in Requests"
235: .lp
236: When constructing an SNMP GetRequest-PDU, GetNextRequest-PDU, or
237: SetRequest-PDU, for a SMUX peer,
238: the SNMP agent may send one, or more than one variable in a single request.
239: In all cases,
240: the SNMP agent should process each variable sequentially,
241: and block accordingly when a SMUX peer is contacted.
242:
243: .sh 3 "Request-ID"
244: .lp
245: When the SNMP agent constructs an SNMP GetRequest-PDU,
246: GetNextRequest-PDU, or SetRequest-PDU, for a SMUX peer,
247: the \fIrequest_id\fR field of the SNMP takes a special meaning.
248: Basically,
249: this field should take a different value for each SNMP PDU received by
250: the SNMP agent.
251: As such,
252: if an SNMP agent generates multiple PDUs for a SMUX peer,
253: upon receipt of a single PDU from the network management station,
254: then the \fIrequest_id\fR field of the PDUs sent to the SMUX peer
255: takes the same value
256: (which need bear no relationship to the value of the \fIrequest_id\fR
257: field of the PDU originally received by the SNMP agent.)
258:
259: .sh 3 "The powerful get-next operator"
260: .lp
261: Each SMUX peer acts as though it contains the entire MIB when
262: processing the powerful get-next operator.
263: This means that the SNMP agent must check each variable named returned
264: in the SNMP GetResponse-PDU generated by a SMUX peer and see if it is in
265: the subtree of the managed object corresponding to original SNMP
266: GetNextRequest-PDU.
267: If not,
268: the SNMP agent will apply the get-next operator to the next managed object.
269: This may result in contacting a different SMUX peer,
270: depending on the registration topology.
271:
272: .sh 2 "Protocol Data Units"
273: .lp
274: The SMUX protocol data units are defined using Abstract Syntax
275: Notation One (ASN.1) [3]:
276: .sp
277: .in +.5i
278: .nf
279: SMUX DEFINITIONS ::= BEGIN
280:
281: IMPORTS
282: DisplayString, ObjectName
283: FROM RFC1155-SMI
284:
285: PDUs
286: FROM RFC1157-SNMP;
287:
288:
289: -- tags for SMUX-specific PDUs are application-wide to
290: -- avoid conflict with tags for current (and future)
291: -- SNMP-generic PDUs
292:
293: SMUX-PDUs ::=
294: CHOICE {
295: open -- SMUX peer uses
296: OpenPDU, -- immediately after TCP open
297:
298: close -- either uses immediately before TCP close
299: ClosePDU,
300:
301: registerRequest -- SMUX peer uses
302: RReqPDU,
303:
304: registerResponse -- SNMP agent uses
305: RRspPDU,
306:
307: PDUs -- note that roles are reversed:
308: -- SNMP agent does get/get-next/set
309: -- SMUX peer does get-response/trap
310: }
311:
312:
313: -- open PDU
314: -- currently only simple authentication
315:
316: OpenPDU ::=
317: CHOICE {
318: simple
319: SimpleOpen
320: }
321:
322: SimpleOpen ::=
323: [APPLICATION 0] IMPLICIT
324: SEQUENCE {
325: version -- of SMUX protocol
326: INTEGER {
327: version-1(0)
328: },
329:
330: identity -- of SMUX peer, authoritative
331: OBJECT IDENTIFIER,
332:
333: description -- of SMUX peer, implementation-specific
334: DisplayString,
335:
336: password -- zero length indicates no authentication
337: OCTET STRING
338: }
339:
340:
341: -- close PDU
342:
343: ClosePDU ::=
344: [APPLICATION 1] IMPLICIT
345: INTEGER {
346: goingDown(0),
347: unsupportedVersion(1),
348: packetFormat(2),
349: protocolError(3),
350: internalError(4),
351: authenticationFailure(5)
352: }
353:
354:
355: -- insert PDU
356:
357: RReqPDU ::=
358: [APPLICATION 2] IMPLICIT
359: SEQUENCE {
360: subtree
361: ObjectName,
362:
363: priority -- the lower the better, "-1" means default
364: INTEGER (-1..2147483647),
365:
366: operation
367: INTEGER {
368: delete(0),
369: readOnly(1),
370: readWrite(2)
371: }
372: }
373:
374: RRspPDU ::=
375: [APPLICATION 3] IMPLICIT
376: INTEGER {
377: failure(-1)
378:
379: -- on success the non-negative priority is returned
380: }
381:
382: END
383: .fi
384: .in -.5i
385: .sp
386:
387: .sh 2 "Mappings on Transport Service"
388: .lp
389: The SMUX protocol may be mapped onto any CO-mode transport service.
390: At present,
391: only one such mapping is defined.
392:
393: .sh 3 "Mapping onto the TCP"
394: .lp
395: When using the TCP to provide the transport-backing for the SMUX
396: protocol,
397: the SNMP agent listens on TCP port 199.
398: .lp
399: Each SMUX PDU is serialized using the Basic Encoding Rules [4] and
400: sent on the TCP.
401: As ASN.1 objects are self-delimiting when encoding using the BER,
402: so no packetization protocol is required.
403:
404: .bp
405: .sh 1 "MIB for the SMUX"
406: .lp
407: The MIB objects for the SMUX are implemented by the local SNMP agent:
408: .sp
409: .in +.5i
410: .nf
411: SMUX-MIB DEFINITIONS ::= BEGIN
412:
413: IMPORTS
414: enterprises, OBJECT-TYPE, ObjectName
415: FROM RFC1155-SMI;
416:
417:
418: unix OBJECT IDENTIFIER ::= { enterprises 4 }
419:
420:
421: smux OBJECT IDENTIFIER ::= { unix 4 }
422:
423: smuxPeerTable OBJECT-TYPE
424: SYNTAX SEQUENCE OF SmuxPeerEntry
425: ACCESS not-accessible
426: STATUS mandatory
427: ::= { smux 1 }
428:
429: smuxPeerEntry OBJECT-TYPE
430: SYNTAX SmuxPeerEntry
431: ACCESS not-accessible
432: STATUS mandatory
433: -- INDEX { smuxPindex }
434: ::= { smuxPeerTable 1}
435:
436: SmuxPeerEntry ::= SEQUENCE {
437: smuxPindex
438: INTEGER,
439: smuxPidentity
440: OBJECT IDENTIFIER,
441: smuxPdescription
442: DisplayString,
443: smuxPstatus
444: INTEGER
445: }
446:
447: smuxPindex OBJECT-TYPE
448: SYNTAX INTEGER
449: ACCESS read-write
450: STATUS mandatory
451: ::= { smuxPeerEntry 1 }
452:
453: smuxPidentity OBJECT-TYPE
454: SYNTAX OBJECT IDENTIFIER
455: ACCESS read-write
456: STATUS mandatory
457: ::= { smuxPeerEntry 2 }
458:
459: smuxPdescription OBJECT-TYPE
460: SYNTAX DisplayString (SIZE (0..255))
461: ACCESS read-write
462: STATUS mandatory
463: ::= { smuxPeerEntry 3 }
464:
465: smuxPstatus OBJECT-TYPE
466: SYNTAX INTEGER { valid(1), invalid(2), connecting(3) }
467: ACCESS read-write
468: STATUS mandatory
469: ::= { smuxPeerEntry 4 }
470:
471: smuxTreeTable OBJECT-TYPE
472: SYNTAX SEQUENCE OF SmuxTreeEntry
473: ACCESS not-accessible
474: STATUS mandatory
475: ::= { smux 2 }
476:
477: smuxTreeEntry OBJECT-TYPE
478: SYNTAX SmuxTreeEntry
479: ACCESS not-accessible
480: STATUS mandatory
481: ::= { smuxTreeTable 1}
482:
483: SmuxTreeEntry ::= SEQUENCE {
484: smuxTsubtree
485: ObjectName
486: smuxTpriority
487: INTEGER,
488: smuxTindex
489: INTEGER,
490: smuxTstatus
491: INTEGER
492: }
493:
494: smuxTsubtree OBJECT-TYPE
495: SYNTAX ObjectName
496: ACCESS read-write
497: STATUS mandatory
498: -- INDEX { smuxTsubtree, smuxTpriority }
499: ::= { smuxTreeEntry 1 }
500:
501: smuxTpriority OBJECT-TYPE
502: SYNTAX INTEGER (0..2147483647)
503: ACCESS read-write
504: STATUS mandatory
505: ::= { smuxTreeEntry 2 }
506:
507: smuxTindex OBJECT-TYPE
508: SYNTAX INTEGER (0..2147483647)
509: ACCESS read-write
510: STATUS mandatory
511: ::= { smuxTreeEntry 3 }
512:
513: smuxTstatus OBJECT-TYPE
514: SYNTAX INTEGER { valid(1), invalid(2) }
515: ACCESS read-write
516: STATUS mandatory
517: ::= { smuxTreeEntry 4 }
518:
519: END
520: .fi
521: .in -.5i
522: .sp
523:
524: .sh 2 "Identification of OBJECT instances for use with the SNMP"
525: .lp
526: The names for all object types in the MIB are defined explicitly either
527: in the Internet-standard MIB or in other documents which conform to
528: the naming conventions of the SMI[5]. The SMI requires
529: that conformant management protocols define mechanisms
530: for identifying individual instances of those object types
531: for a particular network element.
532: .lp
533: Each instance of any object type defined in the MIB is identified
534: in SNMP operations by a unique name called its "variable name."
535: In general, the name of an SNMP variable is an OBJECT IDENTIFIER
536: of the form x.y, where x is the name of a non-aggregate object type
537: defined in the MIB and y is an OBJECT IDENTIFIER fragment
538: that, in a way specific to the named object type, identifies the
539: desired instance.
540: .lp
541: This naming strategy admits the fullest exploitation of the
542: semantics of the powerful SNMP get-next operator,
543: because it assigns names for related variables so as to be contiguous
544: in the lexicographical ordering of all variable names
545: known in the MIB.
546: .lp
547: The type-specific naming of object instances is defined below
548: for a number of classes of object types.
549: Instances of
550: an object type to which
551: none of the following naming conventions are applicable are
552: named by OBJECT IDENTIFIERs of the form
553: x.0, where x is the name of said object type in the MIB definition.
554: .lp
555: For example,
556: suppose one wanted to identify an instance of the variable sysDescr.
557: The object class for sysDescr is:
558: .sp
559: .in +0.25
560: .nf
561: iso org dod internet mgmt mib system sysDescr
562: 1 3 6 1 2 1 1 1
563: .fi
564: .in -0.25
565: .sp
566: Hence,
567: the object type, x, would be 1.3.6.1.2.1.1.1 to which
568: is appended an instance sub-identifier of 0.
569: That is, 1.3.6.1.2.1.1.1.0
570: identifies the one and only instance of sysDescr.
571:
572: .sh 3 "smuxPeerTable Object Type Names"
573: .lp
574: The name of a SMUX peer relationship, s, is the OBJECT IDENTIFIER
575: value of the form i, where i has the value of that
576: instance of the smuxPindex object type associated with s.
577: .lp
578: For each object type, t, for which the defined name, n, has
579: a prefix of smuxPeerEntry, an instance, i, of t is named by an OBJECT
580: IDENTIFIER of the form n.s, where s is the name of the SMUX peer relationship
581: about which i represents information.
582: .lp
583: For example,
584: suppose one wanted to identify the instance of the variable smuxPidentity
585: associated with peer relationship number 2.
586: Accordingly, smuxPidentity.2 would identify the desired instance.
587:
588: .sh 3 "smuxTreeTable Object Type Names"
589: .lp
590: The name of a SMUX subtree relationship, s, is the OBJECT IDENTIFIER
591: value of the form i.j, where i has the value of that
592: instance of the smuxTsubtree object type,
593: and j has the value of that instance of the smuxTpriority object type,
594: associated with s.
595: .lp
596: For each object type, t, for which the defined name, n, has
597: a prefix of smuxTreeEntry, an instance, i, of t is named by an OBJECT
598: IDENTIFIER of the form n.s.t.u,
599: where s is the number of sub-identifiers in the corresponding instance
600: of smuxTsubtree,
601: t is the value of the instance of smuxTsubtree corresponding to this
602: entry,
603: and u is the value of the instance of smuxTpriority corresponding to
604: this entry.
605: .lp
606: For example,
607: suppose one wanted to identify the instance of the variable smuxTindex
608: associated with the subtree 1.3.6.1.5 for priority 3.
609: Accordingly, smuxTindex.5.1.3.6.1.5.3 would identify the desired instance.
610:
611: .bp
612: .sh 1 "Acknowledgements"
613: .lp
614: SMUX was designed one afternoon by these people:
615: .sp
616: .in +.5i
617: .nf
618: Jeffrey S. Case, UTK-CS
619: James R. Davin, MIT-LCS
620: Mark S. Fedor, PSI
621: Jeffrey C. Honig, Cornell
622: Louie A. Mamakos, UMD
623: Michael G. Petry, UMD
624: Yakov Rekhter, IBM
625: Marshall T. Rose, PSI
626: .fi
627: .in -.5i
628: .sp
629:
630: .bp
631: .sh 1 "References"
632: .ip [1]
633: J.D.\0Case, M.S.\0Fedor, M.L.\0Schoffstall, and J.R.\0Davin,
634: \fISimple Network Management Protocol\fR,
635: Internet Working Group Request for Comments 1157.
636: Network Information Center, SRI International, Menlo Park, California,
637: (May, 1990).
638: .ip [2]
639: K.\0McCloghrie and M.T.\0Rose,
640: \fIManagement Information Base for Network Management of TCP/IP-based
641: internets\fR,
642: Internet Working Group Request for Comments 1156.
643: Network Information Center, SRI International, Menlo Park, California,
644: (May, 1990).
645: .ip [3]
646: \fIInformation processing systems \(em Open Systems Interconnection \(em
647: Specification of Abstract Syntax Notation One (ASN.1)\fP, International
648: Organization for Standardization. International Standard 8824,
649: (December, 1987).
650: .ip [4]
651: \fIInformation processing systems \(em Open Systems Interconnection \(em
652: Specification of Basic Encoding Rules for Abstract Notation
653: One (ASN.1)\fP, International Organization for Standardization.
654: International Standard 8825,
655: (December, 1987).
656: .ip [5]
657: M.T.\0Rose and K.\0McCloghrie,
658: \fIStructure and Identification of Management Information for
659: TCP/IP\-based internets\fR,
660: Internet Working Group Request for Comments 1155.
661: Network Information Center, SRI International, Menlo Park, California,
662: (May, 1990).
663:
664: .bp
665: .lp
666: \fBTable of Contents\fR
667: .sp 2
668: .xp t
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.