|
|
1.1 ! root 1: ! 2: ! 3: ! 4: ! 5: ! 6: ! 7: Network Working Group J. Case ! 8: Request for Comments: 1157 SNMP Research ! 9: Obsoletes: RFC 1098 M. Fedor ! 10: Performance Systems International ! 11: M. Schoffstall ! 12: Performance Systems International ! 13: J. Davin ! 14: MIT Laboratory for Computer Science ! 15: May 1990 ! 16: ! 17: ! 18: A Simple Network Management Protocol (SNMP) ! 19: ! 20: Table of Contents ! 21: ! 22: 1. Status of this Memo ................................... 2 ! 23: 2. Introduction .......................................... 2 ! 24: 3. The SNMP Architecture ................................. 5 ! 25: 3.1 Goals of the Architecture ............................ 5 ! 26: 3.2 Elements of the Architecture ......................... 5 ! 27: 3.2.1 Scope of Management Information .................... 6 ! 28: 3.2.2 Representation of Management Information ........... 6 ! 29: 3.2.3 Operations Supported on Management Information ..... 7 ! 30: 3.2.4 Form and Meaning of Protocol Exchanges ............. 8 ! 31: 3.2.5 Definition of Administrative Relationships ......... 8 ! 32: 3.2.6 Form and Meaning of References to Managed Objects .. 12 ! 33: 3.2.6.1 Resolution of Ambiguous MIB References ........... 12 ! 34: 3.2.6.2 Resolution of References across MIB Versions...... 12 ! 35: 3.2.6.3 Identification of Object Instances ............... 12 ! 36: 3.2.6.3.1 ifTable Object Type Names ...................... 13 ! 37: 3.2.6.3.2 atTable Object Type Names ...................... 13 ! 38: 3.2.6.3.3 ipAddrTable Object Type Names .................. 14 ! 39: 3.2.6.3.4 ipRoutingTable Object Type Names ............... 14 ! 40: 3.2.6.3.5 tcpConnTable Object Type Names ................. 14 ! 41: 3.2.6.3.6 egpNeighTable Object Type Names ................ 15 ! 42: 4. Protocol Specification ................................ 16 ! 43: 4.1 Elements of Procedure ................................ 17 ! 44: 4.1.1 Common Constructs .................................. 19 ! 45: 4.1.2 The GetRequest-PDU ................................. 20 ! 46: 4.1.3 The GetNextRequest-PDU ............................. 21 ! 47: 4.1.3.1 Example of Table Traversal ....................... 23 ! 48: 4.1.4 The GetResponse-PDU ................................ 24 ! 49: 4.1.5 The SetRequest-PDU ................................. 25 ! 50: 4.1.6 The Trap-PDU ....................................... 27 ! 51: 4.1.6.1 The coldStart Trap ............................... 28 ! 52: 4.1.6.2 The warmStart Trap ............................... 28 ! 53: 4.1.6.3 The linkDown Trap ................................ 28 ! 54: 4.1.6.4 The linkUp Trap .................................. 28 ! 55: ! 56: ! 57: ! 58: Case, Fedor, Schoffstall, & Davin [Page 1] ! 59: ! 60: RFC 1157 SNMP May 1990 ! 61: ! 62: ! 63: 4.1.6.5 The authenticationFailure Trap ................... 28 ! 64: 4.1.6.6 The egpNeighborLoss Trap ......................... 28 ! 65: 4.1.6.7 The enterpriseSpecific Trap ...................... 29 ! 66: 5. Definitions ........................................... 30 ! 67: 6. Acknowledgements ...................................... 33 ! 68: 7. References ............................................ 34 ! 69: 8. Security Considerations................................ 35 ! 70: 9. Authors' Addresses..................................... 35 ! 71: ! 72: 1. Status of this Memo ! 73: ! 74: This RFC is a re-release of RFC 1098, with a changed "Status of this ! 75: Memo" section plus a few minor typographical corrections. This memo ! 76: defines a simple protocol by which management information for a ! 77: network element may be inspected or altered by logically remote ! 78: users. In particular, together with its companion memos which ! 79: describe the structure of management information along with the ! 80: management information base, these documents provide a simple, ! 81: workable architecture and system for managing TCP/IP-based internets ! 82: and in particular the Internet. ! 83: ! 84: The Internet Activities Board recommends that all IP and TCP ! 85: implementations be network manageable. This implies implementation ! 86: of the Internet MIB (RFC-1156) and at least one of the two ! 87: recommended management protocols SNMP (RFC-1157) or CMOT (RFC-1095). ! 88: It should be noted that, at this time, SNMP is a full Internet ! 89: standard and CMOT is a draft standard. See also the Host and Gateway ! 90: Requirements RFCs for more specific information on the applicability ! 91: of this standard. ! 92: ! 93: Please refer to the latest edition of the "IAB Official Protocol ! 94: Standards" RFC for current information on the state and status of ! 95: standard Internet protocols. ! 96: ! 97: Distribution of this memo is unlimited. ! 98: ! 99: 2. Introduction ! 100: ! 101: As reported in RFC 1052, IAB Recommendations for the Development of ! 102: Internet Network Management Standards [1], a two-prong strategy for ! 103: network management of TCP/IP-based internets was undertaken. In the ! 104: short-term, the Simple Network Management Protocol (SNMP) was to be ! 105: used to manage nodes in the Internet community. In the long-term, ! 106: the use of the OSI network management framework was to be examined. ! 107: Two documents were produced to define the management information: RFC ! 108: 1065, which defined the Structure of Management Information (SMI) ! 109: [2], and RFC 1066, which defined the Management Information Base ! 110: (MIB) [3]. Both of these documents were designed so as to be ! 111: ! 112: ! 113: ! 114: Case, Fedor, Schoffstall, & Davin [Page 2] ! 115: ! 116: RFC 1157 SNMP May 1990 ! 117: ! 118: ! 119: compatible with both the SNMP and the OSI network management ! 120: framework. ! 121: ! 122: This strategy was quite successful in the short-term: Internet-based ! 123: network management technology was fielded, by both the research and ! 124: commercial communities, within a few months. As a result of this, ! 125: portions of the Internet community became network manageable in a ! 126: timely fashion. ! 127: ! 128: As reported in RFC 1109, Report of the Second Ad Hoc Network ! 129: Management Review Group [4], the requirements of the SNMP and the OSI ! 130: network management frameworks were more different than anticipated. ! 131: As such, the requirement for compatibility between the SMI/MIB and ! 132: both frameworks was suspended. This action permitted the operational ! 133: network management framework, the SNMP, to respond to new operational ! 134: needs in the Internet community by producing documents defining new ! 135: MIB items. ! 136: ! 137: The IAB has designated the SNMP, SMI, and the initial Internet MIB to ! 138: be full "Standard Protocols" with "Recommended" status. By this ! 139: action, the IAB recommends that all IP and TCP implementations be ! 140: network manageable and that the implementations that are network ! 141: manageable are expected to adopt and implement the SMI, MIB, and ! 142: SNMP. ! 143: ! 144: As such, the current network management framework for TCP/IP- based ! 145: internets consists of: Structure and Identification of Management ! 146: Information for TCP/IP-based Internets, which describes how managed ! 147: objects contained in the MIB are defined as set forth in RFC 1155 ! 148: [5]; Management Information Base for Network Management of TCP/IP- ! 149: based Internets, which describes the managed objects contained in the ! 150: MIB as set forth in RFC 1156 [6]; and, the Simple Network Management ! 151: Protocol, which defines the protocol used to manage these objects, as ! 152: set forth in this memo. ! 153: ! 154: As reported in RFC 1052, IAB Recommendations for the Development of ! 155: Internet Network Management Standards [1], the Internet Activities ! 156: Board has directed the Internet Engineering Task Force (IETF) to ! 157: create two new working groups in the area of network management. One ! 158: group was charged with the further specification and definition of ! 159: elements to be included in the Management Information Base (MIB). ! 160: The other was charged with defining the modifications to the Simple ! 161: Network Management Protocol (SNMP) to accommodate the short-term ! 162: needs of the network vendor and operations communities, and to align ! 163: with the output of the MIB working group. ! 164: ! 165: The MIB working group produced two memos, one which defines a ! 166: Structure for Management Information (SMI) [2] for use by the managed ! 167: ! 168: ! 169: ! 170: Case, Fedor, Schoffstall, & Davin [Page 3] ! 171: ! 172: RFC 1157 SNMP May 1990 ! 173: ! 174: ! 175: objects contained in the MIB. A second memo [3] defines the list of ! 176: managed objects. ! 177: ! 178: The output of the SNMP Extensions working group is this memo, which ! 179: incorporates changes to the initial SNMP definition [7] required to ! 180: attain alignment with the output of the MIB working group. The ! 181: changes should be minimal in order to be consistent with the IAB's ! 182: directive that the working groups be "extremely sensitive to the need ! 183: to keep the SNMP simple." Although considerable care and debate has ! 184: gone into the changes to the SNMP which are reflected in this memo, ! 185: the resulting protocol is not backwardly-compatible with its ! 186: predecessor, the Simple Gateway Monitoring Protocol (SGMP) [8]. ! 187: Although the syntax of the protocol has been altered, the original ! 188: philosophy, design decisions, and architecture remain intact. In ! 189: order to avoid confusion, new UDP ports have been allocated for use ! 190: by the protocol described in this memo. ! 191: ! 192: ! 193: ! 194: ! 195: ! 196: ! 197: ! 198: ! 199: ! 200: ! 201: ! 202: ! 203: ! 204: ! 205: ! 206: ! 207: ! 208: ! 209: ! 210: ! 211: ! 212: ! 213: ! 214: ! 215: ! 216: ! 217: ! 218: ! 219: ! 220: ! 221: ! 222: ! 223: ! 224: ! 225: ! 226: Case, Fedor, Schoffstall, & Davin [Page 4] ! 227: ! 228: RFC 1157 SNMP May 1990 ! 229: ! 230: ! 231: 3. The SNMP Architecture ! 232: ! 233: Implicit in the SNMP architectural model is a collection of network ! 234: management stations and network elements. Network management ! 235: stations execute management applications which monitor and control ! 236: network elements. Network elements are devices such as hosts, ! 237: gateways, terminal servers, and the like, which have management ! 238: agents responsible for performing the network management functions ! 239: requested by the network management stations. The Simple Network ! 240: Management Protocol (SNMP) is used to communicate management ! 241: information between the network management stations and the agents in ! 242: the network elements. ! 243: ! 244: 3.1. Goals of the Architecture ! 245: ! 246: The SNMP explicitly minimizes the number and complexity of management ! 247: functions realized by the management agent itself. This goal is ! 248: attractive in at least four respects: ! 249: ! 250: (1) The development cost for management agent software ! 251: necessary to support the protocol is accordingly reduced. ! 252: ! 253: (2) The degree of management function that is remotely ! 254: supported is accordingly increased, thereby admitting ! 255: fullest use of internet resources in the management task. ! 256: ! 257: (3) The degree of management function that is remotely ! 258: supported is accordingly increased, thereby imposing the ! 259: fewest possible restrictions on the form and ! 260: sophistication of management tools. ! 261: ! 262: (4) Simplified sets of management functions are easily ! 263: understood and used by developers of network management ! 264: tools. ! 265: ! 266: A second goal of the protocol is that the functional paradigm for ! 267: monitoring and control be sufficiently extensible to accommodate ! 268: additional, possibly unanticipated aspects of network operation and ! 269: management. ! 270: ! 271: A third goal is that the architecture be, as much as possible, ! 272: independent of the architecture and mechanisms of particular hosts or ! 273: particular gateways. ! 274: ! 275: 3.2. Elements of the Architecture ! 276: ! 277: The SNMP architecture articulates a solution to the network ! 278: management problem in terms of: ! 279: ! 280: ! 281: ! 282: Case, Fedor, Schoffstall, & Davin [Page 5] ! 283: ! 284: RFC 1157 SNMP May 1990 ! 285: ! 286: ! 287: (1) the scope of the management information communicated by ! 288: the protocol, ! 289: ! 290: (2) the representation of the management information ! 291: communicated by the protocol, ! 292: ! 293: (3) operations on management information supported by the ! 294: protocol, ! 295: ! 296: (4) the form and meaning of exchanges among management ! 297: entities, ! 298: ! 299: (5) the definition of administrative relationships among ! 300: management entities, and ! 301: ! 302: (6) the form and meaning of references to management ! 303: information. ! 304: ! 305: 3.2.1. Scope of Management Information ! 306: ! 307: The scope of the management information communicated by operation of ! 308: the SNMP is exactly that represented by instances of all non- ! 309: aggregate object types either defined in Internet-standard MIB or ! 310: defined elsewhere according to the conventions set forth in ! 311: Internet-standard SMI [5]. ! 312: ! 313: Support for aggregate object types in the MIB is neither required for ! 314: conformance with the SMI nor realized by the SNMP. ! 315: ! 316: 3.2.2. Representation of Management Information ! 317: ! 318: Management information communicated by operation of the SNMP is ! 319: represented according to the subset of the ASN.1 language [9] that is ! 320: specified for the definition of non-aggregate types in the SMI. ! 321: ! 322: The SGMP adopted the convention of using a well-defined subset of the ! 323: ASN.1 language [9]. The SNMP continues and extends this tradition by ! 324: utilizing a moderately more complex subset of ASN.1 for describing ! 325: managed objects and for describing the protocol data units used for ! 326: managing those objects. In addition, the desire to ease eventual ! 327: transition to OSI-based network management protocols led to the ! 328: definition in the ASN.1 language of an Internet-standard Structure of ! 329: Management Information (SMI) [5] and Management Information Base ! 330: (MIB) [6]. The use of the ASN.1 language, was, in part, encouraged ! 331: by the successful use of ASN.1 in earlier efforts, in particular, the ! 332: SGMP. The restrictions on the use of ASN.1 that are part of the SMI ! 333: contribute to the simplicity espoused and validated by experience ! 334: with the SGMP. ! 335: ! 336: ! 337: ! 338: Case, Fedor, Schoffstall, & Davin [Page 6] ! 339: ! 340: RFC 1157 SNMP May 1990 ! 341: ! 342: ! 343: Also for the sake of simplicity, the SNMP uses only a subset of the ! 344: basic encoding rules of ASN.1 [10]. Namely, all encodings use the ! 345: definite-length form. Further, whenever permissible, non-constructor ! 346: encodings are used rather than constructor encodings. This ! 347: restriction applies to all aspects of ASN.1 encoding, both for the ! 348: top-level protocol data units and the data objects they contain. ! 349: ! 350: 3.2.3. Operations Supported on Management Information ! 351: ! 352: The SNMP models all management agent functions as alterations or ! 353: inspections of variables. Thus, a protocol entity on a logically ! 354: remote host (possibly the network element itself) interacts with the ! 355: management agent resident on the network element in order to retrieve ! 356: (get) or alter (set) variables. This strategy has at least two ! 357: positive consequences: ! 358: ! 359: (1) It has the effect of limiting the number of essential ! 360: management functions realized by the management agent to ! 361: two: one operation to assign a value to a specified ! 362: configuration or other parameter and another to retrieve ! 363: such a value. ! 364: ! 365: (2) A second effect of this decision is to avoid introducing ! 366: into the protocol definition support for imperative ! 367: management commands: the number of such commands is in ! 368: practice ever-increasing, and the semantics of such ! 369: commands are in general arbitrarily complex. ! 370: ! 371: The strategy implicit in the SNMP is that the monitoring of network ! 372: state at any significant level of detail is accomplished primarily by ! 373: polling for appropriate information on the part of the monitoring ! 374: center(s). A limited number of unsolicited messages (traps) guide ! 375: the timing and focus of the polling. Limiting the number of ! 376: unsolicited messages is consistent with the goal of simplicity and ! 377: minimizing the amount of traffic generated by the network management ! 378: function. ! 379: ! 380: The exclusion of imperative commands from the set of explicitly ! 381: supported management functions is unlikely to preclude any desirable ! 382: management agent operation. Currently, most commands are requests ! 383: either to set the value of some parameter or to retrieve such a ! 384: value, and the function of the few imperative commands currently ! 385: supported is easily accommodated in an asynchronous mode by this ! 386: management model. In this scheme, an imperative command might be ! 387: realized as the setting of a parameter value that subsequently ! 388: triggers the desired action. For example, rather than implementing a ! 389: "reboot command," this action might be invoked by simply setting a ! 390: parameter indicating the number of seconds until system reboot. ! 391: ! 392: ! 393: ! 394: Case, Fedor, Schoffstall, & Davin [Page 7] ! 395: ! 396: RFC 1157 SNMP May 1990 ! 397: ! 398: ! 399: 3.2.4. Form and Meaning of Protocol Exchanges ! 400: ! 401: The communication of management information among management entities ! 402: is realized in the SNMP through the exchange of protocol messages. ! 403: The form and meaning of those messages is defined below in Section 4. ! 404: ! 405: Consistent with the goal of minimizing complexity of the management ! 406: agent, the exchange of SNMP messages requires only an unreliable ! 407: datagram service, and every message is entirely and independently ! 408: represented by a single transport datagram. While this document ! 409: specifies the exchange of messages via the UDP protocol [11], the ! 410: mechanisms of the SNMP are generally suitable for use with a wide ! 411: variety of transport services. ! 412: ! 413: 3.2.5. Definition of Administrative Relationships ! 414: ! 415: The SNMP architecture admits a variety of administrative ! 416: relationships among entities that participate in the protocol. The ! 417: entities residing at management stations and network elements which ! 418: communicate with one another using the SNMP are termed SNMP ! 419: application entities. The peer processes which implement the SNMP, ! 420: and thus support the SNMP application entities, are termed protocol ! 421: entities. ! 422: ! 423: A pairing of an SNMP agent with some arbitrary set of SNMP ! 424: application entities is called an SNMP community. Each SNMP ! 425: community is named by a string of octets, that is called the ! 426: community name for said community. ! 427: ! 428: An SNMP message originated by an SNMP application entity that in fact ! 429: belongs to the SNMP community named by the community component of ! 430: said message is called an authentic SNMP message. The set of rules ! 431: by which an SNMP message is identified as an authentic SNMP message ! 432: for a particular SNMP community is called an authentication scheme. ! 433: An implementation of a function that identifies authentic SNMP ! 434: messages according to one or more authentication schemes is called an ! 435: authentication service. ! 436: ! 437: Clearly, effective management of administrative relationships among ! 438: SNMP application entities requires authentication services that (by ! 439: the use of encryption or other techniques) are able to identify ! 440: authentic SNMP messages with a high degree of certainty. Some SNMP ! 441: implementations may wish to support only a trivial authentication ! 442: service that identifies all SNMP messages as authentic SNMP messages. ! 443: ! 444: For any network element, a subset of objects in the MIB that pertain ! 445: to that element is called a SNMP MIB view. Note that the names of ! 446: the object types represented in a SNMP MIB view need not belong to a ! 447: ! 448: ! 449: ! 450: Case, Fedor, Schoffstall, & Davin [Page 8] ! 451: ! 452: RFC 1157 SNMP May 1990 ! 453: ! 454: ! 455: single sub-tree of the object type name space. ! 456: ! 457: An element of the set { READ-ONLY, READ-WRITE } is called an SNMP ! 458: access mode. ! 459: ! 460: A pairing of a SNMP access mode with a SNMP MIB view is called an ! 461: SNMP community profile. A SNMP community profile represents ! 462: specified access privileges to variables in a specified MIB view. For ! 463: every variable in the MIB view in a given SNMP community profile, ! 464: access to that variable is represented by the profile according to ! 465: the following conventions: ! 466: ! 467: (1) if said variable is defined in the MIB with "Access:" of ! 468: "none," it is unavailable as an operand for any operator; ! 469: ! 470: (2) if said variable is defined in the MIB with "Access:" of ! 471: "read-write" or "write-only" and the access mode of the ! 472: given profile is READ-WRITE, that variable is available ! 473: as an operand for the get, set, and trap operations; ! 474: ! 475: (3) otherwise, the variable is available as an operand for ! 476: the get and trap operations. ! 477: ! 478: (4) In those cases where a "write-only" variable is an ! 479: operand used for the get or trap operations, the value ! 480: given for the variable is implementation-specific. ! 481: ! 482: A pairing of a SNMP community with a SNMP community profile is called ! 483: a SNMP access policy. An access policy represents a specified ! 484: community profile afforded by the SNMP agent of a specified SNMP ! 485: community to other members of that community. All administrative ! 486: relationships among SNMP application entities are architecturally ! 487: defined in terms of SNMP access policies. ! 488: ! 489: For every SNMP access policy, if the network element on which the ! 490: SNMP agent for the specified SNMP community resides is not that to ! 491: which the MIB view for the specified profile pertains, then that ! 492: policy is called a SNMP proxy access policy. The SNMP agent ! 493: associated with a proxy access policy is called a SNMP proxy agent. ! 494: While careless definition of proxy access policies can result in ! 495: management loops, prudent definition of proxy policies is useful in ! 496: at least two ways: ! 497: ! 498: (1) It permits the monitoring and control of network elements ! 499: which are otherwise not addressable using the management ! 500: protocol and the transport protocol. That is, a proxy ! 501: agent may provide a protocol conversion function allowing ! 502: a management station to apply a consistent management ! 503: ! 504: ! 505: ! 506: Case, Fedor, Schoffstall, & Davin [Page 9] ! 507: ! 508: RFC 1157 SNMP May 1990 ! 509: ! 510: ! 511: framework to all network elements, including devices such ! 512: as modems, multiplexors, and other devices which support ! 513: different management frameworks. ! 514: ! 515: (2) It potentially shields network elements from elaborate ! 516: access control policies. For example, a proxy agent may ! 517: implement sophisticated access control whereby diverse ! 518: subsets of variables within the MIB are made accessible ! 519: to different management stations without increasing the ! 520: complexity of the network element. ! 521: ! 522: By way of example, Figure 1 illustrates the relationship between ! 523: management stations, proxy agents, and management agents. In this ! 524: example, the proxy agent is envisioned to be a normal Internet ! 525: Network Operations Center (INOC) of some administrative domain which ! 526: has a standard managerial relationship with a set of management ! 527: agents. ! 528: ! 529: ! 530: ! 531: ! 532: ! 533: ! 534: ! 535: ! 536: ! 537: ! 538: ! 539: ! 540: ! 541: ! 542: ! 543: ! 544: ! 545: ! 546: ! 547: ! 548: ! 549: ! 550: ! 551: ! 552: ! 553: ! 554: ! 555: ! 556: ! 557: ! 558: ! 559: ! 560: ! 561: ! 562: Case, Fedor, Schoffstall, & Davin [Page 10] ! 563: ! 564: RFC 1157 SNMP May 1990 ! 565: ! 566: ! 567: +------------------+ +----------------+ +----------------+ ! 568: | Region #1 INOC | |Region #2 INOC | |PC in Region #3 | ! 569: | | | | | | ! 570: |Domain=Region #1 | |Domain=Region #2| |Domain=Region #3| ! 571: |CPU=super-mini-1 | |CPU=super-mini-1| |CPU=Clone-1 | ! 572: |PCommunity=pub | |PCommunity=pub | |PCommunity=slate| ! 573: | | | | | | ! 574: +------------------+ +----------------+ +----------------+ ! 575: /|\ /|\ /|\ ! 576: | | | ! 577: | | | ! 578: | \|/ | ! 579: | +-----------------+ | ! 580: +-------------->| Region #3 INOC |<-------------+ ! 581: | | ! 582: |Domain=Region #3 | ! 583: |CPU=super-mini-2 | ! 584: |PCommunity=pub, | ! 585: | slate | ! 586: |DCommunity=secret| ! 587: +-------------->| |<-------------+ ! 588: | +-----------------+ | ! 589: | /|\ | ! 590: | | | ! 591: | | | ! 592: \|/ \|/ \|/ ! 593: +-----------------+ +-----------------+ +-----------------+ ! 594: |Domain=Region#3 | |Domain=Region#3 | |Domain=Region#3 | ! 595: |CPU=router-1 | |CPU=mainframe-1 | |CPU=modem-1 | ! 596: |DCommunity=secret| |DCommunity=secret| |DCommunity=secret| ! 597: +-----------------+ +-----------------+ +-----------------+ ! 598: ! 599: ! 600: Domain: the administrative domain of the element ! 601: PCommunity: the name of a community utilizing a proxy agent ! 602: DCommunity: the name of a direct community ! 603: ! 604: ! 605: Figure 1 ! 606: Example Network Management Configuration ! 607: ! 608: ! 609: ! 610: ! 611: ! 612: ! 613: ! 614: ! 615: ! 616: ! 617: ! 618: Case, Fedor, Schoffstall, & Davin [Page 11] ! 619: ! 620: RFC 1157 SNMP May 1990 ! 621: ! 622: ! 623: 3.2.6. Form and Meaning of References to Managed Objects ! 624: ! 625: The SMI requires that the definition of a conformant management ! 626: protocol address: ! 627: ! 628: (1) the resolution of ambiguous MIB references, ! 629: ! 630: (2) the resolution of MIB references in the presence multiple ! 631: MIB versions, and ! 632: ! 633: (3) the identification of particular instances of object ! 634: types defined in the MIB. ! 635: ! 636: 3.2.6.1. Resolution of Ambiguous MIB References ! 637: ! 638: Because the scope of any SNMP operation is conceptually confined to ! 639: objects relevant to a single network element, and because all SNMP ! 640: references to MIB objects are (implicitly or explicitly) by unique ! 641: variable names, there is no possibility that any SNMP reference to ! 642: any object type defined in the MIB could resolve to multiple ! 643: instances of that type. ! 644: ! 645: 3.2.6.2. Resolution of References across MIB Versions ! 646: ! 647: The object instance referred to by any SNMP operation is exactly that ! 648: specified as part of the operation request or (in the case of a get- ! 649: next operation) its immediate successor in the MIB as a whole. In ! 650: particular, a reference to an object as part of some version of the ! 651: Internet-standard MIB does not resolve to any object that is not part ! 652: of said version of the Internet-standard MIB, except in the case that ! 653: the requested operation is get-next and the specified object name is ! 654: lexicographically last among the names of all objects presented as ! 655: part of said version of the Internet-Standard MIB. ! 656: ! 657: 3.2.6.3. Identification of Object Instances ! 658: ! 659: The names for all object types in the MIB are defined explicitly ! 660: either in the Internet-standard MIB or in other documents which ! 661: conform to the naming conventions of the SMI. The SMI requires that ! 662: conformant management protocols define mechanisms for identifying ! 663: individual instances of those object types for a particular network ! 664: element. ! 665: ! 666: Each instance of any object type defined in the MIB is identified in ! 667: SNMP operations by a unique name called its "variable name." In ! 668: general, the name of an SNMP variable is an OBJECT IDENTIFIER of the ! 669: form x.y, where x is the name of a non-aggregate object type defined ! 670: in the MIB and y is an OBJECT IDENTIFIER fragment that, in a way ! 671: ! 672: ! 673: ! 674: Case, Fedor, Schoffstall, & Davin [Page 12] ! 675: ! 676: RFC 1157 SNMP May 1990 ! 677: ! 678: ! 679: specific to the named object type, identifies the desired instance. ! 680: ! 681: This naming strategy admits the fullest exploitation of the semantics ! 682: of the GetNextRequest-PDU (see Section 4), because it assigns names ! 683: for related variables so as to be contiguous in the lexicographical ! 684: ordering of all variable names known in the MIB. ! 685: ! 686: The type-specific naming of object instances is defined below for a ! 687: number of classes of object types. Instances of an object type to ! 688: which none of the following naming conventions are applicable are ! 689: named by OBJECT IDENTIFIERs of the form x.0, where x is the name of ! 690: said object type in the MIB definition. ! 691: ! 692: For example, suppose one wanted to identify an instance of the ! 693: variable sysDescr The object class for sysDescr is: ! 694: ! 695: iso org dod internet mgmt mib system sysDescr ! 696: 1 3 6 1 2 1 1 1 ! 697: ! 698: Hence, the object type, x, would be 1.3.6.1.2.1.1.1 to which is ! 699: appended an instance sub-identifier of 0. That is, 1.3.6.1.2.1.1.1.0 ! 700: identifies the one and only instance of sysDescr. ! 701: ! 702: 3.2.6.3.1. ifTable Object Type Names ! 703: ! 704: The name of a subnet interface, s, is the OBJECT IDENTIFIER value of ! 705: the form i, where i has the value of that instance of the ifIndex ! 706: object type associated with s. ! 707: ! 708: For each object type, t, for which the defined name, n, has a prefix ! 709: of ifEntry, an instance, i, of t is named by an OBJECT IDENTIFIER of ! 710: the form n.s, where s is the name of the subnet interface about which ! 711: i represents information. ! 712: ! 713: For example, suppose one wanted to identify the instance of the ! 714: variable ifType associated with interface 2. Accordingly, ifType.2 ! 715: would identify the desired instance. ! 716: ! 717: 3.2.6.3.2. atTable Object Type Names ! 718: ! 719: The name of an AT-cached network address, x, is an OBJECT IDENTIFIER ! 720: of the form 1.a.b.c.d, where a.b.c.d is the value (in the familiar ! 721: "dot" notation) of the atNetAddress object type associated with x. ! 722: ! 723: The name of an address translation equivalence e is an OBJECT ! 724: IDENTIFIER value of the form s.w, such that s is the value of that ! 725: instance of the atIndex object type associated with e and such that w ! 726: is the name of the AT-cached network address associated with e. ! 727: ! 728: ! 729: ! 730: Case, Fedor, Schoffstall, & Davin [Page 13] ! 731: ! 732: RFC 1157 SNMP May 1990 ! 733: ! 734: ! 735: For each object type, t, for which the defined name, n, has a prefix ! 736: of atEntry, an instance, i, of t is named by an OBJECT IDENTIFIER of ! 737: the form n.y, where y is the name of the address translation ! 738: equivalence about which i represents information. ! 739: ! 740: For example, suppose one wanted to find the physical address of an ! 741: entry in the address translation table (ARP cache) associated with an ! 742: IP address of 89.1.1.42 and interface 3. Accordingly, ! 743: atPhysAddress.3.1.89.1.1.42 would identify the desired instance. ! 744: ! 745: 3.2.6.3.3. ipAddrTable Object Type Names ! 746: ! 747: The name of an IP-addressable network element, x, is the OBJECT ! 748: IDENTIFIER of the form a.b.c.d such that a.b.c.d is the value (in the ! 749: familiar "dot" notation) of that instance of the ipAdEntAddr object ! 750: type associated with x. ! 751: ! 752: For each object type, t, for which the defined name, n, has a prefix ! 753: of ipAddrEntry, an instance, i, of t is named by an OBJECT IDENTIFIER ! 754: of the form n.y, where y is the name of the IP-addressable network ! 755: element about which i represents information. ! 756: ! 757: For example, suppose one wanted to find the network mask of an entry ! 758: in the IP interface table associated with an IP address of 89.1.1.42. ! 759: Accordingly, ipAdEntNetMask.89.1.1.42 would identify the desired ! 760: instance. ! 761: ! 762: 3.2.6.3.4. ipRoutingTable Object Type Names ! 763: ! 764: The name of an IP route, x, is the OBJECT IDENTIFIER of the form ! 765: a.b.c.d such that a.b.c.d is the value (in the familiar "dot" ! 766: notation) of that instance of the ipRouteDest object type associated ! 767: with x. ! 768: ! 769: For each object type, t, for which the defined name, n, has a prefix ! 770: of ipRoutingEntry, an instance, i, of t is named by an OBJECT ! 771: IDENTIFIER of the form n.y, where y is the name of the IP route about ! 772: which i represents information. ! 773: ! 774: For example, suppose one wanted to find the next hop of an entry in ! 775: the IP routing table associated with the destination of 89.1.1.42. ! 776: Accordingly, ipRouteNextHop.89.1.1.42 would identify the desired ! 777: instance. ! 778: ! 779: 3.2.6.3.5. tcpConnTable Object Type Names ! 780: ! 781: The name of a TCP connection, x, is the OBJECT IDENTIFIER of the form ! 782: a.b.c.d.e.f.g.h.i.j such that a.b.c.d is the value (in the familiar ! 783: ! 784: ! 785: ! 786: Case, Fedor, Schoffstall, & Davin [Page 14] ! 787: ! 788: RFC 1157 SNMP May 1990 ! 789: ! 790: ! 791: "dot" notation) of that instance of the tcpConnLocalAddress object ! 792: type associated with x and such that f.g.h.i is the value (in the ! 793: familiar "dot" notation) of that instance of the tcpConnRemoteAddress ! 794: object type associated with x and such that e is the value of that ! 795: instance of the tcpConnLocalPort object type associated with x and ! 796: such that j is the value of that instance of the tcpConnRemotePort ! 797: object type associated with x. ! 798: ! 799: For each object type, t, for which the defined name, n, has a prefix ! 800: of tcpConnEntry, an instance, i, of t is named by an OBJECT ! 801: IDENTIFIER of the form n.y, where y is the name of the TCP connection ! 802: about which i represents information. ! 803: ! 804: For example, suppose one wanted to find the state of a TCP connection ! 805: between the local address of 89.1.1.42 on TCP port 21 and the remote ! 806: address of 10.0.0.51 on TCP port 2059. Accordingly, ! 807: tcpConnState.89.1.1.42.21.10.0.0.51.2059 would identify the desired ! 808: instance. ! 809: ! 810: 3.2.6.3.6. egpNeighTable Object Type Names ! 811: ! 812: The name of an EGP neighbor, x, is the OBJECT IDENTIFIER of the form ! 813: a.b.c.d such that a.b.c.d is the value (in the familiar "dot" ! 814: notation) of that instance of the egpNeighAddr object type associated ! 815: with x. ! 816: ! 817: For each object type, t, for which the defined name, n, has a prefix ! 818: of egpNeighEntry, an instance, i, of t is named by an OBJECT ! 819: IDENTIFIER of the form n.y, where y is the name of the EGP neighbor ! 820: about which i represents information. ! 821: ! 822: For example, suppose one wanted to find the neighbor state for the IP ! 823: address of 89.1.1.42. Accordingly, egpNeighState.89.1.1.42 would ! 824: identify the desired instance. ! 825: ! 826: ! 827: ! 828: ! 829: ! 830: ! 831: ! 832: ! 833: ! 834: ! 835: ! 836: ! 837: ! 838: ! 839: ! 840: ! 841: ! 842: Case, Fedor, Schoffstall, & Davin [Page 15] ! 843: ! 844: RFC 1157 SNMP May 1990 ! 845: ! 846: ! 847: 4. Protocol Specification ! 848: ! 849: The network management protocol is an application protocol by which ! 850: the variables of an agent's MIB may be inspected or altered. ! 851: ! 852: Communication among protocol entities is accomplished by the exchange ! 853: of messages, each of which is entirely and independently represented ! 854: within a single UDP datagram using the basic encoding rules of ASN.1 ! 855: (as discussed in Section 3.2.2). A message consists of a version ! 856: identifier, an SNMP community name, and a protocol data unit (PDU). ! 857: A protocol entity receives messages at UDP port 161 on the host with ! 858: which it is associated for all messages except for those which report ! 859: traps (i.e., all messages except those which contain the Trap-PDU). ! 860: Messages which report traps should be received on UDP port 162 for ! 861: further processing. An implementation of this protocol need not ! 862: accept messages whose length exceeds 484 octets. However, it is ! 863: recommended that implementations support larger datagrams whenever ! 864: feasible. ! 865: ! 866: It is mandatory that all implementations of the SNMP support the five ! 867: PDUs: GetRequest-PDU, GetNextRequest-PDU, GetResponse-PDU, ! 868: SetRequest-PDU, and Trap-PDU. ! 869: ! 870: RFC1157-SNMP DEFINITIONS ::= BEGIN ! 871: ! 872: IMPORTS ! 873: ObjectName, ObjectSyntax, NetworkAddress, IpAddress, TimeTicks ! 874: FROM RFC1155-SMI; ! 875: ! 876: ! 877: -- top-level message ! 878: ! 879: Message ::= ! 880: SEQUENCE { ! 881: version -- version-1 for this RFC ! 882: INTEGER { ! 883: version-1(0) ! 884: }, ! 885: ! 886: community -- community name ! 887: OCTET STRING, ! 888: ! 889: data -- e.g., PDUs if trivial ! 890: ANY -- authentication is being used ! 891: } ! 892: ! 893: ! 894: ! 895: ! 896: ! 897: ! 898: Case, Fedor, Schoffstall, & Davin [Page 16] ! 899: ! 900: RFC 1157 SNMP May 1990 ! 901: ! 902: ! 903: -- protocol data units ! 904: ! 905: PDUs ::= ! 906: CHOICE { ! 907: get-request ! 908: GetRequest-PDU, ! 909: ! 910: get-next-request ! 911: GetNextRequest-PDU, ! 912: ! 913: get-response ! 914: GetResponse-PDU, ! 915: ! 916: set-request ! 917: SetRequest-PDU, ! 918: ! 919: trap ! 920: Trap-PDU ! 921: } ! 922: ! 923: -- the individual PDUs and commonly used ! 924: -- data types will be defined later ! 925: ! 926: END ! 927: ! 928: ! 929: 4.1. Elements of Procedure ! 930: ! 931: This section describes the actions of a protocol entity implementing ! 932: the SNMP. Note, however, that it is not intended to constrain the ! 933: internal architecture of any conformant implementation. ! 934: ! 935: In the text that follows, the term transport address is used. In the ! 936: case of the UDP, a transport address consists of an IP address along ! 937: with a UDP port. Other transport services may be used to support the ! 938: SNMP. In these cases, the definition of a transport address should ! 939: be made accordingly. ! 940: ! 941: The top-level actions of a protocol entity which generates a message ! 942: are as follows: ! 943: ! 944: (1) It first constructs the appropriate PDU, e.g., the ! 945: GetRequest-PDU, as an ASN.1 object. ! 946: ! 947: (2) It then passes this ASN.1 object along with a community ! 948: name its source transport address and the destination ! 949: transport address, to the service which implements the ! 950: desired authentication scheme. This authentication ! 951: ! 952: ! 953: ! 954: Case, Fedor, Schoffstall, & Davin [Page 17] ! 955: ! 956: RFC 1157 SNMP May 1990 ! 957: ! 958: ! 959: service returns another ASN.1 object. ! 960: ! 961: (3) The protocol entity then constructs an ASN.1 Message ! 962: object, using the community name and the resulting ASN.1 ! 963: object. ! 964: ! 965: (4) This new ASN.1 object is then serialized, using the basic ! 966: encoding rules of ASN.1, and then sent using a transport ! 967: service to the peer protocol entity. ! 968: ! 969: Similarly, the top-level actions of a protocol entity which receives ! 970: a message are as follows: ! 971: ! 972: (1) It performs a rudimentary parse of the incoming datagram ! 973: to build an ASN.1 object corresponding to an ASN.1 ! 974: Message object. If the parse fails, it discards the ! 975: datagram and performs no further actions. ! 976: ! 977: (2) It then verifies the version number of the SNMP message. ! 978: If there is a mismatch, it discards the datagram and ! 979: performs no further actions. ! 980: ! 981: (3) The protocol entity then passes the community name and ! 982: user data found in the ASN.1 Message object, along with ! 983: the datagram's source and destination transport addresses ! 984: to the service which implements the desired ! 985: authentication scheme. This entity returns another ASN.1 ! 986: object, or signals an authentication failure. In the ! 987: latter case, the protocol entity notes this failure, ! 988: (possibly) generates a trap, and discards the datagram ! 989: and performs no further actions. ! 990: ! 991: (4) The protocol entity then performs a rudimentary parse on ! 992: the ASN.1 object returned from the authentication service ! 993: to build an ASN.1 object corresponding to an ASN.1 PDUs ! 994: object. If the parse fails, it discards the datagram and ! 995: performs no further actions. Otherwise, using the named ! 996: SNMP community, the appropriate profile is selected, and ! 997: the PDU is processed accordingly. If, as a result of ! 998: this processing, a message is returned then the source ! 999: transport address that the response message is sent from ! 1000: shall be identical to the destination transport address ! 1001: that the original request message was sent to. ! 1002: ! 1003: ! 1004: ! 1005: ! 1006: ! 1007: ! 1008: ! 1009: ! 1010: Case, Fedor, Schoffstall, & Davin [Page 18] ! 1011: ! 1012: RFC 1157 SNMP May 1990 ! 1013: ! 1014: ! 1015: 4.1.1. Common Constructs ! 1016: ! 1017: Before introducing the six PDU types of the protocol, it is ! 1018: appropriate to consider some of the ASN.1 constructs used frequently: ! 1019: ! 1020: -- request/response information ! 1021: ! 1022: RequestID ::= ! 1023: INTEGER ! 1024: ! 1025: ErrorStatus ::= ! 1026: INTEGER { ! 1027: noError(0), ! 1028: tooBig(1), ! 1029: noSuchName(2), ! 1030: badValue(3), ! 1031: readOnly(4) ! 1032: genErr(5) ! 1033: } ! 1034: ! 1035: ErrorIndex ::= ! 1036: INTEGER ! 1037: ! 1038: ! 1039: -- variable bindings ! 1040: ! 1041: VarBind ::= ! 1042: SEQUENCE { ! 1043: name ! 1044: ObjectName, ! 1045: ! 1046: value ! 1047: ObjectSyntax ! 1048: } ! 1049: ! 1050: VarBindList ::= ! 1051: SEQUENCE OF ! 1052: VarBind ! 1053: ! 1054: ! 1055: RequestIDs are used to distinguish among outstanding requests. By ! 1056: use of the RequestID, an SNMP application entity can correlate ! 1057: incoming responses with outstanding requests. In cases where an ! 1058: unreliable datagram service is being used, the RequestID also ! 1059: provides a simple means of identifying messages duplicated by the ! 1060: network. ! 1061: ! 1062: A non-zero instance of ErrorStatus is used to indicate that an ! 1063: ! 1064: ! 1065: ! 1066: Case, Fedor, Schoffstall, & Davin [Page 19] ! 1067: ! 1068: RFC 1157 SNMP May 1990 ! 1069: ! 1070: ! 1071: exception occurred while processing a request. In these cases, ! 1072: ErrorIndex may provide additional information by indicating which ! 1073: variable in a list caused the exception. ! 1074: ! 1075: The term variable refers to an instance of a managed object. A ! 1076: variable binding, or VarBind, refers to the pairing of the name of a ! 1077: variable to the variable's value. A VarBindList is a simple list of ! 1078: variable names and corresponding values. Some PDUs are concerned ! 1079: only with the name of a variable and not its value (e.g., the ! 1080: GetRequest-PDU). In this case, the value portion of the binding is ! 1081: ignored by the protocol entity. However, the value portion must ! 1082: still have valid ASN.1 syntax and encoding. It is recommended that ! 1083: the ASN.1 value NULL be used for the value portion of such bindings. ! 1084: ! 1085: 4.1.2. The GetRequest-PDU ! 1086: ! 1087: The form of the GetRequest-PDU is: ! 1088: GetRequest-PDU ::= ! 1089: [0] ! 1090: IMPLICIT SEQUENCE { ! 1091: request-id ! 1092: RequestID, ! 1093: ! 1094: error-status -- always 0 ! 1095: ErrorStatus, ! 1096: ! 1097: error-index -- always 0 ! 1098: ErrorIndex, ! 1099: ! 1100: variable-bindings ! 1101: VarBindList ! 1102: } ! 1103: ! 1104: ! 1105: The GetRequest-PDU is generated by a protocol entity only at the ! 1106: request of its SNMP application entity. ! 1107: ! 1108: Upon receipt of the GetRequest-PDU, the receiving protocol entity ! 1109: responds according to any applicable rule in the list below: ! 1110: ! 1111: (1) If, for any object named in the variable-bindings field, ! 1112: the object's name does not exactly match the name of some ! 1113: object available for get operations in the relevant MIB ! 1114: view, then the receiving entity sends to the originator ! 1115: of the received message the GetResponse-PDU of identical ! 1116: form, except that the value of the error-status field is ! 1117: noSuchName, and the value of the error-index field is the ! 1118: index of said object name component in the received ! 1119: ! 1120: ! 1121: ! 1122: Case, Fedor, Schoffstall, & Davin [Page 20] ! 1123: ! 1124: RFC 1157 SNMP May 1990 ! 1125: ! 1126: ! 1127: message. ! 1128: ! 1129: (2) If, for any object named in the variable-bindings field, ! 1130: the object is an aggregate type (as defined in the SMI), ! 1131: then the receiving entity sends to the originator of the ! 1132: received message the GetResponse-PDU of identical form, ! 1133: except that the value of the error-status field is ! 1134: noSuchName, and the value of the error-index field is the ! 1135: index of said object name component in the received ! 1136: message. ! 1137: ! 1138: (3) If the size of the GetResponse-PDU generated as described ! 1139: below would exceed a local limitation, then the receiving ! 1140: entity sends to the originator of the received message ! 1141: the GetResponse-PDU of identical form, except that the ! 1142: value of the error-status field is tooBig, and the value ! 1143: of the error-index field is zero. ! 1144: ! 1145: (4) If, for any object named in the variable-bindings field, ! 1146: the value of the object cannot be retrieved for reasons ! 1147: not covered by any of the foregoing rules, then the ! 1148: receiving entity sends to the originator of the received ! 1149: message the GetResponse-PDU of identical form, except ! 1150: that the value of the error-status field is genErr and ! 1151: the value of the error-index field is the index of said ! 1152: object name component in the received message. ! 1153: ! 1154: If none of the foregoing rules apply, then the receiving protocol ! 1155: entity sends to the originator of the received message the ! 1156: GetResponse-PDU such that, for each object named in the variable- ! 1157: bindings field of the received message, the corresponding component ! 1158: of the GetResponse-PDU represents the name and value of that ! 1159: variable. The value of the error- status field of the GetResponse- ! 1160: PDU is noError and the value of the error-index field is zero. The ! 1161: value of the request-id field of the GetResponse-PDU is that of the ! 1162: received message. ! 1163: ! 1164: 4.1.3. The GetNextRequest-PDU ! 1165: ! 1166: The form of the GetNextRequest-PDU is identical to that of the ! 1167: GetRequest-PDU except for the indication of the PDU type. In the ! 1168: ASN.1 language: ! 1169: ! 1170: GetNextRequest-PDU ::= ! 1171: [1] ! 1172: IMPLICIT SEQUENCE { ! 1173: request-id ! 1174: RequestID, ! 1175: ! 1176: ! 1177: ! 1178: Case, Fedor, Schoffstall, & Davin [Page 21] ! 1179: ! 1180: RFC 1157 SNMP May 1990 ! 1181: ! 1182: ! 1183: error-status -- always 0 ! 1184: ErrorStatus, ! 1185: ! 1186: error-index -- always 0 ! 1187: ErrorIndex, ! 1188: ! 1189: variable-bindings ! 1190: VarBindList ! 1191: } ! 1192: ! 1193: ! 1194: The GetNextRequest-PDU is generated by a protocol entity only at the ! 1195: request of its SNMP application entity. ! 1196: ! 1197: Upon receipt of the GetNextRequest-PDU, the receiving protocol entity ! 1198: responds according to any applicable rule in the list below: ! 1199: ! 1200: (1) If, for any object name in the variable-bindings field, ! 1201: that name does not lexicographically precede the name of ! 1202: some object available for get operations in the relevant ! 1203: MIB view, then the receiving entity sends to the ! 1204: originator of the received message the GetResponse-PDU of ! 1205: identical form, except that the value of the error-status ! 1206: field is noSuchName, and the value of the error-index ! 1207: field is the index of said object name component in the ! 1208: received message. ! 1209: ! 1210: (2) If the size of the GetResponse-PDU generated as described ! 1211: below would exceed a local limitation, then the receiving ! 1212: entity sends to the originator of the received message ! 1213: the GetResponse-PDU of identical form, except that the ! 1214: value of the error-status field is tooBig, and the value ! 1215: of the error-index field is zero. ! 1216: ! 1217: (3) If, for any object named in the variable-bindings field, ! 1218: the value of the lexicographical successor to the named ! 1219: object cannot be retrieved for reasons not covered by any ! 1220: of the foregoing rules, then the receiving entity sends ! 1221: to the originator of the received message the ! 1222: GetResponse-PDU of identical form, except that the value ! 1223: of the error-status field is genErr and the value of the ! 1224: error-index field is the index of said object name ! 1225: component in the received message. ! 1226: ! 1227: If none of the foregoing rules apply, then the receiving protocol ! 1228: entity sends to the originator of the received message the ! 1229: GetResponse-PDU such that, for each name in the variable-bindings ! 1230: field of the received message, the corresponding component of the ! 1231: ! 1232: ! 1233: ! 1234: Case, Fedor, Schoffstall, & Davin [Page 22] ! 1235: ! 1236: RFC 1157 SNMP May 1990 ! 1237: ! 1238: ! 1239: GetResponse-PDU represents the name and value of that object whose ! 1240: name is, in the lexicographical ordering of the names of all objects ! 1241: available for get operations in the relevant MIB view, together with ! 1242: the value of the name field of the given component, the immediate ! 1243: successor to that value. The value of the error-status field of the ! 1244: GetResponse-PDU is noError and the value of the errorindex field is ! 1245: zero. The value of the request-id field of the GetResponse-PDU is ! 1246: that of the received message. ! 1247: ! 1248: 4.1.3.1. Example of Table Traversal ! 1249: ! 1250: One important use of the GetNextRequest-PDU is the traversal of ! 1251: conceptual tables of information within the MIB. The semantics of ! 1252: this type of SNMP message, together with the protocol-specific ! 1253: mechanisms for identifying individual instances of object types in ! 1254: the MIB, affords access to related objects in the MIB as if they ! 1255: enjoyed a tabular organization. ! 1256: ! 1257: By the SNMP exchange sketched below, an SNMP application entity might ! 1258: extract the destination address and next hop gateway for each entry ! 1259: in the routing table of a particular network element. Suppose that ! 1260: this routing table has three entries: ! 1261: ! 1262: Destination NextHop Metric ! 1263: ! 1264: 10.0.0.99 89.1.1.42 5 ! 1265: 9.1.2.3 99.0.0.3 3 ! 1266: 10.0.0.51 89.1.1.42 5 ! 1267: ! 1268: ! 1269: The management station sends to the SNMP agent a GetNextRequest-PDU ! 1270: containing the indicated OBJECT IDENTIFIER values as the requested ! 1271: variable names: ! 1272: ! 1273: GetNextRequest ( ipRouteDest, ipRouteNextHop, ipRouteMetric1 ) ! 1274: ! 1275: ! 1276: The SNMP agent responds with a GetResponse-PDU: ! 1277: ! 1278: GetResponse (( ipRouteDest.9.1.2.3 = "9.1.2.3" ), ! 1279: ( ipRouteNextHop.9.1.2.3 = "99.0.0.3" ), ! 1280: ( ipRouteMetric1.9.1.2.3 = 3 )) ! 1281: ! 1282: ! 1283: The management station continues with: ! 1284: ! 1285: GetNextRequest ( ipRouteDest.9.1.2.3, ! 1286: ipRouteNextHop.9.1.2.3, ! 1287: ! 1288: ! 1289: ! 1290: Case, Fedor, Schoffstall, & Davin [Page 23] ! 1291: ! 1292: RFC 1157 SNMP May 1990 ! 1293: ! 1294: ! 1295: ipRouteMetric1.9.1.2.3 ) ! 1296: ! 1297: ! 1298: The SNMP agent responds: ! 1299: ! 1300: GetResponse (( ipRouteDest.10.0.0.51 = "10.0.0.51" ), ! 1301: ( ipRouteNextHop.10.0.0.51 = "89.1.1.42" ), ! 1302: ( ipRouteMetric1.10.0.0.51 = 5 )) ! 1303: ! 1304: ! 1305: The management station continues with: ! 1306: ! 1307: GetNextRequest ( ipRouteDest.10.0.0.51, ! 1308: ipRouteNextHop.10.0.0.51, ! 1309: ipRouteMetric1.10.0.0.51 ) ! 1310: ! 1311: ! 1312: The SNMP agent responds: ! 1313: ! 1314: GetResponse (( ipRouteDest.10.0.0.99 = "10.0.0.99" ), ! 1315: ( ipRouteNextHop.10.0.0.99 = "89.1.1.42" ), ! 1316: ( ipRouteMetric1.10.0.0.99 = 5 )) ! 1317: ! 1318: ! 1319: The management station continues with: ! 1320: ! 1321: GetNextRequest ( ipRouteDest.10.0.0.99, ! 1322: ipRouteNextHop.10.0.0.99, ! 1323: ipRouteMetric1.10.0.0.99 ) ! 1324: ! 1325: ! 1326: As there are no further entries in the table, the SNMP agent returns ! 1327: those objects that are next in the lexicographical ordering of the ! 1328: known object names. This response signals the end of the routing ! 1329: table to the management station. ! 1330: ! 1331: 4.1.4. The GetResponse-PDU ! 1332: ! 1333: The form of the GetResponse-PDU is identical to that of the ! 1334: GetRequest-PDU except for the indication of the PDU type. In the ! 1335: ASN.1 language: ! 1336: ! 1337: GetResponse-PDU ::= ! 1338: [2] ! 1339: IMPLICIT SEQUENCE { ! 1340: request-id ! 1341: RequestID, ! 1342: ! 1343: ! 1344: ! 1345: ! 1346: Case, Fedor, Schoffstall, & Davin [Page 24] ! 1347: ! 1348: RFC 1157 SNMP May 1990 ! 1349: ! 1350: ! 1351: error-status ! 1352: ErrorStatus, ! 1353: ! 1354: error-index ! 1355: ErrorIndex, ! 1356: ! 1357: variable-bindings ! 1358: VarBindList ! 1359: } ! 1360: ! 1361: ! 1362: The GetResponse-PDU is generated by a protocol entity only upon ! 1363: receipt of the GetRequest-PDU, GetNextRequest-PDU, or SetRequest-PDU, ! 1364: as described elsewhere in this document. ! 1365: ! 1366: Upon receipt of the GetResponse-PDU, the receiving protocol entity ! 1367: presents its contents to its SNMP application entity. ! 1368: ! 1369: 4.1.5. The SetRequest-PDU ! 1370: ! 1371: The form of the SetRequest-PDU is identical to that of the ! 1372: GetRequest-PDU except for the indication of the PDU type. In the ! 1373: ASN.1 language: ! 1374: ! 1375: SetRequest-PDU ::= ! 1376: [3] ! 1377: IMPLICIT SEQUENCE { ! 1378: request-id ! 1379: RequestID, ! 1380: ! 1381: error-status -- always 0 ! 1382: ErrorStatus, ! 1383: ! 1384: error-index -- always 0 ! 1385: ErrorIndex, ! 1386: ! 1387: variable-bindings ! 1388: VarBindList ! 1389: } ! 1390: ! 1391: ! 1392: The SetRequest-PDU is generated by a protocol entity only at the ! 1393: request of its SNMP application entity. ! 1394: ! 1395: Upon receipt of the SetRequest-PDU, the receiving entity responds ! 1396: according to any applicable rule in the list below: ! 1397: ! 1398: (1) If, for any object named in the variable-bindings field, ! 1399: ! 1400: ! 1401: ! 1402: Case, Fedor, Schoffstall, & Davin [Page 25] ! 1403: ! 1404: RFC 1157 SNMP May 1990 ! 1405: ! 1406: ! 1407: the object is not available for set operations in the ! 1408: relevant MIB view, then the receiving entity sends to the ! 1409: originator of the received message the GetResponse-PDU of ! 1410: identical form, except that the value of the error-status ! 1411: field is noSuchName, and the value of the error-index ! 1412: field is the index of said object name component in the ! 1413: received message. ! 1414: ! 1415: (2) If, for any object named in the variable-bindings field, ! 1416: the contents of the value field does not, according to ! 1417: the ASN.1 language, manifest a type, length, and value ! 1418: that is consistent with that required for the variable, ! 1419: then the receiving entity sends to the originator of the ! 1420: received message the GetResponse-PDU of identical form, ! 1421: except that the value of the error-status field is ! 1422: badValue, and the value of the error-index field is the ! 1423: index of said object name in the received message. ! 1424: ! 1425: (3) If the size of the Get Response type message generated as ! 1426: described below would exceed a local limitation, then the ! 1427: receiving entity sends to the originator of the received ! 1428: message the GetResponse-PDU of identical form, except ! 1429: that the value of the error-status field is tooBig, and ! 1430: the value of the error-index field is zero. ! 1431: ! 1432: (4) If, for any object named in the variable-bindings field, ! 1433: the value of the named object cannot be altered for ! 1434: reasons not covered by any of the foregoing rules, then ! 1435: the receiving entity sends to the originator of the ! 1436: received message the GetResponse-PDU of identical form, ! 1437: except that the value of the error-status field is genErr ! 1438: and the value of the error-index field is the index of ! 1439: said object name component in the received message. ! 1440: ! 1441: If none of the foregoing rules apply, then for each object named in ! 1442: the variable-bindings field of the received message, the ! 1443: corresponding value is assigned to the variable. Each variable ! 1444: assignment specified by the SetRequest-PDU should be effected as if ! 1445: simultaneously set with respect to all other assignments specified in ! 1446: the same message. ! 1447: ! 1448: The receiving entity then sends to the originator of the received ! 1449: message the GetResponse-PDU of identical form except that the value ! 1450: of the error-status field of the generated message is noError and the ! 1451: value of the error-index field is zero. ! 1452: ! 1453: ! 1454: ! 1455: ! 1456: ! 1457: ! 1458: Case, Fedor, Schoffstall, & Davin [Page 26] ! 1459: ! 1460: RFC 1157 SNMP May 1990 ! 1461: ! 1462: ! 1463: 4.1.6. The Trap-PDU ! 1464: ! 1465: The form of the Trap-PDU is: ! 1466: ! 1467: Trap-PDU ::= ! 1468: [4] ! 1469: ! 1470: IMPLICIT SEQUENCE { ! 1471: enterprise -- type of object generating ! 1472: -- trap, see sysObjectID in [5] ! 1473: OBJECT IDENTIFIER, ! 1474: ! 1475: agent-addr -- address of object generating ! 1476: NetworkAddress, -- trap ! 1477: ! 1478: generic-trap -- generic trap type ! 1479: INTEGER { ! 1480: coldStart(0), ! 1481: warmStart(1), ! 1482: linkDown(2), ! 1483: linkUp(3), ! 1484: authenticationFailure(4), ! 1485: egpNeighborLoss(5), ! 1486: enterpriseSpecific(6) ! 1487: }, ! 1488: ! 1489: specific-trap -- specific code, present even ! 1490: INTEGER, -- if generic-trap is not ! 1491: -- enterpriseSpecific ! 1492: ! 1493: time-stamp -- time elapsed between the last ! 1494: TimeTicks, -- (re)initialization of the network ! 1495: -- entity and the generation of the ! 1496: trap ! 1497: ! 1498: variable-bindings -- "interesting" information ! 1499: VarBindList ! 1500: } ! 1501: ! 1502: ! 1503: The Trap-PDU is generated by a protocol entity only at the request of ! 1504: the SNMP application entity. The means by which an SNMP application ! 1505: entity selects the destination addresses of the SNMP application ! 1506: entities is implementation-specific. ! 1507: ! 1508: Upon receipt of the Trap-PDU, the receiving protocol entity presents ! 1509: its contents to its SNMP application entity. ! 1510: ! 1511: ! 1512: ! 1513: ! 1514: Case, Fedor, Schoffstall, & Davin [Page 27] ! 1515: ! 1516: RFC 1157 SNMP May 1990 ! 1517: ! 1518: ! 1519: The significance of the variable-bindings component of the Trap-PDU ! 1520: is implementation-specific. ! 1521: ! 1522: Interpretations of the value of the generic-trap field are: ! 1523: ! 1524: 4.1.6.1. The coldStart Trap ! 1525: ! 1526: A coldStart(0) trap signifies that the sending protocol entity is ! 1527: reinitializing itself such that the agent's configuration or the ! 1528: protocol entity implementation may be altered. ! 1529: ! 1530: 4.1.6.2. The warmStart Trap ! 1531: ! 1532: A warmStart(1) trap signifies that the sending protocol entity is ! 1533: reinitializing itself such that neither the agent configuration nor ! 1534: the protocol entity implementation is altered. ! 1535: ! 1536: 4.1.6.3. The linkDown Trap ! 1537: ! 1538: A linkDown(2) trap signifies that the sending protocol entity ! 1539: recognizes a failure in one of the communication links represented in ! 1540: the agent's configuration. ! 1541: ! 1542: The Trap-PDU of type linkDown contains as the first element of its ! 1543: variable-bindings, the name and value of the ifIndex instance for the ! 1544: affected interface. ! 1545: ! 1546: 4.1.6.4. The linkUp Trap ! 1547: ! 1548: A linkUp(3) trap signifies that the sending protocol entity ! 1549: recognizes that one of the communication links represented in the ! 1550: agent's configuration has come up. ! 1551: ! 1552: The Trap-PDU of type linkUp contains as the first element of its ! 1553: variable-bindings, the name and value of the ifIndex instance for the ! 1554: affected interface. ! 1555: ! 1556: 4.1.6.5. The authenticationFailure Trap ! 1557: ! 1558: An authenticationFailure(4) trap signifies that the sending protocol ! 1559: entity is the addressee of a protocol message that is not properly ! 1560: authenticated. While implementations of the SNMP must be capable of ! 1561: generating this trap, they must also be capable of suppressing the ! 1562: emission of such traps via an implementation-specific mechanism. ! 1563: ! 1564: 4.1.6.6. The egpNeighborLoss Trap ! 1565: ! 1566: An egpNeighborLoss(5) trap signifies that an EGP neighbor for whom ! 1567: ! 1568: ! 1569: ! 1570: Case, Fedor, Schoffstall, & Davin [Page 28] ! 1571: ! 1572: RFC 1157 SNMP May 1990 ! 1573: ! 1574: ! 1575: the sending protocol entity was an EGP peer has been marked down and ! 1576: the peer relationship no longer obtains. ! 1577: ! 1578: The Trap-PDU of type egpNeighborLoss contains as the first element of ! 1579: its variable-bindings, the name and value of the egpNeighAddr ! 1580: instance for the affected neighbor. ! 1581: ! 1582: 4.1.6.7. The enterpriseSpecific Trap ! 1583: ! 1584: A enterpriseSpecific(6) trap signifies that the sending protocol ! 1585: entity recognizes that some enterprise-specific event has occurred. ! 1586: The specific-trap field identifies the particular trap which ! 1587: occurred. ! 1588: ! 1589: ! 1590: ! 1591: ! 1592: ! 1593: ! 1594: ! 1595: ! 1596: ! 1597: ! 1598: ! 1599: ! 1600: ! 1601: ! 1602: ! 1603: ! 1604: ! 1605: ! 1606: ! 1607: ! 1608: ! 1609: ! 1610: ! 1611: ! 1612: ! 1613: ! 1614: ! 1615: ! 1616: ! 1617: ! 1618: ! 1619: ! 1620: ! 1621: ! 1622: ! 1623: ! 1624: ! 1625: ! 1626: Case, Fedor, Schoffstall, & Davin [Page 29] ! 1627: ! 1628: RFC 1157 SNMP May 1990 ! 1629: ! 1630: ! 1631: 5. Definitions ! 1632: ! 1633: RFC1157-SNMP DEFINITIONS ::= BEGIN ! 1634: ! 1635: IMPORTS ! 1636: ObjectName, ObjectSyntax, NetworkAddress, IpAddress, TimeTicks ! 1637: FROM RFC1155-SMI; ! 1638: ! 1639: ! 1640: -- top-level message ! 1641: ! 1642: Message ::= ! 1643: SEQUENCE { ! 1644: version -- version-1 for this RFC ! 1645: INTEGER { ! 1646: version-1(0) ! 1647: }, ! 1648: ! 1649: community -- community name ! 1650: OCTET STRING, ! 1651: ! 1652: data -- e.g., PDUs if trivial ! 1653: ANY -- authentication is being used ! 1654: } ! 1655: ! 1656: ! 1657: -- protocol data units ! 1658: ! 1659: PDUs ::= ! 1660: CHOICE { ! 1661: get-request ! 1662: GetRequest-PDU, ! 1663: ! 1664: get-next-request ! 1665: GetNextRequest-PDU, ! 1666: ! 1667: get-response ! 1668: GetResponse-PDU, ! 1669: ! 1670: set-request ! 1671: SetRequest-PDU, ! 1672: ! 1673: trap ! 1674: Trap-PDU ! 1675: } ! 1676: ! 1677: ! 1678: ! 1679: ! 1680: ! 1681: ! 1682: Case, Fedor, Schoffstall, & Davin [Page 30] ! 1683: ! 1684: RFC 1157 SNMP May 1990 ! 1685: ! 1686: ! 1687: -- PDUs ! 1688: ! 1689: GetRequest-PDU ::= ! 1690: [0] ! 1691: IMPLICIT PDU ! 1692: ! 1693: GetNextRequest-PDU ::= ! 1694: [1] ! 1695: IMPLICIT PDU ! 1696: ! 1697: GetResponse-PDU ::= ! 1698: [2] ! 1699: IMPLICIT PDU ! 1700: ! 1701: SetRequest-PDU ::= ! 1702: [3] ! 1703: IMPLICIT PDU ! 1704: ! 1705: PDU ::= ! 1706: SEQUENCE { ! 1707: request-id ! 1708: INTEGER, ! 1709: ! 1710: error-status -- sometimes ignored ! 1711: INTEGER { ! 1712: noError(0), ! 1713: tooBig(1), ! 1714: noSuchName(2), ! 1715: badValue(3), ! 1716: readOnly(4), ! 1717: genErr(5) ! 1718: }, ! 1719: ! 1720: error-index -- sometimes ignored ! 1721: INTEGER, ! 1722: ! 1723: variable-bindings -- values are sometimes ignored ! 1724: VarBindList ! 1725: } ! 1726: ! 1727: Trap-PDU ::= ! 1728: [4] ! 1729: IMPLICIT SEQUENCE { ! 1730: enterprise -- type of object generating ! 1731: -- trap, see sysObjectID in [5] ! 1732: ! 1733: ! 1734: OBJECT IDENTIFIER, ! 1735: ! 1736: ! 1737: ! 1738: Case, Fedor, Schoffstall, & Davin [Page 31] ! 1739: ! 1740: RFC 1157 SNMP May 1990 ! 1741: ! 1742: ! 1743: agent-addr -- address of object generating ! 1744: NetworkAddress, -- trap ! 1745: ! 1746: generic-trap -- generic trap type ! 1747: INTEGER { ! 1748: coldStart(0), ! 1749: warmStart(1), ! 1750: linkDown(2), ! 1751: linkUp(3), ! 1752: authenticationFailure(4), ! 1753: egpNeighborLoss(5), ! 1754: enterpriseSpecific(6) ! 1755: }, ! 1756: ! 1757: specific-trap -- specific code, present even ! 1758: INTEGER, -- if generic-trap is not ! 1759: -- enterpriseSpecific ! 1760: ! 1761: time-stamp -- time elapsed between the last ! 1762: TimeTicks, -- (re)initialization of the ! 1763: network ! 1764: -- entity and the generation of the ! 1765: trap ! 1766: ! 1767: variable-bindings -- "interesting" information ! 1768: VarBindList ! 1769: } ! 1770: ! 1771: ! 1772: -- variable bindings ! 1773: ! 1774: VarBind ::= ! 1775: SEQUENCE { ! 1776: name ! 1777: ObjectName, ! 1778: ! 1779: value ! 1780: ObjectSyntax ! 1781: } ! 1782: ! 1783: VarBindList ::= ! 1784: SEQUENCE OF ! 1785: VarBind ! 1786: ! 1787: END ! 1788: ! 1789: ! 1790: ! 1791: ! 1792: ! 1793: ! 1794: Case, Fedor, Schoffstall, & Davin [Page 32] ! 1795: ! 1796: RFC 1157 SNMP May 1990 ! 1797: ! 1798: ! 1799: 6. Acknowledgements ! 1800: ! 1801: This memo was influenced by the IETF SNMP Extensions working ! 1802: group: ! 1803: ! 1804: Karl Auerbach, Epilogue Technology ! 1805: K. Ramesh Babu, Excelan ! 1806: Amatzia Ben-Artzi, 3Com/Bridge ! 1807: Lawrence Besaw, Hewlett-Packard ! 1808: Jeffrey D. Case, University of Tennessee at Knoxville ! 1809: Anthony Chung, Sytek ! 1810: James Davidson, The Wollongong Group ! 1811: James R. Davin, MIT Laboratory for Computer Science ! 1812: Mark S. Fedor, NYSERNet ! 1813: Phill Gross, The MITRE Corporation ! 1814: Satish Joshi, ACC ! 1815: Dan Lynch, Advanced Computing Environments ! 1816: Keith McCloghrie, The Wollongong Group ! 1817: Marshall T. Rose, The Wollongong Group (chair) ! 1818: Greg Satz, cisco ! 1819: Martin Lee Schoffstall, Rensselaer Polytechnic Institute ! 1820: Wengyik Yeong, NYSERNet ! 1821: ! 1822: ! 1823: ! 1824: ! 1825: ! 1826: ! 1827: ! 1828: ! 1829: ! 1830: ! 1831: ! 1832: ! 1833: ! 1834: ! 1835: ! 1836: ! 1837: ! 1838: ! 1839: ! 1840: ! 1841: ! 1842: ! 1843: ! 1844: ! 1845: ! 1846: ! 1847: ! 1848: ! 1849: ! 1850: Case, Fedor, Schoffstall, & Davin [Page 33] ! 1851: ! 1852: RFC 1157 SNMP May 1990 ! 1853: ! 1854: ! 1855: 7. References ! 1856: ! 1857: [1] Cerf, V., "IAB Recommendations for the Development of ! 1858: Internet Network Management Standards", RFC 1052, IAB, ! 1859: April 1988. ! 1860: ! 1861: [2] Rose, M., and K. McCloghrie, "Structure and Identification ! 1862: of Management Information for TCP/IP-based internets", ! 1863: RFC 1065, TWG, August 1988. ! 1864: ! 1865: [3] McCloghrie, K., and M. Rose, "Management Information Base ! 1866: for Network Management of TCP/IP-based internets", ! 1867: RFC 1066, TWG, August 1988. ! 1868: ! 1869: [4] Cerf, V., "Report of the Second Ad Hoc Network Management ! 1870: Review Group", RFC 1109, IAB, August 1989. ! 1871: ! 1872: [5] Rose, M., and K. McCloghrie, "Structure and Identification ! 1873: of Management Information for TCP/IP-based Internets", ! 1874: RFC 1155, Performance Systems International and Hughes LAN ! 1875: Systems, May 1990. ! 1876: ! 1877: [6] McCloghrie, K., and M. Rose, "Management Information Base ! 1878: for Network Management of TCP/IP-based Internets", ! 1879: RFC 1156, Hughes LAN Systems and Performance Systems ! 1880: International, May 1990. ! 1881: ! 1882: [7] Case, J., M. Fedor, M. Schoffstall, and J. Davin, ! 1883: "A Simple Network Management Protocol", Internet ! 1884: Engineering Task Force working note, Network Information ! 1885: Center, SRI International, Menlo Park, California, ! 1886: March 1988. ! 1887: ! 1888: [8] Davin, J., J. Case, M. Fedor, and M. Schoffstall, ! 1889: "A Simple Gateway Monitoring Protocol", RFC 1028, ! 1890: Proteon, University of Tennessee at Knoxville, ! 1891: Cornell University, and Rensselaer Polytechnic ! 1892: Institute, November 1987. ! 1893: ! 1894: [9] Information processing systems - Open Systems ! 1895: Interconnection, "Specification of Abstract Syntax ! 1896: Notation One (ASN.1)", International Organization for ! 1897: Standardization, International Standard 8824, ! 1898: December 1987. ! 1899: ! 1900: [10] Information processing systems - Open Systems ! 1901: Interconnection, "Specification of Basic Encoding Rules ! 1902: for Abstract Notation One (ASN.1)", International ! 1903: ! 1904: ! 1905: ! 1906: Case, Fedor, Schoffstall, & Davin [Page 34] ! 1907: ! 1908: RFC 1157 SNMP May 1990 ! 1909: ! 1910: ! 1911: Organization for Standardization, International Standard ! 1912: 8825, December 1987. ! 1913: ! 1914: [11] Postel, J., "User Datagram Protocol", RFC 768, ! 1915: USC/Information Sciences Institute, November 1980. ! 1916: ! 1917: Security Considerations ! 1918: ! 1919: Security issues are not discussed in this memo. ! 1920: ! 1921: Authors' Addresses ! 1922: ! 1923: Jeffrey D. Case ! 1924: SNMP Research ! 1925: P.O. Box 8593 ! 1926: Knoxville, TN 37996-4800 ! 1927: ! 1928: Phone: (615) 573-1434 ! 1929: ! 1930: Email: [email protected] ! 1931: ! 1932: ! 1933: Mark Fedor ! 1934: Performance Systems International ! 1935: Rensselaer Technology Park ! 1936: 125 Jordan Road ! 1937: Troy, NY 12180 ! 1938: ! 1939: Phone: (518) 283-8860 ! 1940: ! 1941: Email: [email protected] ! 1942: ! 1943: ! 1944: Martin Lee Schoffstall ! 1945: Performance Systems International ! 1946: Rensselaer Technology Park ! 1947: 165 Jordan Road ! 1948: Troy, NY 12180 ! 1949: ! 1950: Phone: (518) 283-8860 ! 1951: ! 1952: Email: [email protected] ! 1953: ! 1954: ! 1955: ! 1956: ! 1957: ! 1958: ! 1959: ! 1960: ! 1961: ! 1962: Case, Fedor, Schoffstall, & Davin [Page 35] ! 1963: ! 1964: RFC 1157 SNMP May 1990 ! 1965: ! 1966: ! 1967: James R. Davin ! 1968: MIT Laboratory for Computer Science, NE43-507 ! 1969: 545 Technology Square ! 1970: Cambridge, MA 02139 ! 1971: ! 1972: Phone: (617) 253-6020 ! 1973: ! 1974: EMail: [email protected] ! 1975: ! 1976: ! 1977: ! 1978: ! 1979: ! 1980: ! 1981: ! 1982: ! 1983: ! 1984: ! 1985: ! 1986: ! 1987: ! 1988: ! 1989: ! 1990: ! 1991: ! 1992: ! 1993: ! 1994: ! 1995: ! 1996: ! 1997: ! 1998: ! 1999: ! 2000: ! 2001: ! 2002: ! 2003: ! 2004: ! 2005: ! 2006: ! 2007: ! 2008: ! 2009: ! 2010: ! 2011: ! 2012: ! 2013: ! 2014: ! 2015: ! 2016: ! 2017: ! 2018: Case, Fedor, Schoffstall, & Davin [Page 36] ! 2019:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.