Imported Upstream version 0.4.8
[platform/upstream/libsmi.git] / doc / draft-irtf-nmrg-sming-02.txt
1
2
3 Network Working Group                                         F. Strauss
4 Internet-Draft                                           TU Braunschweig
5 Expires: August 15, 2000                               February 15, 2000
6
7
8            SMIng - A new Structure of Management Information
9                         draft-irtf-nmrg-sming-02
10
11 Status of this Memo
12
13    This document is an Internet-Draft and is in full conformance with
14    all provisions of Section 10 of RFC2026.
15
16    Internet-Drafts are working documents of the Internet Engineering
17    Task Force (IETF), its areas, and its working groups. Note that
18    other groups may also distribute working documents as
19    Internet-Drafts.
20
21    Internet-Drafts are draft documents valid for a maximum of six
22    months and may be updated, replaced, or obsoleted by other documents
23    at any time. It is inappropriate to use Internet-Drafts as reference
24    material or to cite them other than as "work in progress."
25
26    To view the entire list of Internet-Draft Shadow Directories, see
27    http://www.ietf.org/shadow.html.
28
29    This Internet-Draft will expire on August 15, 2000.
30
31 Abstract
32
33    This memo presents a language for management information
34    specifications. It eliminates known problems present in the current
35    SMIv2 as specified in [2], [3], and [4]. Language extensibility
36    features and a more efficient and programmer-friendly notation are
37    introduced. Conversions from SMIv2 to SMIng and vice versa are also
38    considered by this document. 
39
40 Copyright Notice
41
42    Copyright (C) The Internet Society (2000). All Rights Reserved.
43
44
45
46
47
48
49
50
51
52
53
54
55 Strauss                 Expires August 15, 2000                 [Page 1]
56 \f
57 Internet-Draft                   SMIng                     February 2000
58
59
60 Table of Contents
61
62    1.       Introduction . . . . . . . . . . . . . . . . . . . . . .   6
63    1.1      Terminology  . . . . . . . . . . . . . . . . . . . . . .   6
64    1.2      Relation to SNMP . . . . . . . . . . . . . . . . . . . .   6
65    2.       The Information Model  . . . . . . . . . . . . . . . . .   8
66    2.1      Identifiers  . . . . . . . . . . . . . . . . . . . . . .   9
67    2.2      Object Identifier Hierarchy  . . . . . . . . . . . . . .  10
68    2.3      Kinds of Nodes . . . . . . . . . . . . . . . . . . . . .  11
69    2.4      Scalar and Columnar Objects' Instances . . . . . . . . .  12
70    3.       Base Types and Derived Types . . . . . . . . . . . . . .  15
71    3.1      OctetString  . . . . . . . . . . . . . . . . . . . . . .  15
72    3.2      ObjectIdentifier . . . . . . . . . . . . . . . . . . . .  16
73    3.3      Integer32  . . . . . . . . . . . . . . . . . . . . . . .  17
74    3.4      Integer64  . . . . . . . . . . . . . . . . . . . . . . .  18
75    3.5      Unsigned32 . . . . . . . . . . . . . . . . . . . . . . .  18
76    3.6      Unsigned64 . . . . . . . . . . . . . . . . . . . . . . .  19
77    3.7      Float32  . . . . . . . . . . . . . . . . . . . . . . . .  20
78    3.8      Float64  . . . . . . . . . . . . . . . . . . . . . . . .  21
79    3.9      Float128 . . . . . . . . . . . . . . . . . . . . . . . .  22
80    3.10     Enumeration  . . . . . . . . . . . . . . . . . . . . . .  23
81    3.11     Bits . . . . . . . . . . . . . . . . . . . . . . . . . .  23
82    3.12     Display Formats  . . . . . . . . . . . . . . . . . . . .  24
83    4.       The SMIng File Structure . . . . . . . . . . . . . . . .  27
84    4.1      Comments . . . . . . . . . . . . . . . . . . . . . . . .  27
85    4.2      Statements and Arguments . . . . . . . . . . . . . . . .  27
86    5.       The module Statement . . . . . . . . . . . . . . . . . .  28
87    5.1      The module's import Statement  . . . . . . . . . . . . .  28
88    5.2      The module's organization Statement  . . . . . . . . . .  29
89    5.3      The module's contact Statement . . . . . . . . . . . . .  29
90    5.4      The module's description Statement . . . . . . . . . . .  29
91    5.5      The module's reference Statement . . . . . . . . . . . .  29
92    5.6      The module's revision Statement  . . . . . . . . . . . .  29
93    5.6.1    The revision's date Statement  . . . . . . . . . . . . .  30
94    5.6.2    The revision's description Statement . . . . . . . . . .  30
95    5.7      The module's identity Statement  . . . . . . . . . . . .  30
96    5.8      Usage Example  . . . . . . . . . . . . . . . . . . . . .  30
97    6.       The extension Statement  . . . . . . . . . . . . . . . .  32
98    6.1      The extension's status Statement . . . . . . . . . . . .  32
99    6.2      The extension's description Statement  . . . . . . . . .  32
100    6.3      The extension's reference Statement  . . . . . . . . . .  32
101    6.4      The extension's abnf Statement . . . . . . . . . . . . .  33
102    7.       The typedef Statement  . . . . . . . . . . . . . . . . .  34
103    7.1      The typedef's type Statement . . . . . . . . . . . . . .  34
104    7.2      The typedef's default Statement  . . . . . . . . . . . .  34
105    7.3      The typedef's format Statement . . . . . . . . . . . . .  34
106    7.4      The typedef's units Statement  . . . . . . . . . . . . .  35
107    7.5      The typedef's status Statement . . . . . . . . . . . . .  35
108    7.6      The typedef's description Statement  . . . . . . . . . .  36
109
110
111 Strauss                 Expires August 15, 2000                 [Page 2]
112 \f
113 Internet-Draft                   SMIng                     February 2000
114
115
116    7.7      The typedef's reference Statement  . . . . . . . . . . .  36
117    7.8      Usage Examples . . . . . . . . . . . . . . . . . . . . .  36
118    8.       The node Statement . . . . . . . . . . . . . . . . . . .  38
119    8.1      The node's oid Statement . . . . . . . . . . . . . . . .  38
120    8.2      The node's status Statement  . . . . . . . . . . . . . .  38
121    8.3      The node's description Statement . . . . . . . . . . . .  38
122    8.4      The node's reference Statement . . . . . . . . . . . . .  38
123    8.5      Usage Examples . . . . . . . . . . . . . . . . . . . . .  39
124    9.       The scalar Statement . . . . . . . . . . . . . . . . . .  40
125    9.1      The scalar's oid Statement . . . . . . . . . . . . . . .  40
126    9.2      The scalar's type Statement  . . . . . . . . . . . . . .  40
127    9.3      The scalar's access Statement  . . . . . . . . . . . . .  40
128    9.4      The scalar's default Statement . . . . . . . . . . . . .  40
129    9.5      The scalar's format Statement  . . . . . . . . . . . . .  41
130    9.6      The scalar's units Statement . . . . . . . . . . . . . .  41
131    9.7      The scalar's status Statement  . . . . . . . . . . . . .  41
132    9.8      The scalar's description Statement . . . . . . . . . . .  42
133    9.9      The scalar's reference Statement . . . . . . . . . . . .  42
134    9.10     Usage Examples . . . . . . . . . . . . . . . . . . . . .  42
135    10.      The table Statement  . . . . . . . . . . . . . . . . . .  43
136    10.1     The table's oid Statement  . . . . . . . . . . . . . . .  43
137    10.2     The table's status Statement . . . . . . . . . . . . . .  43
138    10.3     The table's description Statement  . . . . . . . . . . .  43
139    10.4     The table's reference Statement  . . . . . . . . . . . .  43
140    10.5     The table's row Statement  . . . . . . . . . . . . . . .  44
141    10.5.1   The row's oid Statement  . . . . . . . . . . . . . . . .  44
142    10.5.2   Table Indexing Statements  . . . . . . . . . . . . . . .  44
143    10.5.2.1 The row's index Statement for Table Indexing . . . . . .  44
144    10.5.2.2 The row's augments Statement for Table Indexing  . . . .  44
145    10.5.2.3 The row's sparse Statement for Table Indexing  . . . . .  45
146    10.5.2.4 The row's reorders Statement for Table Indexing  . . . .  45
147    10.5.2.5 The row's expands Statement for Table Indexing . . . . .  46
148    10.5.3   The row's create Statement . . . . . . . . . . . . . . .  46
149    10.5.4   The row's status Statement . . . . . . . . . . . . . . .  46
150    10.5.5   The row's description Statement  . . . . . . . . . . . .  46
151    10.5.6   The row's reference Statement  . . . . . . . . . . . . .  47
152    10.6     The table row's column Statement . . . . . . . . . . . .  47
153    10.6.1   The column's oid Statement . . . . . . . . . . . . . . .  47
154    10.6.2   The column's type Statement  . . . . . . . . . . . . . .  47
155    10.6.3   The column's access Statement  . . . . . . . . . . . . .  47
156    10.6.4   The column's default Statement . . . . . . . . . . . . .  48
157    10.6.5   The column's format Statement  . . . . . . . . . . . . .  48
158    10.6.6   The column's units Statement . . . . . . . . . . . . . .  48
159    10.6.7   The column's status Statement  . . . . . . . . . . . . .  49
160    10.6.8   The column's description Statement . . . . . . . . . . .  49
161    10.6.9   The column's reference Statement . . . . . . . . . . . .  49
162    10.7     Usage Example  . . . . . . . . . . . . . . . . . . . . .  49
163    11.      The notification Statement . . . . . . . . . . . . . . .  52
164    11.1     The notification's oid Statement . . . . . . . . . . . .  52
165
166
167 Strauss                 Expires August 15, 2000                 [Page 3]
168 \f
169 Internet-Draft                   SMIng                     February 2000
170
171
172    11.2     The notification's objects Statement . . . . . . . . . .  52
173    11.3     The notification's status Statement  . . . . . . . . . .  52
174    11.4     The notification's description Statement . . . . . . . .  53
175    11.5     The notification's reference Statement . . . . . . . . .  53
176    11.6     Usage Example  . . . . . . . . . . . . . . . . . . . . .  53
177    12.      The group Statement  . . . . . . . . . . . . . . . . . .  54
178    12.1     The group's oid Statement  . . . . . . . . . . . . . . .  54
179    12.2     The group's members Statement  . . . . . . . . . . . . .  54
180    12.3     The group's status Statement . . . . . . . . . . . . . .  54
181    12.4     The group's description Statement  . . . . . . . . . . .  54
182    12.5     The group's reference Statement  . . . . . . . . . . . .  55
183    12.6     Usage Example  . . . . . . . . . . . . . . . . . . . . .  55
184    13.      The compliance Statement . . . . . . . . . . . . . . . .  56
185    13.1     The compliance's oid Statement . . . . . . . . . . . . .  56
186    13.2     The compliance's status Statement  . . . . . . . . . . .  56
187    13.3     The compliance's description Statement . . . . . . . . .  56
188    13.4     The compliance's reference Statement . . . . . . . . . .  56
189    13.5     The compliance's mandatory Statement . . . . . . . . . .  56
190    13.6     The compliance's optional Statement  . . . . . . . . . .  57
191    13.6.1   The optional's description Statement . . . . . . . . . .  57
192    13.7     The compliance's refine Statement  . . . . . . . . . . .  57
193    13.7.1   The refine's type Statement  . . . . . . . . . . . . . .  58
194    13.7.2   The refine's writetype Statement . . . . . . . . . . . .  58
195    13.7.3   The refine's access Statement  . . . . . . . . . . . . .  58
196    13.7.4   The refine's description Statement . . . . . . . . . . .  58
197    13.8     Usage Example  . . . . . . . . . . . . . . . . . . . . .  58
198    14.      SMIng Core Modules . . . . . . . . . . . . . . . . . . .  60
199    14.1     IRTF-NMRG-SMING  . . . . . . . . . . . . . . . . . . . .  60
200    14.2     IRTF-NMRG-SMING-TYPES  . . . . . . . . . . . . . . . . .  61
201    14.3     IRTF-NMRG-SMING-EXTENSIONS . . . . . . . . . . . . . . .  80
202    15.      Extending a Module . . . . . . . . . . . . . . . . . . .  83
203    16.      SMIng Language Extensibility . . . . . . . . . . . . . .  85
204    17.      Module Conversions . . . . . . . . . . . . . . . . . . .  87
205    17.1     Converting SMIv2 to SMIng  . . . . . . . . . . . . . . .  87
206    17.2     Converting SMIng to SMIv2  . . . . . . . . . . . . . . .  87
207    17.3     SMIv1  . . . . . . . . . . . . . . . . . . . . . . . . .  87
208    18.      Security Considerations  . . . . . . . . . . . . . . . .  88
209    19.      Acknowledgements . . . . . . . . . . . . . . . . . . . .  89
210             References . . . . . . . . . . . . . . . . . . . . . . .  90
211             Author's Address . . . . . . . . . . . . . . . . . . . .  91
212    A.       The SMIng ABNF grammar . . . . . . . . . . . . . . . . .  92
213    B.       Glossary . . . . . . . . . . . . . . . . . . . . . . . . 104
214
215
216
217
218
219
220
221
222
223 Strauss                 Expires August 15, 2000                 [Page 4]
224 \f
225 Internet-Draft                   SMIng                     February 2000
226
227
228 1. Introduction
229
230    Management information is viewed as a collection of managed objects,
231    residing in a virtual information store, termed the Management
232    Information Base (MIB).  Collections of related objects are defined
233    in MIB modules.  These modules are written conforming to a
234    specification language, the Structure of Management Information
235    (SMI). There are different versions of the SMI. SMIv1 [5], [6], [7]
236    and SMIv2 [2], [3], [4] are based on adapted subsets of OSI's
237    Abstract Syntax Notation One, ASN.1 [9]. It is the purpose of this
238    document to define a successor of SMIv1 and SMIv2, the SMIng, in a
239    self-contained way independent from other standardization bodies'
240    documents. 
241
242    Section 2 gives an overview of some basic concepts of the
243    information model while the subsequent sections present the concepts
244    of SMIng: the base types, the SMIng file structure, and all SMIng
245    statements in detail. Section 14 contains three core modules that
246    are part of the SMIng specification.  Section 15 lists rules to
247    follow when changes are applied to a module. One flexible feature of
248    SMIng is its extensibility which is described in Section 16.
249    Finally, Section 17 discusses conversions of SMIv2 modules to SMIng
250    and vice versa.  Appendix A contains the grammar of SMIng in ABNF
251    [8] notation. 
252
253 1.1 Terminology
254
255    Many terms in SMIv1 and SMIv2 are derived from ASN.1. In some cases,
256    SMIv1/v2 uses different terms for equal or similar language items
257    without precise definitions. Appendix B presents a glossary of terms
258    used throughout this document and in related SMIng documents. Also
259    refer to the glossary and Appendix A to get detailed information on
260    the syntax of single language items where not explained in place. 
261
262    The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
263    "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
264    document are to be interpreted as described in [1]. 
265
266 1.2 Relation to SNMP
267
268    Although SMIng is primarily intended to be applied to the SNMP
269    management framework [10], SMIng is designed to have as few
270    relations to a specific management protocol as possible. However,
271    there are some implications of SNMP on SMIv2 that have to be
272    retained in SMIng: 
273
274    o  In SNMP the last item on a list of objects used to identify a
275       table row can be encoded without an explicit length encoding.
276       This has to be expressed by the SMIng `implied' keyword. See
277
278
279 Strauss                 Expires August 15, 2000                 [Page 5]
280 \f
281 Internet-Draft                   SMIng                     February 2000
282
283
284       Section 10.5 for details. 
285
286    o  SNMP allows to distinguish several related types "on the wire"
287       while SMIng has a minimal but complete set of base types.  To
288       keep SMIng compatible with the SNMP framework, additional types
289       derived from SMIng base types are defined in the standard SMIng
290       module IRTF-NMRG-SMING-TYPES (Section 14.2). 
291
292    o  The encoding of values of type `Bits' in SNMP is dependent on
293       their named number values. It is RECOMMENDED that they start at 0
294       and be numbered contiguously to allow a compact encoding for use
295       with SNMP. 
296
297    o  SNMP implies some restrictions on indexing columnar objects:
298       Those columns that are used for indexing have to be defined as
299       non-accessible auxiliary objects, with two exceptions. Hence, the
300       access level `noaccess' has to be retained in SMIng. 
301
302    o  In order to achieve compatibility with SNMPv1 traps, the next to
303       last sub-identifier of notification object identifiers SHOULD
304       have the value zero. 
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335 Strauss                 Expires August 15, 2000                 [Page 6]
336 \f
337 Internet-Draft                   SMIng                     February 2000
338
339
340 2. The Information Model
341
342    Internet management is based on the model of "managed objects".  A
343    managed object represents a class of any real or synthesized
344    variable of systems that are to be managed. Those objects are
345    organized hierarchically in an "object identifier tree", where only
346    leaf nodes may represent objects. 
347
348    Nodes may also identify tables, row definitions of tables,
349    notifications, groups of objects and/or notifications, compliance
350    statements, modules or other information.  Each node is identified
351    by an unique "object identifier" value which is an ordered list of
352    non-negative numbers, named "sub-identifiers", where the left-most
353    sub-identifier refers to the node next to the root of the tree and
354    the right-most sub-identifier refers to the node that is identified
355    by the complete object identifier. 
356
357    The SMI in general, and SMIng in particular, is the information
358    model used to define and organize the structure of managed objects
359    and related information. Thus, SMIng describes a language designed
360    to specify management information in a way readable to computer
361    programs, named MIB compilers, as well as to human readers. 
362
363    Related management information is defined in MIB modules.  A module
364    may refer to definitions from other modules by importing identifiers
365    from those modules.  Each module may serve one or multiple purposes: 
366
367    o  the definition of inter-related managed objects, notifications
368       and groups of them, 
369
370    o  the definition of (restricted) types for use in the local module
371       or in other modules, 
372
373    o  the definition of compliance statements for groups of objects and
374       notifications to guide agent implementors in what they have to
375       serve or implementors of management applications in what they can
376       expect, 
377
378    o  the definition of SMIng extensions to allow the local module or
379       other modules to specify information beyond the scope of the base
380       SMIng in a machine readable notation, 
381
382    o  the definition of information beyond the scope of the base SMIng
383       statements, based on locally defined or imported SMIng
384       extensions, like capability statements for agent implementations. 
385
386    This classification scheme does not imply a rigid taxonomy. For
387    example, a "standard" module will normally include definitions of
388    managed objects and a compliance statement. Similarly, an
389
390
391 Strauss                 Expires August 15, 2000                 [Page 7]
392 \f
393 Internet-Draft                   SMIng                     February 2000
394
395
396    "enterprise-specific" module might include definitions of managed
397    objects and a capability statement based on an extension. Of course,
398    a "standard" module may not contain capability statements. 
399
400    Each module is identified by an upper-case identifier. The names of
401    all standard modules must be unique (but different versions of the
402    same module should have the same name).  Developers of enterprise
403    modules are encouraged to choose names for their modules that will
404    have a low probability of colliding with standard or other
405    enterprise modules, e.g. by using the enterprise or organization
406    name as a prefix. 
407
408 2.1 Identifiers
409
410    Identifiers are used to identify different kinds of SMIng items by
411    name. These names are valid in a namespace which is dependent on the
412    SMIng item. Those items are 
413
414    o  modules (Section 5), whose namespace is the global range of all
415       SMIng definitions, 
416
417    o  defined data types (Section 7), whose namespace is the local
418       module where the type is defined, 
419
420    o  elements of enumeration and bitset types (Section 3.10, Section
421       3.11), whose namespace is the related type definition construct
422       and all constructs using that type, 
423
424    o  object identifier tree nodes of different kinds (Section 5, and
425       Section 8 through Section 13), whose namespace is the local
426       module where the node is defined, and 
427
428    o  SMIng extension statements (Section 6), whose namespace is the
429       local module where the extension is defined. 
430
431    Each identifier starts with an upper-case or lower-case character,
432    dependent on the kind of SMIng item, followed by zero or more
433    letters, digits, and hyphens. 
434
435    For all identifiers of a single kind of item defined in a namespace,
436    the identifier MUST be unique and SHOULD NOT only differ in case. 
437    Identifiers MUST NOT exceed 64 characters in length. Furthermore,
438    the set of all identifiers defined in all modules of a single
439    standardization body or organization SHOULD be unique and mnemonic.
440    This promotes a common language for humans to use when discussing a
441    module. 
442
443    To reference an item that is defined in the local module, its
444    definition MUST sequentially precede the reference. Thus, there MUST
445
446
447 Strauss                 Expires August 15, 2000                 [Page 8]
448 \f
449 Internet-Draft                   SMIng                     February 2000
450
451
452    NOT be any forward references, except in two cases: 
453
454    1.  The optional module's `identity' statement, which is located
455        near the head of a module, specifies an identity node, which is
456        defined in a subsequent section of the local module. 
457
458    2.  The specification of table indexing objects in a table row may
459        include objects that cannot be defined without the definition of
460        the current table row. Hence table indexing statements are
461        allowed to include forward references. 
462
463    To reference an item, that is defined in an external module it MUST
464    be imported into the local module's namespace (Section 5.1).
465    Identifiers that are neither defined nor imported MUST NOT be
466    visible in the local module. On the other hand, all items defined in
467    a module are implicitly exported. 
468
469    Note when identifiers from external modules are referenced, there is
470    the possibility of name collisions. As such, if different items with
471    the same identifier are imported or if imported identifiers collide
472    with identifiers of locally defined items, then this ambiguity is
473    resolved by prefixing those identifiers with the names of their
474    modules and the namespace operator `::', i.e. `Module::item'. Of
475    course, this notation can be used to refer to identifiers even when
476    there is no name collision. 
477
478    Note that SMIng language keywords MUST NOT be imported. The main set
479    of keywords are SMIng statements and base types. See the
480    `...Keyword' rules of the SMIng ABNF grammar in Appendix A for a
481    list of those keywords. 
482
483    Finally, by convention, if the identifier refers to an object with a
484    counter type (Counter32 or Counter64, derived from Unsigned32 and
485    Unsigned64) then the identifier used for the object SHOULD denote
486    plurality. 
487
488 2.2 Object Identifier Hierarchy
489
490    The layers of the object identifier tree near the root are well
491    defined and organized by standardization bodies. The first level
492    next to the root has three nodes: 
493
494       0: ccitt
495
496       1: iso
497
498       2: joint-iso-ccitt
499
500    Note that the renaming of the Commite Consultatif International de
501
502
503 Strauss                 Expires August 15, 2000                 [Page 9]
504 \f
505 Internet-Draft                   SMIng                     February 2000
506
507
508    Telegraphique et Telephonique (CCITT) to International
509    Telecommunications Union (ITU) had no consequence on the names used
510    in the object identifier tree. 
511
512    The root of the subtree administered by the Internet Assigned
513    Numbers Authority (IANA) for the Internet is `1.3.6.1' which is
514    assigned with the identifier `internet'. That is, the Internet
515    subtree of object identifiers starts with the prefix `1.3.6.1.'. 
516
517    Several branches underneath this subtree are used for network
518    management: 
519
520    The `mgmt' (internet.2) subtree is used to identify "standard"
521    information. 
522
523    The `experimental' (internet.3) subtree is used to identify
524    information being designed by working groups of the IETF or IRTF. If
525    a module produced by a working group becomes a "standard" module
526    then at the very beginning of its entry onto the Internet standards
527    track, the information is moved under the mgmt subtree. 
528
529    The `private' (internet.4) subtree is used to identify information
530    defined unilaterally. The `enterprises' (private.1) subtree beneath
531    private is used, among other things, to permit providers of
532    networking subsystems to register models of their products. 
533
534    These and some other nodes are defined in the SMIng standard module
535    IRTF-NMRG-SMING (Section 14.1). 
536
537 2.3 Kinds of Nodes
538
539    Each node in the object identifier tree may be of a single kind
540    which may represent management information or not: 
541
542    o  simple nodes, that do not represent management information, but
543       may be used for grouping nodes in a subtree, 
544
545    o  nodes representing the identity of a module to allow references
546       to a module in other objects of type `ObjectIdentifier', 
547
548    o  scalar objects, which have zero or one object instance and no
549       child nodes. See Section 2.4 for scalar objects' instances, 
550
551    o  tables, which represent the root node of a collection of
552       information structured in table rows. A table node SHOULD have no
553       more child nodes than the single row node of this table, 
554
555    o  rows, which belong to a table (that is, the table's full object
556       identifier is a prefix of the row's object identifier) and
557
558
559 Strauss                 Expires August 15, 2000                [Page 10]
560 \f
561 Internet-Draft                   SMIng                     February 2000
562
563
564       represent a sequence of one or more columnar objects. Those
565       columnar objects MUST be the only child nodes of a table row. A
566       row's object identifier MUST be constructed by appending a `1'
567       sub-identifier to the table's object identifier, 
568
569    o  columnar objects, which belong to a row (that is, the row's full
570       object identifier is a prefix of the columnar objects' object
571       identifier) and have zero or more object instances and no child
572       nodes. Each columnar object's object identifier MUST be
573       constructed by appending a single sub-identifier to the row's
574       object identifier.  See Section 2.4 for columnar objects'
575       instances, 
576
577    o  notifications, which represent information that is sent by agents
578       within unsolicited transmissions. A notification's object
579       identifier SHOULD not have any child node, 
580
581    o  groups of objects and notifications, which may be used for
582       compliance statements or other purposes, 
583
584    o  compliance statements which define requirements for MIB module
585       implementations, 
586
587    o  other nodes, that may be used to identify arbitrary information. 
588
589 2.4 Scalar and Columnar Objects' Instances
590
591    Instances of managed objects are identified by appending an
592    instance-identifier to the object's object identifier. Scalar
593    objects and columnar objects use different ways to construct the
594    instance-identifier. 
595
596    Scalar objects have zero or one object instance. If it exists, it is
597    identified by appending a single `0' sub-identifier to the object
598    identifier of the scalar object. 
599
600    Within tables, different instances of the same columnar object are
601    identified by appending a sequence of one or more sub-identifiers to
602    the object identifier of the columnar object which consists of the
603    values of object instances that unambiguously distinguish a table
604    row. These indexing objects can be columnar objects of the same
605    and/or another table, but MUST NOT be scalar objects.  Multiple
606    applications of the same object in a single table indexing
607    specification are strongly discouraged. 
608
609    The base types (Section 3) of the indexing objects indicate how to
610    form the instance-identifier: 
611
612    o  integer-valued or enumeration-valued: a single sub-identifier
613
614
615 Strauss                 Expires August 15, 2000                [Page 11]
616 \f
617 Internet-Draft                   SMIng                     February 2000
618
619
620       taking the integer value (this works only for non-negative
621       integers and integers of a size of up to 32 bits), 
622
623    o  string-valued, fixed-length strings (or variable-length with
624       compact encoding): `n' sub-identifiers, where `n' is the length
625       of the string (each octet of the string is encoded in a separate
626       sub-identifier), 
627
628    o  string-valued, variable-length strings or bits-valued: `n+1'
629       sub-identifiers, where `n' is the length of the string or bits
630       encoding (the first sub-identifier is `n' itself, following this,
631       each octet of the string or bits is encoded in a separate
632       sub-identifier), 
633
634    o  object identifier-valued (with compact encoding): `n'
635       sub-identifiers, where `n' is the number of sub-identifiers in
636       the value (each sub-identifier of the value is copied into a
637       separate sub-identifier), 
638
639    o  object identifier-valued: `n+1' sub-identifiers, where `n' is the
640       number of sub-identifiers in the value (the first sub-identifier
641       is `n' itself, following this, each sub-identifier in the value
642       is copied), 
643
644    Note that compact encoding can only be applied to an object having a
645    variable-length syntax (e.g., variable-length strings, bits objects
646    or object identifier-valued objects). Further, compact encoding can
647    only be associated with the last object in a list of indexing
648    objects. Finally, compact encoding MUST NOT be used on a
649    variable-length string object if that string might have a value of
650    zero-length. 
651
652    Instances identified by use of integer-valued or enumeration-valued
653    objects are RECOMMENDED to be numbered starting from one (i.e., not
654    from zero). Integer objects that allow negative values, Unsigned64
655    objects, Integer64 objects and floating point objects MUST NOT be
656    used for table indexing. 
657
658    Objects which are both specified for indexing in a row and also
659    columnar objects of the same row are termed auxiliary objects.
660    Auxiliary objects SHOULD be non-accessible, except in the following
661    circumstances: 
662
663    o  within a MIB module originally written to conform to SMIv1, or 
664
665    o  a row must contain at least one columnar object which is not an
666       auxiliary object.  In the event that all of a row's columnar
667       objects are also specified to be indexing objects then one of
668       them MUST be accessible. (Note that this situation does not arise
669
670
671 Strauss                 Expires August 15, 2000                [Page 12]
672 \f
673 Internet-Draft                   SMIng                     February 2000
674
675
676       for a row allowing create access, since such a row will have a
677       status column which will not be an auxiliary object.) 
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727 Strauss                 Expires August 15, 2000                [Page 13]
728 \f
729 Internet-Draft                   SMIng                     February 2000
730
731
732 3. Base Types and Derived Types
733
734    SMIng has a minimal but complete set of base types, similar to those
735    of many programming languages, but with some differences due to
736    special requirements from the management information model described
737    in Section 2. 
738
739    Additional types may be defined, derived from those base types and
740    even from other derived types. Derived types may use subtyping to
741    formally restrict the possible values. A set of derived types
742    commonly used in the SNMP framework is defined in the SMIng standard
743    module IRTF-NMRG-SMING-TYPES (Section 14.2). 
744
745    Note that types can also be restricted "inline" in object
746    definitions (Section 9, Section 10.6) or in refinements of
747    compliance statements (Section 13) without referring an explicitly
748    defined type. 
749
750    The different base types and its derived types allow different kinds
751    of subtyping, namely size restrictions and range restrictions. See
752    the following sections on base types (Section 3.1 through Section
753    3.11) for details. 
754
755 3.1 OctetString
756
757    The OctetString base type represents arbitrary binary or textual
758    data.  Although SMIng has a theoretical size limitation of 2^32-1
759    (4294967295) octets for this base type, MIB designers should realize
760    that there may be implementation and interoperability limitations
761    for sizes in excess of 255 octets. 
762
763    Values of octet strings may be denoted as textual data enclosed in
764    double quotes or as arbitrary binary data denoted as a `0x'-prefixed
765    hexadecimal value of arbitrary but even length, where each pair of
766    hexadecimal digits represents a single octet. Letters in hexadecimal
767    values MAY be upper-case but lower-case characters are RECOMMENDED.
768    Textual data may contain any number (possibly zero) of any 7-bit
769    displayable ASCII characters except double quote `"', including tab
770    characters, spaces and line terminator characters (nl or cr & nl). 
771    Textual data may span multiple lines, where each subsequent line
772    prefix containing only white space up to the column where the first
773    line's data starts SHOULD be skipped by parsers for a better text
774    formatting. 
775
776    When defining a type derived (directly or indirectly) from the
777    OctetString base type, the size in octets may be restricted by
778    appending a list of size ranges or explicit size values, separated
779    by pipe `|' characters and the whole list enclosed in parenthesis. A
780    size range consists of a lower bound, two consecutive dots `..' and
781
782
783 Strauss                 Expires August 15, 2000                [Page 14]
784 \f
785 Internet-Draft                   SMIng                     February 2000
786
787
788    an upper bound. Each value can be given in decimal or `0x'-prefixed
789    hexadecimal notation. Of course, size restricting values MUST NOT be
790    negative. If multiple values or ranges are given, they all MUST be
791    disjunct and SHOULD be in ascending order. If a size restriction is
792    applied to an already size restricted octet string the new
793    restriction MUST be more limiting, that is raising the lower bounds,
794    reducing the upper bounds, reducing the alternative size choices, or
795    splitting ranges into multiple ranges with intermediate gaps. 
796
797    Value Examples: 
798
799      "This is a multiline
800       textual data example."         // legal
801      "This is "illegally" quoted."   // illegal quotes
802      "But this is 'ok'."             // legal apostrophe quoting
803      ""                              // legal zero length
804      0x123                           // illegal odd hex length
805      0x534d496e670a                  // legal octet string
806
807    Restriction Examples: 
808
809      OctetString (0 | 4..255)        // legal size spec
810      OctetString (4)                 // legal exact size
811      OctetString (-1 | 1)            // illegal negative size
812      OctetString (1 | 1..10)         // illegal overlapping
813
814 3.2 ObjectIdentifier
815
816    The ObjectIdentifier base type represents any object identifier
817    value, which is a list of up to 128 numbers, named sub-identifiers.
818    Each sub-identifier has a value between 0 and 2^32-1 (4294967295). 
819
820    Values of object identifiers may be denoted as a sequence of
821    numerical sub-identifier values (decimal or `0x'-prefixed
822    hexadecimal) separated by single dots and without any intermediate
823    white space. Alternatively (and preferred in most cases), the first
824    element may be a previously defined or imported lower-case
825    identifier, representing a static object identifier prefix while the
826    total number of sub-identifiers MUST NOT exceed 128 including the
827    expanded identifier. 
828
829    Object identifier derived types cannot be restricted in any way. 
830
831    Value Examples: 
832
833
834
835
836
837
838
839 Strauss                 Expires August 15, 2000                [Page 15]
840 \f
841 Internet-Draft                   SMIng                     February 2000
842
843
844      0                           // legal single subid
845      1.3.6.1                     // legal numerical oid
846      mib-2.1                     // legal oid with identifier prefix
847      internet.4.1.0x0627.0x01    // legal oid with hex subids
848      iso.-1                      // illegal negative subid
849      iso.org.6                   // illegal non-heading identifier
850      IF-MIB::ifNumber.0          // legel fully quallified instance oid
851
852 3.3 Integer32
853
854    The Integer32 base type represents integer values between -2^31
855    (-2147483648) and 2^31-1 (2147483647). 
856
857    Values of type Integer32 may be denoted as decimal or hexadecimal
858    numbers, where only decimal numbers can be negative. Other decimal
859    numbers than zero MUST NOT have leading zero digits. Hexadecimal
860    numbers are prefixed by `0x' and MUST have an even number of
861    hexadecimal digits, where letters MAY be upper-case but lower-case
862    characters are RECOMMENDED. 
863
864    When defining a type derived (directly or indirectly) from the
865    Integer32 base type, the set of possible values may be restricted by
866    appending a list of ranges or explicit values, separated by pipe `|'
867    characters and the whole list enclosed in parenthesis. A range
868    consists of a lower bound, two consecutive dots `..' and an upper
869    bound. Each value can be given in decimal or `0x'-prefixed
870    hexadecimal notation. If multiple values or ranges are given they
871    all MUST be disjunct and SHOULD be in ascending order.  If a value
872    restriction is applied to an already restricted type the new
873    restriction MUST be more limiting, that is raising the lower bounds,
874    reducing the upper bounds, reducing the alternative choices, or
875    splitting ranges into multiple ranges with intermediate gaps. 
876
877    Value Examples: 
878
879      015                         // illegal leading zero
880      -123                        // legal negative value
881      - 1                         // illegal intermediate space
882      0xabc                       // illegal hexadecimal value length
883      -0xff                       // illegal sign on hex value
884      0x80000000                  // illegal value, too large
885      0xf00f                      // legal hexadecimal value
886
887    Restriction Examples: 
888
889      Integer32 (0 | 5..10)       // legal range spec
890      Integer32 (4..8 | 5..10)    // illegal overlapping
891
892
893
894
895 Strauss                 Expires August 15, 2000                [Page 16]
896 \f
897 Internet-Draft                   SMIng                     February 2000
898
899
900 3.4 Integer64
901
902    The Integer64 base type represents integer values between -2^63
903    (-9223372036854775808) and 2^63-1 (9223372036854775807). 
904
905    Values of type Integer64 may be denoted as decimal or hexadecimal
906    numbers, where only decimal numbers can be negative. Other decimal
907    numbers than zero MUST NOT have leading zero digits. Hexadecimal
908    numbers are prefixed by `0x' and MUST have an even number of
909    hexadecimal digits, where letters MAY be upper-case but lower-case
910    characters are RECOMMENDED. 
911
912    When defining a type derived (directly or indirectly) from the
913    Integer64 base type, the set of possible values may be restricted by
914    appending a list of ranges or explicit values, separated by pipe `|'
915    characters and the whole list enclosed in parenthesis. A range
916    consists of a lower bound, two consecutive dots `..' and an upper
917    bound. Each value can be given in decimal or `0x'-prefixed
918    hexadecimal notation. If multiple values or ranges are given they
919    all MUST be disjunct and SHOULD be in ascending order.  If a value
920    restriction is applied to an already restricted type the new
921    restriction MUST be more limiting, that is raising the lower bounds,
922    reducing the upper bounds, reducing the alternative choices, or
923    splitting ranges into multiple ranges with intermediate gaps. 
924
925    Value Examples: 
926
927      015                         // illegal leading zero
928      -123                        // legal negative value
929      - 1                         // illegal intermediate space
930      0xabc                       // illegal hexadecimal value length
931      -0xff                       // illegal sign on hex value
932      0x80000000                  // legal value
933
934    Restriction Examples: 
935
936      Integer64 (0 | 5..10)       // legal range spec
937      Integer64 (4..8 | 5..10)    // illegal overlapping
938
939 3.5 Unsigned32
940
941    The Unsigned32 base type represents positive integer values between
942    0 and 2^32-1 (4294967295). 
943
944    Values of type Unsigned32 may be denoted as decimal or hexadecimal
945    numbers. Other decimal numbers than zero MUST NOT have leading zero
946    digits. Hexadecimal numbers are prefixed by `0x' and MUST have an
947    even number of hexadecimal digits, where letters MAY be upper-case
948    but lower-case characters are RECOMMENDED. 
949
950
951 Strauss                 Expires August 15, 2000                [Page 17]
952 \f
953 Internet-Draft                   SMIng                     February 2000
954
955
956    When defining a type derived (directly or indirectly) from the
957    Unsigned32 base type, the set of possible values may be restricted
958    by appending a list of ranges or explicit values, separated by pipe
959    `|' characters and the whole list enclosed in parenthesis. A range
960    consists of a lower bound, two consecutive dots `..' and an upper
961    bound. Each value can be given in decimal or `0x'-prefixed
962    hexadecimal notation. If multiple values or ranges are given they
963    all MUST be disjunct and SHOULD be in ascending order.  If a value
964    restriction is applied to an already restricted type the new
965    restriction MUST be more limiting, that is raising the lower bounds,
966    reducing the upper bounds, reducing the alternative choices, or
967    splitting ranges into multiple ranges with intermediate gaps. 
968
969    Value Examples: 
970
971      015                         // illegal leading zero
972      -123                        // illegal negative value
973      0xabc                       // illegal hexadecimal value length
974      0x80000000                  // legal hexadecimal value
975      0x8080000000                // illegal value, too large]]>
976
977    Restriction Examples: 
978
979      Unsigned32 (0 | 5..10)       // legal range spec
980      Unsigned32 (4..8 | 5..10)    // illegal overlapping
981
982 3.6 Unsigned64
983
984    The Unsigned64 base type represents positive integer values between
985    0 and 2^64-1 (18446744073709551615). 
986
987    Values of type Unsigned64 may be denoted as decimal or hexadecimal
988    numbers. Other decimal numbers than zero MUST NOT have leading zero
989    digits. Hexadecimal numbers are prefixed by `0x' and MUST have an
990    even number of hexadecimal digits, where letters MAY be upper-case
991    but lower-case characters are RECOMMENDED. 
992
993    When defining a type derived (directly or indirectly) from the
994    Unsigned64 base type, the set of possible values may be restricted
995    by appending a list of ranges or explicit values, separated by pipe
996    `|' characters and the whole list enclosed in parenthesis. A range
997    consists of a lower bound, two consecutive dots `..' and an upper
998    bound. Each value can be given in decimal or `0x'-prefixed
999    hexadecimal notation. If multiple values or ranges are given they
1000    all MUST be disjunct and SHOULD be in ascending order.  If a value
1001    restriction is applied to an already restricted type the new
1002    restriction MUST be more limiting, that is raising the lower bounds,
1003    reducing the upper bounds, reducing the alternative choices, or
1004    splitting ranges into multiple ranges with intermediate gaps. 
1005
1006
1007 Strauss                 Expires August 15, 2000                [Page 18]
1008 \f
1009 Internet-Draft                   SMIng                     February 2000
1010
1011
1012    Value Examples: 
1013
1014      015                         // illegal leading zero
1015      -123                        // illegal negative value
1016      0xabc                       // illegal hexadecimal value length
1017      0x8080000000                // legal hexadecimal value
1018
1019    Restriction Examples: 
1020
1021      Unsigned64 (1..10000000000) // legal range spec
1022
1023 3.7 Float32
1024
1025    The Float32 base type represents floating point values of single
1026    precision as described by [11]. 
1027
1028    Values of type Float32 may be denoted as a decimal fraction with an
1029    optional exponent as known from many programming languages. See the
1030    grammar rule `floatValue' of Appendix A for the detailed syntax.
1031    Special values are `snan' (signaling Not-a-Number), `qnan' (quiet
1032    Not-a-Number), `neginf' (negative infinity), and `posinf' (positive
1033    infinity).  Note that -0.0 and +0.0 are different floating point
1034    values.  0.0 is equal to +0.0. 
1035
1036    When defining a type derived (directly or indirectly) from the
1037    Float32 base type, the set of possible values may be restricted by
1038    appending a list of ranges or explicit values, separated by pipe `|'
1039    characters and the whole list enclosed in parenthesis. A range
1040    consists of a lower bound, two consecutive dots `..' and an upper
1041    bound. If multiple values or ranges are given they all MUST be
1042    disjunct and SHOULD be in ascending order.  If a value restriction
1043    is applied to an already restricted type the new restriction MUST be
1044    more limiting, that is raising the lower bounds, reducing the upper
1045    bounds, reducing the alternative choices, or splitting ranges into
1046    multiple ranges with intermediate gaps. The special values `snan',
1047    `qnan', `neginf', and `posinf' must be explicitly listed in
1048    restrictions if they shall be included, where `snan' and `qnan'
1049    cannot be used in ranges. 
1050
1051    Note that encoding is not subject to this specification. It has to
1052    be described by protocols that transport objects of type Float32.
1053    Note also that most floating point encodings disallow the
1054    representation of many values that can be written as decimal
1055    fractions as used in SMIng for human readability. Therefore,
1056    explicit values in floating point type restrictions should be
1057    handled with care. 
1058
1059    Value Examples: 
1060
1061
1062
1063 Strauss                 Expires August 15, 2000                [Page 19]
1064 \f
1065 Internet-Draft                   SMIng                     February 2000
1066
1067
1068      00.1                       // illegal leading zero
1069      3.1415                     // legal value
1070      -2.5E+3                    // legal negative exponential value
1071
1072    Restriction Examples: 
1073
1074      Float32 (-1.0..1.0)        // legal range spec
1075      Float32 (1 | 3.3 | 5)      // legal, probably unrepresentable 3.3
1076      Float32 (-10.0..10.0 | 0)  // illegal overlapping
1077
1078 3.8 Float64
1079
1080    The Float64 base type represents floating point values of double
1081    precision as described by [11]. 
1082
1083    Values of type Float64 may be denoted as a decimal fraction with an
1084    optional exponent as known from many programming languages. See the
1085    grammar rule `floatValue' of Appendix A for the detailed syntax.
1086    Special values are `snan' (signaling Not-a-Number), `qnan' (quiet
1087    Not-a-Number), `neginf' (negative infinity), and `posinf' (positive
1088    infinity).  Note that -0.0 and +0.0 are different floating point
1089    values.  0.0 is equal to +0.0. 
1090
1091    When defining a type derived (directly or indirectly) from the
1092    Float64 base type, the set of possible values may be restricted by
1093    appending a list of ranges or explicit values, separated by pipe `|'
1094    characters and the whole list enclosed in parenthesis. A range
1095    consists of a lower bound, two consecutive dots `..' and an upper
1096    bound. If multiple values or ranges are given they all MUST be
1097    disjunct and SHOULD be in ascending order.  If a value restriction
1098    is applied to an already restricted type the new restriction MUST be
1099    more limiting, that is raising the lower bounds, reducing the upper
1100    bounds, reducing the alternative choices, or splitting ranges into
1101    multiple ranges with intermediate gaps. The special values `snan',
1102    `qnan', `neginf', and `posinf' must be explicitly listed in
1103    restrictions if they shall be included, where `snan' and `qnan'
1104    cannot be used in ranges. If 0.0 is included, -0.0 will also be. 
1105
1106    Note that encoding is not subject to this specification. It has to
1107    be described by protocols that transport objects of type Float64.
1108    Note also that most floating point encodings disallow the
1109    representation of many values that can be written as decimal
1110    fractions as used in SMIng for human readability. Therefore,
1111    explicit values in floating point type restrictions should be
1112    handled with care. 
1113
1114    Value Examples: 
1115
1116
1117
1118
1119 Strauss                 Expires August 15, 2000                [Page 20]
1120 \f
1121 Internet-Draft                   SMIng                     February 2000
1122
1123
1124      00.1                       // illegal leading zero
1125      3.1415                     // legal value
1126      -2.5E+3                    // legal negative exponential value
1127
1128    Restriction Examples: 
1129
1130      Float64 (-1.0..1.0)        // legal range spec
1131      Float64 (1 | 3.3 | 5)      // legal, probably unrepresentable 3.3
1132      Float64 (-10.0..10.0 | 0)  // illegal overlapping
1133
1134 3.9 Float128
1135
1136    The Float128 base type represents floating point values of quadruple
1137    precision as described by [11]. 
1138
1139    Values of type Float128 may be denoted as a decimal fraction with an
1140    optional exponent as known from many programming languages. See the
1141    grammar rule `floatValue' of Appendix A for the detailed syntax.
1142    Special values are `snan' (signaling Not-a-Number), `qnan' (quiet
1143    Not-a-Number), `neginf' (negative infinity), and `posinf' (positive
1144    infinity).  Note that -0.0 and +0.0 are different floating point
1145    values.  0.0 is equal to +0.0. 
1146
1147    When defining a type derived (directly or indirectly) from the
1148    Float128 base type, the set of possible values may be restricted by
1149    appending a list of ranges or explicit values, separated by pipe `|'
1150    characters and the whole list enclosed in parenthesis. A range
1151    consists of a lower bound, two consecutive dots `..' and an upper
1152    bound. If multiple values or ranges are given they all MUST be
1153    disjunct and SHOULD be in ascending order.  If a value restriction
1154    is applied to an already restricted type the new restriction MUST be
1155    more limiting, that is raising the lower bounds, reducing the upper
1156    bounds, reducing the alternative choices, or splitting ranges into
1157    multiple ranges with intermediate gaps. The special values `snan',
1158    `qnan', `neginf', and `posinf' must be explicitly listed in
1159    restrictions if they shall be included, where `snan' and `qnan'
1160    cannot be used in ranges. If 0.0 is included, -0.0 will also be. 
1161
1162    Note that encoding is not subject to this specification. It has to
1163    be described by protocols that transport objects of type Float128.
1164    Note also that most floating point encodings disallow the
1165    representation of many values that can be written as decimal
1166    fractions as used in SMIng for human readability. Therefore,
1167    explicit values in floating point type restrictions should be
1168    handled with care. 
1169
1170    Value Examples: 
1171
1172
1173
1174
1175 Strauss                 Expires August 15, 2000                [Page 21]
1176 \f
1177 Internet-Draft                   SMIng                     February 2000
1178
1179
1180      00.1                       // illegal leading zero
1181      3.1415                     // legal value
1182      -2.5E+3                    // legal negative exponential value
1183
1184    Restriction Examples: 
1185
1186      Float128 (-1.0..1.0)       // legal range spec
1187      Float128 (1 | 3.3 | 5)     // legal, probably unrepresentable 3.3
1188      Float128 (-10.0..10.0 | 0) // illegal overlapping
1189
1190 3.10 Enumeration
1191
1192    The Enumeration base type represents values from a set of integers
1193    in the range between -2^31 (-2147483648) and 2^31-1 (2147483647),
1194    where each value has an assigned name. The list of those named
1195    numbers has to be comma-separated, enclosed in parenthesis and
1196    appended to the `Enumeration' keyword. Each named number is denoted
1197    by its lower-case identifier followed by the assigned integer value,
1198    denoted as a decimal or `0x'-prefixed hexadecimal number, enclosed
1199    in parenthesis. Every name and every number in an enumeration type
1200    MUST be unique. It is RECOMMENDED that values start at 1 and be
1201    numbered contiguously. 
1202
1203    Values of enumeration types may be denoted as decimal or
1204    `0x'-prefixed hexadecimal numbers or preferably as their assigned
1205    names. 
1206
1207    When defining a type derived (directly or indirectly) from an
1208    enumeration type, the set of named numbers may be restricted by
1209    removing one or more named numbers.  But no named numbers may be
1210    added or changed regarding its name, value, or both. 
1211
1212    Type and Value Examples: 
1213
1214      Enumeration (up(1), down(2), testing(3))
1215
1216      0                           // illegal, value 0 out of range
1217      up                          // legal value given by name
1218      2                           // legal value given by number
1219
1220 3.11 Bits
1221
1222    The Bits base type represents bit sets. That is, a Bits value is a
1223    set of flags identified by small integer numbers starting at 0. 
1224    Each bit number has an assigned name. The list of those named
1225    numbers has to be comma-separated, enclosed in parenthesis and
1226    appended to the `Bits' keyword. Each named number is denoted by its
1227    lower-case identifier followed by the assigned integer value,
1228    denoted as a decimal or `0x'-prefixed hexadecimal number, enclosed
1229
1230
1231 Strauss                 Expires August 15, 2000                [Page 22]
1232 \f
1233 Internet-Draft                   SMIng                     February 2000
1234
1235
1236    in parenthesis. Every name and every number in a bits type MUST be
1237    unique. It is RECOMMENDED that numbers start at 0 and be numbered
1238    contiguously. 
1239
1240    Values of bits types may be denoted as a comma-separated list of
1241    decimal or `0x'-prefixed hexadecimal numbers or preferably their
1242    assigned names enclosed in parenthesis. There MUST NOT be any
1243    element (by name or number) listed more than once. It is RECOMMENDED
1244    to list elements in ascending order, although the order is
1245    semantically irrelevant. 
1246
1247    When defining a type derived (directly or indirectly) from a bits
1248    type, the set of named numbers may be restricted by removing one or
1249    more named numbers.  But no named numbers may be added or changed
1250    regarding its name, value, or both. 
1251
1252    Type and Value Examples: 
1253
1254      Bits (readable(0), writeable(1), executable(2))
1255
1256      ()                          // legal empty value
1257      (readable, writeable, 2)    // legal value
1258      (0, readable, executable)   // illegal, readable(0) appears twice
1259      (writeable, 4)              // illegal, element 4 out of range
1260
1261 3.12 Display Formats
1262
1263    Some SMIng definitions, namely scalar and columnar object
1264    definitions and type definitions, allow the specification of a
1265    format to be used, when a value of that object or an object of that
1266    type is displayed. Format specifications are represented as textual
1267    data. 
1268
1269    When the object or type has an underlying base type of Integer32,
1270    Integer64, Unsigned32, or Unsigned64, the format consists of an
1271    integer-format specification, containing two parts.  The first part
1272    is a single character suggesting a display format, either: `x' for
1273    hexadecimal, or `d' for decimal, or `o' for octal, or `b' for
1274    binary.  For all types, when rendering the value, leading zeros are
1275    omitted, and for negative values, a minus sign is rendered
1276    immediately before the digits.  The second part is always omitted
1277    for `x', `o' and `b', and need not be present for `d'.  If present,
1278    the second part starts with a hyphen and is followed by a decimal
1279    number, which defines the implied decimal point when rendering the
1280    value. For example `d-2' suggests that a value of 1234 be rendered
1281    as `12.34'. 
1282
1283    When the object or type has an underlying base type of OctetString,
1284    the format consists of one or more octet-format specifications. 
1285
1286
1287 Strauss                 Expires August 15, 2000                [Page 23]
1288 \f
1289 Internet-Draft                   SMIng                     February 2000
1290
1291
1292    Each specification consists of five parts, with each part using and
1293    removing zero or more of the next octets from the value and
1294    producing the next zero or more characters to be displayed.  The
1295    octets within the value are processed in order of significance, most
1296    significant first. 
1297
1298    The five parts of a octet-format specification are: 
1299
1300    1.  the (optional) repeat indicator; if present, this part is a `*',
1301        and indicates that the current octet of the value is to be used
1302        as the repeat count.  The repeat count is an unsigned integer
1303        (which may be zero) which specifies how many times the remainder
1304        of this octet-format specification should be successively
1305        applied.  If the repeat indicator is not present, the repeat
1306        count is one. 
1307
1308    2.  the octet length: one or more decimal digits specifying the
1309        number of octets of the value to be used and formatted by this
1310        octet-specification.  Note that the octet length can be zero. 
1311        If less than this number of octets remain in the value, then the
1312        lesser number of octets are used. 
1313
1314    3.  the display format, either: `x' for hexadecimal, `d' for
1315        decimal, `o' for octal, `a' for ASCII, or `t' for UTF-8 [12]. If
1316        the octet length part is greater than one, and the display
1317        format part refers to a numeric format, then network
1318        byte-ordering (big-endian encoding) is used interpreting the
1319        octets in the value.  The octets processed by the `t' display
1320        format do not necessarily form an integral number of UTF-8
1321        characters.  Trailing octets which do not form a valid UTF-8
1322        encoded character are discarded. 
1323
1324    4.  the (optional) display separator character; if present, this
1325        part is a single character which is produced for display after
1326        each application of this octet-specification; however, this
1327        character is not produced for display if it would be immediately
1328        followed by the display of the repeat terminator character for
1329        this octet specification.  This character can be any character
1330        other than a decimal digit and a `*'. 
1331
1332    5.  the (optional) repeat terminator character, which can be present
1333        only if the display separator character is present and this
1334        octet specification begins with a repeat indicator; if present,
1335        this part is a single character which is produced after all the
1336        zero or more repeated applications (as given by the repeat
1337        count) of this octet specification.  This character can be any
1338        character other than a decimal digit and a `*'. 
1339
1340    Output of a display separator character or a repeat terminator
1341
1342
1343 Strauss                 Expires August 15, 2000                [Page 24]
1344 \f
1345 Internet-Draft                   SMIng                     February 2000
1346
1347
1348    character is suppressed if it would occur as the last character of
1349    the display. 
1350
1351    If the octets of the value are exhausted before all the octet format
1352    specification have been used, then the excess specifications are
1353    ignored.  If additional octets remain in the value after
1354    interpreting all the octet format specifications, then the last
1355    octet format specification is re-interpreted to process the
1356    additional octets, until no octets remain in the value. 
1357
1358    Note that for some types (e.g. ObjectIdentifier) no format
1359    specifications are defined and SHOULD be omitted. Implementations
1360    MUST ignore format specifications they cannot interpret. Also note
1361    that the SMIng grammar (Appendix A) does not specify the syntax of
1362    format specifications. 
1363
1364    Display Format Examples: 
1365
1366      Base Type   Format              Example Value    Rendered Value
1367      ----------- ------------------- ---------------- -----------------
1368      OctetString 255a                "Hello World."   Hello World.
1369      OctetString 1x:                 "Hello!"         48:65:6c:6c:6f:21
1370      OctetString 1d:1d:1d.1d,1a1d:1d 0x0d1e0f002d0400 13:30:15.0,-4:0
1371      OctetString 1d.1d.1d.1d/2d      0x0a0000010400   10.0.0.1/1024
1372      OctetString *1x:/1x:            0x02aabbccddee   aa:bb/cc:dd:ee
1373      Integer32   d-2                 1234             12.34
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399 Strauss                 Expires August 15, 2000                [Page 25]
1400 \f
1401 Internet-Draft                   SMIng                     February 2000
1402
1403
1404 4. The SMIng File Structure
1405
1406    The topmost container of SMIng information is a file. An SMIng file
1407    may contain zero, one or more modules. It is RECOMMENDED to separate
1408    modules into files named by their modules, where possible. Though,
1409    for dedicated purposes it may be reasonable to collect several
1410    modules in a single file. 
1411
1412    The top level SMIng construct is the `module' statement (Section 5)
1413    that defines a single MIB module.  A module contains a sequence of
1414    sections in an obligatory order with different kinds of definitions.
1415    Whether these sections contain statements or remain empty mainly
1416    depends on the purpose of the module (see Section 2). 
1417
1418 4.1 Comments
1419
1420    Comments can be included at any position in an SMIng file, except in
1421    between the characters of a single token like those of a quoted
1422    strings.  However, it is RECOMMENDED that all substantive
1423    descriptions be placed within an appropriate description clause. 
1424
1425    Comments commence with a pair of adjacent slashes `//' and end at
1426    the end of the line. 
1427
1428 4.2 Statements and Arguments
1429
1430    SMIng has a very small set of basic grammar rules based on the
1431    concept of statements. Each statement starts with a lower-case
1432    keyword identifying the statement followed by a number (possibly
1433    zero) of arguments. An argument may be quoted text, an identifier, a
1434    value of any base type, a list of identifiers enclosed in
1435    parenthesis `( )' or a statement block enclosed in curly braces `{
1436    }'. Since statement blocks are valid arguments, it is possible to
1437    nest statement sequences. Each statement is terminated by a
1438    semicolon `;'. 
1439
1440    The core set of statements may be extended using the SMIng
1441    `extension' statement. See Section 6 and Section 16 for details. 
1442
1443    At places where a statement is expected, but an unknown lower-case
1444    word is read, those statements MUST be skipped up to the proper
1445    semicolon, including nested statement blocks. 
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455 Strauss                 Expires August 15, 2000                [Page 26]
1456 \f
1457 Internet-Draft                   SMIng                     February 2000
1458
1459
1460 5. The module Statement
1461
1462    The `module' statement is used as a container of all definitions of
1463    a single SMIng MIB module. It gets two arguments: an upper-case
1464    module name and a statement block that contains mandatory and
1465    optional statements and sections of statements in an obligatory
1466    order: 
1467
1468            module <MODULE-NAME> {
1469
1470                <optional import statements>
1471                <organization statement>
1472                <contact statement>
1473                <description statement>
1474                <optional reference statement>
1475                <at least one revision statement>
1476                <optional identity statement>
1477
1478                <optional extension statements>
1479
1480                <optional typedef statements>
1481
1482                <optional node/scalar/table statements>
1483
1484                <optional notification statements>
1485
1486                <optional group statements>
1487
1488                <optional compliance statements>
1489
1490            };
1491
1492    The optional `import' statements are followed by the mandatory
1493    `organization', `contact', and `description' statements and the
1494    optional `reference' statement, which in turn are followed by the
1495    mandatory `revision' statements. This part defines the module's meta
1496    information while the following sections contain its main
1497    definitions. 
1498
1499    See the `moduleStatement' rule of the SMIng grammar (Appendix A) for
1500    the formal syntax of the `module' statement. 
1501
1502 5.1 The module's import Statement
1503
1504    The optional module's `import' statement is used to import
1505    descriptors from external modules into the local module's namespace.
1506    It gets two arguments: the name of the external module and a
1507    comma-separated list of one or more identifiers to be imported
1508    enclosed in parenthesis. 
1509
1510
1511 Strauss                 Expires August 15, 2000                [Page 27]
1512 \f
1513 Internet-Draft                   SMIng                     February 2000
1514
1515
1516    Multiple `import' statements for the same module but with disjunct
1517    lists of identifiers are allowed, though NOT RECOMMENDED. Anyhow,
1518    the same identifier from the same module MUST NOT be imported
1519    multiple times. To import identifiers with the same name from
1520    different modules might be necessary and is allowed. To distinguish
1521    them in the local module, they have to be referred by qualified
1522    names. It is NOT RECOMMENDED to import identifiers not used in the
1523    local module. 
1524
1525    See the `importStatement' rule of the SMIng grammar (Appendix A) for
1526    the formal syntax of the `import' statement. 
1527
1528 5.2 The module's organization Statement
1529
1530    The module's `organization' statement, which must be present, gets
1531    one argument which is used to specify a textual description of the
1532    organization(s) under whose auspices this module was developed. 
1533
1534 5.3 The module's contact Statement
1535
1536    The module's `contact' statement, which must be present, gets one
1537    argument which is used to specify the name, postal address,
1538    telephone number, and electronic mail address of the person to whom
1539    technical queries concerning this revision of this module should be
1540    sent. 
1541
1542 5.4 The module's description Statement
1543
1544    The module's `description' statement, which must be present, gets
1545    one argument which is used to specify a high-level textual
1546    description of the contents of this module. 
1547
1548 5.5 The module's reference Statement
1549
1550    The module's `reference' statement, which need not be present, gets
1551    one argument which is used to specify a textual cross-reference to
1552    some other document, either another module which defines related
1553    management information, or some other document which provides
1554    additional information relevant to this module. 
1555
1556 5.6 The module's revision Statement
1557
1558    The module's `revision' statement is repeatedly used to specify the
1559    editorial revisions of the module, including the initial revision.
1560    It gets one argument which is a statement block that holds detailed
1561    information in an obligatory order.  A module MUST have at least one
1562    initial `revision' statement. For every editorial change, a new one
1563    MUST be added in front of the revisions sequence, so that all
1564    revisions are in reverse chronological order. 
1565
1566
1567 Strauss                 Expires August 15, 2000                [Page 28]
1568 \f
1569 Internet-Draft                   SMIng                     February 2000
1570
1571
1572    See the `revisionStatement' rule of the SMIng grammar (Appendix A)
1573    for the formal syntax of the `revision' statement. 
1574
1575 5.6.1 The revision's date Statement
1576
1577    The revision's `date' statement, which must be present, gets one
1578    argument which is used to specify the date and time of the revision
1579    in the format `YYYY-MM-DD HH:MM' or `YYYY-MM-DD' which implies the
1580    time `00:00'. The time is always given in UTC. 
1581
1582    See the `date' rule of the SMIng grammar (Appendix A) for the formal
1583    syntax of the revision's `date' statement. 
1584
1585 5.6.2 The revision's description Statement
1586
1587    The revision's `description' statement, which must be present, gets
1588    one argument which is used to specify a high-level textual
1589    description of the revision. 
1590
1591 5.7 The module's identity Statement
1592
1593    The module's `identity' statement, which need not be present, gets
1594    one argument which specifies a node identifier within the local
1595    module, so that the object identifier of this node can be used to
1596    identify the module. 
1597
1598 5.8 Usage Example
1599
1600    Consider how a skeletal MIB module might be constructed: e.g., 
1601
1602    module FIZBIN-MIB {
1603
1604      import IRTF-NMRG-SMING (experimental);
1605
1606      organization
1607                "IETF SNMPv2 Working Group,
1608                 IRTF Network Management Research Group (NMRG)";
1609
1610      contact
1611                "        Frank Strauss
1612
1613                 Postal: TU Braunschweig
1614                         Bueltenweg 74/75
1615                         38106 Braunschweig
1616                         DE
1617
1618                  Phone: +49 531 391-3266
1619                  EMail: strauss@ibr.cs.tu-bs.de";
1620
1621
1622
1623 Strauss                 Expires August 15, 2000                [Page 29]
1624 \f
1625 Internet-Draft                   SMIng                     February 2000
1626
1627
1628      description
1629                "The MIB module for entities implementing
1630                 the xxxx protocol.";
1631
1632      reference
1633                "RFC 2578, Section 5.7.";
1634
1635      revision {
1636        date            "1999-09-28";
1637        description
1638                "Conversion from SMIv2 to SMIng.";
1639      };
1640      revision {
1641        date            "1995-05-24 18:11";
1642        description
1643                "Revision for RFC 1902.";
1644      };
1645      revision {
1646        date            "1992-10-07 04:33";
1647        description
1648                "The initial version of this MIB module,
1649                 published in RFC 1442.";
1650      };
1651
1652      identity fizbin;
1653
1654      // ... further definitions ...
1655
1656    }; // end of module FIZBIN-MIB.
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679 Strauss                 Expires August 15, 2000                [Page 30]
1680 \f
1681 Internet-Draft                   SMIng                     February 2000
1682
1683
1684 6. The extension Statement
1685
1686    The `extension' statement is used to define new statements to be
1687    used in the local module following this extension statement
1688    definition or in external modules that may import this extension
1689    statement definition. The `extension' statement gets two arguments:
1690    a lower-case extension statement identifier and a statement block
1691    that holds detailed extension information in an obligatory order. 
1692
1693    Extension statement identifiers SHOULD NOT contain any upper-case
1694    characters or hyphens. 
1695
1696    Note that the SMIng extension feature does not allow to formally
1697    specify the context, argument syntax and semantics of an extension.
1698    Its only purpose is to declare the existence of an extension and to
1699    allow a unique reference to an extension. See Section 16 for
1700    detailed information on extensions and Section 14.3 for a common
1701    example, the `agentcaps' extension. 
1702
1703    See the `extensionStatement' rule of the SMIng grammar (Appendix A)
1704    for the formal syntax of the `extension' statement. 
1705
1706 6.1 The extension's status Statement
1707
1708    The extension's `status' statement, which need not be present, gets
1709    one argument which is used to specify whether this extension
1710    definition is current or historic. The value `current' means that
1711    the definition is current and valid. The value `obsolete' means the
1712    definition is obsolete and should not be implemented and/or can be
1713    removed if previously implemented.  While the value `deprecated'
1714    also indicates an obsolete definition, it permits new/continued
1715    implementation in order to foster interoperability with
1716    older/existing implementations. 
1717
1718    If the `status' statement is omitted, the status value `current' is
1719    implied. 
1720
1721 6.2 The extension's description Statement
1722
1723    The extension's `description' statement, which must be present, gets
1724    one argument which is used to specify a high-level textual
1725    description of the extension statement. 
1726
1727    It is RECOMMENDED to include information on the extension's context,
1728    its semantics, and implementation conditions. See also Section 16. 
1729
1730 6.3 The extension's reference Statement
1731
1732    The extension's `reference' statement, which need not be present,
1733
1734
1735 Strauss                 Expires August 15, 2000                [Page 31]
1736 \f
1737 Internet-Draft                   SMIng                     February 2000
1738
1739
1740    gets one argument which is used to specify a textual cross-reference
1741    to some other document, either another module which defines related
1742    extension definitions, or some other document which provides
1743    additional information relevant to this extension. 
1744
1745 6.4 The extension's abnf Statement
1746
1747    The extension's `abnf' statement, which need not be present, gets
1748    one argument which is used to specify a formal ABNF [8] grammar
1749    definition of the extension. 
1750
1751    Note that the `abnf' statement should contain only pure ABNF and no
1752    additional text, though comments prefixed by semicolon are allowed
1753    but should probably be moved to the description statement. Note also
1754    that double quotes are not allowed inside textual descriptions which
1755    are itself enclosed in double quotes. So they have to be replaced by
1756    single quotes. 
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791 Strauss                 Expires August 15, 2000                [Page 32]
1792 \f
1793 Internet-Draft                   SMIng                     February 2000
1794
1795
1796 7. The typedef Statement
1797
1798    The `typedef' statement is used to define new data types to be used
1799    in the local module or in external modules. It gets two arguments:
1800    an upper-case type identifier and a statement block that holds
1801    detailed type information in an obligatory order. 
1802
1803    Type identifiers SHOULD NOT consist of all upper-case characters and
1804    SHOULD NOT contain hyphens. 
1805
1806    See the `typedefStatement' rule of the SMIng grammar (Appendix A)
1807    for the formal syntax of the `typedef' statement. 
1808
1809 7.1 The typedef's type Statement
1810
1811    The typedef's `type' statement, which must be present, gets one
1812    argument which is used to specify the type from which this type is
1813    derived. Optionally, type restrictions may be applied to the new
1814    type by appending subtyping information according to the rules of
1815    the base type.  See Section 3 for SMIng base types and their type
1816    restrictions. 
1817
1818 7.2 The typedef's default Statement
1819
1820    The typedef's `default' statement, which need not be present, gets
1821    one argument which is used to specify an acceptable default value
1822    for objects of this type. A default value may be used at the
1823    discretion of an agent when an object instance is created. That is,
1824    the value is a "hint" to implementors. 
1825
1826    The value of the `default' statement must, of course, correspond to
1827    the (probably restricted) type specified in the typedef's `type'
1828    statement. 
1829
1830    The default value of a type may be overwritten by a default value of
1831    an object of this type. 
1832
1833    Note that for some types, default values make no sense, e.g.
1834    IRTF-NMRG-SMING-TYPES::Counter32. 
1835
1836 7.3 The typedef's format Statement
1837
1838    The typedef's `format' statement, which need not be present, gets
1839    one argument which is used to give a hint as to how the value of an
1840    instance of an object of this type might be displayed. See Section
1841    3.12 for a description of format specifications. 
1842
1843    If no format is specified, it is inherited from the type given in
1844    the `type' statement.  On the other hand, the format specification
1845
1846
1847 Strauss                 Expires August 15, 2000                [Page 33]
1848 \f
1849 Internet-Draft                   SMIng                     February 2000
1850
1851
1852    of a type may be overwritten by a format specification of an object
1853    of this type. 
1854
1855 7.4 The typedef's units Statement
1856
1857    The typedef's `units' statement, which need not be present, gets one
1858    argument which is used to specify a textual definition of the units
1859    associated with objects of this type. 
1860
1861    If no units are specified, they are inherited from the type given in
1862    the `type' statement.  On the other hand, the units specification of
1863    a type may be overwritten by a units specification of an object of
1864    this type. 
1865
1866    The units specification has to be appropriate for values displayed
1867    according to the typedef's format specification, if present. E.g.,
1868    if the type defines frequency values of type Unsigned64 measured in
1869    thousands of Hertz, the format specification should be `d-3' and the
1870    units specification should be `Hertz' or `Hz'. If the format
1871    specification would be omitted, the units specification should be
1872    `Milli-Hertz' or `mHz'.  MIB Authors should pay attention to keep
1873    format and units specifications of type and object definitions
1874    synced. Application implementors MUST NOT implement units
1875    specifications without implementing format specifications. 
1876
1877 7.5 The typedef's status Statement
1878
1879    The typedef's `status' statement, which need not be present, gets
1880    one argument which is used to specify whether this type definition
1881    is current or historic. The value `current' means that the
1882    definition is current and valid.  The value `obsolete' means the
1883    definition is obsolete and should not be implemented and/or can be
1884    removed if previously implemented.  While the value `deprecated'
1885    also indicates an obsolete definition, it permits new/continued
1886    implementation in order to foster interoperability with
1887    older/existing implementations. 
1888
1889    Derived types SHOULD NOT be defined as `current' if their underlying
1890    type is `deprecated' or `obsolete'. Similarly, they SHOULD NOT be
1891    defined as `deprecated' if their underlying type is `obsolete'.
1892    Nevertheless, subsequent revisions of the underlying type cannot be
1893    avoided, but SHOULD be taken into account in subsequent revisions of
1894    the local module. 
1895
1896    If the `status' statement is omitted, the status value `current' is
1897    implied. 
1898
1899
1900
1901
1902
1903 Strauss                 Expires August 15, 2000                [Page 34]
1904 \f
1905 Internet-Draft                   SMIng                     February 2000
1906
1907
1908 7.6 The typedef's description Statement
1909
1910    The typedef's `description' statement, which must be present, gets
1911    one argument which is used to specify a high-level textual
1912    description of the newly defined type. 
1913
1914    It is RECOMMENDED to include all semantic definitions necessary for
1915    implementation, and to embody any information which would otherwise
1916    be communicated in any commentary annotations associated with this
1917    type definition. 
1918
1919 7.7 The typedef's reference Statement
1920
1921    The typedef's `reference' statement, which need not be present, gets
1922    one argument which is used to specify a textual cross-reference to
1923    some other document, either another module which defines related
1924    type definitions, or some other document which provides additional
1925    information relevant to this type definition. 
1926
1927 7.8 Usage Examples
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959 Strauss                 Expires August 15, 2000                [Page 35]
1960 \f
1961 Internet-Draft                   SMIng                     February 2000
1962
1963
1964      typedef RptrOperStatus {
1965        type            Enumeration (other(1), ok(2), rptrFailure(3),
1966                                     groupFailure(4), portFailure(5),
1967                                     generalFailure(6));
1968        default         other;       // undefined by default.
1969        status          deprecated;
1970        description
1971                "A type to indicate the operational state
1972                 of a repeater.";
1973        reference
1974                "[IEEE 802.3 Mgt], 30.4.1.1.5, aRepeaterHealthState.";
1975      };
1976
1977      typedef DateAndTime {
1978        type            OctetString (8 | 11);
1979        format          "2d-1d-1d,1d:1d:1d.1d,1a1d:1d";
1980        status          current;     // could be omitted
1981        description
1982                "A date-time specification.
1983                 ...
1984                 Note that if only local time is known, then timezone
1985                 information (fields 8-10) is not present.";
1986        reference
1987                "RFC 2579, SNMPv2-TC.DateAndTime.";
1988      };
1989
1990      typedef Frequency {
1991        type            Unsigned64;
1992        format          "d-3"
1993        units           "Hertz";
1994        description
1995                "A wide-range frequency specification measured
1996                 in thousands of Hertz.";
1997      };
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015 Strauss                 Expires August 15, 2000                [Page 36]
2016 \f
2017 Internet-Draft                   SMIng                     February 2000
2018
2019
2020 8. The node Statement
2021
2022    The `node' statement is used to name and describe a node in the
2023    object identifier tree, without associating object information with
2024    this node. This may be useful to group definitions in a subtree of
2025    related management information, or to uniquely define an identity of
2026    arbitrary kind to be referenced in objects of type ObjectIdentifier.
2027    The `node' statement gets two arguments: a lower-case node
2028    identifier and a statement block that holds detailed node
2029    information in an obligatory order. 
2030
2031    See the `nodeStatement' rule of the SMIng grammar (Appendix A) for
2032    the formal syntax of the `node' statement. 
2033
2034 8.1 The node's oid Statement
2035
2036    The node's `oid' statement, which must be present, gets one argument
2037    which specifies the object identifier value that is assigned to this
2038    node. 
2039
2040 8.2 The node's status Statement
2041
2042    The node's `status' statement, which need not be present, gets one
2043    argument which is used to specify whether this node definition is
2044    current or historic. The value `current' means that the definition
2045    is current and valid.  The value `obsolete' means the definition is
2046    obsolete and should not be implemented and/or can be removed if
2047    previously implemented.  While the value `deprecated' also indicates
2048    an obsolete definition, it permits new/continued implementation in
2049    order to foster interoperability with older/existing
2050    implementations. 
2051
2052    If the `status' statement is omitted, the status value `current' is
2053    implied. 
2054
2055 8.3 The node's description Statement
2056
2057    The node's `description' statement, which must be present, gets one
2058    argument which is used to specify a high-level textual description
2059    of this node. 
2060
2061    It is RECOMMENDED to include all semantics and purposes of this
2062    node. 
2063
2064 8.4 The node's reference Statement
2065
2066    The node's `reference' statement, which need not be present, gets
2067    one argument which is used to specify a textual cross-reference to
2068    some other document, either another module which defines related
2069
2070
2071 Strauss                 Expires August 15, 2000                [Page 37]
2072 \f
2073 Internet-Draft                   SMIng                     February 2000
2074
2075
2076    nodes, or some other document which provides additional information
2077    relevant to this node. 
2078
2079 8.5 Usage Examples
2080
2081      node iso                            { oid 1;                };
2082      node   org                          { oid iso.3;            };
2083      node     dod                        { oid org.6;            };
2084      node       internet                 { oid dod.1;            };
2085
2086      node   zeroDotZero {
2087          oid         0.0;
2088          description "A value used for null identifiers.";
2089          reference   "RFC 2578, 2. Definitions.";
2090      };
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127 Strauss                 Expires August 15, 2000                [Page 38]
2128 \f
2129 Internet-Draft                   SMIng                     February 2000
2130
2131
2132 9. The scalar Statement
2133
2134    The `scalar' statement is used to define a scalar managed object. 
2135    The `scalar' statement gets two arguments: a lower-case scalar
2136    identifier and a statement block that holds detailed object
2137    information in an obligatory order. 
2138
2139    See the `scalarStatement' rule of the SMIng grammar (Appendix A) for
2140    the formal syntax of the `scalar' statement. 
2141
2142 9.1 The scalar's oid Statement
2143
2144    The scalar's `oid' statement, which must be present, gets one
2145    argument which specifies the object identifier value that is
2146    assigned to this scalar object. 
2147
2148 9.2 The scalar's type Statement
2149
2150    The scalar's `type' statement, which must be present, gets one
2151    argument which is used to specify the data type of this scalar
2152    object. Optionally, type restrictions may be applied to the type by
2153    appending subtyping information according to the rules of the base
2154    type.  See Section 3 for SMIng base types and their type
2155    restrictions. 
2156
2157 9.3 The scalar's access Statement
2158
2159    The scalar's `access' statement, which must be present, gets one
2160    argument which is used to specify whether it makes sense to read
2161    and/or write an instance of the object, or to include its value in a
2162    notification.  This is the maximal level of access for the object.
2163    This maximal level of access is independent of any administrative
2164    authorization policy. 
2165
2166    The value `readwrite' indicates that read and write access makes
2167    sense. The value `readonly' indicates that read access makes sense,
2168    but write access is never possible. The value `notifyonly' indicates
2169    an object which is accessible only via a notification. 
2170
2171    These values are ordered, from least to greatest access level:
2172    `notifyonly', `readonly', `readwrite'. 
2173
2174 9.4 The scalar's default Statement
2175
2176    The scalar's `default' statement, which need not be present, gets
2177    one argument which is used to specify an acceptable default value
2178    for this scalar object. A default value may be used at the
2179    discretion of an agent when an object instance is created. That is,
2180    the value is a "hint" to implementors. 
2181
2182
2183 Strauss                 Expires August 15, 2000                [Page 39]
2184 \f
2185 Internet-Draft                   SMIng                     February 2000
2186
2187
2188    The value of the `default' statement must, of course, correspond to
2189    the (probably restricted) type specified in the scalar's `type'
2190    statement. 
2191
2192    The scalar's default value overrides the default value of the
2193    underlying type definition, if both are present. 
2194
2195    Note that for objects of some types, default values make no sense,
2196    e.g. IRTF-NMRG-SMING-TYPES::Counter32. 
2197
2198 9.5 The scalar's format Statement
2199
2200    The scalar's `format' statement, which need not be present, gets one
2201    argument which is used to give a hint as to how the value of an
2202    instance of this object might be displayed. See Section 3.12 for a
2203    description of format specifications. 
2204
2205    The scalar's format specification overrides the format specification
2206    of the underlying type definition if both are present. 
2207
2208 9.6 The scalar's units Statement
2209
2210    The scalar's `units' statement, which need not be present, gets one
2211    argument which is used to specify a textual definition of the units
2212    associated with this scalar object. 
2213
2214    The scalar's units specification overrides the units specification
2215    of the underlying type definition if both are present. 
2216
2217    The units specification has to be appropriate for values displayed
2218    according to the scalar's format specification if present. E.g., if
2219    the scalar object represents a frequency value of type Unsigned64
2220    measured in thousands of Hertz, the format specification should be
2221    `d-3' and the units specification should be `Hertz' or `Hz'. If the
2222    format specification would be omitted, the units specification
2223    should be `Milli-Hertz' or `mHz'.  MIB Authors should pay attention
2224    to keep format and units specifications of type and object
2225    definitions synced. Application implementors MUST NOT implement
2226    units specifications without implementing format specifications. 
2227
2228 9.7 The scalar's status Statement
2229
2230    The scalar's `status' statement, which need not be present, gets one
2231    argument which is used to specify whether this scalar object
2232    definition is current or historic. The value `current' means that
2233    the definition is current and valid. The value `obsolete' means the
2234    definition is obsolete and should not be implemented and/or can be
2235    removed if previously implemented.  While the value `deprecated'
2236    also indicates an obsolete definition, it permits new/continued
2237
2238
2239 Strauss                 Expires August 15, 2000                [Page 40]
2240 \f
2241 Internet-Draft                   SMIng                     February 2000
2242
2243
2244    implementation in order to foster interoperability with
2245    older/existing implementations. 
2246
2247    Scalar objects SHOULD NOT be defined as `current' if their type is
2248    `deprecated' or `obsolete'. Similarly, they SHOULD NOT be defined as
2249    `deprecated' if their type is `obsolete'. Nevertheless, subsequent
2250    revisions of used type definition cannot be avoided, but SHOULD be
2251    taken into account in subsequent revisions of the local module. 
2252
2253    If the `status' statement is omitted the status value `current' is
2254    implied. 
2255
2256 9.8 The scalar's description Statement
2257
2258    The scalar's `description' statement, which must be present, gets
2259    one argument which is used to specify a high-level textual
2260    description of this scalar object. 
2261
2262    It is RECOMMENDED to include all semantic definitions necessary for
2263    the implementation of this scalar object. 
2264
2265 9.9 The scalar's reference Statement
2266
2267    The scalar's `reference' statement, which need not be present, gets
2268    one argument which is used to specify a textual cross-reference to
2269    some other document, either another module which defines related
2270    scalar objects, or some other document which provides additional
2271    information relevant to this scalar object. 
2272
2273 9.10 Usage Examples
2274
2275      scalar dialCtlTrapEnable {
2276        oid             dialCtlConfiguration.2;
2277        type            Enumeration (enabled(1), disabled(2));
2278        access          readwrite;
2279        default         disabled;
2280        description
2281                "This object indicates whether dialCtlPeerCallInformation
2282                 and dialCtlPeerCallSetup traps should be generated for
2283                 all peers. If the value of this object is enabled(1),
2284                 traps will be generated for all peers. If the value
2285                 of this object is disabled(2), traps will be generated
2286                 only for peers having dialCtlPeerCfgTrapEnable set
2287                 to enabled(1).";
2288      };
2289
2290
2291
2292
2293
2294
2295 Strauss                 Expires August 15, 2000                [Page 41]
2296 \f
2297 Internet-Draft                   SMIng                     February 2000
2298
2299
2300 10. The table Statement
2301
2302    The `table' statement is used to define the root node of a table. 
2303    The `table' statement gets two arguments: a lower-case table
2304    identifier and a statement block that holds detailed table
2305    information in an obligatory order. 
2306
2307    See the `tableStatement' rule of the SMIng grammar (Appendix A) for
2308    the formal syntax of the `table' statement. 
2309
2310 10.1 The table's oid Statement
2311
2312    The table's `oid' statement, which must be present, gets one
2313    argument which specifies the object identifier value that is
2314    assigned to this table node. 
2315
2316 10.2 The table's status Statement
2317
2318    The table's `status' statement, which need not be present, gets one
2319    argument which is used to specify whether this table definition is
2320    current or historic. The value `current' means that the definition
2321    is current and valid. The value `obsolete' means the definition is
2322    obsolete and should not be implemented and/or can be removed if
2323    previously implemented.  While the value `deprecated' also indicates
2324    an obsolete definition, it permits new/continued implementation in
2325    order to foster interoperability with older/existing
2326    implementations. 
2327
2328    If the `status' statement is omitted the status value `current' is
2329    implied. 
2330
2331 10.3 The table's description Statement
2332
2333    The table's `description' statement, which must be present, gets one
2334    argument which is used to specify a high-level textual description
2335    of this table. 
2336
2337    It is RECOMMENDED to include all semantic definitions necessary for
2338    the implementation of this table. 
2339
2340 10.4 The table's reference Statement
2341
2342    The table's `reference' statement, which need not be present, gets
2343    one argument which is used to specify a textual cross-reference to
2344    some other document, either another module which defines related
2345    tables, or some other document which provides additional information
2346    relevant to this table. 
2347
2348
2349
2350
2351 Strauss                 Expires August 15, 2000                [Page 42]
2352 \f
2353 Internet-Draft                   SMIng                     February 2000
2354
2355
2356 10.5 The table's row Statement
2357
2358    The table's `row' statement, which must be present, gets two
2359    arguments: a lower-case row identifier and a statement block that
2360    holds detailed row information in an obligatory order. 
2361
2362    See the `rowStatement' rule of the SMIng grammar (Appendix A) for
2363    the formal syntax of the `row' statement. 
2364
2365 10.5.1 The row's oid Statement
2366
2367    The row's `oid' statement, which must be present, gets one argument
2368    which specifies the object identifier value that is assigned to this
2369    table row. Note that the object identifier of a table row MUST be
2370    built be the table's object identifier followed by a `1'
2371    sub-identifier. 
2372
2373 10.5.2 Table Indexing Statements
2374
2375    SMIng offers five methods to supply table indexing information:
2376    ordinary tables, table augmentations, sparse table augmentations,
2377    table expansions, and reordered tables use different statements to
2378    denote their indexing information. Each table row definition must
2379    contain exactly one of the following indexing statements. 
2380
2381 10.5.2.1 The row's index Statement for Table Indexing
2382
2383    The row's `index' statement, which is used to supply table indexing
2384    information of base table rows, gets at least one argument that
2385    specifies a comma-separated list of object identifiers, that are
2386    used for table indexing, enclosed in parenthesis. 
2387
2388    Under some circumstances, an optional `implied' keyword may be added
2389    in front of the list to indicate a compact encoding of the last
2390    object in the list. See Section 2.4 for details. 
2391
2392 10.5.2.2 The row's augments Statement for Table Indexing
2393
2394    The row's `augments' statement, which is used to supply table
2395    indexing information of table rows that augment a base table row,
2396    gets one argument that specifies the identifier of the table row to
2397    be augmented. Note that a row augmentation cannot itself be
2398    augmented. Anyhow, a base row may be augmented by multiple row
2399    augmentations. 
2400
2401    A row augmentation makes instances of subordinate columnar objects
2402    identified according to the index specification of the base row
2403    corresponding to the row named in the `augments' statement. 
2404    Further, instances of subordinate columnar objects of a row
2405
2406
2407 Strauss                 Expires August 15, 2000                [Page 43]
2408 \f
2409 Internet-Draft                   SMIng                     February 2000
2410
2411
2412    augmentation exist according to the same semantics as instances of
2413    subordinate columnar objects of the base row being augmented.  As
2414    such, note that creation of a base row implies the correspondent
2415    creation of any row augmentations. Row augmentations MUST NOT be
2416    used in row creation and deletion operations. 
2417
2418 10.5.2.3 The row's sparse Statement for Table Indexing
2419
2420    The row's `sparse' statement, which is used to supply table indexing
2421    information of table rows that sparsely augment a base table row,
2422    gets one argument that specifies the identifier of the table row to
2423    be sparsely augmented. Note that a sparse row augmentation cannot
2424    itself be augmented. Anyhow, a base row may be augmented by multiple
2425    row augmentations, sparsely or not. 
2426
2427    A sparse row augmentation makes instances of subordinate columnar
2428    objects identified, if present, according to the index specification
2429    of the base row corresponding to the row named in the `sparse'
2430    statement.  Further, instances of subordinate columnar objects of a
2431    sparse row augmentation exist according to the semantics as
2432    instances of subordinate columnar objects of the base row and the
2433    (non-formal) rules that confine the sparse relationship. As such,
2434    note that creation of a sparse row augmentation may be implied by
2435    the creation of a base row as well as done by an explicit creation.
2436    However, if a base row gets deleted, any dependent sparse row
2437    augmentations get also deleted implicitly. 
2438
2439 10.5.2.4 The row's reorders Statement for Table Indexing
2440
2441    The row's `reorders' statement is used to supply table indexing
2442    information of table rows, that contain exactly the same index
2443    objects of a base table row, except in another order. It gets at
2444    least two arguments. The first one specifies the identifier of the
2445    base table row. The second one specifies a comma-separated list of
2446    exactly those object identifiers of the base row's `index'
2447    statement, but in the order to be used in this table. Note that a
2448    reordered table cannot itself be reordered. Anyhow, a base row may
2449    be used for multiple reordered tables. 
2450
2451    Under some circumstances, an optional `implied' keyword may be added
2452    in front of the list to indicate a compact encoding of the last
2453    object in the list. See Section 2.4 for details. 
2454
2455    Instances of subordinate columnar objects of a reordered table exist
2456    according to the same semantics as instances of subordinate columnar
2457    objects of the base row.  As such, note that creation of a base row
2458    implies the correspondent creation of any related reordered table.
2459    Rows or reordered tables MUST NOT be used in row creation and
2460    deletion operations. 
2461
2462
2463 Strauss                 Expires August 15, 2000                [Page 44]
2464 \f
2465 Internet-Draft                   SMIng                     February 2000
2466
2467
2468 10.5.2.5 The row's expands Statement for Table Indexing
2469
2470    The row's `expands' statement is used to supply table indexing
2471    information of table row expansions. Table row expansions use
2472    exactly the same index objects of another row together with
2473    additional indexing objects. Thus, the `expands' statement gets at
2474    least two arguments. The first one specifies the identifier of the
2475    related table row. The second one specifies a comma-separated list
2476    of the additional object identifiers used for indexing. Note that an
2477    expanded table may itself be expanded, and related rows may be used
2478    for multiple table expansions. 
2479
2480    Under some circumstances, an optional `implied' keyword may be added
2481    in front of the list to indicate a compact encoding of the last
2482    object in the list. See Section 2.4 for details. 
2483
2484 10.5.3 The row's create Statement
2485
2486    The row's `create' statement, which need not be present, gets no
2487    argument. If the `create' statement is present, row creation (and
2488    deletion) is possible. 
2489
2490 10.5.4 The row's status Statement
2491
2492    The row's `status' statement, which need not be present, gets one
2493    argument which is used to specify whether this row definition is
2494    current or historic. The value `current' means that the definition
2495    is current and valid. The value `obsolete' means the definition is
2496    obsolete and should not be implemented and/or can be removed if
2497    previously implemented.  While the value `deprecated' also indicates
2498    an obsolete definition, it permits new/continued implementation in
2499    order to foster interoperability with older/existing
2500    implementations. 
2501
2502    If the `status' statement is omitted the status value `current' is
2503    implied. 
2504
2505 10.5.5 The row's description Statement
2506
2507    The row's `description' statement, which must be present, gets one
2508    argument which is used to specify a high-level textual description
2509    of this table row. 
2510
2511    It is RECOMMENDED to include all semantic definitions necessary for
2512    the implementation of this table row. Especially, if the row's
2513    indexing statement contains objects that are not columnar objects of
2514    the row, it SHOULD be described how these objects are used in
2515    uniquely identifying instances of the row's columnar objects. 
2516
2517
2518
2519 Strauss                 Expires August 15, 2000                [Page 45]
2520 \f
2521 Internet-Draft                   SMIng                     February 2000
2522
2523
2524 10.5.6 The row's reference Statement
2525
2526    The row's `reference' statement, which need not be present, gets one
2527    argument which is used to specify a textual cross-reference to some
2528    other document, either another module which defines related table
2529    rows, or some other document which provides additional information
2530    relevant to this table row. 
2531
2532 10.6 The table row's column Statement
2533
2534    The row's `column' statement is used to define a columnar managed
2535    object.  The `column' statement gets two arguments: a lower-case
2536    column identifier and a statement block that holds detailed object
2537    information in an obligatory order. 
2538
2539    See the `columnStatement' rule of the SMIng grammar (Appendix A) for
2540    the formal syntax of the `column' statement. 
2541
2542 10.6.1 The column's oid Statement
2543
2544    The column's `oid' statement, which must be present, gets one
2545    argument which specifies the object identifier value that is
2546    assigned to this columnar object. 
2547
2548 10.6.2 The column's type Statement
2549
2550    The column's `type' statement, which must be present, gets at least
2551    one argument which is used to specify the data type of this columnar
2552    object. Optionally, type restrictions may be applied to the type by
2553    appending subtyping information according to the rules of the base
2554    type.  See Section 3 for SMIng base types and their type
2555    restrictions. 
2556
2557 10.6.3 The column's access Statement
2558
2559    The column's `access' statement, which must be present, gets one
2560    argument which is used to specify whether it makes sense to read
2561    and/or write an instance of the object, or to include its value in a
2562    notification.  This is the maximal level of access for the object.
2563    This maximal level of access is independent of any administrative
2564    authorization policy. 
2565
2566    The value `readwrite' indicates that read and write access makes
2567    sense. The value `readonly' indicates that read access makes sense,
2568    but write access is never possible. The value `noaccess' indicates
2569    an auxiliary object (see Section 2.4).  The value `notifyonly'
2570    indicates an object which is accessible only via a notification. 
2571
2572    These values are ordered, from least to greatest access level:
2573
2574
2575 Strauss                 Expires August 15, 2000                [Page 46]
2576 \f
2577 Internet-Draft                   SMIng                     February 2000
2578
2579
2580    `noaccess', `notifyonly', `readonly', `readwrite'. 
2581
2582 10.6.4 The column's default Statement
2583
2584    The column's `default' statement, which need not be present, gets
2585    one argument which is used to specify an acceptable default value
2586    for this columnar object. A default value may be used at the
2587    discretion of an agent when an object instance is created. That is,
2588    the value is a "hint" to implementors. 
2589
2590    The value of the `default' statement must, of course, correspond to
2591    the (probably restricted) type specified in the column's `type'
2592    statement. 
2593
2594    The column's default value overrides the default value of the
2595    underlying type definition if both are present. 
2596
2597    Note that for objects of some types, default values make no sense,
2598    e.g. IRTF-NMRG-SMING-TYPES::Counter32. 
2599
2600 10.6.5 The column's format Statement
2601
2602    The column's `format' statement, which need not be present, gets one
2603    argument which is used to give a hint as to how the value of an
2604    instance of this object might be displayed. See Section 3.12 for a
2605    description of format specifications. 
2606
2607    The column's format specification overrides the format specification
2608    of the underlying type definition if both are present. 
2609
2610 10.6.6 The column's units Statement
2611
2612    The column's `units' statement, which need not be present, gets one
2613    argument which is used to specify a textual definition of the units
2614    associated with this columnar object. 
2615
2616    The column's units specification overrides the units specification
2617    of the underlying type definition if both are present. 
2618
2619    The units specification has to be appropriate for values displayed
2620    according to the column's format specification if present. E.g., if
2621    the columnar object represents a frequency value of type Unsigned64
2622    measured in thousands of Hertz, the format specification should be
2623    `d-3' and the units specification should be `Hertz' or `Hz'. If the
2624    format specification would be omitted the units specification should
2625    be `Milli-Hertz' or `mHz'.  MIB Authors should pay attention to keep
2626    format and units specifications of type and object definitions
2627    synced. Application implementors MUST NOT implement units
2628    specifications without implementing format specifications. 
2629
2630
2631 Strauss                 Expires August 15, 2000                [Page 47]
2632 \f
2633 Internet-Draft                   SMIng                     February 2000
2634
2635
2636 10.6.7 The column's status Statement
2637
2638    The column's `status' statement, which need not be present, gets one
2639    argument which is used to specify whether this columnar object
2640    definition is current or historic. The value `current' means that
2641    the definition is current and valid. The value `obsolete' means the
2642    definition is obsolete and should not be implemented and/or can be
2643    removed if previously implemented.  While the value `deprecated'
2644    also indicates an obsolete definition, it permits new/continued
2645    implementation in order to foster interoperability with
2646    older/existing implementations. 
2647
2648    Columnar objects SHOULD NOT be defined as `current' if their type is
2649    `deprecated' or `obsolete'. Similarly, they SHOULD NOT be defined as
2650    `deprecated' if their type is `obsolete'. Nevertheless, subsequent
2651    revisions of used type definition cannot be avoided, but SHOULD be
2652    taken into account in subsequent revisions of the local module. 
2653
2654    If the `status' statement is omitted the status value `current' is
2655    implied. 
2656
2657 10.6.8 The column's description Statement
2658
2659    The column's `description' statement, which must be present, gets
2660    one argument which is used to specify a high-level textual
2661    description of this columnar object. 
2662
2663    It is RECOMMENDED to include all semantic definitions necessary for
2664    the implementation of this columnar object. 
2665
2666 10.6.9 The column's reference Statement
2667
2668    The column's `reference' statement, which need not be present, gets
2669    one argument which is used to specify a textual cross-reference to
2670    some other document, either another module which defines related
2671    columnar objects, or some other document which provides additional
2672    information relevant to this columnar object. 
2673
2674 10.7 Usage Example
2675
2676    Consider how one might define a table and its subordinates. (This
2677    example uses the RowStatus type defined in Section 14.2.) 
2678
2679      scalar evalSlot {
2680        oid             eval.1;
2681        type            Integer32 (0..2147483647);
2682        access          readonly;
2683        description
2684                "The index number of the first unassigned entry in the
2685
2686
2687 Strauss                 Expires August 15, 2000                [Page 48]
2688 \f
2689 Internet-Draft                   SMIng                     February 2000
2690
2691
2692                 evaluation table, or the value of zero indicating that
2693                 all entries are assigned.
2694
2695                 A management station should create new entries in the
2696                 evaluation table using this algorithm:  first, issue a
2697                 management protocol retrieval operation to determine the
2698                 value of evalSlot; and, second, issue a management
2699                 protocol set operation to create an instance of the
2700                 evalStatus object setting its value to createAndGo(4) or
2701                 createAndWait(5).  If this latter operation succeeds,
2702                 then the management station may continue modifying the
2703                 instances corresponding to the newly created conceptual
2704                 row, without fear of collision with other management
2705                 stations.";
2706      };
2707
2708      table evalTable {
2709        oid             eval.2;
2710        description
2711                "The (conceptual) evaluation table.";
2712        reference
2713                "RFC 2578, 7.11.";
2714
2715        row evalEntry {
2716          oid           evalTable.1;
2717          index         (evalIndex);
2718          create        (evalStatus);
2719          description
2720                "An entry (conceptual row) in the evaluation table.";
2721
2722          column evalIndex {
2723            oid         evalEntry.1;
2724            type        Integer32 (1..2147483647);
2725            access      noaccess;
2726            description
2727                "The auxiliary variable used for identifying instances of
2728                 the columnar objects in the evaluation table.";
2729          };
2730
2731          column evalString {
2732            oid         evalEntry.2;
2733            type        DisplayString;
2734            access      readwrite;
2735            description
2736                "The string to evaluate.";
2737          };
2738
2739          column evalValue {
2740            oid         evalEntry.3;
2741
2742
2743 Strauss                 Expires August 15, 2000                [Page 49]
2744 \f
2745 Internet-Draft                   SMIng                     February 2000
2746
2747
2748            type        Integer32;
2749            access      readonly;
2750            default     0;
2751            description
2752                "The value when evalString was last evaluated, or zero if
2753                 no such value is available.";
2754          };
2755
2756          column evalStatus {
2757            oid         evalEntry.4;
2758            type        RowStatus;
2759            access      readwrite;
2760            default     active;
2761            description
2762                "The status column used for creating, modifying, and
2763                 deleting instances of the columnar objects in the
2764                 evaluation table.";
2765          };
2766        };
2767      };
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799 Strauss                 Expires August 15, 2000                [Page 50]
2800 \f
2801 Internet-Draft                   SMIng                     February 2000
2802
2803
2804 11. The notification Statement
2805
2806    The `notification' statement is used to define a notification. It
2807    gets two arguments: a lower-case notification identifier and a
2808    statement block that holds detailed information in an obligatory
2809    order. 
2810
2811    See the `notificationStatement' rule of the SMIng grammar (Appendix
2812    A) for the formal syntax of the `notification' statement. 
2813
2814 11.1 The notification's oid Statement
2815
2816    The notification's `oid' statement, which must be present, gets one
2817    argument which specifies the object identifier value that is
2818    assigned to this notification. 
2819
2820 11.2 The notification's objects Statement
2821
2822    The notification's `objects' statement, which need not be present,
2823    gets one argument which specifies an ordered sequence of objects by
2824    their identifiers to be emitted within this notification.  The list
2825    of objects has to be comma-separated and enclosed in parenthesis. 
2826
2827    One and only one object instance for each occurrence of each object
2828    must be present, and in the specified order, in every instance of
2829    the notification.  If the same object occurs multiple times in a
2830    notification's `objects' statement, then an object instance is
2831    present for each of them.  An object specified in this sequence must
2832    not have an `access' statement argument of `noaccess'. 
2833
2834    Note that an agent is allowed, at its own discretion, to append as
2835    many additional objects as it considers useful to the end of the
2836    notification (i.e., after the objects defined by the notification's
2837    `objects' statement if present). 
2838
2839 11.3 The notification's status Statement
2840
2841    The notification's `status' statement, which need not be present,
2842    gets one argument which is used to specify whether this notification
2843    definition is current or historic. The value `current' means that
2844    the definition is current and valid.  The value `obsolete' means the
2845    definition is obsolete and should not be implemented and/or can be
2846    removed if previously implemented.  While the value `deprecated'
2847    also indicates an obsolete definition, it permits new/continued
2848    implementation in order to foster interoperability with
2849    older/existing implementations. 
2850
2851    If the `status' statement is omitted the status value `current' is
2852    implied. 
2853
2854
2855 Strauss                 Expires August 15, 2000                [Page 51]
2856 \f
2857 Internet-Draft                   SMIng                     February 2000
2858
2859
2860 11.4 The notification's description Statement
2861
2862    The notification's `description' statement, which must be present,
2863    gets one argument which is used to specify a high-level textual
2864    description of this notification. 
2865
2866    It is RECOMMENDED to include all semantic definitions necessary for
2867    the implementation of this notification. In particular, it SHOULD be
2868    documented which instances of the objects mentioned in the `objects'
2869    statement should be contained within notifications of this type. 
2870
2871 11.5 The notification's reference Statement
2872
2873    The notification's `reference' statement, which need not be present,
2874    gets one argument which is used to specify a textual cross-reference
2875    to some other document, either another module which defines related
2876    notifications, or some other document which provides additional
2877    information relevant to this notification. 
2878
2879 11.6 Usage Example
2880
2881    Consider how a configuration change notification might be described: 
2882
2883      node entityMIBTraps      { oid             entityMIB.2;      };
2884
2885      node entityMIBTrapPrefix { oid             entityMIBTraps.0; };
2886
2887      notification entConfigChange {
2888        oid             entityMIBTrapPrefix.1;
2889        description
2890                "An entConfigChange trap is sent when the value of
2891                 entLastChangeTime changes. It can be utilized by an NMS
2892                 to trigger logical/physical entity table maintenance
2893                 polls.  An agent must not generate more than one
2894                 entConfigChange 'trap-event' in a five second period,
2895                 where a 'trap-event' is the transmission of a single
2896                 trap PDU to a list of trap destinations.  If additional
2897                 configuration changes occur within the five second
2898                 'throttling' period then these trap-events should be
2899                 suppressed by the agent. An NMS should periodically
2900                 check the value of entLastChangeTime to detect any
2901                 missed entConfigChange trap-events, e.g. due to
2902                 throttling or transmission loss.";
2903      };
2904
2905
2906
2907
2908
2909
2910
2911 Strauss                 Expires August 15, 2000                [Page 52]
2912 \f
2913 Internet-Draft                   SMIng                     February 2000
2914
2915
2916 12. The group Statement
2917
2918    The `group' statement is used to define a group of arbitrary nodes
2919    in the object identifier tree.  It gets two arguments: a lower-case
2920    group identifier and a statement block that holds detailed group
2921    information in an obligatory order. 
2922
2923    Note that the primary application of groups are compliance
2924    statements, although they might be referred in other formal or
2925    informal documents. 
2926
2927    See the `groupStatement' rule of the SMIng grammar (Appendix A) for
2928    the formal syntax of the `group' statement. 
2929
2930 12.1 The group's oid Statement
2931
2932    The group's `oid' statement, which must be present, gets one
2933    argument which specifies the object identifier value that is
2934    assigned to this group. 
2935
2936 12.2 The group's members Statement
2937
2938    The group's `members' statement, which must be present, gets one
2939    argument which specifies the list of nodes by their identifiers to
2940    be contained in this group. The list of nodes has to be
2941    comma-separated and enclosed in parenthesis. 
2942
2943 12.3 The group's status Statement
2944
2945    The group's `status' statement, which need not be present, gets one
2946    argument which is used to specify whether this group definition is
2947    current or historic. The value `current' means that the definition
2948    is current and valid.  The value `obsolete' means the definition is
2949    obsolete and the group should no longer be used.  While the value
2950    `deprecated' also indicates an obsolete definition, it permits
2951    new/continued use of this group. 
2952
2953    If the `status' statement is omitted the status value `current' is
2954    implied. 
2955
2956 12.4 The group's description Statement
2957
2958    The group's `description' statement, which must be present, gets one
2959    argument which is used to specify a high-level textual description
2960    of this group.  It is RECOMMENDED to include any relation to other
2961    groups. 
2962
2963
2964
2965
2966
2967 Strauss                 Expires August 15, 2000                [Page 53]
2968 \f
2969 Internet-Draft                   SMIng                     February 2000
2970
2971
2972 12.5 The group's reference Statement
2973
2974    The group's `reference' statement, which need not be present, gets
2975    one argument which is used to specify a textual cross-reference to
2976    some other document, either another module which defines related
2977    groups, or some other document which provides additional information
2978    relevant to this group. 
2979
2980 12.6 Usage Example
2981
2982    The snmpGroup, originally defined in [13], may be described as
2983    follows: 
2984
2985      group snmpGroup {
2986        oid             snmpMIBGroups.8;
2987        objects         (snmpInPkts, snmpInBadVersions,
2988                         snmpInASNParseErrs,
2989                         snmpSilentDrops, snmpProxyDrops,
2990                         snmpEnableAuthenTraps);
2991        description
2992                "A collection of objects providing basic
2993                 instrumentation and control of an agent.";
2994      };
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023 Strauss                 Expires August 15, 2000                [Page 54]
3024 \f
3025 Internet-Draft                   SMIng                     February 2000
3026
3027
3028 13. The compliance Statement
3029
3030    The `compliance' statement is used to define a set of compliance
3031    requirements, named a `compliance statement'. It gets two arguments:
3032    a lower-case compliance identifier and a statement block that holds
3033    detailed compliance information in an obligatory order. 
3034
3035    See the `complianceStatement' rule of the SMIng grammar (Appendix A)
3036    for the formal syntax of the `compliance' statement. 
3037
3038 13.1 The compliance's oid Statement
3039
3040    The compliance's `oid' statement, which must be present, gets one
3041    argument which specifies the object identifier value that is
3042    assigned to this compliance statement. 
3043
3044 13.2 The compliance's status Statement
3045
3046    The compliance's `status' statement, which need not be present, gets
3047    one argument which is used to specify whether this compliance
3048    statement is current or historic. The value `current' means that the
3049    definition is current and valid. The value `obsolete' means the
3050    definition is obsolete and no longer specifies a valid definition of
3051    conformance.  While the value `deprecated' also indicates an
3052    obsolete definition, it permits new/continued use of the compliance
3053    specification. 
3054
3055    If the `status' statement is omitted the status value `current' is
3056    implied. 
3057
3058 13.3 The compliance's description Statement
3059
3060    The compliance's `description' statement, which must be present,
3061    gets one argument which is used to specify a high-level textual
3062    description of this compliance statement. 
3063
3064 13.4 The compliance's reference Statement
3065
3066    The compliance's `reference' statement, which need not be present,
3067    gets one argument which is used to specify a textual cross-reference
3068    to some other document, either another module which defines related
3069    compliance statements, or some other document which provides
3070    additional information relevant to this compliance statement. 
3071
3072 13.5 The compliance's mandatory Statement
3073
3074    The compliance's `mandatory' statement, which need not be present,
3075    gets one argument which is used to specify a comma-separated list of
3076    one or more groups (Section 12) of objects and/or notifications
3077
3078
3079 Strauss                 Expires August 15, 2000                [Page 55]
3080 \f
3081 Internet-Draft                   SMIng                     February 2000
3082
3083
3084    enclosed in parenthesis. These groups are unconditionally mandatory
3085    for implementation. 
3086
3087    If an agent claims compliance to a MIB module then it must implement
3088    each and every object and notification within each group listed the
3089    `mandatory' statement(s) of the compliance statement(s) of that
3090    module. 
3091
3092 13.6 The compliance's optional Statement
3093
3094    The compliance's `optional' statement, which need not be present, is
3095    repeatedly used to name each group which is conditionally mandatory
3096    for compliance to the module. It can also be used to name
3097    unconditionally optional groups.  A group named in an `optional'
3098    statement MUST be absent from the correspondent `mandatory'
3099    statement. The `optional' statement gets two arguments: a lower-case
3100    group identifier and a statement block that holds detailed
3101    compliance information on that group. 
3102
3103    Conditionally mandatory groups include those which are mandatory
3104    only if a particular protocol is implemented, or only if another
3105    group is implemented. The `description' statement specifies the
3106    conditions under which the group is conditionally mandatory. 
3107
3108    A group which is named in neither a `mandatory' statement nor an
3109    `optional' statement, is unconditionally optional for compliance to
3110    the module. 
3111
3112    See the `optionalStatement' rule of the SMIng grammar (Appendix A)
3113    for the formal syntax of the `optional' statement. 
3114
3115 13.6.1 The optional's description Statement
3116
3117    The optional's `description' statement, which must be present, gets
3118    one argument which is used to specify a high-level textual
3119    description of the conditions under which this group is
3120    conditionally mandatory or unconditionally optional. 
3121
3122 13.7 The compliance's refine Statement
3123
3124    The compliance's `refine' statement, which need not be present, is
3125    repeatedly used to specify each object for which compliance has a
3126    refined requirement with respect to the module definition.  The
3127    object must be present in one of the conformance groups named in the
3128    correspondent `mandatory' or `optional' statements. The `refine'
3129    statement gets two arguments: a lower-case identifier of a scalar or
3130    columnar object and a statement block that holds detailed refinement
3131    information on that object. 
3132
3133
3134
3135 Strauss                 Expires August 15, 2000                [Page 56]
3136 \f
3137 Internet-Draft                   SMIng                     February 2000
3138
3139
3140    See the `refineStatement' rule of the SMIng grammar (Appendix A) for
3141    the formal syntax of the `refine' statement. 
3142
3143 13.7.1 The refine's type Statement
3144
3145    The refine's `type' statement, which need not be present, gets one
3146    argument that is used to provide a refined type for the
3147    correspondent object. Type restrictions may be applied by appending
3148    subtyping information according to the rules of the base type.  See
3149    Section 3 for SMIng base types and their type restrictions. 
3150
3151    Note that if a `type' and a `writetype' statement are both present
3152    then this type only applies when instances of the correspondent
3153    object are read. 
3154
3155 13.7.2 The refine's writetype Statement
3156
3157    The refine's `writetype' statement, which need not be present, gets
3158    one argument that is used to provide a refined type for the
3159    correspondent object, only when instances of that object are
3160    written. Type restrictions may be applied by appending subtyping
3161    information according to the rules of the base type.  See Section 3
3162    for SMIng base types and their type restrictions. 
3163
3164 13.7.3 The refine's access Statement
3165
3166    The refine's `access' statement, which need not be present, gets one
3167    argument that is used to specify the minimal level of access that
3168    the correspondent object must implement in the sense of its original
3169    `access' statement. Hence, the refine's `access' statement MUST NOT
3170    specify a greater level of access than is specified in the
3171    correspondent object definition. 
3172
3173    An implementation is compliant if the level of access it provides is
3174    greater or equal to the minimal level in the refine's `access'
3175    statement and less or equal to the maximal level in the object's
3176    `access' statement. 
3177
3178 13.7.4 The refine's description Statement
3179
3180    The refine's `description' statement, which must be present, gets
3181    one argument which is used to specify a high-level textual
3182    description of the refined compliance requirement. 
3183
3184 13.8 Usage Example
3185
3186    The compliance statement contained in the SNMPv2-MIB, converted to
3187    SMIng: 
3188
3189
3190
3191 Strauss                 Expires August 15, 2000                [Page 57]
3192 \f
3193 Internet-Draft                   SMIng                     February 2000
3194
3195
3196      compliance snmpBasicCompliance {
3197        oid             snmpMIBCompliances.2;
3198        description
3199                "The compliance statement for SNMPv2 entities which
3200                 implement the SNMPv2 MIB.";
3201
3202        mandatory       (snmpGroup, snmpSetGroup, systemGroup,
3203                         snmpBasicNotificationsGroup);
3204
3205        optional snmpCommunityGroup {
3206          description
3207                "This group is mandatory for SNMPv2 entities which
3208                 support community-based authentication.";
3209        };
3210      };
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247 Strauss                 Expires August 15, 2000                [Page 58]
3248 \f
3249 Internet-Draft                   SMIng                     February 2000
3250
3251
3252 14. SMIng Core Modules
3253
3254    MIB modules, either SMIv1, SMIv2 or SMIng, are built on top of some
3255    core definitions. These core definitions are imported from some
3256    "well-defined" core modules. In case of SMIng, there are two core
3257    modules: 
3258
3259    1.  IRTF-NMRG-SMING, which defines a special node, named
3260        `zeroDotZero' that may be used by objects of type
3261        `ObjectIdentifier' as a null value, and a core set of 18 nodes
3262        near the root of the object identifier tree. Only some of those
3263        core nodes are significant for the Internet management and have
3264        been described in Section 2.2. 
3265
3266    2.  IRTF-NMRG-SMING-TYPES, which defines SMIng data types. Regarding
3267        to their origin, these types can be divided into two groups:
3268        those being ASN.1 application types defined as SMIv2 core types
3269        [2] and those being textual conventions in SMIv2 [3]. For use in
3270        SMIng, there is no need to care about these differences, though
3271        it might be useful in SNMP applications, to know that some types
3272        are distinguishable "on the wire" and others are not. 
3273
3274    3.  IRTF-NMRG-SMING-EXTENSIONS, which defines proposed SMIng
3275        extensions. At this moment, there is only one extension, the
3276        `agentcaps' statement. See Section 16 for details on extensions. 
3277
3278 14.1 IRTF-NMRG-SMING
3279
3280    module IRTF-NMRG-SMING {
3281
3282    //
3283    // $RCSfile: IRTF-NMRG-SMING,v $
3284    // $Revision: 817 $
3285    // $Author: strauss $
3286    // $Date: 2000-02-15 11:41:02 +0100 (Tue, 15 Feb 2000) $
3287    //
3288
3289        organization    "IRTF Network Management Research Group (NMRG),
3290                         Network Management Group, TU Braunschweig";
3291
3292        contact         "        Frank Strauss
3293
3294                         Postal: TU Braunschweig
3295                                 Bueltenweg 74/75
3296                                 38106 Braunschweig
3297                                 Germany
3298
3299                          Phone: +49 531 391-3266
3300                          EMail: strauss@ibr.cs.tu-bs.de";
3301
3302
3303 Strauss                 Expires August 15, 2000                [Page 59]
3304 \f
3305 Internet-Draft                   SMIng                     February 2000
3306
3307
3308        description     "Core node definitions for SMIng.";
3309
3310        revision {
3311            date        "2000-02-13";
3312            description "SMIng grammar dropped module identity objects.";
3313        };
3314
3315        revision {
3316            date        "1999-05-07";
3317            description "Initial Revision.";
3318        };
3319
3320        node ccitt                          { oid 0;                };
3321
3322        node   zeroDotZero {
3323            oid         0.0;
3324            description "A value used for null identifiers.";
3325        };
3326
3327        node iso                            { oid 1;                };
3328        node   org                          { oid iso.3;            };
3329        node     dod                        { oid org.6;            };
3330        node       internet                 { oid dod.1;            };
3331        node         directory              { oid internet.1;       };
3332        node         mgmt                   { oid internet.2;       };
3333        node           mib-2                { oid mgmt.1;           };
3334        node             transmission       { oid mib-2.10;         };
3335        node         experimental           { oid internet.3;       };
3336        node         private                { oid internet.4;       };
3337        node           enterprises          { oid private.1;        };
3338        node         security               { oid internet.5;       };
3339        node         snmpV2                 { oid internet.6;       };
3340        node           snmpDomains          { oid snmpV2.1;         };
3341        node           snmpProxys           { oid snmpV2.2;         };
3342        node           snmpModules          { oid snmpV2.3;         };
3343
3344        node joint-iso-ccitt                { oid 2;                };
3345
3346    };
3347
3348 14.2 IRTF-NMRG-SMING-TYPES
3349
3350    module IRTF-NMRG-SMING-TYPES {
3351
3352    //
3353    // $RCSfile: IRTF-NMRG-SMING-TYPES,v $
3354    // $Revision: 817 $
3355    // $Author: strauss $
3356    // $Date: 2000-02-15 11:41:02 +0100 (Tue, 15 Feb 2000) $
3357
3358
3359 Strauss                 Expires August 15, 2000                [Page 60]
3360 \f
3361 Internet-Draft                   SMIng                     February 2000
3362
3363
3364    //
3365
3366        organization    "IRTF Network Management Research Group (NMRG),
3367                         Network Management Group, TU Braunschweig";
3368
3369        contact         "        Frank Strauss
3370
3371                         Postal: TU Braunschweig
3372                                 Bueltenweg 74/75
3373                                 38106 Braunschweig
3374                                 Germany
3375
3376                          Phone: +49 531 391-3266
3377                          EMail: strauss@ibr.cs.tu-bs.de";
3378
3379        description     "Core type definitions for SMIng.";
3380
3381        revision {
3382            date        "2000-02-13";
3383            description "SMIng grammar dropped module identity objects.";
3384        };
3385
3386        revision {
3387            date        "1999-05-07";
3388            description "Initial Revision.";
3389        };
3390
3391        typedef Gauge32 {
3392            type        Unsigned32;
3393            description
3394               "The Gauge32 type represents a non-negative integer,
3395                which may increase or decrease, but shall never
3396                exceed a maximum value, nor fall below a minimum
3397                value.  The maximum value can not be greater than
3398                2^32-1 (4294967295 decimal), and the minimum value
3399                can not be smaller than 0.  The value of a Gauge32
3400                has its maximum value whenever the information
3401                being modeled is greater than or equal to its
3402                maximum value, and has its minimum value whenever
3403                the information being modeled is smaller than or
3404                equal to its minimum value.  If the information
3405                being modeled subsequently decreases below
3406                (increases above) the maximum (minimum) value, the
3407                Gauge32 also decreases (increases).  (Note that
3408                despite of the use of the term `latched' in the
3409                original definition of this type, it does not
3410                become `stuck' at its maximum or minimum value.)";
3411            reference
3412               "RFC 2578, Sections 2. and 7.1.7.";
3413
3414
3415 Strauss                 Expires August 15, 2000                [Page 61]
3416 \f
3417 Internet-Draft                   SMIng                     February 2000
3418
3419
3420        };
3421
3422        typedef Counter32 {
3423            type        Unsigned32;
3424            description
3425               "The Counter32 type represents a non-negative integer
3426                which monotonically increases until it reaches a
3427                maximum value of 2^32-1 (4294967295 decimal), when it
3428                wraps around and starts increasing again from zero.
3429
3430                Counters have no defined `initial' value, and thus, a
3431                single value of a Counter has (in general) no
3432                information content.  Discontinuities in the
3433                monotonically increasing value normally occur at
3434                re-initialization of the management system, and at
3435                other times as specified in the description of an
3436                object using this type.  If such other times can
3437                occur, for example, the creation of an object
3438                instance at times other than re-initialization, then
3439                a corresponding object should be defined, with an
3440                appropriate type, to indicate the last discontinuity.
3441                Examples of appropriate types include: TimeStamp,
3442                DateAndTime or TimeTicks (other types defined in this
3443                module).
3444
3445                The value of the access statement for objects with a
3446                type value of Counter32 should be either `readonly'
3447                or `notifyonly'.
3448
3449                A default statement should not be used for objects
3450                with a type value of Counter32.";
3451            reference
3452               "RFC 2578, Sections 2. and 7.1.6.";
3453        };
3454
3455        typedef Gauge64 {
3456            type        Unsigned64;
3457            description
3458               "The Gauge64 type represents a non-negative integer,
3459                which may increase or decrease, but shall never
3460                exceed a maximum value, nor fall below a minimum
3461                value.  The maximum value can not be greater than
3462                2^64-1 (18446744073709551615), and the minimum value
3463                can not be smaller than 0.  The value of a Gauge64
3464                has its maximum value whenever the information
3465                being modeled is greater than or equal to its
3466                maximum value, and has its minimum value whenever
3467                the information being modeled is smaller than or
3468                equal to its minimum value.  If the information
3469
3470
3471 Strauss                 Expires August 15, 2000                [Page 62]
3472 \f
3473 Internet-Draft                   SMIng                     February 2000
3474
3475
3476                being modeled subsequently decreases below
3477                (increases above) the maximum (minimum) value, the
3478                Gauge64 also decreases (increases).  (Note that
3479                despite of the use of the term `latched' in the
3480                original definition of this type, it does not
3481                become `stuck' at its maximum or minimum value.)";
3482        };
3483
3484        typedef Counter64 {
3485            type        Unsigned64;
3486            description
3487               "The Counter64 type represents a non-negative integer
3488                which monotonically increases until it reaches a
3489                maximum value of 2^64-1 (18446744073709551615), when
3490                it wraps around and starts increasing again from zero.
3491
3492                Counters have no defined `initial' value, and thus, a
3493                single value of a Counter has (in general) no
3494                information content.  Discontinuities in the
3495                monotonically increasing value normally occur at
3496                re-initialization of the management system, and at
3497                other times as specified in the description of an
3498                object using this type.  If such other times can
3499                occur, for example, the creation of an object
3500                instance at times other than re-initialization, then
3501                a corresponding object should be defined, with an
3502                appropriate type, to indicate the last discontinuity.
3503                Examples of appropriate types include: TimeStamp,
3504                DateAndTime or TimeTicks (other types defined in this
3505                module).
3506
3507                The value of the access statement for objects with a
3508                type value of Counter64 should be either `readonly'
3509                or `notifyonly'.
3510
3511                A default statement should not be used for objects
3512                with a type value of Counter64.";
3513            reference
3514               "RFC 2578, Sections 2. and 7.1.10.";
3515        };
3516
3517        typedef Opaque {
3518            type        OctetString;
3519            description
3520               "The Opaque type is provided solely for
3521                backward-compatibility, and shall not be used for
3522                newly-defined object types.
3523
3524                The Opaque type supports the capability to pass
3525
3526
3527 Strauss                 Expires August 15, 2000                [Page 63]
3528 \f
3529 Internet-Draft                   SMIng                     February 2000
3530
3531
3532                arbitrary ASN.1 syntax.  A value is encoded using
3533                the ASN.1 Basic Encoding Rules into a string of
3534                octets.  This, in turn, is encoded as an
3535                OctetString, in effect `double-wrapping' the
3536                original ASN.1 value.
3537
3538                Note that a conforming implementation need only be
3539                able to accept and recognize opaquely-encoded data.
3540                It need not be able to unwrap the data and then
3541                interpret its contents.
3542
3543                A requirement on `standard' MIB modules is that no
3544                object may have a type value of Opaque.";
3545            reference
3546               "RFC 2578, Sections 2. and 7.1.9.";
3547        };
3548
3549        typedef IpAddress {
3550            type        OctetString (4);
3551            status      deprecated;
3552            description
3553               "******* THIS TYPE DEFINITION IS DEPRECATED *******
3554
3555                The IpAddress type represents a 32-bit internet
3556                IPv4 address.  It is represented as an OctetString
3557                of length 4, in network byte-order.
3558
3559                Note that the IpAddress type is present for
3560                historical reasons. IPv4 and IPv6 addresses should
3561                be represented using the IpAddr type. Generic
3562                Network addresses should be represented using a
3563                pair of TDomain and TAddress types (all defined in
3564                this module).";
3565            reference
3566               "RFC 2578, Sections 2. and 7.1.5.";
3567        };
3568
3569        typedef TimeTicks {
3570            type        Unsigned32;
3571            description
3572               "The TimeTicks type represents a non-negative
3573                integer which represents the time, modulo 2^32
3574                (4294967296 decimal), in hundredths of a second
3575                between two epochs.  When objects are defined which
3576                use this type, the description of the object
3577                identifies both of the reference epochs.
3578
3579                For example, the TimeStamp type (defined in this
3580                module) is based on the TimeTicks type.
3581
3582
3583 Strauss                 Expires August 15, 2000                [Page 64]
3584 \f
3585 Internet-Draft                   SMIng                     February 2000
3586
3587
3588                With a TimeStamp, the first reference epoch is
3589                defined as the time when SNMPv2-MIB::sysUpTime was
3590                zero, and the second reference epoch is defined as
3591                the current value of sysUpTime.
3592
3593                The TimeTicks type should not be sub-typed.";
3594            reference
3595               "RFC 2578, Sections 2. and 7.1.8.";
3596        };
3597
3598        //
3599        //  The following type definitions are plain
3600        //  conversions of the textual conventions from
3601        //  the SNMPv2-TC module (RFC 2579).
3602        //
3603
3604        typedef DisplayString {
3605            type        OctetString (0..255);
3606            format      "255a";
3607            description
3608            "Represents textual information taken from the NVT ASCII
3609             character set, as defined in pages 4, 10-11 of RFC 854.
3610
3611             To summarize RFC 854, the NVT ASCII repertoire specifies:
3612
3613              - the use of character codes 0-127 (decimal)
3614
3615              - the graphics characters (32-126) are interpreted as
3616                US ASCII
3617
3618              - NUL, LF, CR, BEL, BS, HT, VT and FF have the special
3619                meanings specified in RFC 854
3620
3621              - the other 25 codes have no standard interpretation
3622
3623              - the sequence 'CR LF' means newline
3624
3625              - the sequence 'CR NUL' means carriage-return
3626
3627              - an 'LF' not preceded by a 'CR' means moving to the
3628                same column on the next line.
3629
3630              - the sequence 'CR x' for any x other than LF or NUL is
3631                illegal.  (Note that this also means that a string may
3632                end with either 'CR LF' or 'CR NUL', but not with CR.)
3633
3634             Any object defined using this syntax may not exceed 255
3635             characters in length.";
3636        };
3637
3638
3639 Strauss                 Expires August 15, 2000                [Page 65]
3640 \f
3641 Internet-Draft                   SMIng                     February 2000
3642
3643
3644        typedef PhysAddress {
3645            type        OctetString;
3646            format      "1x:";
3647            description
3648            "Represents media- or physical-level addresses.";
3649        };
3650
3651        typedef MacAddress {
3652            type        OctetString (6);
3653            format      "1x:";
3654            description
3655            "Represents an 802 MAC address represented in the
3656             `canonical' order defined by IEEE 802.1a, i.e., as if it
3657             were transmitted least significant bit first, even though
3658             802.5 (in contrast to other 802.x protocols) requires MAC
3659             addresses to be transmitted most significant bit first.";
3660        };
3661
3662        typedef TruthValue {
3663            type        Enumeration (true(1), false(2));
3664            description
3665            "Represents a boolean value.";
3666        };
3667
3668        typedef TestAndIncr {
3669            type        Integer32 (0..2147483647);
3670            description
3671            "Represents integer-valued information used for atomic
3672             operations.  When the management protocol is used to specify
3673             that an object instance having this syntax is to be
3674             modified, the new value supplied via the management protocol
3675             must precisely match the value presently held by the
3676             instance.  If not, the management protocol set operation
3677             fails with an error of `inconsistentValue'.  Otherwise, if
3678             the current value is the maximum value of 2^31-1 (2147483647
3679             decimal), then the value held by the instance is wrapped to
3680             zero; otherwise, the value held by the instance is
3681             incremented by one.  (Note that regardless of whether the
3682             management protocol set operation succeeds, the variable-
3683             binding in the request and response PDUs are identical.)
3684
3685             The value of the ACCESS clause for objects having this
3686             syntax is either `read-write' or `read-create'.  When an
3687             instance of a columnar object having this syntax is created,
3688             any value may be supplied via the management protocol.
3689
3690             When the network management portion of the system is re-
3691             initialized, the value of every object instance having this
3692             syntax must either be incremented from its value prior to
3693
3694
3695 Strauss                 Expires August 15, 2000                [Page 66]
3696 \f
3697 Internet-Draft                   SMIng                     February 2000
3698
3699
3700             the re-initialization, or (if the value prior to the re-
3701             initialization is unknown) be set to a pseudo-randomly
3702             generated value.";
3703        };
3704
3705        typedef AutonomousType {
3706            type        ObjectIdentifier;
3707            description
3708            "Represents an independently extensible type identification
3709             value.  It may, for example, indicate a particular sub-tree
3710             with further MIB definitions, or define a particular type of
3711             protocol or hardware.";
3712        };
3713
3714        typedef InstancePointer {
3715            type        ObjectIdentifier;
3716            status      obsolete;
3717            description
3718            "A pointer to either a specific instance of a MIB object or
3719             a conceptual row of a MIB table in the managed device.  In
3720             the latter case, by convention, it is the name of the
3721             particular instance of the first accessible columnar object
3722             in the conceptual row.
3723
3724             The two uses of this textual convention are replaced by
3725             VariablePointer and RowPointer, respectively.";
3726        };
3727
3728        typedef VariablePointer {
3729            type        ObjectIdentifier;
3730            description
3731            "A pointer to a specific object instance.  For example,
3732             sysContact.0 or ifInOctets.3.";
3733        };
3734
3735        typedef RowPointer {
3736            type        ObjectIdentifier;
3737            description
3738            "Represents a pointer to a conceptual row.  The value is the
3739             name of the instance of the first accessible columnar object
3740             in the conceptual row.
3741
3742             For example, ifIndex.3 would point to the 3rd row in the
3743             ifTable (note that if ifIndex were not-accessible, then
3744             ifDescr.3 would be used instead).";
3745        };
3746
3747        typedef RowStatus {
3748            type        Enumeration (active(1), notInService(2),
3749
3750
3751 Strauss                 Expires August 15, 2000                [Page 67]
3752 \f
3753 Internet-Draft                   SMIng                     February 2000
3754
3755
3756                            notReady(3), createAndGo(4),
3757                            createAndWait(5), destroy(6));
3758            description
3759            "The RowStatus textual convention is used to manage the
3760             creation and deletion of conceptual rows, and is used as the
3761             value of the SYNTAX clause for the status column of a
3762             conceptual row (as described in Section 7.7.1 of [2].)
3763
3764             The status column has six defined values:
3765
3766                 - `active', which indicates that the conceptual row is
3767                 available for use by the managed device;
3768
3769                 - `notInService', which indicates that the conceptual
3770                 row exists in the agent, but is unavailable for use by
3771                 the managed device (see NOTE below);
3772
3773                 - `notReady', which indicates that the conceptual row
3774                 exists in the agent, but is missing information
3775                 necessary in order to be available for use by the
3776                 managed device;
3777
3778                 - `createAndGo', which is supplied by a management
3779                 station wishing to create a new instance of a
3780                 conceptual row and to have its status automatically set
3781                 to active, making it available for use by the managed
3782                 device;
3783
3784                 - `createAndWait', which is supplied by a management
3785                 station wishing to create a new instance of a
3786                 conceptual row (but not make it available for use by
3787                 the managed device); and,
3788
3789                 - `destroy', which is supplied by a management station
3790                 wishing to delete all of the instances associated with
3791                 an existing conceptual row.
3792
3793             Whereas five of the six values (all except `notReady') may
3794             be specified in a management protocol set operation, only
3795             three values will be returned in response to a management
3796             protocol retrieval operation: `notReady', `notInService' or
3797             `active'.  That is, when queried, an existing conceptual row
3798             has only three states: it is either available for use by the
3799             managed device (the status column has value `active'); it is
3800             not available for use by the managed device, though the
3801
3802
3803             agent has sufficient information to make it so (the status
3804             column has value `notInService'); or, it is not available
3805
3806
3807 Strauss                 Expires August 15, 2000                [Page 68]
3808 \f
3809 Internet-Draft                   SMIng                     February 2000
3810
3811
3812             for use by the managed device, and an attempt to make it so
3813             would fail because the agent has insufficient information
3814             (the state column has value `notReady').
3815
3816                                     NOTE WELL
3817
3818                 This textual convention may be used for a MIB table,
3819                 irrespective of whether the values of that table's
3820                 conceptual rows are able to be modified while it is
3821                 active, or whether its conceptual rows must be taken
3822                 out of service in order to be modified.  That is, it is
3823                 the responsibility of the DESCRIPTION clause of the
3824                 status column to specify whether the status column must
3825                 not be `active' in order for the value of some other
3826                 column of the same conceptual row to be modified.  If
3827                 such a specification is made, affected columns may be
3828                 changed by an SNMP set PDU if the RowStatus would not
3829                 be equal to `active' either immediately before or after
3830                 processing the PDU.  In other words, if the PDU also
3831                 contained a varbind that would change the RowStatus
3832                 value, the column in question may be changed if the
3833                 RowStatus was not equal to `active' as the PDU was
3834                 received, or if the varbind sets the status to a value
3835                 other than 'active'.
3836
3837             Also note that whenever any elements of a row exist, the
3838             RowStatus column must also exist.
3839
3840
3841             To summarize the effect of having a conceptual row with a
3842             status column having a SYNTAX clause value of RowStatus,
3843             consider the following state diagram:
3844
3845                                             STATE
3846                  +--------------+-----------+-------------+-------------
3847                  |      A       |     B     |      C      |      D
3848                  |              |status col.|status column|
3849                  |status column |    is     |      is     |status column
3850        ACTION    |does not exist|  notReady | notInService|  is active
3851    --------------+--------------+-----------+-------------+-------------
3852    set status    |noError    ->D|inconsist- |inconsistent-|inconsistent-
3853    column to     |       or     |   entValue|        Value|        Value
3854    createAndGo   |inconsistent- |           |             |
3855                  |         Value|           |             |
3856    --------------+--------------+-----------+-------------+-------------
3857    set status    |noError  see 1|inconsist- |inconsistent-|inconsistent-
3858    column to     |       or     |   entValue|        Value|        Value
3859    createAndWait |wrongValue    |           |             |
3860    --------------+--------------+-----------+-------------+-------------
3861
3862
3863 Strauss                 Expires August 15, 2000                [Page 69]
3864 \f
3865 Internet-Draft                   SMIng                     February 2000
3866
3867
3868    set status    |inconsistent- |inconsist- |noError      |noError
3869    column to     |         Value|   entValue|             |
3870    active        |              |           |             |
3871                  |              |     or    |             |
3872                  |              |           |             |
3873                  |              |see 2   ->D|see 8     ->D|          ->D
3874    --------------+--------------+-----------+-------------+-------------
3875    set status    |inconsistent- |inconsist- |noError      |noError   ->C
3876    column to     |         Value|   entValue|             |
3877    notInService  |              |           |             |
3878                  |              |     or    |             |      or
3879                  |              |           |             |
3880                  |              |see 3   ->C|          ->C|see 6
3881    --------------+--------------+-----------+-------------+-------------
3882    set status    |noError       |noError    |noError      |noError   ->A
3883    column to     |              |           |             |      or
3884    destroy       |           ->A|        ->A|          ->A|see 7
3885    --------------+--------------+-----------+-------------+-------------
3886    set any other |see 4         |noError    |noError      |see 5
3887    column to some|              |           |             |
3888    value         |              |      see 1|          ->C|          ->D
3889    --------------+--------------+-----------+-------------+-------------
3890
3891             (1) goto B or C, depending on information available to the
3892
3893
3894             agent.
3895
3896             (2) if other variable bindings included in the same PDU,
3897             provide values for all columns which are missing but
3898             required, then return noError and goto D.
3899
3900             (3) if other variable bindings included in the same PDU,
3901             provide values for all columns which are missing but
3902             required, then return noError and goto C.
3903
3904             (4) at the discretion of the agent, the return value may be
3905             either:
3906
3907                 inconsistentName: because the agent does not choose to
3908                 create such an instance when the corresponding
3909                 RowStatus instance does not exist, or
3910
3911                 inconsistentValue: if the supplied value is
3912                 inconsistent with the state of some other MIB object's
3913                 value, or
3914
3915                 noError: because the agent chooses to create the
3916                 instance.
3917
3918
3919 Strauss                 Expires August 15, 2000                [Page 70]
3920 \f
3921 Internet-Draft                   SMIng                     February 2000
3922
3923
3924             If noError is returned, then the instance of the status
3925             column must also be created, and the new state is B or C,
3926             depending on the information available to the agent.  If
3927             inconsistentName or inconsistentValue is returned, the row
3928             remains in state A.
3929
3930             (5) depending on the MIB definition for the column/table,
3931             either noError or inconsistentValue may be returned.
3932
3933             (6) the return value can indicate one of the following
3934             errors:
3935
3936                 wrongValue: because the agent does not support
3937                 createAndWait, or
3938
3939                 inconsistentValue: because the agent is unable to take
3940                 the row out of service at this time, perhaps because it
3941                 is in use and cannot be de-activated.
3942
3943             (7) the return value can indicate the following error:
3944
3945
3946                 inconsistentValue: because the agent is unable to
3947                 remove the row at this time, perhaps because it is in
3948                 use and cannot be de-activated.
3949
3950             NOTE: Other processing of the set request may result in a
3951             response other than noError being returned, e.g.,
3952             wrongValue, noCreation, etc.
3953
3954                              Conceptual Row Creation
3955
3956             There are four potential interactions when creating a
3957             conceptual row: selecting an instance-identifier which is
3958             not in use; creating the conceptual row; initializing any
3959             objects for which the agent does not supply a default; and,
3960             making the conceptual row available for use by the managed
3961             device.
3962
3963             Interaction 1: Selecting an Instance-Identifier
3964
3965             The algorithm used to select an instance-identifier varies
3966             for each conceptual row.  In some cases, the instance-
3967             identifier is semantically significant, e.g., the
3968             destination address of a route, and a management station
3969             selects the instance-identifier according to the semantics.
3970
3971             In other cases, the instance-identifier is used solely to
3972             distinguish conceptual rows, and a management station
3973
3974
3975 Strauss                 Expires August 15, 2000                [Page 71]
3976 \f
3977 Internet-Draft                   SMIng                     February 2000
3978
3979
3980             without specific knowledge of the conceptual row might
3981             examine the instances present in order to determine an
3982             unused instance-identifier.  (This approach may be used, but
3983             it is often highly sub-optimal; however, it is also a
3984             questionable practice for a naive management station to
3985             attempt conceptual row creation.)
3986
3987             Alternately, the MIB module which defines the conceptual row
3988             might provide one or more objects which provide assistance
3989             in determining an unused instance-identifier.  For example,
3990             if the conceptual row is indexed by an integer-value, then
3991             an object having an integer-valued SYNTAX clause might be
3992             defined for such a purpose, allowing a management station to
3993             issue a management protocol retrieval operation.  In order
3994             to avoid unnecessary collisions between competing management
3995             stations, `adjacent' retrievals of this object should be
3996             different.
3997
3998
3999             Finally, the management station could select a pseudo-random
4000             number to use as the index.  In the event that this index
4001             was already in use and an inconsistentValue was returned in
4002             response to the management protocol set operation, the
4003             management station should simply select a new pseudo-random
4004             number and retry the operation.
4005
4006             A MIB designer should choose between the two latter
4007             algorithms based on the size of the table (and therefore the
4008             efficiency of each algorithm).  For tables in which a large
4009             number of entries are expected, it is recommended that a MIB
4010             object be defined that returns an acceptable index for
4011             creation.  For tables with small numbers of entries, it is
4012             recommended that the latter pseudo-random index mechanism be
4013             used.
4014
4015             Interaction 2: Creating the Conceptual Row
4016
4017             Once an unused instance-identifier has been selected, the
4018             management station determines if it wishes to create and
4019             activate the conceptual row in one transaction or in a
4020             negotiated set of interactions.
4021
4022             Interaction 2a: Creating and Activating the Conceptual Row
4023
4024             The management station must first determine the column
4025             requirements, i.e., it must determine those columns for
4026             which it must or must not provide values.  Depending on the
4027             complexity of the table and the management station's
4028             knowledge of the agent's capabilities, this determination
4029
4030
4031 Strauss                 Expires August 15, 2000                [Page 72]
4032 \f
4033 Internet-Draft                   SMIng                     February 2000
4034
4035
4036             can be made locally by the management station.  Alternately,
4037             the management station issues a management protocol get
4038             operation to examine all columns in the conceptual row that
4039             it wishes to create.  In response, for each column, there
4040             are three possible outcomes:
4041
4042                 - a value is returned, indicating that some other
4043                 management station has already created this conceptual
4044                 row.  We return to interaction 1.
4045
4046
4047                 - the exception `noSuchInstance' is returned,
4048                 indicating that the agent implements the object-type
4049                 associated with this column, and that this column in at
4050                 least one conceptual row would be accessible in the MIB
4051                 view used by the retrieval were it to exist. For those
4052                 columns to which the agent provides read-create access,
4053                 the `noSuchInstance' exception tells the management
4054                 station that it should supply a value for this column
4055                 when the conceptual row is to be created.
4056
4057                 - the exception `noSuchObject' is returned, indicating
4058                 that the agent does not implement the object-type
4059                 associated with this column or that there is no
4060                 conceptual row for which this column would be
4061                 accessible in the MIB view used by the retrieval.  As
4062                 such, the management station can not issue any
4063                 management protocol set operations to create an
4064                 instance of this column.
4065
4066             Once the column requirements have been determined, a
4067             management protocol set operation is accordingly issued.
4068             This operation also sets the new instance of the status
4069             column to `createAndGo'.
4070
4071             When the agent processes the set operation, it verifies that
4072             it has sufficient information to make the conceptual row
4073             available for use by the managed device.  The information
4074             available to the agent is provided by two sources: the
4075             management protocol set operation which creates the
4076             conceptual row, and, implementation-specific defaults
4077             supplied by the agent (note that an agent must provide
4078             implementation-specific defaults for at least those objects
4079             which it implements as read-only).  If there is sufficient
4080             information available, then the conceptual row is created, a
4081             `noError' response is returned, the status column is set to
4082             `active', and no further interactions are necessary (i.e.,
4083             interactions 3 and 4 are skipped).  If there is insufficient
4084             information, then the conceptual row is not created, and the
4085
4086
4087 Strauss                 Expires August 15, 2000                [Page 73]
4088 \f
4089 Internet-Draft                   SMIng                     February 2000
4090
4091
4092             set operation fails with an error of `inconsistentValue'.
4093             On this error, the management station can issue a management
4094             protocol retrieval operation to determine if this was
4095             because it failed to specify a value for a required column,
4096             or, because the selected instance of the status column
4097             already existed.  In the latter case, we return to
4098             interaction 1.  In the former case, the management station
4099
4100
4101             can re-issue the set operation with the additional
4102             information, or begin interaction 2 again using
4103             `createAndWait' in order to negotiate creation of the
4104             conceptual row.
4105
4106                                     NOTE WELL
4107
4108                 Regardless of the method used to determine the column
4109                 requirements, it is possible that the management
4110                 station might deem a column necessary when, in fact,
4111                 the agent will not allow that particular columnar
4112                 instance to be created or written.  In this case, the
4113                 management protocol set operation will fail with an
4114                 error such as `noCreation' or `notWritable'.  In this
4115                 case, the management station decides whether it needs
4116                 to be able to set a value for that particular columnar
4117                 instance.  If not, the management station re-issues the
4118                 management protocol set operation, but without setting
4119                 a value for that particular columnar instance;
4120                 otherwise, the management station aborts the row
4121                 creation algorithm.
4122
4123
4124             Interaction 2b: Negotiating the Creation of the Conceptual
4125             Row
4126
4127             The management station issues a management protocol set
4128             operation which sets the desired instance of the status
4129             column to `createAndWait'.  If the agent is unwilling to
4130             process a request of this sort, the set operation fails with
4131             an error of `wrongValue'.  (As a consequence, such an agent
4132             must be prepared to accept a single management protocol set
4133             operation, i.e., interaction 2a above, containing all of the
4134             columns indicated by its column requirements.) Otherwise,
4135             the conceptual row is created, a `noError' response is
4136             returned, and the status column is immediately set to either
4137             `notInService' or `notReady', depending on whether it has
4138             sufficient information to make the conceptual row available
4139             for use by the managed device.  If there is sufficient
4140             information available, then the status column is set to
4141
4142
4143 Strauss                 Expires August 15, 2000                [Page 74]
4144 \f
4145 Internet-Draft                   SMIng                     February 2000
4146
4147
4148             `notInService'; otherwise, if there is insufficient
4149             information, then the status column is set to `notReady'.
4150             Regardless, we proceed to interaction 3.
4151
4152             Interaction 3: Initializing non-defaulted Objects
4153
4154             The management station must now determine the column
4155             requirements.  It issues a management protocol get operation
4156             to examine all columns in the created conceptual row.  In
4157             the response, for each column, there are three possible
4158             outcomes:
4159
4160                 - a value is returned, indicating that the agent
4161                 implements the object-type associated with this column
4162                 and had sufficient information to provide a value.  For
4163                 those columns to which the agent provides read-create
4164                 access (and for which the agent allows their values to
4165                 be changed after their creation), a value return tells
4166                 the management station that it may issue additional
4167                 management protocol set operations, if it desires, in
4168                 order to change the value associated with this column.
4169
4170
4171                 - the exception `noSuchInstance' is returned,
4172                 indicating that the agent implements the object-type
4173                 associated with this column, and that this column in at
4174                 least one conceptual row would be accessible in the MIB
4175                 view used by the retrieval were it to exist. However,
4176                 the agent does not have sufficient information to
4177                 provide a value, and until a value is provided, the
4178                 conceptual row may not be made available for use by the
4179                 managed device.  For those columns to which the agent
4180                 provides read-create access, the `noSuchInstance'
4181                 exception tells the management station that it must
4182                 issue additional management protocol set operations, in
4183                 order to provide a value associated with this column.
4184
4185                 - the exception `noSuchObject' is returned, indicating
4186                 that the agent does not implement the object-type
4187                 associated with this column or that there is no
4188                 conceptual row for which this column would be
4189                 accessible in the MIB view used by the retrieval.  As
4190                 such, the management station can not issue any
4191                 management protocol set operations to create an
4192                 instance of this column.
4193
4194             If the value associated with the status column is
4195             `notReady', then the management station must first deal with
4196             all `noSuchInstance' columns, if any.  Having done so, the
4197
4198
4199 Strauss                 Expires August 15, 2000                [Page 75]
4200 \f
4201 Internet-Draft                   SMIng                     February 2000
4202
4203
4204             value of the status column becomes `notInService', and we
4205             proceed to interaction 4.
4206
4207             Interaction 4: Making the Conceptual Row Available
4208
4209             Once the management station is satisfied with the values
4210             associated with the columns of the conceptual row, it issues
4211             a management protocol set operation to set the status column
4212             to `active'.  If the agent has sufficient information to
4213             make the conceptual row available for use by the managed
4214             device, the management protocol set operation succeeds (a
4215             `noError' response is returned).  Otherwise, the management
4216             protocol set operation fails with an error of
4217             `inconsistentValue'.
4218
4219
4220                                     NOTE WELL
4221
4222                 A conceptual row having a status column with value
4223                 `notInService' or `notReady' is unavailable to the
4224                 managed device.  As such, it is possible for the
4225                 managed device to create its own instances during the
4226                 time between the management protocol set operation
4227                 which sets the status column to `createAndWait' and the
4228                 management protocol set operation which sets the status
4229                 column to `active'.  In this case, when the management
4230                 protocol set operation is issued to set the status
4231                 column to `active', the values held in the agent
4232                 supersede those used by the managed device.
4233
4234             If the management station is prevented from setting the
4235             status column to `active' (e.g., due to management station
4236             or network failure) the conceptual row will be left in the
4237             `notInService' or `notReady' state, consuming resources
4238             indefinitely.  The agent must detect conceptual rows that
4239             have been in either state for an abnormally long period of
4240             time and remove them.  It is the responsibility of the
4241             DESCRIPTION clause of the status column to indicate what an
4242             abnormally long period of time would be.  This period of
4243             time should be long enough to allow for human response time
4244             (including `think time') between the creation of the
4245             conceptual row and the setting of the status to `active'.
4246             In the absence of such information in the DESCRIPTION
4247             clause,
4248             it is suggested that this period be approximately 5 minutes
4249             in length.  This removal action applies not only to newly-
4250             created rows, but also to previously active rows which are
4251             set to, and left in, the notInService state for a prolonged
4252             period exceeding that which is considered normal for such a
4253
4254
4255 Strauss                 Expires August 15, 2000                [Page 76]
4256 \f
4257 Internet-Draft                   SMIng                     February 2000
4258
4259
4260             conceptual row.
4261
4262
4263                             Conceptual Row Suspension
4264
4265             When a conceptual row is `active', the management station
4266             may issue a management protocol set operation which sets the
4267             instance of the status column to `notInService'.  If the
4268             agent is unwilling to do so, the set operation fails with an
4269             error of `wrongValue' or `inconsistentValue'.
4270             Otherwise, the conceptual row is taken out of service, and a
4271             `noError' response is returned.  It is the responsibility of
4272             the DESCRIPTION clause of the status column to indicate
4273             under what circumstances the status column should be taken
4274             out of service (e.g., in order for the value of some other
4275             column of the same conceptual row to be modified).
4276
4277                              Conceptual Row Deletion
4278
4279             For deletion of conceptual rows, a management protocol set
4280             operation is issued which sets the instance of the status
4281             column to `destroy'.  This request may be made regardless of
4282             the current value of the status column (e.g., it is possible
4283             to delete conceptual rows which are either `notReady',
4284             `notInService' or `active'.) If the operation succeeds, then
4285             all instances associated with the conceptual row are
4286             immediately removed.";
4287        };
4288
4289        typedef TimeStamp {
4290            type        TimeTicks;
4291            description
4292            "The value of the sysUpTime object at which a specific
4293             occurrence happened.  The specific occurrence must be
4294             defined in the description of any object defined using this
4295             type.  When the specific occurrence occurred prior to the
4296             last time sysUpTime was zero, then the TimeStamp value is
4297             zero.  Note that this requires all TimeStamp values to be
4298             reset to zero when the value of sysUpTime reaches 497+ days
4299             and wraps around to zero.";
4300        };
4301
4302        typedef TimeInterval {
4303            type        Integer32 (0..2147483647);
4304            description
4305            "A period of time, measured in units of 0.01 seconds.";
4306        };
4307
4308        typedef DateAndTime {
4309
4310
4311 Strauss                 Expires August 15, 2000                [Page 77]
4312 \f
4313 Internet-Draft                   SMIng                     February 2000
4314
4315
4316            type        OctetString (8 | 11);
4317            format      "2d-1d-1d,1d:1d:1d.1d,1a1d:1d";
4318            description
4319            "A date-time specification.
4320
4321             field  octets  contents                  range
4322             -----  ------  --------                  -----
4323              1      1-2   year*                     0..65536
4324              2       3    month                     1..12
4325              3       4    day                       1..31
4326              4       5    hour                      0..23
4327              5       6    minutes                   0..59
4328              6       7    seconds                   0..60
4329                           (use 60 for leap-second)
4330              7       8    deci-seconds              0..9
4331              8       9    direction from UTC        '+' / '-'
4332              9      10    hours from UTC*           0..13
4333             10      11    minutes from UTC          0..59
4334
4335             * Notes:
4336             - the value of year is in big-endian encoding
4337             - daylight saving time in New Zealand is +13
4338
4339             For example, Tuesday May 26, 1992 at 1:30:15 PM EDT would be
4340             displayed as:
4341
4342                             1992-5-26,13:30:15.0,-4:0
4343
4344             Note that if only local time is known, then timezone
4345             information (fields 8-10) is not present.";
4346        };
4347
4348        typedef StorageType {
4349            type        Enumeration (other(1), volatile(2),
4350                            nonVolatile(3), permanent(4),
4351                            readOnly(5));
4352            description
4353            "Describes the memory realization of a conceptual row.  A
4354             row which is volatile(2) is lost upon reboot.  A row which
4355             is either nonVolatile(3), permanent(4) or readOnly(5), is
4356             backed up by stable storage.  A row which is permanent(4)
4357             can be changed but not deleted.  A row which is readOnly(5)
4358             cannot be changed nor deleted.
4359
4360             If the value of an object with this syntax is either
4361             permanent(4) or readOnly(5), it cannot be modified.
4362             Conversely, if the value is either other(1), volatile(2) or
4363             nonVolatile(3), it cannot be modified to be permanent(4) or
4364             readOnly(5).  (All illegal modifications result in a
4365
4366
4367 Strauss                 Expires August 15, 2000                [Page 78]
4368 \f
4369 Internet-Draft                   SMIng                     February 2000
4370
4371
4372             'wrongValue' error.)
4373
4374             Every usage of this textual convention is required to
4375             specify the columnar objects which a permanent(4) row must
4376             at a minimum allow to be writable.";
4377        };
4378
4379        typedef TDomain {
4380            type        ObjectIdentifier;
4381            description
4382            "Denotes a kind of transport service.
4383
4384             Some possible values, such as snmpUDPDomain, are defined in
4385             'Transport Mappings for Version 2 of the Simple Network
4386             Management Protocol (SNMPv2)'.";
4387        };
4388
4389        typedef TAddress {
4390            type        OctetString (1..255);
4391            description
4392            "Denotes a transport service address.
4393
4394             For snmpUDPDomain, a TAddress is 6 octets long, the initial
4395             4 octets containing the IP-address in network-byte order and
4396             the last 2 containing the UDP port in network-byte order.
4397             Cosult 'Transport Mappings for Version 2 of the Simple
4398             Network Management Protocol (SNMPv2)' for further
4399             information on snmpUDPDomain.";
4400        };
4401
4402    };
4403
4404 14.3 IRTF-NMRG-SMING-EXTENSIONS
4405
4406    module IRTF-NMRG-SMING-EXTENSIONS {
4407
4408    //
4409    // $RCSfile: IRTF-NMRG-SMING-EXTENSIONS,v $
4410    // $Revision: 817 $
4411    // $Author: strauss $
4412    // $Date: 2000-02-15 11:41:02 +0100 (Tue, 15 Feb 2000) $
4413    //
4414
4415        organization    "IRTF Network Management Research Group (NMRG),
4416                         Network Management Group, TU Braunschweig";
4417
4418        contact         "        Frank Strauss
4419
4420                         Postal: TU Braunschweig
4421
4422
4423 Strauss                 Expires August 15, 2000                [Page 79]
4424 \f
4425 Internet-Draft                   SMIng                     February 2000
4426
4427
4428                                 Bueltenweg 74/75
4429                                 38106 Braunschweig
4430                                 Germany
4431
4432                          Phone: +49 531 391-3266
4433                          EMail: strauss@ibr.cs.tu-bs.de";
4434
4435        description     "Core extension definitions for SMIng.";
4436
4437        revision {
4438            date        "2000-02-13";
4439            description "SMIng grammar dropped module identity objects.";
4440        };
4441
4442        revision {
4443            date        "1999-05-07";
4444            description "Initial Revision.";
4445        };
4446
4447        extension agentcaps {
4448            status      current;
4449            description
4450                  "The agentcaps extension statement is used to describe
4451                   an agent's deviation from the compliance statements
4452                   of the modules it implements. It is designed to be
4453                   compatible with the SMIv2 AGENT-CAPABILITIES macro.
4454
4455                   The agentcaps extension statement should only be used
4456                   in the statement body of a module that does not
4457                   contain any other type or node definitions that do not
4458                   correspond to an agent implementation.";
4459            reference
4460                  "RFC 2580, Section 6 describes the SMIv2
4461                   compatible AGENT-CAPABILITIES macro.";
4462            abnf
4463                  "agentcapsStatement = 'agentcaps' sep lcIdentifier
4464                                        optsep '{' stmtsep
4465                                          oidStatement stmtsep
4466                                          releaseStatement stmtsep
4467                                          *1(statusStatement stmtsep)
4468                                          descriptionStatement stmtsep
4469                                          *1(referenceStatement stmtsep)
4470                                          *(includesStatement stmtsep)
4471                                        '}' optsep ';'
4472
4473                   includesStatement  = 'includes' sep qlcIdentifier
4474                                        optsep '{' stmtsep
4475                                          *(variationStatement stmtsep)
4476                                        '}' optsep ';'
4477
4478
4479 Strauss                 Expires August 15, 2000                [Page 80]
4480 \f
4481 Internet-Draft                   SMIng                     February 2000
4482
4483
4484                   variationStatement = 'variation' sep qlcIdentifier
4485                                        optsep '{' stmtsep
4486                                          typeStatement stmtsep
4487                                          writetypeStatement stmtsep
4488                                          accessStatement stmtsep
4489                                          createStatement stmtsep
4490                                        '}' optsep ';'
4491                   ";
4492        };
4493
4494    };
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535 Strauss                 Expires August 15, 2000                [Page 81]
4536 \f
4537 Internet-Draft                   SMIng                     February 2000
4538
4539
4540 15. Extending a Module
4541
4542    As experience is gained with a module, it may be desirable to revise
4543    that module.  However, changes are not allowed if they have any
4544    potential to cause interoperability problems between an
4545    implementation using an original specification and an implementation
4546    using an updated specification(s). 
4547
4548    For any change, some statements near the top of the module MUST be
4549    updated to include information about the revision: specifically, a
4550    new `revision' statement (Section 5.6) must be included in front of
4551    the `revision' statements. Furthermore, any necessary changes MUST
4552    be applied to other statements, including the `organization' and
4553    `contact' statements (Section 5.2, Section 5.3). 
4554
4555    Note that any definition contained in a module is available to be
4556    imported by any other module, and is referenced in an `import'
4557    statement via the module name.  Thus, a module name MUST NOT be
4558    changed. Specifically, the module name (e.g., `FIZBIN-MIB' in the
4559    example of Section 5.8) MUST NOT be changed when revising a module
4560    (except to correct typographical errors), and definitions MUST NOT
4561    be moved from one module to another. 
4562
4563    Also note, that obsolete definitions MUST NOT be removed from
4564    modules since their descriptors may still be referenced by other
4565    modules, and the object identifiers used to name them MUST never be
4566    re-assigned. 
4567
4568    A definition may be revised in any of the following ways: 
4569
4570    o  In `typedef', `scalar' and `column' statement blocks, a `type'
4571       statement containing an `Enumeration' or `Bits' type may have new
4572       named numbers added. 
4573
4574    o  In `typedef', `scalar' and `column' statement blocks, the value
4575       of a `type' statement may be replaced by another type if the new
4576       type is derived (directly or indirectly) from the same base type,
4577       has the same set of values, and has identical semantics. 
4578
4579    o  In any statement block, a `status' statement value of `current'
4580       (or a missing `status' statement) may be revised as `deprecated'
4581       or `obsolete'.  Similarly, a `status' statement value of
4582       `deprecated' may be revised as `obsolete'. When making such a
4583       change, the `description' statement SHOULD be updated to explain
4584       the rationale. 
4585
4586    o  In `typedef', `scalar' and `column' statement blocks, a `default'
4587       statement may be added or updated. 
4588
4589
4590
4591 Strauss                 Expires August 15, 2000                [Page 82]
4592 \f
4593 Internet-Draft                   SMIng                     February 2000
4594
4595
4596    o  In any statement block, a `reference' statement may be added or
4597       updated. 
4598
4599    o  In `typedef', `scalar' and `column' statement blocks, a `units'
4600       statement may be added. 
4601
4602    o  A row may be augmented by adding new columnar objects (`column'
4603       statements) at the end of the row's statement block. 
4604
4605    o  In any statement block, clarifications and additional information
4606       may be included in the `description' statement. 
4607
4608    o  Entirely new extensions, types, nodes, scalar objects, tables,
4609       groups, or compliance statements may be defined, using previously
4610       unassigned identifiers and object identifier values. 
4611
4612    Otherwise, if the semantics of any previous definition are changed
4613    (i.e., if a non-editorial change is made to any definition other
4614    than those specifically allowed above), then the `oid' statement
4615    value associated with that object MUST also be changed. 
4616
4617    Note that changing the identifier associated with an existing object
4618    is considered a semantic change, as these strings may be used in an
4619    `import' statement. 
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647 Strauss                 Expires August 15, 2000                [Page 83]
4648 \f
4649 Internet-Draft                   SMIng                     February 2000
4650
4651
4652 16. SMIng Language Extensibility
4653
4654    While SMIng has a well defined set of statements (Section 5 through
4655    Section 13) that are used to specify those aspects of management
4656    information commonly regarded as necessary, there may be further
4657    information, people wish to express. To describe additional
4658    information informally in description statements has the
4659    disadvantage, that this information cannot be parsed by any program. 
4660
4661    SMIng allows modules to include statements that are unknown to a
4662    parser but fulfill some core grammar rules (Section 4.2).
4663    Furthermore, additional statements may be defined by the `extension'
4664    statement (Section 6). Extensions can be used in the local module or
4665    in other modules, that import the extension. This has some
4666    advantages: 
4667
4668    o  A parser can differentiate between statements known as extensions
4669       and unknown statements. This enables the parser to complain about
4670       unknown statements, e.g. due to typos. 
4671
4672    o  If an extension's definition contains a formal ABNF grammar
4673       definition and a parser is able to interpret this ABNF
4674       definition, this enables the parser also to complain about wrong
4675       usage of an extension. 
4676
4677    o  Since, there might be some common need for extensions, there is a
4678       relatively high probability of extension name collisions
4679       originated by different organizations, as long as there is no
4680       standardized extension for that purpose. The requirement to
4681       explicitly import extension statements allows to distinguish
4682       those extensions. 
4683
4684    o  The supported extensions of an SMIng implementation, e.g. a MIB
4685       compiler, can be clearly expressed. 
4686
4687    The only formal effect of an extension statement definition is to
4688    declare its existence and its status, and optionally its ABNF
4689    grammar. All additional aspects SHOULD be described in the
4690    `description' statement: 
4691
4692    o  The detailed semantics of the new statement SHOULD be described. 
4693
4694    o  The contexts in which the new statement can be used, SHOULD be
4695       described, e.g., a new statement may be designed to be used only
4696       in the statement block of a module, but not in other nested
4697       statement blocks. Others may be applicable in multiple contexts.
4698       In addition, the point in the sequence of an obligatory order of
4699       other statements, where the new statement may be inserted, might
4700       be prescribed. 
4701
4702
4703 Strauss                 Expires August 15, 2000                [Page 84]
4704 \f
4705 Internet-Draft                   SMIng                     February 2000
4706
4707
4708    o  The circumstances that make the new statement mandatory or
4709       optional SHOULD be described. 
4710
4711    o  The syntax of the new statement SHOULD at least be described
4712       informally, if not supplied formally in an `abnf' statement. 
4713
4714    o  It might be reasonable to give some suggestions under which
4715       conditions the implementation of the new statement is adequate
4716       and how it could be integrated into existent implementations. 
4717
4718    Some possible extension applications might be: 
4719
4720    o  Agent capabilities statements, that allow to describe an agent
4721       implemention's deviation from the compliance statements of the
4722       modules they implement. SMIv2 has a regular AGENT-CAPABILITIES
4723       construct [4], though it's rarely used. That's why it's not a
4724       common SMIng statement. Instead, it is defined as an `agentcaps'
4725       extension statement in the module IRTF-NMRG-SMING-EXTENSIONS
4726       (Section 14.3). 
4727
4728    o  Inlined annotations to definitions. E.g., a vendor may wish to
4729       describe additional information to object definitions in private
4730       modules. An example are severity levels of notifications in the
4731       statement block of a `notification' statement. 
4732
4733    o  Arbitrary annotations to external definitions. E.g., a vendor may
4734       wish to describe additional information to object definitions in
4735       a "standard" module. This allows a vendor to implement "standard"
4736       modules as well as additional private features, without redundant
4737       MIB definitions, but on top of "standard" MIB definitions. 
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759 Strauss                 Expires August 15, 2000                [Page 85]
4760 \f
4761 Internet-Draft                   SMIng                     February 2000
4762
4763
4764 17. Module Conversions
4765
4766 17.1 Converting SMIv2 to SMIng
4767
4768    Conversions of SMIv2 modules to SMIng are feasible. The only SMIv2
4769    construct that cannot be mapped to an SMIng statement is the
4770    AGENT-CAPABILITIES macro. However, this can be mapped to the
4771    `agentcaps' extension. All other constructs and types are directly
4772    mappable without loss of information. 
4773
4774    Detailed mapping information is subject to a future document. 
4775
4776 17.2 Converting SMIng to SMIv2
4777
4778    SMIng is more liberal in some aspects to ensure a more consistent
4779    information model and a short grammar with less exceptions. This
4780    leads to a limited backwards convertability to SMIv2 of different
4781    kinds of identifiers, groups, type definition hierarchies, octet
4782    string length limitations, and object identifier values (those with
4783    a single sub-identifier). Some other information gets lost when
4784    being converted to SMIv2: some occurences of references, units,
4785    formats, default values, table indexing information, and table row
4786    creation information. 
4787
4788    Detailed mapping information is subject to a future document. 
4789
4790 17.3 SMIv1
4791
4792    Conversions between SMIv1 and SMIng are not covered by this
4793    document. Anyhow, conversions between SMIv1 and SMIv2 are subject to
4794    SMIv2 and partly described in [14]. Conversions between SMIv2 and
4795    SMIng are covered in the sections above. 
4796
4797    In few words, conversion from SMIv1 to SMIng is not possible in some
4798    cases and without some additional information. Conversion from SMIng
4799    to SMIv1 is possible if 64 bit types and floating point data types
4800    are not used and if identifiers conform to the SMIv1 restrictions. 
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815 Strauss                 Expires August 15, 2000                [Page 86]
4816 \f
4817 Internet-Draft                   SMIng                     February 2000
4818
4819
4820 18. Security Considerations
4821
4822    This document defines a language with which to write and read
4823    descriptions of management information.  The language itself has no
4824    security impact on the Internet. 
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871 Strauss                 Expires August 15, 2000                [Page 87]
4872 \f
4873 Internet-Draft                   SMIng                     February 2000
4874
4875
4876 19. Acknowledgements
4877
4878    This document is originated as a central part of a master's thesis
4879    at the Technical University of Braunschweig, under the guidance of
4880    Juergen Schoenwaelder. 
4881
4882    Since SMIng represents a successor of SMIv2, a huge amount of
4883    paragraphs and phrases are taken from the SMIv2 specifications [2],
4884    [3], [4] written by Jeff Case, Keith McCloghrie, David Perkins,
4885    Marshall T. Rose, Juergen Schoenwaelder, and Steven L. Waldbusser. 
4886
4887    Finally, Marshall T. Rose's work on an XML framework for RFC authors
4888    [15] made the writing of an Internet standards document much more
4889    feasible. 
4890
4891    Thanks to these people and the authors of these documents. 
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927 Strauss                 Expires August 15, 2000                [Page 88]
4928 \f
4929 Internet-Draft                   SMIng                     February 2000
4930
4931
4932 References
4933
4934    [1]  Bradner, S., "Key words for use in RFCs to Indicate Requirement
4935         Levels", RFC 2119, BCP 14, March 1997.
4936
4937    [2]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose,
4938         M., Waldbusser, S., "Structure of Management Information
4939         Version 2 (SMIv2)", RFC 2578, STD 58, April 1999.
4940
4941    [3]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose,
4942         M., Waldbusser, S., "Textual Conventions for SMIv2", RFC 2579,
4943         STD 59, April 1999.
4944
4945    [4]  McCloghrie, K., Perkins, D., Schoenwaelder, J., Case, J., Rose,
4946         M., Waldbusser, S., "Conformance Statements for SMIv2", RFC
4947         2580, STD 60, April 1999.
4948
4949    [5]  Rose, M., McCloghrie, K., "Structure and Identification of
4950         Management Information for TCP/IP-based Internets", RFC 1155,
4951         STD 16, May 1990.
4952
4953    [6]  Rose, M., McCloghrie, K., "Concise MIB Definitions", RFC 1212,
4954         STD 16, March 1991.
4955
4956    [7]  Rose, M., "A Convention for Defining Traps for use with the
4957         SNMP", RFC 1215, March 1991.
4958
4959    [8]  Crocker, D., Overell, P., "Augmented BNF for Syntax
4960         Specifications: ABNF", RFC 2234, November 1997.
4961
4962    [9]  International Organization for Standardization, "Specification
4963         of Abstract Syntax Notation One (ASN.1)", International
4964         Standard 8824, December 1987.
4965
4966    [10]  Harrington, D., Presuhn, R., Wijnen, B., "An Architecture for
4967          Describing SNMP Management Frameworks", RFC 2271, January 1999.
4968
4969    [11]  Institute of Electrical and Electronics Engineers, "IEEE
4970          Standard for Binary Floating-Point Arithmetic", ANSI/IEEE
4971          Standard 754-1985, August 1985.
4972
4973    [12]  Yergeau, F., "UTF-8, a transformation format of ISO 10646",
4974          RFC 2279, January 1998.
4975
4976    [13]  Case, J., McCloghrie, K., Rose, M., Waldbusser, S.,
4977          "Management Information Base for Version 2 of the Simple
4978          Network Management Protocol (SNMPv2)", RFC 1907, January 1996.
4979
4980    [14]  Wijnen, B., Levi, D., "V2ToV1 - Mapping SNMPv2 onto SNMPv1
4981
4982
4983 Strauss                 Expires August 15, 2000                [Page 89]
4984 \f
4985 Internet-Draft                   SMIng                     February 2000
4986
4987
4988          within a bi-lingual SNMP agent", RFC 2089, January 1997.
4989
4990    [15]  Rose, M., "Writing I-Ds and RFCs using XML", RFC 2629, June
4991          1999.
4992
4993 Author's Address
4994
4995    Frank Strauss
4996    TU Braunschweig
4997    Bueltenweg 74/75
4998    38106 Braunschweig
4999    Germany
5000
5001    Phone: +49 531 391-3266
5002    EMail: strauss@ibr.cs.tu-bs.de
5003    URI:   http://www.ibr.cs.tu-bs.de/
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039 Strauss                 Expires August 15, 2000                [Page 90]
5040 \f
5041 Internet-Draft                   SMIng                     February 2000
5042
5043
5044 Appendix A. The SMIng ABNF grammar
5045
5046     The SMIng grammar conforms to the Augmented Backus-Naur Form
5047    (ABNF)[8], with one exception: For readability, keywords are
5048    represented as quoted strings, although ABNF would declare these
5049    strings to be case-insensitive.  Anyhow, SMIng keyword are meant to
5050    be case-sensitive. 
5051
5052    ;;
5053    ;; sming.abnf -- SMIng grammar in ABNF notation (RFC 2234).
5054    ;;
5055    ;; @(#) $Id: draft-irtf-nmrg-sming-02.txt 817 2000-02-15 10:41:02Z strauss $
5056    ;;
5057    ;; Copyright (C) The Internet Society (1999). All Rights Reserved.
5058    ;;
5059
5060    smingFile               = optsep *(moduleStatement optsep)
5061
5062    ;;
5063    ;; Statement rules.
5064    ;;
5065
5066    moduleStatement         = moduleKeyword sep ucIdentifier optsep "{" stmtsep
5067                                  *(importStatement stmtsep)
5068                                  organizationStatement stmtsep
5069                                  contactStatement stmtsep
5070                                  descriptionStatement stmtsep
5071                                  *1(referenceStatement stmtsep)
5072                                  1*(revisionStatement stmtsep)
5073                                  *1(identityStatement stmtsep)
5074                                  *(extensionStatement stmtsep)
5075                                  *(typedefStatement stmtsep)
5076                                  *(anyObjectStatement stmtsep)
5077                                  *(notificationStatement stmtsep)
5078                                  *(groupStatement stmtsep)
5079                                  *(complianceStatement stmtsep)
5080                              "}" optsep ";"
5081
5082    extensionStatement      = extensionKeyword sep lcIdentifier optsep
5083                                  "{" stmtsep
5084                                  *1(statusStatement stmtsep)
5085                                  descriptionStatement stmtsep
5086                                  *1(referenceStatement stmtsep)
5087                                  *1(abnfStatement stmtsep)
5088                              "}" optsep ";"
5089
5090    typedefStatement        = typedefKeyword sep ucIdentifier optsep
5091                                  "{" stmtsep
5092                                  typedefTypeStatement stmtsep
5093
5094
5095 Strauss                 Expires August 15, 2000                [Page 91]
5096 \f
5097 Internet-Draft                   SMIng                     February 2000
5098
5099
5100                                  *1(defaultStatement stmtsep)
5101                                  *1(formatStatement stmtsep)
5102                                  *1(unitsStatement stmtsep)
5103                                  *1(statusStatement stmtsep)
5104                                  descriptionStatement stmtsep
5105                                  *1(referenceStatement stmtsep)
5106                              "}" optsep ";"
5107
5108    anyObjectStatement      = nodeStatement /
5109                              scalarStatement /
5110                              tableStatement
5111
5112    nodeStatement           = nodeKeyword sep lcIdentifier optsep
5113                                  "{" stmtsep
5114                                  oidStatement stmtsep
5115                                  *1(statusStatement stmtsep)
5116                                  *1(descriptionStatement stmtsep)
5117                                  *1(referenceStatement stmtsep)
5118                              "}" optsep ";"
5119
5120    scalarStatement         = scalarKeyword sep lcIdentifier optsep
5121                                  "{" stmtsep
5122                                  oidStatement stmtsep
5123                                  typeStatement stmtsep
5124                                  accessStatement stmtsep
5125                                  *1(defaultStatement stmtsep)
5126                                  *1(formatStatement stmtsep)
5127                                  *1(unitsStatement stmtsep)
5128                                  *1(statusStatement stmtsep)
5129                                  descriptionStatement stmtsep
5130                                  *1(referenceStatement stmtsep)
5131                              "}" optsep ";"
5132
5133    tableStatement          = tableKeyword sep lcIdentifier optsep
5134                                  "{" stmtsep
5135                                  oidStatement stmtsep
5136                                  *1(statusStatement stmtsep)
5137                                  descriptionStatement stmtsep
5138                                  *1(referenceStatement stmtsep)
5139                                  rowStatement stmtsep
5140                              "}" optsep ";"
5141
5142    rowStatement            = rowKeyword sep lcIdentifier optsep
5143                                  "{" stmtsep
5144                                  oidStatement stmtsep
5145                                  anyIndexStatement stmtsep
5146                                  *1(createStatement stmtsep)
5147                                  *1(statusStatement stmtsep)
5148                                  descriptionStatement stmtsep
5149
5150
5151 Strauss                 Expires August 15, 2000                [Page 92]
5152 \f
5153 Internet-Draft                   SMIng                     February 2000
5154
5155
5156                                  *1(referenceStatement stmtsep)
5157                                  1*(columnStatement stmtsep)
5158                              "}" optsep ";"
5159
5160    columnStatement         = columnKeyword sep lcIdentifier optsep
5161                                  "{" stmtsep
5162                                  oidStatement stmtsep
5163                                  typeStatement stmtsep
5164                                  accessStatement stmtsep
5165                                  *1(defaultStatement stmtsep)
5166                                  *1(formatStatement stmtsep)
5167                                  *1(unitsStatement stmtsep)
5168                                  *1(statusStatement stmtsep)
5169                                  descriptionStatement stmtsep
5170                                  *1(referenceStatement stmtsep)
5171                              "}" optsep ";"
5172
5173    notificationStatement   = notificationKeyword sep lcIdentifier
5174                                  optsep "{" stmtsep
5175                                  oidStatement stmtsep
5176                                  *1(objectsStatement stmtsep)
5177                                  *1(statusStatement stmtsep)
5178                                  descriptionStatement stmtsep
5179                                  *1(referenceStatement stmtsep)
5180                              "}" optsep ";"
5181
5182    groupStatement          = groupKeyword sep lcIdentifier optsep
5183                                  "{" stmtsep
5184                                  oidStatement stmtsep
5185                                  membersStatement stmtsep
5186                                  *1(statusStatement stmtsep)
5187                                  descriptionStatement stmtsep
5188                                  *1(referenceStatement stmtsep)
5189                              "}" optsep ";"
5190
5191    complianceStatement     = complianceKeyword sep lcIdentifier optsep
5192                                  "{" stmtsep
5193                                  oidStatement stmtsep
5194                                  *1(statusStatement stmtsep)
5195                                  descriptionStatement stmtsep
5196                                  *1(referenceStatement stmtsep)
5197                                  *1(mandatoryStatement stmtsep)
5198                                  *(optionalStatement stmtsep)
5199                                  *(refineStatement stmtsep)
5200                              "}" optsep ";"
5201
5202    importStatement         = importKeyword sep ucIdentifier optsep
5203                                  "(" optsep
5204                                  identifierList optsep
5205
5206
5207 Strauss                 Expires August 15, 2000                [Page 93]
5208 \f
5209 Internet-Draft                   SMIng                     February 2000
5210
5211
5212                              ")" optsep ";"
5213
5214    revisionStatement       = revisionKeyword optsep "{" stmtsep
5215                                  dateStatement stmtsep
5216                                  descriptionStatement stmtsep
5217                              "}" optsep ";"
5218
5219    identityStatement       = identityKeyword sep lcIdentifier optsep ";"
5220
5221    typedefTypeStatement    = typeKeyword sep refinedBaseType optsep ";"
5222
5223    typeStatement           = typeKeyword sep
5224                                  (refinedBaseType / refinedType)
5225                                  optsep ";"
5226
5227    writetypeStatement      = writetypeKeyword sep
5228                                  (refinedBaseType / refinedType)
5229                                  optsep ";"
5230
5231    anyIndexStatement       = indexStatement /
5232                              augmentsStatement /
5233                              reordersStatement /
5234                              sparseStatement /
5235                              expandsStatement
5236
5237    indexStatement          = indexKeyword *1(sep impliedKeyword) optsep
5238                                  "(" optsep qlcIdentifierList
5239                                  optsep ")" optsep ";"
5240
5241    augmentsStatement       = augmentsKeyword sep qlcIdentifier
5242                                  optsep ";"
5243
5244    reordersStatement       = reordersKeyword sep qlcIdentifier
5245                                  *1(sep impliedKeyword)
5246                                  optsep "(" optsep
5247                                  qlcIdentifierList optsep ")"
5248                                  optsep ";"
5249
5250    sparseStatement         = sparseKeyword sep qlcIdentifier optsep ";"
5251
5252    expandsStatement        = expandsKeyword sep qlcIdentifier
5253                                  *1(sep impliedKeyword)
5254                                  optsep "(" optsep
5255                                  qlcIdentifierList optsep ")"
5256                                  optsep ";"
5257
5258    createStatement         = createKeyword optsep ";"
5259
5260    oidStatement            = oidKeyword sep objectIdentifier optsep ";"
5261
5262
5263 Strauss                 Expires August 15, 2000                [Page 94]
5264 \f
5265 Internet-Draft                   SMIng                     February 2000
5266
5267
5268    dateStatement           = dateKeyword sep date optsep ";"
5269
5270    organizationStatement   = organizationKeyword sep text optsep ";"
5271
5272    contactStatement        = contactKeyword sep text optsep ";"
5273
5274    formatStatement         = formatKeyword sep format optsep ";"
5275
5276    unitsStatement          = unitsKeyword sep units optsep ";"
5277
5278    statusStatement         = statusKeyword sep status optsep ";"
5279
5280    accessStatement         = accessKeyword sep access optsep ";"
5281
5282    defaultStatement        = defaultKeyword sep anyValue optsep ";"
5283
5284    descriptionStatement    = descriptionKeyword sep text optsep ";"
5285
5286    referenceStatement      = referenceKeyword sep text optsep ";"
5287
5288    abnfStatement           = abnfKeyword sep text optsep ";"
5289
5290    membersStatement        = membersKeyword optsep "(" optsep
5291                                  qlcIdentifierList optsep
5292                                  ")" optsep ";"
5293
5294    objectsStatement        = objectsKeyword optsep "(" optsep
5295                                  qlcIdentifierList optsep
5296                                  ")" optsep ";"
5297
5298    mandatoryStatement      = mandatoryKeyword optsep "(" optsep
5299                                  qlcIdentifierList optsep
5300                                  ")" optsep ";"
5301
5302    optionalStatement       = optionalKeyword sep qlcIdentifier optsep
5303                                  "{" descriptionStatement stmtsep
5304                              "}" optsep ";"
5305
5306    refineStatement         = refineKeyword sep qlcIdentifier optsep "{"
5307                                  *1(typeStatement stmtsep)
5308                                  *1(writetypeStatement stmtsep)
5309                                  *1(accessStatement stmtsep)
5310                                  descriptionStatement stmtsep
5311                              "}" optsep ";"
5312
5313    ;;
5314    ;;
5315    ;;
5316
5317
5318
5319 Strauss                 Expires August 15, 2000                [Page 95]
5320 \f
5321 Internet-Draft                   SMIng                     February 2000
5322
5323
5324    refinedBaseType         = OctetStringKeyword *1(optsep numberSpec) /
5325                              ObjectIdentifierKeyword /
5326                              Integer32Keyword *1(optsep numberSpec) /
5327                              Unsigned32Keyword *1(optsep numberSpec) /
5328                              Integer64Keyword *1(optsep numberSpec) /
5329                              Unsigned64Keyword *1(optsep numberSpec) /
5330                              Float32Keyword *1(optsep floatSpec) /
5331                              Float64Keyword *1(optsep floatSpec) /
5332                              Float128Keyword *1(optsep floatSpec) /
5333                              EnumerationKeyword optsep namedNumberSpec /
5334    // TODO: inserted optsep, do also in parser grammar!
5335                              BitsKeyword optsep namedNumberSpec
5336    // TODO: inserted optsep, do also in parser grammar!
5337
5338    refinedType             = qucIdentifier *1(optsep anySpec)
5339
5340    anySpec                 = numberSpec / floatSpec
5341
5342    numberSpec              = "(" optsep numberElement
5343                                  *furtherNumberElement
5344                                  optsep ")"
5345
5346    furtherNumberElement    = optsep "|" optsep numberElement
5347
5348    numberElement           = signedNumber *1numberUpperLimit
5349
5350    numberUpperLimit        = optsep ".." optsep signedNumber
5351
5352    floatSpec               = "(" optsep floatElement
5353                                  *furtherFloatElement
5354                                  optsep ")"
5355
5356    furtherFloatElement     = optsep "|" optsep floatElement
5357
5358    floatElement            = floatValue *1floatUpperLimit
5359
5360    floatUpperLimit         = optsep ".." optsep floatValue
5361
5362    namedNumberSpec         = "(" optsep namedNumberList optsep ")"
5363
5364    namedNumberList         = namedNumberItem
5365                                  *(optsep "," optsep namedNumberItem)
5366                                  *1(optsep ",")
5367
5368    namedNumberItem         = lcIdentifier optsep "(" optsep number
5369                                  optsep ")"
5370
5371    identifierList          = identifier
5372                                  *(optsep "," optsep identifier)
5373
5374
5375 Strauss                 Expires August 15, 2000                [Page 96]
5376 \f
5377 Internet-Draft                   SMIng                     February 2000
5378
5379
5380                                  *1(optsep ",")
5381
5382    qIdentifierList         = qIdentifier
5383                                  *(optsep "," optsep qIdentifier)
5384                                  *1(optsep ",")
5385
5386    qlcIdentifierList       = qlcIdentifier
5387                                  *(optsep "," optsep qlcIdentifier)
5388                                  *1(optsep ",")
5389
5390    bitsValue               = "(" optsep bitsList optsep ")"
5391
5392    bitsList                = *1(lcIdentifier
5393                                  *(optsep "," optsep lcIdentifier))
5394                                  *1(optsep ",")
5395
5396    ;;
5397    ;; Other basic rules.
5398    ;;
5399
5400    identifier              = ucIdentifier / lcIdentifier
5401
5402    qIdentifier             = qucIdentifier / qlcIdentifier
5403
5404    ucIdentifier            = ucAlpha *63(ALPHA / DIGIT / "-")
5405
5406    qucIdentifier           = *1(ucIdentifier "::") ucIdentifier
5407
5408    lcIdentifier            = lcAlpha *63(ALPHA / DIGIT / "-")
5409
5410    qlcIdentifier           = *1(ucIdentifier "::") lcIdentifier
5411
5412    text                    = textSegment *(optsep textSegment)
5413
5414    textSegment             = DQUOTE *textAtom DQUOTE
5415
5416    textAtom                = textVChar / HTAB / SP / lineBreak
5417
5418    date                    = DQUOTE 4DIGIT "-" 2DIGIT "-" 2DIGIT
5419                                  *1(" " 2DIGIT ":" 2DIGIT)
5420                                  DQUOTE
5421                              ; always in UTC
5422
5423    format                  = textSegment
5424
5425    units                   = textSegment
5426
5427    anyValue                = bitsValue /
5428                              negativeNumber /
5429
5430
5431 Strauss                 Expires August 15, 2000                [Page 97]
5432 \f
5433 Internet-Draft                   SMIng                     February 2000
5434
5435
5436                              hexadecimalNumber /
5437                              floatValue /
5438                              text /
5439                              objectIdentifier
5440                              ; Note: `objectIdentifer' includes the
5441                              ; syntax of enumeration labels and postive
5442                              ; numbers. They are not named literally to
5443                              ; avoid reduce/reduce conflicts when
5444                              ; building LR parsers based on this
5445                              ; grammar.
5446
5447    status                  = currentKeyword /
5448                              deprecatedKeyword /
5449                              obsoleteKeyword
5450
5451    access                  = noaccessKeyword /
5452                              notifyonlyKeyword /
5453                              readonlyKeyword /
5454                              readwriteKeyword
5455
5456    objectIdentifier        = (qlcIdentifier / subid) *127("." subid)
5457
5458    subid                   = decimalNumber
5459
5460    number                  = hexadecimalNumber / decimalNumber
5461
5462    negativeNumber          = "-" decimalNumber
5463
5464    signedNumber            = number / negativeNumber
5465
5466    decimalNumber           = "0" / (nonZeroDigit *DIGIT)
5467
5468    zeroDecimalNumber       = 1*DIGIT
5469
5470    hexadecimalNumber       = "0x" 1*(HEXDIG HEXDIG)
5471
5472    floatValue              = neginfKeyword /
5473                              posinfKeyword /
5474                              snanKeyword /
5475                              qnanKeyword /
5476                              signedNumber "." zeroDecimalNumber
5477                                  *1("E" ("+"/"-") zeroDecimalNumber)
5478
5479    ;;
5480    ;; Rules to skip unknown statements
5481    ;; with arbitrary arguments and blocks.
5482    ;;
5483
5484    unknownStatement        = unknownKeyword optsep *unknownArgument
5485
5486
5487 Strauss                 Expires August 15, 2000                [Page 98]
5488 \f
5489 Internet-Draft                   SMIng                     February 2000
5490
5491
5492                                  optsep ";"
5493
5494    unknownArgument         = ("(" optsep unknownList optsep ")") /
5495                              ("{" optsep *unknownStatement optsep "}") /
5496                              qucIdentifier /
5497                              anyValue /
5498                              anySpec
5499
5500    unknownList             = namedNumberList /
5501                              qIdentifierList
5502
5503    unknownKeyword          = lcIdentifier
5504
5505    ;;
5506    ;; Keyword rules.
5507    ;;
5508    ;; Typically, keywords are represented by tokens returned from the
5509    ;; lexical analyzer.  Note, that the lexer has to be stateful to
5510    ;; distinguish keywords from identifiers depending on the context
5511    ;; position in the input stream.
5512    ;;
5513    ;; Also note, that these keyword definitions are represented in
5514    ;; cleartext for readability, while SMIng keywords are meant to be
5515    ;; case-sensitive, although ABNF makes quoted strings like these to
5516    ;; be case-insensitive.
5517    ;;
5518
5519    ;; Statement keywords.
5520
5521    moduleKeyword           = "module"
5522    importKeyword           = "import"
5523    revisionKeyword         = "revision"
5524    oidKeyword              = "oid"
5525    dateKeyword             = "date"
5526    organizationKeyword     = "organization"
5527    contactKeyword          = "contact"
5528    descriptionKeyword      = "description"
5529    referenceKeyword        = "reference"
5530    identityKeyword         = "identity"
5531    extensionKeyword        = "extension"
5532    typedefKeyword          = "typedef"
5533    typeKeyword             = "type"
5534    writetypeKeyword        = "writetype"
5535    nodeKeyword             = "node"
5536    scalarKeyword           = "scalar"
5537    tableKeyword            = "table"
5538    columnKeyword           = "column"
5539    rowKeyword              = "row"
5540    notificationKeyword     = "notification"
5541
5542
5543 Strauss                 Expires August 15, 2000                [Page 99]
5544 \f
5545 Internet-Draft                   SMIng                     February 2000
5546
5547
5548    groupKeyword            = "group"
5549    complianceKeyword       = "compliance"
5550    formatKeyword           = "format"
5551    unitsKeyword            = "units"
5552    statusKeyword           = "status"
5553    accessKeyword           = "access"
5554    defaultKeyword          = "default"
5555    impliedKeyword          = "implied"
5556    indexKeyword            = "index"
5557    augmentsKeyword         = "augments"
5558    reordersKeyword         = "reorders"
5559    sparseKeyword           = "sparse"
5560    expandsKeyword          = "expands"
5561    createKeyword           = "create"
5562    membersKeyword          = "members"
5563    objectsKeyword          = "objects"
5564    mandatoryKeyword        = "mandatory"
5565    optionalKeyword         = "optional"
5566    refineKeyword           = "refine"
5567    abnfKeyword             = "abnf"
5568
5569    ;; Base type keywords.
5570
5571    OctetStringKeyword      = "OctetString"
5572    ObjectIdentifierKeyword = "ObjectIdentifier"
5573    Integer32Keyword        = "Integer32"
5574    Unsigned32Keyword       = "Unsigned32"
5575    Integer64Keyword        = "Integer64"
5576    Unsigned64Keyword       = "Unsigned64"
5577    Float32Keyword          = "Float32"
5578    Float64Keyword          = "Float64"
5579    Float128Keyword         = "Float128"
5580    BitsKeyword             = "Bits"
5581    EnumerationKeyword      = "Enumeration"
5582
5583    ;; Status keyword.
5584
5585    currentKeyword          = "current"
5586    deprecatedKeyword       = "deprecated"
5587    obsoleteKeyword         = "obsolete"
5588
5589    ;; Access keywords.
5590
5591    noaccessKeyword         = "noaccess"
5592    notifyonlyKeyword       = "notifyonly"
5593    readonlyKeyword         = "readonly"
5594    readwriteKeyword        = "readwrite"
5595
5596    ;; Special floating point values' keywords.
5597
5598
5599 Strauss                 Expires August 15, 2000               [Page 100]
5600 \f
5601 Internet-Draft                   SMIng                     February 2000
5602
5603
5604    neginfKeyword           = "neginf"
5605    posinfKeyword           = "posinf"
5606    snanKeyword             = "snan"
5607    qnanKeyword             = "qnan"
5608
5609    ;;
5610    ;; Some low level rules.
5611    ;; These tokens are typically skipped by the lexical analyzer.
5612    ;;
5613
5614    sep                     = 1*(comment / lineBreak / WSP)
5615                              ; unconditional separator
5616
5617    optsep                  = *(comment / lineBreak / WSP)
5618
5619    stmtsep                 = *(comment /
5620                                lineBreak /
5621                                WSP /
5622                                unknownStatement)
5623
5624    comment                 = "//" *(WSP / VCHAR) lineBreak
5625
5626    lineBreak               = CRLF / LF
5627
5628    ;;
5629    ;; Encoding specific rules.
5630    ;;
5631
5632    textVChar               = %x21 / %x23-7E
5633                              ; any VCHAR except DQUOTE
5634
5635    ucAlpha                 = %x41-5A
5636
5637    lcAlpha                 = %x61-7A
5638
5639    nonZeroDigit            = %x31-39
5640
5641    ;;
5642    ;; RFC 2234 core rules.
5643    ;;
5644
5645    ALPHA          =  %x41-5A / %x61-7A
5646                           ; A-Z / a-z
5647
5648    CR             =  %x0D
5649                           ; carriage return
5650
5651    CRLF           =  CR LF
5652                           ; Internet standard newline
5653
5654
5655 Strauss                 Expires August 15, 2000               [Page 101]
5656 \f
5657 Internet-Draft                   SMIng                     February 2000
5658
5659
5660    DIGIT          =  %x30-39
5661                           ; 0-9
5662
5663    DQUOTE         =  %x22
5664                           ; " (Double Quote)
5665
5666    HEXDIG         =  DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
5667
5668    HTAB           =  %x09
5669                           ; horizontal tab
5670
5671    LF             =  %x0A
5672                           ; linefeed
5673
5674    SP             =  %x20
5675                           ; space
5676
5677    VCHAR          =  %x21-7E
5678                           ; visible (printing) characters
5679
5680    WSP            =  SP / HTAB
5681                           ; white space
5682
5683    ;;
5684    ;; EOF
5685    ;;
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711 Strauss                 Expires August 15, 2000               [Page 102]
5712 \f
5713 Internet-Draft                   SMIng                     February 2000
5714
5715
5716 Appendix B. Glossary
5717
5718    columnar object: An object in a table row that may have zero, one or
5719       more object instances. Instances are identified by using the
5720       values of `indexing objects' as `instance identifier'. 
5721
5722    extension: The SMIng `extension' statement can be used to define new
5723       statements. Extensions can express annotations to existent
5724       management information, agent capabilities known from SMIv2, or
5725       arbitrary other information. See Section 16 for details. 
5726
5727    identifier: The name of any definition, either a module, type, node,
5728       scalar object, table, row, columnar object, notification, group,
5729       compliance, a named number of an enumeration or bits type or any
5730       construct defined by an SMIng extension. Every identifier starts
5731       with an upper-case or lower-case character, followed by letters,
5732       digits and hyphens, but without consecutive or trailing hyphens.
5733       The length of an identifier MUST NOT exceed 64 characters. Note
5734       that SMIng keywords may be used as identifiers, though it's NOT
5735       RECOMMENDED. See also Section 2.1. 
5736
5737    indexing objects: A Table may contain multiple instances of single
5738       columnar objects. That is, there may be multiple rows. The
5739       table's `indexing objects' are used to unambiguously distinguish
5740       the rows of a table. A special encoding of their values
5741       represents the columns' instance-identifier, and thus identifies
5742       the row. 
5743
5744    instance-identifier: That part of an object identifier value, that
5745       is used to unambiguously identify an instance of an object. For
5746       scalar objects, the instance-identifier is `0'. For columnar
5747       objects, the instance-identifier is built from the values of the
5748       `indexing objects'. See also Section 2.4. 
5749
5750    module: A module is the container of inter-related management
5751       information, either managed objects or other definitions like
5752       type definitions or annotations. A module has to conform the
5753       SMIng grammar and semantics described by this document. A module
5754       represents a namespace in which local definitions are available
5755       and external definitions have to be imported. 
5756
5757    named number: Values of `Enumeration' types (Section 3.10) and
5758       single elements of `Bits' (Section 3.11) types are integer
5759       numbers, each associated with an identifers. Those
5760       number-identifier pairs are called `named numbers'. 
5761
5762    object: A leaf definition in the object identifier tree, that
5763       represents a class of object instances. Objects are exactly those
5764       definitions declared by the SMIng keywords `scalar' or `column'. 
5765
5766
5767 Strauss                 Expires August 15, 2000               [Page 103]
5768 \f
5769 Internet-Draft                   SMIng                     February 2000
5770
5771
5772    object identifier: Management information is organized in a tree of
5773       nodes. Each node is unambiguously identified by an `object
5774       identifier', that consists of a sequence of integer numbers
5775       (`sub-identifiers') which represent the path of nodes from the
5776       root to the addressed node in the tree. See also Section 2. 
5777
5778    row: The kind of node used to group columnar objects of a table.
5779       Some significant information on table indexing and information
5780       used for row creation and deletion is associated with a table's
5781       row definition. 
5782
5783    scalar object: An object that has zero or one object instance. 
5784
5785    sub-identifier: A single component of an object identifier. There
5786       are at most 128 sub-identifiers in an object identifier value and
5787       each sub-identifier has a maximum value of 2^32-1 (4294967295). 
5788
5789    table: The kind of node used to group management information that is
5790       organized in a sequence of rows. 
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823 Strauss                 Expires August 15, 2000               [Page 104]
5824 \f
5825 Internet-Draft                   SMIng                     February 2000
5826
5827
5828 Full Copyright Statement
5829
5830    Copyright (C) The Internet Society (2000).  All Rights Reserved.
5831
5832    This document and translations of it may be copied and furnished to
5833    others, and derivative works that comment on or otherwise explain it
5834    or assist in its implmentation may be prepared, copied, published
5835    and distributed, in whole or in part, without restriction of any
5836    kind, provided that the above copyright notice and this paragraph
5837    are included on all such copies and derivative works.  However, this
5838    document itself may not be modified in any way, such as by removing
5839    the copyright notice or references to the Internet Society or other
5840    Internet organizations, except as needed for the purpose of
5841    developing Internet standards in which case the procedures for
5842    copyrights defined in the Internet Standards process must be
5843    followed, or as required to translate it into languages other than
5844    English.
5845
5846    The limited permissions granted above are perpetual and will not be
5847    revoked by the Internet Society or its successors or assigns.
5848
5849    This document and the information contained herein is provided on an
5850    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
5851    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
5852    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
5853    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
5854    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879 Strauss                 Expires August 15, 2000               [Page 105]
5880 \f