summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc3781.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc3781.txt')
-rw-r--r--doc/rfc/rfc3781.txt2747
1 files changed, 2747 insertions, 0 deletions
diff --git a/doc/rfc/rfc3781.txt b/doc/rfc/rfc3781.txt
new file mode 100644
index 0000000..1969c82
--- /dev/null
+++ b/doc/rfc/rfc3781.txt
@@ -0,0 +1,2747 @@
+
+
+
+
+
+
+Network Working Group F. Strauss
+Request for Comments: 3781 TU Braunschweig
+Category: Experimental J. Schoenwaelder
+ International University Bremen
+ May 2004
+
+
+ Next Generation Structure of Management Information (SMIng)
+ Mappings to the Simple Network Management Protocol (SNMP)
+
+Status of this Memo
+
+ This memo defines an Experimental Protocol for the Internet
+ community. It does not specify an Internet standard of any kind.
+ Discussion and suggestions for improvement are requested.
+ Distribution of this memo is unlimited.
+
+Copyright Notice
+
+ Copyright (C) The Internet Society (2004). All Rights Reserved.
+
+Abstract
+
+ SMIng (Structure of Management Information, Next Generation)
+ (RFC3780), is a protocol-independent data definition language for
+ management information. This memo defines an SMIng language
+ extension that specifies the mapping of SMIng definitions of
+ identities, classes, and their attributes and events to dedicated
+ definitions of nodes, scalar objects, tables and columnar objects,
+ and notifications, for application to the SNMP management framework.
+
+Table of Contents
+
+ 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
+ 2. SNMP Based Internet Management . . . . . . . . . . . . . . . . 3
+ 2.1. Kinds of Nodes. . . . . . . . . . . . . . . . . . . . . 4
+ 2.2. Scalar and Columnar Object Instances. . . . . . . . . . 5
+ 2.3. Object Identifier Hierarchy . . . . . . . . . . . . . . 7
+ 3. SMIng Data Type Mappings . . . . . . . . . . . . . . . . . . . 8
+ 3.1. ASN.1 Definitions . . . . . . . . . . . . . . . . . . . 9
+ 4. The snmp Extension Statement . . . . . . . . . . . . . . . . . 10
+ 4.1. The oid Statement . . . . . . . . . . . . . . . . . . . 10
+ 4.2. The node Statement. . . . . . . . . . . . . . . . . . . 10
+ 4.2.1. The node's oid Statement . . . . . . . . . . . . 10
+ 4.2.2. The node's represents Statement. . . . . . . . . 10
+ 4.2.3. The node's status Statement. . . . . . . . . . . 11
+ 4.2.4. The node's description Statement . . . . . . . . 11
+ 4.2.5. The node's reference Statement . . . . . . . . . 11
+
+
+
+Strauss & Schoenwaelder Experimental [Page 1]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ 4.2.6. Usage Examples . . . . . . . . . . . . . . . . . 11
+ 4.3. The scalars Statement . . . . . . . . . . . . . . . . . 11
+ 4.3.1. The scalars' oid Statement . . . . . . . . . . . 12
+ 4.3.2. The scalars' object Statement . . . . . . . . . 12
+ 4.3.3. The scalars' status Statement . . . . . . . . . 13
+ 4.3.4. The scalars' description Statement . . . . . . . 14
+ 4.3.5. The scalars' reference Statement . . . . . . . . 14
+ 4.3.6. Usage Example. . . . . . . . . . . . . . . . . . 14
+ 4.4. The table Statement . . . . . . . . . . . . . . . . . . 14
+ 4.4.1. The table's oid Statement. . . . . . . . . . . . 15
+ 4.4.2. Table Indexing Statements. . . . . . . . . . . . 15
+ 4.4.3. The table's create Statement . . . . . . . . . . 17
+ 4.4.4. The table's object Statement . . . . . . . . . . 17
+ 4.4.5. The table's status Statement . . . . . . . . . . 19
+ 4.4.6. The table's description Statement . . . . . . . 19
+ 4.4.7. The table's reference Statement . . . . . . . . 19
+ 4.4.8. Usage Example . . . . . . . . . . . . . . . . . 19
+ 4.5. The notification Statement . . . . . . . . . . . . . . 20
+ 4.5.1. The notification's oid Statement . . . . . . . . 20
+ 4.5.2. The notification's signals Statement . . . . . . 20
+ 4.5.3. The notification's status Statement . . . . . . 20
+ 4.5.4. The notification's description Statement . . . . 21
+ 4.5.5. The notification's reference Statement . . . . . 21
+ 4.5.6. Usage Example. . . . . . . . . . . . . . . . . . 21
+ 4.6. The group Statement . . . . . . . . . . . . . . . . . . 21
+ 4.6.1. The group's oid Statement . . . . . . . . . . . 22
+ 4.6.2. The group's members Statement . . . . . . . . . 22
+ 4.6.3. The group's status Statement . . . . . . . . . . 22
+ 4.6.4. The group's description Statement . . . . . . . 22
+ 4.6.5. The group's reference Statement . . . . . . . . 22
+ 4.6.6. Usage Example . . . . . . . . . . . . . . . . . 22
+ 4.7. The compliance Statement. . . . . . . . . . . . . . . . 23
+ 4.7.1. The compliance's oid Statement . . . . . . . . . 23
+ 4.7.2. The compliance's status Statement . . . . . . . 23
+ 4.7.3. The compliance's description Statement . . . . . 23
+ 4.7.4. The compliance's reference Statement . . . . . . 23
+ 4.7.5. The compliance's mandatory Statement . . . . . . 24
+ 4.7.6. The compliance's optional Statement. . . . . . . 24
+ 4.7.7. The compliance's refine Statement . . . . . . . 24
+ 4.7.8. Usage Example . . . . . . . . . . . . . . . . . 26
+ 5. NMRG-SMING-SNMP-EXT . . . . . . . . . . . . . . . . . . . . . 26
+ 6. NMRG-SMING-SNMP . . . . . . . . . . . . . . . . . . . . . . . 33
+ 7. Security Considerations . . . . . . . . . . . . . . . . . . . 46
+ 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 46
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 2]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 47
+ 9.1. Normative References. . . . . . . . . . . . . . . . . . 47
+ 9.2. Informative References. . . . . . . . . . . . . . . . . 47
+ Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 48
+ Full Copyright Statement . . . . . . . . . . . . . . . . . . . . . 49
+
+1. Introduction
+
+ SMIng (Structure of Management Information, Next Generation)
+ [RFC3780] is a protocol-independent data definition language for
+ management information. This memo defines an SMIng language
+ extension that specifies the mapping of SMIng definitions of
+ identities, classes, and their attributes and events to dedicated
+ definitions of nodes, scalar objects, tables and columnar objects,
+ and notifications for application in the SNMP management framework.
+ Section 2 introduces basics of the SNMP management framework.
+ Section 3 defines how SMIng data types are mapped to the data types
+ supported by the SNMP protocol. It introduces some new ASN.1 [ASN1]
+ definitions which are used to represent new SMIng base types such as
+ floats in the SNMP protocol.
+
+ Section 4 describes the semantics of the SNMP mapping extensions for
+ SMIng. The formal SMIng specification of the extension is provided
+ in Section 5.
+
+ Section 6 contains an SMIng module which defines derived types (such
+ as RowStatus) that are specific to the SNMP mapping.
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in [RFC2119].
+
+2. SNMP-Based Internet Management
+
+ The SNMP network management framework [RFC3410] is based on the
+ concept of "managed objects". Managed objects represent real or
+ synthesized variables of systems that are to be managed. Note that
+ in spite of these terms this model is not object-oriented. For
+ naming purposes, the managed objects are organized hierarchically in
+ an "object identifier tree", where only leaf nodes may represent
+ objects.
+
+ Nodes in the object identifier tree may also identify conceptual
+ tables, rows of conceptual tables, notifications, groups of objects
+ and/or notifications, compliance statements, modules or other
+ information. Each node is identified by an unique "object
+ identifier" value which is a sequence of non-negative numbers, named
+ "sub-identifiers", where the left-most sub-identifier refers to the
+
+
+
+Strauss & Schoenwaelder Experimental [Page 3]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ node next to the root of the tree and the right-most sub-identifier
+ refers to the node that is identified by the complete object
+ identifier value. Each sub-identifier has a value between 0 and
+ 2^32-1 (4294967295).
+
+ The SMIng extensions described in this document are used to map SMIng
+ data definitions to SNMP compliant managed objects. This mapping is
+ designed to be readable to computer programs, named MIB compilers, as
+ well as to human readers.
+
+2.1. Kinds of Nodes
+
+ Each node in the object identifier tree is of a certain kind and may
+ represent management information or not:
+
+ o Simple nodes, that do not represent management information, but
+ may be used for grouping nodes in a subtree. Those nodes are
+ defined by the `node' statement. This statement can also be used
+ to map an SMIng `identity' to a node.
+
+ o Nodes representing the identity of a module to allow references to
+ a module in other objects of type `ObjectIdentifier'. Those nodes
+ are defined by the `snmp' statement,
+
+ o Scalar objects, which have exactly one object instance and no
+ child nodes. See Section 2.2 for scalar objects' instances. A
+ set of scalar objects is mapped from one or more SMIng classes
+ using the `scalars' statement. The statement block of the
+ `scalars' statement contains one `implements' statement for each
+ class. The associated statement blocks in turn contain `object'
+ statements that specify the mapping of attributes to scalar
+ objects. Scalar objects MUST not have any child node.
+
+ o Tables, which represent the root node of a collection of
+ information structured in table rows. Table nodes are defined by
+ the `table' statement. A table object identifier SHOULD not have
+ any other child node than the implicitly defined row node (see
+ below).
+
+ o Rows, which belong to a table (that is, row's object identifier
+ consists of the table's full object identifier plus a single `1'
+ sub-identifier) and represent a sequence of one or more columnar
+ objects. A row node is implicitly defined for each table node.
+
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 4]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ o Columnar objects, which belong to a row (that is, the columnar
+ objects' object identifier consists of the row's full object
+ identifier plus a single column-identifying sub-identifier) and
+ have zero or more object instances and no child nodes. They are
+ defined as follows: The classes that are implemented by a `table'
+ statement are identified by `implements' statements. The
+ statement block of each `implements' statement contains `object'
+ statements that specify the mapping of attributes to columnar
+ objects of this table. Columnar objects MUST not have any child
+ node.
+
+ o Notifications, which represent information that is sent by agents
+ within unsolicited transmissions. The `notification' statement is
+ used to map an SMIng event to a notification. A notification's
+ object identifier SHOULD not have any child node.
+
+ o Groups of objects and notifications, which may be used for
+ compliance statements. They are defined using the `group'
+ statement.
+
+ o Compliance statements which define requirements for MIB module
+ implementations. They are defined using the `compliance'
+ statement.
+
+2.2. Scalar and Columnar Object Instances
+
+ Instances of managed objects are identified by appending an
+ instance-identifier to the object's object identifier. Scalar
+ objects and columnar objects use different ways to construct the
+ instance-identifier.
+
+ Scalar objects have exactly one object instance. It is identified by
+ appending a single `0' sub-identifier to the object identifier of the
+ scalar object.
+
+ Within tables, different instances of the same columnar object are
+ identified by appending a sequence of one or more sub-identifiers to
+ the object identifier of the columnar object which consists of the
+ values of object instances that unambiguously distinguish a table
+ row. These indexing objects can be columnar objects of the same
+ and/or another table, but MUST NOT be scalar objects. Multiple
+ applications of the same object in a single table indexing
+ specification are strongly discouraged.
+
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 5]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ The base types of the indexing objects indicate how to form the
+ instance-identifier:
+
+ o integer-valued or enumeration-valued: a single sub-identifier
+ taking the integer value (this works only for non-negative
+ integers and integers of a size of up to 32 bits),
+
+ o string-valued, fixed-length strings (or variable-length with
+ compact encoding): `n' sub-identifiers, where `n' is the length of
+ the string (each octet of the string is encoded in a separate
+ sub-identifier),
+
+ o string-valued, variable-length strings or bits-valued: `n+1' sub-
+ identifiers, where `n' is the length of the string or bits
+ encoding (the first sub-identifier is `n' itself, following this,
+ each octet of the string or bits is encoded in a separate sub-
+ identifier),
+
+ o object identifier-valued (with compact encoding): `n' sub-
+ identifiers, where `n' is the number of sub-identifiers in the
+ value (each sub-identifier of the value is copied into a separate
+ sub-identifier),
+
+ o object identifier-valued: `n+1' sub-identifiers, where `n' is the
+ number of sub-identifiers in the value (the first sub-identifier
+ is `n' itself, following this, each sub-identifier in the value is
+ copied),
+
+ Note that compact encoding can only be applied to an object having a
+ variable-length syntax (e.g., variable-length strings, bits objects
+ or object identifier-valued objects). Further, compact encoding can
+ only be associated with the last object in a list of indexing
+ objects. Finally, compact encoding MUST NOT be used on a variable-
+ length string object if that string might have a value of zero-
+ length.
+
+ Instances identified by use of integer-valued or enumeration-valued
+ objects are RECOMMENDED to be numbered starting from one (i.e., not
+ from zero). Integer objects that allow negative values, Unsigned64
+ objects, Integer64 objects and floating point objects MUST NOT be
+ used for table indexing.
+
+ Objects which are both specified for indexing in a row and also
+ columnar objects of the same row are termed auxiliary objects.
+ Auxiliary objects SHOULD be non-accessible, except in the following
+ circumstances:
+
+ o within a module originally written to conform to SMIv1, or
+
+
+
+Strauss & Schoenwaelder Experimental [Page 6]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ o a row must contain at least one columnar object which is not an
+ auxiliary object. In the event that all of a row's columnar
+ objects are also specified to be indexing objects then one of them
+ MUST be accessible.
+
+2.3. Object Identifier Hierarchy
+
+ The layers of the object identifier tree near the root are well
+ defined and organized by standardization bodies. The first level
+ next to the root has three nodes:
+
+ 0: ccitt
+
+ 1: iso
+
+ 2: joint-iso-ccitt
+
+ Note that the renaming of the Commite Consultatif International de
+ Telegraphique et Telephonique (CCITT) to International
+ Telecommunications Union (ITU) had no consequence on the names used
+ in the object identifier tree.
+
+ The root of the subtree administered by the Internet Assigned Numbers
+ Authority (IANA) for the Internet is `1.3.6.1' which is assigned with
+ the identifier `internet'. That is, the Internet subtree of object
+ identifiers starts with the prefix `1.3.6.1.'.
+
+ Several branches underneath this subtree are used for network
+ management:
+
+ The `mgmt' (internet.2) subtree is used to identify "standard"
+ definitions. An information module produced by an IETF working group
+ becomes a "standard" information module when the document is first
+ approved by the IESG and enters the Internet standards track.
+
+ The `experimental' (internet.3) subtree is used to identify
+ experimental definitions being designed by working groups of the IETF
+ or IRTF. If an information module produced by a working group
+ becomes a "standard" module, then at the very beginning of its entry
+ onto the Internet standards track, the definitions are moved under
+ the mgmt subtree.
+
+ The `private' (internet.4) subtree is used to identify definitions
+ defined unilaterally. The `enterprises' (private.1) subtree beneath
+ private is used, among other things, to permit providers of
+ networking subsystems to register information modules of their
+ products.
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 7]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ These and some other nodes are defined in the SMIng module NMRG-
+ SMING-SNMP-EXT (Section 5).
+
+3. SMIng Data Type Mappings
+
+ SMIng [RFC3780] supports the following set of base types:
+ OctetString, Pointer, Integer32, Integer64, Unsigned32, Unsigned64,
+ Float32, Float64, Float128, Enumeration, Bits, and ObjectIdentifier.
+
+ The SMIng core module NMRG-SMING ([RFC3780], Appendix A) defines
+ additional derived types, among them Counter32 (derived from
+ Unsigned32), Counter64 (derived from Unsigned64), TimeTicks32 and
+ TimeTicks64 (derived from Unsigned32 and Unsigned64), IpAddress
+ (derived from OctetString), and Opaque (derived from OctetString).
+
+ The version 2 of the protocol operations for SNMP document [RFC3416]
+ defines the following 9 data types which are distinguished by the
+ protocol: INTEGER, OCTET STRING, OBJECT IDENTIFIER, IpAddress,
+ Counter32, TimeTicks, Opaque, Counter64, and Unsigned32.
+
+ The SMIng base types and their derived types are mapped to SNMP data
+ types according to the following table:
+
+ SMIng Data Type SNMP Data Type Comment
+ --------------- ------------------- -------
+ OctetString OCTET STRING (1)
+ Pointer OBJECT IDENTIFIER
+ Integer32 INTEGER
+ Integer64 Opaque (Integer64) (2)
+ Unsigned32 Unsigned32 (3)
+ Unsigned64 Opaque (Unsigned64) (2) (4)
+ Float32 Opaque (Float32) (2)
+ Float64 Opaque (Float64) (2)
+ Float128 Opaque (Float128) (2)
+ Enumeration INTEGER
+ Bits OCTET STRING
+ ObjectIdentifier OBJECT IDENTIFIER
+
+ Counter32 Counter32
+ Counter64 Counter64
+ TimeTicks32 TimeTicks
+ TimeTicks64 Opaque (Unsigned64) (2)
+ IpAddress IpAddress
+ Opaque Opaque
+
+ (1) This mapping includes all types derived from the OctetString
+ type except those types derived from the IpAddress and Opaque
+ SMIng types defined in the module NMRG-SMING.
+
+
+
+Strauss & Schoenwaelder Experimental [Page 8]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ (2) This type is encoded according to the ASN.1 type with the same
+ name defined in Section 3.1. The resulting BER encoded value
+ is then wrapped in an Opaque value.
+
+ (3) This mapping includes all types derived from the Unsigned32
+ type except those types derived from the Counter32 and
+ TimeTicks32 SMIng types defined in the module NMRG-SMING.
+
+ (4) This mapping includes all types derived from the Unsigned64
+ type except those types derived from the Counter64 SMIng type
+ defined in the module NMRG-SMING.
+
+3.1. ASN.1 Definitions
+
+ The ASN.1 [ASN1] type definitions below introduce data types which
+ are used to map the new SMIng base types into the set of ASN.1 types
+ supported by the second version of SNMP protocol operations
+ [RFC3416].
+
+ NMRG-SMING-SNMP-MAPPING DEFINITIONS ::= BEGIN
+
+ Integer64 ::=
+ [APPLICATION 10]
+ IMPLICIT INTEGER (-9223372036854775808..9223372036854775807)
+
+ Unsigned64
+ [APPLICATION 11]
+ IMPLICIT INTEGER (0..18446744073709551615)
+
+ Float32
+ [APPLICATION 12]
+ IMPLICIT OCTET STRING (SIZE (4))
+
+ Float64
+ [APPLICATION 13]
+ IMPLICIT OCTET STRING (SIZE (8))
+
+ Float128
+ [APPLICATION 14]
+ IMPLICIT OCTET STRING (SIZE (16))
+
+ END
+
+
+ The definitions of Integer64 and Unsigned64 are consistent with the
+ same definitions in the SPPI [RFC3159]. The floating point types
+ Float32, Float64 and Float128 support single, double and quadruple
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 9]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ IEEE floating point values. The encoding of the values follows the
+ "IEEE Standard for Binary Floating-Point Arithmetic" as defined in
+ ANSI/IEEE Standard 754-1985 [IEEE754].
+
+4. The snmp Extension Statement
+
+ The `snmp' statement is the main statement of the SNMP mapping
+ specification. It gets one or two arguments: an optional lower-case
+ identifier that specifies a node that represents the module's
+ identity, and a mandatory statement block that contains all details
+ of the SNMP mapping. All information of an SNMP mapping are mapped
+ to an SNMP conformant module of the same name as the containing SMIng
+ module. A single SMIng module must not contain more than one `snmp'
+ statement.
+
+4.1. The oid Statement
+
+ The snmp's `oid' statement, which must be present, if the snmp
+ statement contains a module identifier and must be absent otherwise,
+ gets one argument which specifies the object identifier value that is
+ assigned to this module's identity node.
+
+4.2. The node Statement
+
+ The `node' statement is used to name and describe a node in the
+ object identifier tree, without associating any class or attribute
+ information with this node. This may be useful to group definitions
+ in a subtree of related management information, or to uniquely define
+ an SMIng `identity' to be referenced in attributes of type Pointer.
+ The `node' statement gets two arguments: a lower-case node identifier
+ and a statement block that holds detailed node information in an
+ obligatory order.
+
+ See the `nodeStatement' rule of the grammar (Section 5) for the
+ formal syntax of the `node' statement.
+
+4.2.1. The node's oid Statement
+
+ The node's `oid' statement, which must be present, gets one argument
+ which specifies the object identifier value that is assigned to this
+ node.
+
+4.2.2. The node's represents Statement
+
+ The node's `represents' statement, which need not be present, makes
+ this node represent an SMIng identity, so that objects of type
+ Pointer can reference that identity. The statement gets one argument
+ which specifies the identity name.
+
+
+
+Strauss & Schoenwaelder Experimental [Page 10]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+4.2.3 The node's status Statement
+
+ The node's `status' statement, which must be present, gets one
+ argument which is used to specify whether this node definition is
+ current or historic. The value `current' means that the definition
+ is current and valid. The value `obsolete' means the definition is
+ obsolete and should not be implemented and/or can be removed if
+ previously implemented. While the value `deprecated' also indicates
+ an obsolete definition, it permits new/continued implementation in
+ order to foster interoperability with older/existing implementations.
+
+4.2.4. The node's description Statement
+
+ The node's `description' statement, which need not be present, gets
+ one argument which is used to specify a high-level textual
+ description of this node.
+
+ It is RECOMMENDED to include all semantics and purposes of this node.
+
+4.2.5. The node's reference Statement
+
+ The node's `reference' statement, which need not be present, gets one
+ argument which is used to specify a textual cross-reference to some
+ other document, either another module which defines related
+ definitions, or some other document which provides additional
+ information relevant to this node.
+
+4.2.6. Usage Examples
+
+ node iso { oid 1; status current; };
+ node org { oid iso.3; status current; };
+ node dod { oid org.6; status current; };
+ node internet { oid dod.1; status current; };
+
+ node zeroDotZero {
+ oid 0.0;
+ represents NMRG-SMING::null;
+ status current;
+ description "A null value used for pointers.";
+ };
+
+4.3. The scalars Statement
+
+ The `scalars' statement is used to define the mapping of one or more
+ classes to a group of SNMP scalar managed objects organized under a
+ common parent node. The `scalars' statement gets two arguments: a
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 11]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ lower-case scalar group identifier and a statement block that holds
+ detailed mapping information of this scalar group in an obligatory
+ order.
+
+ See the `scalarsStatement' rule of the grammar (Section 5) for the
+ formal syntax of the `scalars' statement.
+
+
+4.3.1. The scalars' oid Statement
+
+ The scalars' `oid' statement, which must be present, gets one
+ argument which specifies the object identifier value that is assigned
+ to the common parent node of this scalar group.
+
+4.3.2. The scalars' object Statement
+
+ The scalars' `object' statement, which must be present at least once,
+ makes this scalar group contain a given scalar object. It gets two
+ arguments: the name of the scalar object to be defined and a
+ statement block that holds additional detailed information in an
+ obligatory order.
+
+4.3.2.1. The object's implements Statement
+
+ The `implements' statement, which must be present, is used to specify
+ a single leaf attribute of a class that is implemented by this scalar
+ object. The type of this attribute must be a simple type, i.e., not
+ a class.
+
+4.3.2.2. The object's subid Statement
+
+ The `subid' statement, which need not be present, is used to specify
+ the sub-identifier that identifies the scalar object within this
+ scalar group, i.e., the object identifier of the scalar object is the
+ concatenation of the values of this scalar group's oid statement and
+ of this subid statement.
+
+ If this statement is omitted, the sub-identifier is the one of the
+ previous object statement within this scalar group plus 1. If the
+ containing object statement is the first one within the containing
+ scalar group and the subid statement is omitted, the sub-identifier
+ is 1.
+
+4.3.2.3. The object's status Statement
+
+ The object's `status' statement, which need not be present, gets one
+ argument which is used to specify whether this scalar object
+ definition is current or historic. The value `current' means that
+
+
+
+Strauss & Schoenwaelder Experimental [Page 12]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ the definition is current and valid. The value `obsolete' means the
+ definition is obsolete and should not be implemented and/or can be
+ removed if previously implemented. While the value `deprecated' also
+ indicates an obsolete definition, it permits new/continued
+ implementation in order to foster interoperability with
+ older/existing implementations.
+
+ Scalar objects SHOULD NOT be defined as `current' if the implemented
+ attribute definition is `deprecated' or `obsolete'. Similarly, they
+ SHOULD NOT be defined as `deprecated' if the implemented attribute is
+ `obsolete'. Nevertheless, subsequent revisions of used class
+ definitions cannot be avoided, but SHOULD be taken into account in
+ subsequent revisions of the local module.
+
+ Note that it is RECOMMENDED to omit the status statement which means
+ that the status is inherited from the containing scalars statement.
+ However, if the status of a scalar object varies from the containing
+ scalar group, it has to be expressed explicitly, e.g., if the
+ implemented attribute has been deprecated or obsoleted.
+
+4.3.2.4. The object's description Statement
+
+ The object's `description' statement, which need not be present, gets
+ one argument which is used to specify a high-level textual
+ description of this scalar object.
+
+ Note that in contrast to other definitions this description statement
+ is not mandatory and it is RECOMMENDED to omit it, if the object is
+ fully described by the description of the implemented attribute.
+
+4.3.2.5. The object's reference Statement
+
+ The object's `reference' statement, which need not be present, gets
+ one argument which is used to specify a textual cross-reference to
+ some other document, either another module which defines related
+ definitions, or some other document which provides additional
+ information relevant to this scalar object.
+
+ It is RECOMMENDED to omit this statement, if the object's references
+ are fully described by the implemented attribute.
+
+4.3.3. The scalars' status Statement
+
+ The scalars' `status' statement, which must be present, gets one
+ argument which is used to specify whether this scalar group
+ definition is current or historic. The value `current' means that
+ the definition is current and valid. The value `obsolete' means the
+ definition is obsolete and should not be implemented and/or can be
+
+
+
+Strauss & Schoenwaelder Experimental [Page 13]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ removed if previously implemented. While the value `deprecated' also
+ indicates an obsolete definition, it permits new/continued
+ implementation in order to foster interoperability with
+ older/existing implementations.
+
+4.3.4. The scalars' description Statement
+
+ The scalars' `description' statement, which must be present, gets one
+ argument which is used to specify a high-level textual description of
+ this scalar group.
+
+ It is RECOMMENDED to include all semantic definitions necessary for
+ the implementation of this scalar group.
+
+4.3.5. The scalars' reference Statement
+
+ The scalars' `reference' statement, which need not be present, gets
+ one argument which is used to specify a textual cross-reference to
+ some other document, either another module which defines related
+ definitions, or some other document which provides additional
+ information relevant to this scalars statement.
+
+4.3.6. Usage Example
+
+ scalars ip {
+ oid mib-2.4;
+ object ipForwarding { implements Ip.forwarding; };
+ object ipDefaultTTL { implements Ip.defaultTTL; };
+ // ...
+ status current;
+ description
+ "This scalar group implements the Ip class.";
+ };
+
+4.4. The table Statement
+
+ The `table' statement is used to define the mapping of one or more
+ classes to a single SNMP table of columnar managed objects. The
+ `table' statement gets two arguments: a lower-case table identifier
+ and a statement block that holds detailed mapping information of this
+ table in an obligatory order.
+
+ See the `tableStatement' rule of the grammar (Section 5) for the
+ formal syntax of the `table' statement.
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 14]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+4.4.1. The table's oid Statement
+
+ The table's `oid' statement, which must be present, gets one argument
+ which specifies the object identifier value that is assigned to this
+ table's node.
+
+4.4.2. Table Indexing Statements
+
+ SNMP table mappings offers five methods to supply table indexing
+ information: ordinary tables, table augmentations, sparse table
+ augmentations, table expansions, and reordered tables use different
+ statements to denote their indexing information. Each table
+ definition must contain exactly one of the following indexing
+ statements.
+
+4.4.2.1. The table's index Statement for Table Indexing
+
+ The table's `index' statement, which is used to supply table indexing
+ information of base tables, gets one argument that specifies a
+ comma-separated list of objects, that are used for table indexing,
+ enclosed in parenthesis.
+
+ The elements of the `unique' statement of the implemented class(es)
+ and their order should be regarded as a hint for the index elements
+ of the table.
+
+ In case of modules that should be compatible on the SNMP protocol
+ level to SMIv2 versions of the module, an optional `implied' keyword
+ may be added in front of the list to indicate a compact encoding of
+ the last object in the list. See Section 2.2 for details.
+
+4.4.2.2. The table's augments Statement for Table Indexing
+
+ The table's `augments' statement, which is used to supply table
+ indexing information of tables that augment a base table, gets one
+ argument that specifies the identifier of the table to be augmented.
+ Note that a table augmentation cannot itself be augmented. Anyhow, a
+ base table may be augmented by multiple table augmentations.
+
+ A table augmentation makes instances of subordinate columnar objects
+ identified according to the index specification of the base table
+ corresponding to the table named in the `augments' statement.
+ Further, instances of subordinate columnar objects of a table
+ augmentation exist according to the same semantics as instances of
+ subordinate columnar objects of the base table being augmented. As
+ such, note that creation of a base table row implies the
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 15]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ correspondent creation of any table row augmentations. Table
+ augmentations MUST NOT be used in table row creation and deletion
+ operations.
+
+4.4.2.3. The table's extends Statement for Table Indexing
+
+ The table's `extends' statement, which is used to supply table
+ indexing information of tables that sparsely augment a base table,
+ gets one argument that specifies the identifier of the table to be
+ sparsely augmented. Note that a sparse table augmentation cannot
+ itself be augmented. Anyhow, a base table may be augmented by
+ multiple table augmentations, sparsely or not.
+
+ A sparse table augmentation makes instances of subordinate columnar
+ objects identified, if present, according to the index specification
+ of the base table corresponding to the table named in the `extends'
+ statement. Further, instances of subordinate columnar objects of a
+ sparse table augmentation exist according to the semantics as
+ instances of subordinate columnar objects of the base table and the
+ (non-formal) rules that confine the sparse relationship. As such,
+ note that creation of a sparse table row augmentation may be implied
+ by the creation of a base table row as well as done by an explicit
+ creation. However, if a base table row gets deleted, any dependent
+ sparse table row augmentations get also deleted implicitly.
+
+4.4.2.4. The table's reorders Statement for Table Indexing
+
+ The table's `reorders' statement is used to supply table indexing
+ information of tables, that contain exactly the same index objects of
+ a base table but in a different order. It gets at least two
+ arguments. The first one specifies the identifier of the base table.
+ The second one specifies a comma-separated list of exactly those
+ object identifiers of the base table's `index' statement, but in the
+ order to be used in this table. Note that a reordered table cannot
+ itself be reordered. Anyhow, a base table may be used for multiple
+ reordered tables.
+
+ Under some circumstances, an optional `implied' keyword may be added
+ in front of the list to indicate a compact encoding of the last
+ object in the list. See Section 2.2 for details.
+
+ Instances of subordinate columnar objects of a reordered table exist
+ according to the same semantics as instances of subordinate columnar
+ objects of the base table. As such, note that creation of a base
+ table row implies the correspondent creation of any related reordered
+ table row. Reordered tables MUST NOT be used in table row creation
+ and deletion operations.
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 16]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+4.4.2.5. The table's expands Statement for Table Indexing
+
+ The table's `expands' statement is used to supply table indexing
+ information of table expansions. Table expansions use exactly the
+ same index objects of another table together with additional indexing
+ objects. Thus, the `expands' statement gets at least two arguments.
+ The first one specifies the identifier of the base table. The second
+ one specifies a comma-separated list of the additional object
+ identifiers used for indexing. Note that an expanded table may
+ itself be expanded, and base tables may be used for multiple table
+ expansions.
+
+ Under some circumstances, an optional `implied' keyword may be added
+ in front of the list to indicate a compact encoding of the last
+ object in the list. See Section 2.2 for details.
+
+4.4.3. The table's create Statement
+
+ The table's `create' statement, which need not be present, gets no
+ argument. If the `create' statement is present, table row creation
+ (and deletion) is possible.
+
+4.4.4. The table's object Statement
+
+ The table's `object' statement, which must be present at least once,
+ makes this table contain a given columnar object. It gets two
+ arguments: the name of the columnar object to be defined and a
+ statement block that holds additional detailed information in an
+ obligatory order.
+
+4.4.4.1. The object's implements Statement
+
+ The `implements' statement, which must be present, is used to specify
+ a single leaf attribute of a class that is implemented by this
+ columnar object. The type of this attribute must be a simple type,
+ i.e., not a class.
+
+4.4.4.2. The object's subid Statement
+
+ The `subid' statement, which need not be present, is used to specify
+ the sub-identifier that identifies the columnar object within this
+ table, i.e., the object identifier of the columnar object is the
+ concatenation of the values of this table's oid statement and of this
+ subid statement.
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 17]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ If this statement is omitted, the sub-identifier is the one of the
+ previous object statement within this table plus 1. If the
+ containing object statement is the first one within the containing
+ table and the subid statement is omitted, the sub-identifier is 1.
+
+4.4.4.3. The object's status Statement
+
+ The object's `status' statement, which need not be present, gets one
+ argument which is used to specify whether this columnar object
+ definition is current or historic. The value `current' means that
+ the definition is current and valid. The value `obsolete' means the
+ definition is obsolete and should not be implemented and/or can be
+ removed if previously implemented. While the value `deprecated' also
+ indicates an obsolete definition, it permits new/continued
+ implementation in order to foster interoperability with
+ older/existing implementations.
+
+ Columnar objects SHOULD NOT be defined as `current' if the
+ implemented attribute definition is `deprecated' or `obsolete'.
+ Similarly, they SHOULD NOT be defined as `deprecated' if the
+ implemented attribute is `obsolete'. Nevertheless, subsequent
+ revisions of used class definitions cannot be avoided, but SHOULD be
+ taken into account in subsequent revisions of the local module.
+
+ Note that it is RECOMMENDED to omit the status statement which means
+ that the status is inherited from the containing table statement.
+ However, if the status of a columnar object varies from the
+ containing table, it has to be expressed explicitly, e.g., if the
+ implemented attribute has been deprecated or obsoleted.
+
+4.4.4.4. The object's description Statement
+
+ The object's `description' statement, which need not be present, gets
+ one argument which is used to specify a high-level textual
+ description of this columnar object.
+
+ Note that in contrast to other definitions this description statement
+ is not mandatory and it is RECOMMENDED to omit it, if the object is
+ fully described by the description of the implemented attribute.
+
+4.4.4.5. The object's reference Statement
+
+ The object's `reference' statement, which need not be present, gets
+ one argument which is used to specify a textual cross-reference to
+ some other document, either another module which defines related
+ definitions, or some other document which provides additional
+ information relevant to this columnar object.
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 18]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ It is RECOMMENDED to omit this statement, if the object's references
+ are fully described by the implemented attribute.
+
+4.4.5. The table's status Statement
+
+ The table's `status' statement, which must be present, gets one
+ argument which is used to specify whether this table definition is
+ current or historic. The value `current' means that the definition
+ is current and valid. The value `obsolete' means the definition is
+ obsolete and should not be implemented and/or can be removed if
+ previously implemented. While the value `deprecated' also indicates
+ an obsolete definition, it permits new/continued implementation in
+ order to foster interoperability with older/existing implementations.
+
+4.4.6. The table's description Statement
+
+ The table's `description' statement, which must be present, gets one
+ argument which is used to specify a high-level textual description of
+ this table.
+
+ It is RECOMMENDED to include all semantic definitions necessary for
+ the implementation of this table.
+
+4.4.7. The table's reference Statement
+
+ The table's `reference' statement, which need not be present, gets
+ one argument which is used to specify a textual cross-reference to
+ some other document, either another module which defines related
+ definitions, or some other document which provides additional
+ information relevant to this table statement.
+
+4.4.8. Usage Example
+
+ table ifTable {
+ oid interfaces.2;
+ index (ifIndex);
+ object ifIndex { implements Interface.index; };
+ object ifDescr { implements Interface.description; };
+ // ...
+ status current;
+ description
+ "This table implements the Interface class.";
+ };
+
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 19]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+4.5. The notification Statement
+
+ The `notification' statement is used to map events defined within
+ classes to SNMP notifications. The `notification' statement gets two
+ arguments: a lower-case notification identifier and a statement block
+ that holds detailed notification information in an obligatory order.
+
+ See the `notificationStatement' rule of the grammar (Section 5) for
+ the formal syntax of the `notification' statement.
+
+4.5.1. The notification's oid Statement
+
+ The notification's `oid' statement, which must be present, gets one
+ argument which specifies the object identifier value that is assigned
+ to this notification.
+
+4.5.2. The notification's signals Statement
+
+ The notification's `signals' statement, which must be present,
+ denotes the event that is signaled by this notification. The
+ statement gets two arguments: the event to be signaled (in the
+ qualified form `Class.event') and a statement block that holds
+ detailed information on the objects transmitted with this
+ notification in an obligatory order.
+
+4.5.2.1. The signals' object Statement
+
+ The signals' `object' statement, which can be present zero, one or
+ multiple times, makes a single instance of a class attribute be
+ contained in this notification. It gets one argument: the specific
+ class attribute. The namespace of attributes not specified by
+ qualified names is the namespace of the event's class specified in
+ the `signals' statement.
+
+4.5.3. The notification's status Statement
+
+ The notification's `status' statement, which must be present, gets
+ one argument which is used to specify whether this notification
+ definition is current or historic. The value `current' means that
+ the definition is current and valid. The value `obsolete' means the
+ definition is obsolete and should not be implemented and/or can be
+ removed if previously implemented. While the value `deprecated' also
+ indicates an obsolete definition, it permits new/continued
+ implementation in order to foster interoperability with
+ older/existing implementations.
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 20]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+4.5.4. The notification's description Statement
+
+ The notification's `description' statement, which need not be
+ present, gets one argument which is used to specify a high-level
+ textual description of this notification.
+
+ It is RECOMMENDED to include all semantics and purposes of this
+ notification.
+
+4.5.5. The notification's reference Statement
+
+ The notification's `reference' statement, which need not be present,
+ gets one argument which is used to specify a textual cross-reference
+ to some other document, either another module which defines related
+ definitions, or some other document which provides additional
+ information relevant to this notification statement.
+
+4.5.6. Usage Example
+
+ notification linkDown {
+ oid snmpTraps.3;
+ signals Interface.linkDown {
+ object ifIndex;
+ object ifAdminStatus;
+ object ifOperStatus;
+ };
+ status current;
+ description
+ "This notification signals the linkDown event
+ of the Interface class.";
+ };
+
+4.6. The group Statement
+
+ The `group' statement is used to define a group of arbitrary nodes in
+ the object identifier tree. It gets two arguments: a lower-case
+ group identifier and a statement block that holds detailed group
+ information in an obligatory order.
+
+ Note that the primary application of groups are compliance
+ statements, although they might be referred in other formal or
+ informal documents.
+
+ See the `groupStatement' rule of the grammar (Section 5) for the
+ formal syntax of the `group' statement.
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 21]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+4.6.1. The group's oid Statement
+
+ The group's `oid' statement, which must be present, gets one argument
+ which specifies the object identifier value that is assigned to this
+ group.
+
+4.6.2. The group's members Statement
+
+ The group's `members' statement, which must be present, gets one
+ argument which specifies the list of nodes by their identifiers to be
+ contained in this group. The list of nodes has to be comma-separated
+ and enclosed in parenthesis.
+
+4.6.3. The group's status Statement
+
+ The group's `status' statement, which must be present, gets one
+ argument which is used to specify whether this group definition is
+ current or historic. The value `current' means that the definition
+ is current and valid. The value `obsolete' means the definition is
+ obsolete and the group should no longer be used. While the value
+ `deprecated' also indicates an obsolete definition, it permits
+ new/continued use of this group.
+
+4.6.4. The group's description Statement
+
+ The group's `description' statement, which must be present, gets one
+ argument which is used to specify a high-level textual description of
+ this group. It is RECOMMENDED to include any relation to other
+ groups.
+
+4.6.5. The group's reference Statement
+
+ The group's `reference' statement, which need not be present, gets
+ one argument which is used to specify a textual cross-reference to
+ some other document, either another module which defines related
+ groups, or some other document which provides additional information
+ relevant to this group.
+
+4.6.6. Usage Example
+
+ The snmpGroup, originally defined in [RFC3418], may be described as
+ follows:
+
+ group snmpGroup {
+ oid snmpMIBGroups.8;
+ objects (snmpInPkts, snmpInBadVersions,
+ snmpInASNParseErrs,
+ snmpSilentDrops, snmpProxyDrops,
+
+
+
+Strauss & Schoenwaelder Experimental [Page 22]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ snmpEnableAuthenTraps);
+ status current;
+ description
+ "A collection of objects providing basic
+ instrumentation and control of an agent.";
+ };
+
+4.7. The compliance Statement
+
+ The `compliance' statement is used to define a set of conformance
+ requirements, named a `compliance statement'. It gets two arguments:
+ a lower-case compliance identifier and a statement block that holds
+ detailed compliance information in an obligatory order.
+
+ See the `complianceStatement' rule of the grammar (Section 5) for the
+ formal syntax of the `compliance' statement.
+
+4.7.1. The compliance's oid Statement
+
+ The compliance's `oid' statement, which must be present, gets one
+ argument which specifies the object identifier value that is assigned
+ to this compliance statement.
+
+4.7.2. The compliance's status Statement
+
+ The compliance's `status' statement, which must be present, gets one
+ argument which is used to specify whether this compliance statement
+ is current or historic. The value `current' means that the
+ definition is current and valid. The value `obsolete' means the
+ definition is obsolete and no longer specifies a valid definition of
+ conformance. While the value `deprecated' also indicates an obsolete
+ definition, it permits new/continued use of the compliance
+ specification.
+
+4.7.3. The compliance's description Statement
+
+ The compliance's `description' statement, which must be present, gets
+ one argument which is used to specify a high-level textual
+ description of this compliance statement.
+
+4.7.4. The compliance's reference Statement
+
+ The compliance's `reference' statement, which need not be present,
+ gets one argument which is used to specify a textual cross-reference
+ to some other document, either another module which defines related
+ compliance statements, or some other document which provides
+ additional information relevant to this compliance statement.
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 23]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+4.7.5. The compliance's mandatory Statement
+
+ The compliance's `mandatory' statement, which need not be present,
+ gets one argument which is used to specify a comma-separated list of
+ one or more groups (Section 4.6) of objects and/or notifications
+ enclosed in parenthesis. These groups are unconditionally mandatory
+ for implementation.
+
+ If an agent claims compliance to a MIB module then it must implement
+ each and every object and notification within each group listed in
+ the `mandatory' statement(s) of the compliance statement(s) of that
+ module.
+
+4.7.6. The compliance's optional Statement
+
+ The compliance's `optional' statement, which need not be present, is
+ repeatedly used to name each group which is conditionally mandatory
+ for compliance to the compliance statement. It can also be used to
+ name unconditionally optional groups. A group named in an `optional'
+ statement MUST be absent from the correspondent `mandatory'
+ statement. The `optional' statement gets two arguments: a lower-case
+ group identifier and a statement block that holds detailed compliance
+ information on that group.
+
+ Conditionally mandatory groups include those groups which are
+ mandatory only if a particular protocol is implemented, or only if
+ another group is implemented. The `description' statement specifies
+ the conditions under which the group is conditionally mandatory.
+
+ A group which is named in neither a `mandatory' statement nor an
+ `optional' statement, is unconditionally optional for compliance to
+ the module.
+
+ See the `optionalStatement' rule of the grammar (Section 5) for the
+ formal syntax of the `optional' statement.
+
+4.7.6.1. The optional's description Statement
+
+ The optional's `description' statement, which must be present, gets
+ one argument which is used to specify a high-level textual
+ description of the conditions under which this group is conditionally
+ mandatory or unconditionally optional.
+
+4.7.7. The compliance's refine Statement
+
+ The compliance's `refine' statement, which need not be present, is
+ repeatedly used to specify each object for which compliance has a
+ refined requirement with respect to the module definition. The
+
+
+
+Strauss & Schoenwaelder Experimental [Page 24]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ object must be present in one of the conformance groups named in the
+ correspondent `mandatory' or `optional' statements. The `refine'
+ statement gets two arguments: a lower-case identifier of a scalar or
+ columnar object and a statement block that holds detailed refinement
+ information on that object.
+
+ See the `refineStatement' rule of the grammar (Section 5) for the
+ formal syntax of the `refine' statement.
+
+4.7.7.1. The refine's type Statement
+
+ The refine's `type' statement, which need not be present, gets one
+ argument that is used to provide a refined type for the correspondent
+ object. Type restrictions may be applied by appending subtyping
+ information according to the rules of the base type. See [RFC3780]
+ for SMIng base types and their type restrictions. In case of
+ enumeration or bitset types the order of named numbers is not
+ significant.
+
+ Note that if a `type' and a `writetype' statement are both present
+ then this type only applies when instances of the correspondent
+ object are read.
+
+4.7.7.2. The refine's writetype Statement
+
+ The refine's `writetype' statement, which need not be present, gets
+ one argument that is used to provide a refined type for the
+ correspondent object, only when instances of that object are written.
+ Type restrictions may be applied by appending subtyping information
+ according to the rules of the base type. See [RFC3780] for SMIng
+ base types and their type restrictions. In case of enumeration or
+ bitset types the order of named numbers is not significant.
+
+4.7.7.3. The refine's access Statement
+
+ The refine's `access' statement, which need not be present, gets one
+ argument that is used to specify the minimal level of access that the
+ correspondent object must implement in the sense of its original
+ `access' statement. Hence, the refine's `access' statement MUST NOT
+ specify a greater level of access than is specified in the
+ correspondent object definition.
+
+ An implementation is compliant if the level of access it provides is
+ greater or equal to the minimal level in the refine's `access'
+ statement and less or equal to the maximal level in the object's
+ `access' statement.
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 25]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+4.7.7.4. The refine's description Statement
+
+ The refine's `description' statement, which must be present, gets one
+ argument which is used to specify a high-level textual description of
+ the refined compliance requirement.
+
+4.7.8. Usage Example
+
+ The compliance statement contained in the SNMPv2-MIB [RFC3418],
+ converted to SMIng:
+
+ compliance snmpBasicComplianceRev2 {
+ oid snmpMIBCompliances.3;
+ status current;
+ description
+ "The compliance statement for SNMP entities which
+ implement this MIB module.";
+
+ mandatory (snmpGroup, snmpSetGroup, systemGroup,
+ snmpBasicNotificationsGroup);
+
+ optional snmpCommunityGroup {
+ description
+ "This group is mandatory for SNMP entities which
+ support community-based authentication.";
+ };
+ optional snmpWarmStartNotificationGroup {
+ description
+ "This group is mandatory for an SNMP entity which
+ supports command responder applications, and is
+ able to reinitialize itself such that its
+ configuration is unaltered.";
+ };
+ };
+
+5. NMRG-SMING-SNMP-EXT
+
+ The grammar of the snmp statement (including all its contained
+ statements) conforms to the Augmented Backus-Naur Form (ABNF)
+ [RFC2234]. It is included in the abnf statement of the snmp SMIng
+ extension definition in the NMRG-SMING-SNMP-EXT module below.
+
+ module NMRG-SMING-SNMP-EXT {
+
+ organization "IRTF Network Management Research Group (NMRG)";
+
+ contact "IRTF Network Management Research Group (NMRG)
+ http://www.ibr.cs.tu-bs.de/projects/nmrg/
+
+
+
+Strauss & Schoenwaelder Experimental [Page 26]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ Frank Strauss
+ TU Braunschweig
+ Muehlenpfordtstrasse 23
+ 38106 Braunschweig
+ Germany
+ Phone: +49 531 391 3266
+ EMail: strauss@ibr.cs.tu-bs.de
+
+ Juergen Schoenwaelder
+ International University Bremen
+ P.O. Box 750 561
+ 28725 Bremen
+ Germany
+ Phone: +49 421 200 3587
+ EMail: j.schoenwaelder@iu-bremen.de";
+
+ description "This module defines a SMIng extension to define
+ the mapping of SMIng definitions of class and
+ their attributes and events to SNMP compatible
+ definitions of modules, node, scalars, tables,
+ and notifications, and additional information on
+ module compliances.
+
+ Copyright (C) The Internet Society (2004).
+ All Rights Reserved.
+ This version of this module is part of
+ RFC 3781, see the RFC itself for full
+ legal notices.";
+
+ revision {
+ date "2003-12-16";
+ description "Initial revision, published as RFC 3781.";
+ };
+
+ //
+ //
+ //
+
+ extension snmp {
+
+ status current;
+ description
+ "The snmp statement maps SMIng definitions to SNMP
+ conformant definitions.";
+ abnf "
+ ;;
+ ;; sming-snmp.abnf -- Grammar of SNMP mappings in ABNF
+ ;; notation (RFC 2234).
+
+
+
+Strauss & Schoenwaelder Experimental [Page 27]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ ;;
+ ;; @(#) $Id: sming-snmp.abnf,v 1.14 2003/10/23 19:31:55 strauss Exp $
+ ;;
+ ;; Copyright (C) The Internet Society (2004). All Rights Reserved.
+ ;;
+
+ ;;
+ ;; Statement rules.
+ ;;
+
+ snmpStatement = snmpKeyword *1(sep lcIdentifier) optsep
+ \"{\" stmtsep
+ *1(oidStatement stmtsep)
+ *(nodeStatement stmtsep)
+ *(scalarsStatement stmtsep)
+ *(tableStatement stmtsep)
+ *(notificationStatement stmtsep)
+ *(groupStatement stmtsep)
+ *(complianceStatement stmtsep)
+ statusStatement stmtsep
+ descriptionStatement stmtsep
+ *1(referenceStatement stmtsep)
+ \"}\" optsep \";\"
+
+ nodeStatement = nodeKeyword sep lcIdentifier optsep
+ \"{\" stmtsep
+ oidStatement stmtsep
+ *1(representsStatement stmtsep)
+ statusStatement stmtsep
+ *1(descriptionStatement stmtsep)
+ *1(referenceStatement stmtsep)
+ \"}\" optsep \";\"
+
+ representsStatement = representsKeyword sep
+ qucIdentifier optsep \";\"
+
+ scalarsStatement = scalarsKeyword sep lcIdentifier optsep
+ \"{\" stmtsep
+ oidStatement stmtsep
+ 1*(objectStatement stmtsep)
+ statusStatement stmtsep
+ descriptionStatement stmtsep
+ *1(referenceStatement stmtsep)
+ \"}\" optsep \";\"
+
+ tableStatement = tableKeyword sep lcIdentifier optsep
+ \"{\" stmtsep
+ oidStatement stmtsep
+
+
+
+Strauss & Schoenwaelder Experimental [Page 28]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ anyIndexStatement stmtsep
+ *1(createStatement stmtsep)
+ 1*(objectStatement stmtsep)
+ statusStatement stmtsep
+ descriptionStatement stmtsep
+ *1(referenceStatement stmtsep)
+ \"}\" optsep \";\"
+
+ objectStatement = objectKeyword sep lcIdentifier optsep
+ \"{\" stmtsep
+ implementsStatement stmtsep
+ *1(subidStatement stmtsep)
+ *1(statusStatement stmtsep)
+ *1(descriptionStatement stmtsep)
+ *1(referenceStatement stmtsep)
+ \"}\" optsep \";\"
+
+ implementsStatement = implementsKeyword sep qcattrIdentifier
+ optsep \";\"
+
+ notificationStatement = notificationKeyword sep lcIdentifier
+ optsep \"{\" stmtsep
+ oidStatement stmtsep
+ signalsStatement stmtsep
+ statusStatement stmtsep
+ descriptionStatement stmtsep
+ *1(referenceStatement stmtsep)
+ \"}\" optsep \";\"
+
+ signalsStatement = signalsKeyword sep qattrIdentifier
+ optsep \"{\" stmtsep
+ *(signalsObjectStatement)
+ \"}\" optsep \";\"
+
+ signalsObjectStatement = objectKeyword sep
+ qattrIdentifier optsep \";\"
+
+ groupStatement = groupKeyword sep lcIdentifier optsep
+ \"{\" stmtsep
+ oidStatement stmtsep
+ membersStatement stmtsep
+ statusStatement stmtsep
+ descriptionStatement stmtsep
+ *1(referenceStatement stmtsep)
+ \"}\" optsep \";\"
+
+ complianceStatement = complianceKeyword sep lcIdentifier optsep
+ \"{\" stmtsep
+
+
+
+Strauss & Schoenwaelder Experimental [Page 29]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ oidStatement stmtsep
+ statusStatement stmtsep
+ descriptionStatement stmtsep
+ *1(referenceStatement stmtsep)
+ *1(mandatoryStatement stmtsep)
+ *(optionalStatement stmtsep)
+ *(refineStatement stmtsep)
+ \"}\" optsep \";\"
+
+ anyIndexStatement = indexStatement /
+ augmentsStatement /
+ reordersStatement /
+ extendsStatement /
+ expandsStatement
+
+ indexStatement = indexKeyword *1(sep impliedKeyword) optsep
+ \"(\" optsep qlcIdentifierList
+ optsep \")\" optsep \";\"
+
+ augmentsStatement = augmentsKeyword sep qlcIdentifier
+ optsep \";\"
+
+ reordersStatement = reordersKeyword sep qlcIdentifier
+ *1(sep impliedKeyword)
+ optsep \"(\" optsep
+ qlcIdentifierList optsep \")\"
+ optsep \";\"
+
+ extendsStatement = extendsKeyword sep qlcIdentifier optsep \";\"
+
+ expandsStatement = expandsKeyword sep qlcIdentifier
+ *1(sep impliedKeyword)
+ optsep \"(\" optsep
+ qlcIdentifierList optsep \")\"
+ optsep \";\"
+
+ createStatement = createKeyword optsep \";\"
+
+ membersStatement = membersKeyword optsep \"(\" optsep
+ qlcIdentifierList optsep
+ \")\" optsep \";\"
+
+ mandatoryStatement = mandatoryKeyword optsep \"(\" optsep
+ qlcIdentifierList optsep
+ \")\" optsep \";\"
+
+ optionalStatement = optionalKeyword sep qlcIdentifier optsep
+ \"{\" descriptionStatement stmtsep
+
+
+
+Strauss & Schoenwaelder Experimental [Page 30]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ \"}\" optsep \";\"
+
+ refineStatement = refineKeyword sep qlcIdentifier optsep \"{\"
+ *1(typeStatement stmtsep)
+ *1(writetypeStatement stmtsep)
+ *1(accessStatement stmtsep)
+ descriptionStatement stmtsep
+ \"}\" optsep \";\"
+
+ typeStatement = typeKeyword sep
+ (refinedBaseType / refinedType)
+ optsep \";\"
+
+ writetypeStatement = writetypeKeyword sep
+ (refinedBaseType / refinedType)
+ optsep \";\"
+
+ oidStatement = oidKeyword sep objectIdentifier optsep \";\"
+
+ subidStatement = subidKeyword sep subid optsep \";\"
+
+ ;;
+ ;; Statement keywords.
+ ;;
+
+ snmpKeyword = %x73 %x6E %x6D %x70
+ nodeKeyword = %x6E %x6F %x64 %x65
+ representsKeyword = %x72 %x65 %x70 %x72 %x65 %x73 %x65 %x6E %x74
+ %x73
+ scalarsKeyword = %x73 %x63 %x61 %x6C %x61 %x72 %x73
+ tableKeyword = %x74 %x61 %x62 %x6C %x65
+ implementsKeyword = %x69 %x6D %x70 %x6C %x65 %x6D %x65 %x6E %x74
+ %x73
+ subidKeyword = %x73 %x75 %x62 %x69 %x64
+ objectKeyword = %x6F %x62 %x6A %x65 %x63 %x74
+ notificationKeyword = %x6E %x6F %x74 %x69 %x66 %x69 %x63 %x61 %x74
+ %x69 %x6F %x6E
+ signalsKeyword = %x73 %x69 %x67 %x6E %x61 %x6C %x73
+ oidKeyword = %x6F %x69 %x64
+ groupKeyword = %x67 %x72 %x6F %x75 %x70
+ complianceKeyword = %x63 %x6F %x6D %x70 %x6C %x69 %x61 %x6E %x63
+ %x65
+ impliedKeyword = %x69 %x6D %x70 %x6C %x69 %x65 %x64
+ indexKeyword = %x69 %x6E %x64 %x65 %x78
+ augmentsKeyword = %x61 %x75 %x67 %x6D %x65 %x6E %x74 %x73
+ reordersKeyword = %x72 %x65 %x6F %x72 %x64 %x65 %x72 %x73
+ extendsKeyword = %x65 %x78 %x74 %x65 %x6E %x64 %x73
+ expandsKeyword = %x65 %x78 %x70 %x61 %x6E %x64 %x73
+
+
+
+Strauss & Schoenwaelder Experimental [Page 31]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ createKeyword = %x63 %x72 %x65 %x61 %x74 %x65
+ membersKeyword = %x6D %x65 %x6D %x62 %x65 %x72 %x73
+ mandatoryKeyword = %x6D %x61 %x6E %x64 %x61 %x74 %x6F %x72 %x79
+ optionalKeyword = %x6F %x70 %x74 %x69 %x6F %x6E %x61 %x6C
+ refineKeyword = %x72 %x65 %x66 %x69 %x6E %x65
+ writetypeKeyword = %x77 %x72 %x69 %x74 %x65 %x74 %x79 %x70 %x65
+
+ ;; End of ABNF
+ ";
+ };
+ //
+ //
+ //
+
+ snmp {
+
+ node ccitt { oid 0; };
+
+ node zeroDotZero {
+ oid 0.0;
+ description "A null value used for pointers.";
+ };
+
+ node iso { oid 1; };
+ node org { oid iso.3; };
+ node dod { oid org.6; };
+ node internet { oid dod.1; };
+ node directory { oid internet.1; };
+ node mgmt { oid internet.2; };
+ node mib-2 { oid mgmt.1; };
+ node transmission { oid mib-2.10; };
+ node experimental { oid internet.3; };
+ node private { oid internet.4; };
+ node enterprises { oid private.1; };
+ node security { oid internet.5; };
+ node snmpV2 { oid internet.6; };
+ node snmpDomains { oid snmpV2.1; };
+ node snmpProxys { oid snmpV2.2; };
+ node snmpModules { oid snmpV2.3; };
+
+ node joint-iso-ccitt { oid 2; };
+
+ status current;
+ description
+ "This set of nodes defines the core object
+ identifier hierarchy";
+ reference
+ "RFC 2578, Section 2.";
+
+
+
+Strauss & Schoenwaelder Experimental [Page 32]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ };
+
+ };
+
+6. NMRG-SMING-SNMP
+
+ The module NMRG-SMING-SNMP specified below defines derived types that
+ are specific to the SNMP mapping.
+
+module NMRG-SMING-SNMP {
+
+ organization "IRTF Network Management Research Group (NMRG)";
+
+ contact "IRTF Network Management Research Group (NMRG)
+ http://www.ibr.cs.tu-bs.de/projects/nmrg/
+
+ Frank Strauss
+ TU Braunschweig
+ Muehlenpfordtstrasse 23
+ 38106 Braunschweig
+ Germany
+ Phone: +49 531 391 3266
+ EMail: strauss@ibr.cs.tu-bs.de
+
+ Juergen Schoenwaelder
+ International University Bremen
+ P.O. Box 750 561
+ 28725 Bremen
+ Germany
+ Phone: +49 421 200 3587
+ EMail: j.schoenwaelder@iu-bremen.de";
+
+ description "Core type definitions for the SMIng SNMP mapping.
+ These definitions are based on RFC 2579 definitions
+ that are specific to the SNMP protocol and its
+ naming system.
+
+ Copyright (C) The Internet Society (2004).
+ All Rights Reserved.
+ This version of this module is part of
+ RFC 3781, see the RFC itself for full
+ legal notices.";
+
+ revision {
+ date "2003-12-16";
+ description "Initial version, published as RFC 3781.";
+ };
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 33]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ typedef TestAndIncr {
+ type Integer32 (0..2147483647);
+ description
+ "Represents integer-valued information used for atomic
+ operations. When the management protocol is used to
+ specify that an object instance having this type is to
+ be modified, the new value supplied via the management
+ protocol must precisely match the value presently held by
+ the instance. If not, the management protocol set
+ operation fails with an error of `inconsistentValue'.
+ Otherwise, if the current value is the maximum value of
+ 2^31-1 (2147483647 decimal), then the value held by the
+ instance is wrapped to zero; otherwise, the value held by
+ the instance is incremented by one. (Note that
+ regardless of whether the management protocol set
+ operation succeeds, the variable-binding in the request
+ and response PDUs are identical.)
+
+ The value of the SNMP access clause for objects having
+ this type has to be `readwrite'. When an instance of a
+ columnar object having this type is created, any value
+ may be supplied via the management protocol.
+
+ When the network management portion of the system is re-
+ initialized, the value of every object instance having
+ this type must either be incremented from its value prior
+ to the re-initialization, or (if the value prior to the
+ re-initialization is unknown) be set to a
+ pseudo-randomly generated value."; };
+
+ typedef AutonomousType {
+ type Pointer;
+ description
+ "Represents an independently extensible type
+ identification value. It may, for example, indicate a
+ particular OID sub-tree with further MIB definitions, or
+ define a particular type of protocol or hardware.";
+ };
+
+ typedef VariablePointer {
+ type Pointer;
+ description
+ "A pointer to a specific object instance. For example,
+ sysContact.0 or ifInOctets.3.";
+ };
+
+ typedef RowPointer {
+ type Pointer;
+
+
+
+Strauss & Schoenwaelder Experimental [Page 34]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ description
+ "Represents a pointer to a conceptual row. The value is
+ the name of the instance of the first accessible columnar
+ object in the conceptual row.
+
+ For example, ifIndex.3 would point to the 3rd row in the
+ ifTable (note that if ifIndex were not-accessible, then
+ ifDescr.3 would be used instead).";
+ };
+
+ typedef RowStatus {
+ type Enumeration (active(1), notInService(2),
+ notReady(3), createAndGo(4),
+ createAndWait(5), destroy(6));
+ description
+ "The RowStatus type is used to manage the creation and
+ deletion of conceptual rows, and is used as the type for the
+ row status column of a conceptual row.
+
+ The status column has six defined values:
+
+ - `active', which indicates that the conceptual row is
+ available for use by the managed device;
+
+ - `notInService', which indicates that the conceptual
+ row exists in the agent, but is unavailable for use by
+ the managed device (see NOTE below);
+
+ - `notReady', which indicates that the conceptual row
+ exists in the agent, but is missing information
+ necessary in order to be available for use by the
+ managed device;
+
+ - `createAndGo', which is supplied by a management
+ station wishing to create a new instance of a
+ conceptual row and to have its status automatically set
+ to active, making it available for use by the managed
+ device;
+
+ - `createAndWait', which is supplied by a management
+ station wishing to create a new instance of a
+ conceptual row (but not make it available for use by
+ the managed device); and,
+
+ - `destroy', which is supplied by a management station
+ wishing to delete all of the instances associated with
+ an existing conceptual row.
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 35]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ Whereas five of the six values (all except `notReady') may
+ be specified in a management protocol set operation, only
+ three values will be returned in response to a management
+ protocol retrieval operation: `notReady', `notInService' or
+ `active'. That is, when queried, an existing conceptual row
+ has only three states: it is either available for use by the
+ managed device (the status column has value `active'); it is
+ not available for use by the managed device, though the
+ agent has sufficient information to make it so (the status
+ column has value `notInService'); or, it is not available
+ for use by the managed device, and an attempt to make it so
+ would fail because the agent has insufficient information
+ (the state column has value `notReady').
+
+ NOTE WELL
+
+ This textual convention may be used for a MIB table,
+ irrespective of whether the values of that table's
+ conceptual rows are able to be modified while it is
+ active, or whether its conceptual rows must be taken
+ out of service in order to be modified. That is, it is
+ the responsibility of the DESCRIPTION clause of the
+ status column to specify whether the status column must
+ not be `active' in order for the value of some other
+ column of the same conceptual row to be modified. If
+ such a specification is made, affected columns may be
+ changed by an SNMP set PDU if the RowStatus would not
+ be equal to `active' either immediately before or after
+ processing the PDU. In other words, if the PDU also
+ contained a varbind that would change the RowStatus
+ value, the column in question may be changed if the
+ RowStatus was not equal to `active' as the PDU was
+ received, or if the varbind sets the status to a value
+ other than 'active'.
+
+ Also note that whenever any elements of a row exist, the
+ RowStatus column must also exist.
+
+ To summarize the effect of having a conceptual row with a
+ column having a type of RowStatus, consider the following
+ state diagram:
+
+
+
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 36]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ STATE
+ +--------------+-----------+-------------+-------------
+ | A | B | C | D
+ | |status col.|status column|
+ |status column | is | is |status column
+ ACTION |does not exist| notReady | notInService| is active
+--------------+--------------+-----------+-------------+-------------
+set status |noError ->D|inconsist- |inconsistent-|inconsistent-
+column to | or | entValue| Value| Value
+createAndGo |inconsistent- | | |
+ | Value| | |
+--------------+--------------+-----------+-------------+-------------
+set status |noError see 1|inconsist- |inconsistent-|inconsistent-
+column to | or | entValue| Value| Value
+createAndWait |wrongValue | | |
+--------------+--------------+-----------+-------------+-------------
+set status |inconsistent- |inconsist- |noError |noError
+column to | Value| entValue| |
+active | | | |
+ | | or | |
+ | | | |
+ | |see 2 ->D|see 8 ->D| ->D
+--------------+--------------+-----------+-------------+-------------
+set status |inconsistent- |inconsist- |noError |noError ->C
+column to | Value| entValue| |
+notInService | | | |
+ | | or | | or
+ | | | |
+ | |see 3 ->C| ->C|see 6
+--------------+--------------+-----------+-------------+-------------
+set status |noError |noError |noError |noError ->A
+column to | | | | or
+destroy | ->A| ->A| ->A|see 7
+--------------+--------------+-----------+-------------+-------------
+set any other |see 4 |noError |noError |see 5
+column to some| | | |
+value | | see 1| ->C| ->D
+--------------+--------------+-----------+-------------+-------------
+
+ (1) go to B or C, depending on information available to the
+ agent.
+
+ (2) if other variable bindings included in the same PDU,
+ provide values for all columns which are missing but
+ required, then return noError and goto D.
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 37]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ (3) if other variable bindings included in the same PDU,
+ provide values for all columns which are missing but
+ required, then return noError and goto C.
+
+ (4) at the discretion of the agent, the return value may be
+ either:
+
+ inconsistentName: because the agent does not choose to
+ create such an instance when the corresponding
+ RowStatus instance does not exist, or
+
+ inconsistentValue: if the supplied value is
+ inconsistent with the state of some other MIB object's
+ value, or
+
+ noError: because the agent chooses to create the
+ instance.
+
+ If noError is returned, then the instance of the status
+ column must also be created, and the new state is B or C,
+ depending on the information available to the agent. If
+ inconsistentName or inconsistentValue is returned, the row
+ remains in state A.
+
+ (5) depending on the MIB definition for the column/table,
+ either noError or inconsistentValue may be returned.
+
+ (6) the return value can indicate one of the following
+ errors:
+
+ wrongValue: because the agent does not support
+ createAndWait, or
+
+ inconsistentValue: because the agent is unable to take
+ the row out of service at this time, perhaps because it
+ is in use and cannot be de-activated.
+
+ (7) the return value can indicate the following error:
+
+ inconsistentValue: because the agent is unable to
+ remove the row at this time, perhaps because it is in
+ use and cannot be de-activated.
+
+ NOTE: Other processing of the set request may result in a
+ response other than noError being returned, e.g.,
+ wrongValue, noCreation, etc.
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 38]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ Conceptual Row Creation
+
+ There are four potential interactions when creating a
+ conceptual row: selecting an instance-identifier which is
+ not in use; creating the conceptual row; initializing any
+ objects for which the agent does not supply a default; and,
+ making the conceptual row available for use by the managed
+ device.
+
+ Interaction 1: Selecting an Instance-Identifier
+
+ The algorithm used to select an instance-identifier varies
+ for each conceptual row. In some cases, the instance-
+ identifier is semantically significant, e.g., the
+ destination address of a route, and a management station
+ selects the instance-identifier according to the semantics.
+
+ In other cases, the instance-identifier is used solely to
+ distinguish conceptual rows, and a management station
+ without specific knowledge of the conceptual row might
+ examine the instances present in order to determine an
+ unused instance-identifier. (This approach may be used, but
+ it is often highly sub-optimal; however, it is also a
+ questionable practice for a naive management station to
+ attempt conceptual row creation.)
+
+ Alternately, the MIB module which defines the conceptual row
+ might provide one or more objects which provide assistance
+ in determining an unused instance-identifier. For example,
+ if the conceptual row is indexed by an integer-value, then
+ an object having an integer-valued SYNTAX clause might be
+ defined for such a purpose, allowing a management station to
+ issue a management protocol retrieval operation. In order
+ to avoid unnecessary collisions between competing management
+ stations, `adjacent' retrievals of this object should be
+ different.
+
+ Finally, the management station could select a pseudo-random
+ number to use as the index. In the event that this index
+ was already in use and an inconsistentValue was returned in
+ response to the management protocol set operation, the
+ management station should simply select a new pseudo-random
+ number and retry the operation.
+
+ A MIB designer should choose between the two latter
+ algorithms based on the size of the table (and therefore the
+ efficiency of each algorithm). For tables in which a large
+ number of entries are expected, it is recommended that a MIB
+
+
+
+Strauss & Schoenwaelder Experimental [Page 39]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ object be defined that returns an acceptable index for
+ creation. For tables with small numbers of entries, it is
+ recommended that the latter pseudo-random index mechanism be
+ used.
+
+ Interaction 2: Creating the Conceptual Row
+
+ Once an unused instance-identifier has been selected, the
+ management station determines if it wishes to create and
+ activate the conceptual row in one transaction or in a
+ negotiated set of interactions.
+
+ Interaction 2a: Creating and Activating the Conceptual Row
+
+ The management station must first determine the column
+ requirements, i.e., it must determine those columns for
+ which it must or must not provide values. Depending on the
+ complexity of the table and the management station's
+ knowledge of the agent's capabilities, this determination
+ can be made locally by the management station. Alternately,
+ the management station issues a management protocol get
+ operation to examine all columns in the conceptual row that
+ it wishes to create. In response, for each column, there
+ are three possible outcomes:
+
+ - a value is returned, indicating that some other
+ management station has already created this conceptual
+ row. We return to interaction 1.
+
+ - the exception `noSuchInstance' is returned,
+ indicating that the agent implements the object-type
+ associated with this column, and that this column in at
+ least one conceptual row would be accessible in the MIB
+ view used by the retrieval were it to exist. For those
+ columns to which the agent provides read-create access,
+ the `noSuchInstance' exception tells the management
+ station that it should supply a value for this column
+ when the conceptual row is to be created.
+
+ - the exception `noSuchObject' is returned, indicating
+ that the agent does not implement the object-type
+ associated with this column or that there is no
+ conceptual row for which this column would be
+ accessible in the MIB view used by the retrieval. As
+ such, the management station can not issue any
+ management protocol set operations to create an
+ instance of this column.
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 40]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ Once the column requirements have been determined, a
+ management protocol set operation is accordingly issued.
+ This operation also sets the new instance of the status
+ column to `createAndGo'.
+
+ When the agent processes the set operation, it verifies that
+ it has sufficient information to make the conceptual row
+ available for use by the managed device. The information
+ available to the agent is provided by two sources: the
+ management protocol set operation which creates the
+ conceptual row, and, implementation-specific defaults
+ supplied by the agent (note that an agent must provide
+ implementation-specific defaults for at least those objects
+ which it implements as read-only). If there is sufficient
+ information available, then the conceptual row is created, a
+ `noError' response is returned, the status column is set to
+ `active', and no further interactions are necessary (i.e.,
+ interactions 3 and 4 are skipped). If there is insufficient
+ information, then the conceptual row is not created, and the
+ set operation fails with an error of `inconsistentValue'.
+ On this error, the management station can issue a management
+ protocol retrieval operation to determine if this was
+ because it failed to specify a value for a required column,
+ or, because the selected instance of the status column
+ already existed. In the latter case, we return to
+ interaction 1. In the former case, the management station
+ can re-issue the set operation with the additional
+ information, or begin interaction 2 again using
+ `createAndWait' in order to negotiate creation of the
+ conceptual row.
+
+ NOTE WELL
+
+ Regardless of the method used to determine the column
+ requirements, it is possible that the management
+ station might deem a column necessary when, in fact,
+ the agent will not allow that particular columnar
+ instance to be created or written. In this case, the
+ management protocol set operation will fail with an
+ error such as `noCreation' or `notWritable'. In this
+ case, the management station decides whether it needs
+ to be able to set a value for that particular columnar
+ instance. If not, the management station re-issues the
+ management protocol set operation, but without setting
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 41]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ a value for that particular columnar instance;
+ otherwise, the management station aborts the row
+ creation algorithm.
+
+ Interaction 2b: Negotiating the Creation of the Conceptual
+ Row
+
+ The management station issues a management protocol set
+ operation which sets the desired instance of the status
+ column to `createAndWait'. If the agent is unwilling to
+ process a request of this sort, the set operation fails with
+ an error of `wrongValue'. (As a consequence, such an agent
+ must be prepared to accept a single management protocol set
+ operation, i.e., interaction 2a above, containing all of the
+ columns indicated by its column requirements.) Otherwise,
+ the conceptual row is created, a `noError' response is
+ returned, and the status column is immediately set to either
+ `notInService' or `notReady', depending on whether it has
+ sufficient information to make the conceptual row available
+ for use by the managed device. If there is sufficient
+ information available, then the status column is set to
+ `notInService'; otherwise, if there is insufficient
+ information, then the status column is set to `notReady'.
+ Regardless, we proceed to interaction 3.
+
+ Interaction 3: Initializing non-defaulted Objects
+
+ The management station must now determine the column
+ requirements. It issues a management protocol get operation
+ to examine all columns in the created conceptual row. In
+ the response, for each column, there are three possible
+ outcomes:
+
+ - a value is returned, indicating that the agent
+ implements the object-type associated with this column
+ and had sufficient information to provide a value. For
+ those columns to which the agent provides read-create
+ access (and for which the agent allows their values to
+ be changed after their creation), a value return tells
+ the management station that it may issue additional
+ management protocol set operations, if it desires, in
+ order to change the value associated with this column.
+
+ - the exception `noSuchInstance' is returned,
+ indicating that the agent implements the object-type
+ associated with this column, and that this column in at
+ least one conceptual row would be accessible in the MIB
+ view used by the retrieval were it to exist. However,
+
+
+
+Strauss & Schoenwaelder Experimental [Page 42]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ the agent does not have sufficient information to
+ provide a value, and until a value is provided, the
+ conceptual row may not be made available for use by the
+ managed device. For those columns to which the agent
+ provides read-create access, the `noSuchInstance'
+ exception tells the management station that it must
+ issue additional management protocol set operations, in
+ order to provide a value associated with this column.
+
+ - the exception `noSuchObject' is returned, indicating
+ that the agent does not implement the object-type
+ associated with this column or that there is no
+ conceptual row for which this column would be
+ accessible in the MIB view used by the retrieval. As
+ such, the management station can not issue any
+ management protocol set operations to create an
+ instance of this column.
+
+ If the value associated with the status column is
+ `notReady', then the management station must first deal with
+ all `noSuchInstance' columns, if any. Having done so, the
+ value of the status column becomes `notInService', and we
+ proceed to interaction 4.
+
+ Interaction 4: Making the Conceptual Row Available
+
+ Once the management station is satisfied with the values
+ associated with the columns of the conceptual row, it issues
+ a management protocol set operation to set the status column
+ to `active'. If the agent has sufficient information to
+ make the conceptual row available for use by the managed
+ device, the management protocol set operation succeeds (a
+ `noError' response is returned). Otherwise, the management
+ protocol set operation fails with an error of
+ `inconsistentValue'.
+
+ NOTE WELL
+
+ A conceptual row having a status column with value
+ `notInService' or `notReady' is unavailable to the
+ managed device. As such, it is possible for the
+ managed device to create its own instances during the
+ time between the management protocol set operation
+ which sets the status column to `createAndWait' and the
+ management protocol set operation which sets the status
+ column to `active'. In this case, when the management
+ protocol set operation is issued to set the status
+ column to `active', the values held in the agent
+
+
+
+Strauss & Schoenwaelder Experimental [Page 43]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ supersede those used by the managed device.
+
+ If the management station is prevented from setting the
+ status column to `active' (e.g., due to management station or
+ network failure) the conceptual row will be left in the
+ `notInService' or `notReady' state, consuming resources
+ indefinitely. The agent must detect conceptual rows that
+ have been in either state for an abnormally long period of
+ time and remove them. It is the responsibility of the
+ DESCRIPTION clause of the status column to indicate what an
+ abnormally long period of time would be. This period of time
+ should be long enough to allow for human response time
+ (including `think time') between the creation of the
+ conceptual row and the setting of the status to `active'. In
+ the absence of such information in the DESCRIPTION clause, it
+ is suggested that this period be approximately 5 minutes in
+ length. This removal action applies not only to newly-
+ created rows, but also to previously active rows which are
+ set to, and left in, the notInService state for a prolonged
+ period exceeding that which is considered normal for such a
+ conceptual row.
+
+ Conceptual Row Suspension
+
+ When a conceptual row is `active', the management station
+ may issue a management protocol set operation which sets the
+ instance of the status column to `notInService'. If the
+ agent is unwilling to do so, the set operation fails with an
+ error of `wrongValue' or `inconsistentValue'.
+ Otherwise, the conceptual row is taken out of service, and a
+ `noError' response is returned. It is the responsibility of
+ the DESCRIPTION clause of the status column to indicate
+ under what circumstances the status column should be taken
+ out of service (e.g., in order for the value of some other
+ column of the same conceptual row to be modified).
+
+ Conceptual Row Deletion
+
+ For deletion of conceptual rows, a management protocol set
+ operation is issued which sets the instance of the status
+ column to `destroy'. This request may be made regardless of
+ the current value of the status column (e.g., it is possible
+ to delete conceptual rows which are either `notReady',
+ `notInService' or `active'.) If the operation succeeds, then
+ all instances associated with the conceptual row are
+ immediately removed.";
+ };
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 44]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ typedef StorageType {
+ type Enumeration (other(1), volatile(2),
+ nonVolatile(3), permanent(4),
+ readOnly(5));
+ description
+ "Describes the memory realization of a conceptual row. A
+ row which is volatile(2) is lost upon reboot. A row
+ which is either nonVolatile(3), permanent(4) or
+ readOnly(5), is backed up by stable storage. A row which
+ is permanent(4) can be changed but not deleted. A row
+ which is readOnly(5) cannot be changed nor deleted.
+
+ If the value of an object with this syntax is either
+ permanent(4) or readOnly(5), it cannot be modified.
+ Conversely, if the value is either other(1), volatile(2)
+ or nonVolatile(3), it cannot be modified to be
+ permanent(4) or readOnly(5). (All illegal modifications
+ result in a 'wrongValue' error.)
+
+ Every usage of this textual convention is required to
+ specify the columnar objects which a permanent(4) row
+ must at a minimum allow to be writable.";
+ };
+
+ typedef TDomain {
+ type Pointer;
+ description
+ "Denotes a kind of transport service.
+
+ Some possible values, such as snmpUDPDomain, are defined
+ in the SNMPv2-TM MIB module. Other possible values are
+ defined in other MIB modules."
+ reference
+ "The SNMPv2-TM MIB module is defined in RFC 3417."
+ };
+
+ typedef TAddressOrZero {
+ type OctetString (0..255);
+ description
+ "Denotes a transport service address.
+
+ A TAddress value is always interpreted within the context
+ of a TDomain value. Thus, each definition of a TDomain
+ value must be accompanied by a definition of a textual
+ convention for use with that TDomain. Some possible
+ textual conventions, such as SnmpUDPAddress for
+ snmpUDPDomain, are defined in the SNMPv2-TM MIB module.
+ Other possible textual conventions are defined in other
+
+
+
+Strauss & Schoenwaelder Experimental [Page 45]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ MIB modules.
+
+ A zero-length TAddress value denotes an unknown transport
+ service address."
+ reference
+ "The SNMPv2-TM MIB module is defined in RFC 3417."
+ };
+
+ typedef TAddress {
+ type TAddressOrZero (1..255);
+ description
+ "Denotes a transport service address.
+
+ This type does not allow a zero-length TAddress value."
+ };
+
+};
+
+7. Security Considerations
+
+ This document presents an extension of the SMIng data definition
+ language which supports the mapping of SMIng data definitions so that
+ they can be used with the SNMP management framework. The language
+ extension and the mapping itself has no security impact on the
+ Internet.
+
+8. Acknowledgements
+
+ Since SMIng started as a close successor of SMIv2, some paragraphs
+ and phrases are directly taken from the SMIv2 specifications
+ [RFC2578], [RFC2579], [RFC2580] written by Jeff Case, Keith
+ McCloghrie, David Perkins, Marshall T. Rose, Juergen Schoenwaelder,
+ and Steven L. Waldbusser.
+
+ The authors would like to thank all participants of the 7th NMRG
+ meeting held in Schloss Kleinheubach from 6-8 September 2000, which
+ was a major step towards the current status of this memo, namely
+ Heiko Dassow, David Durham, Keith McCloghrie, and Bert Wijnen.
+
+ Furthermore, several discussions within the SMING Working Group
+ reflected experience with SMIv2 and influenced this specification at
+ some points.
+
+
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 46]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+9. References
+
+9.1. Normative References
+
+ [RFC3780] Strauss, F. and J. Schoenwaelder, "SMIng - Next Generation
+ Structure of Management Information", RFC 3780, May 2004.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+ [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", RFC 2234, November 1997.
+
+9.2. Informative References
+
+ [RFC3410] Case, J., Mundy, R., Partain, D. and B. Stewart,
+ "Introduction and Applicability Statements for Internet
+ Standard Management Framework", RFC 3410, December 2002.
+
+ [RFC2578] McCloghrie, K., Perkins, D. and J. Schoenwaelder,
+ "Structure of Management Information Version 2 (SMIv2)",
+ STD 58, RFC 2578, April 1999.
+
+ [RFC2579] McCloghrie, K., Perkins, D. and J. Schoenwaelder, "Textual
+ Conventions for SMIv2", STD 59, RFC 2579, April 1999.
+
+ [RFC2580] McCloghrie, K., Perkins, D. and J. Schoenwaelder,
+ "Conformance Statements for SMIv2", STD 60, RFC 2580,
+ April 1999.
+
+ [ASN1] International Organization for Standardization,
+ "Specification of Abstract Syntax Notation One (ASN.1)",
+ International Standard 8824, December 1987.
+
+ [RFC3159] McCloghrie, K., Fine, M., Seligson, J., Chan, K., Hahn,
+ S., Sahita, R., Smith, A. and F. Reichmeyer, "Structure of
+ Policy Provisioning Information (SPPI)", RFC 3159, August
+ 2001.
+
+ [IEEE754] Institute of Electrical and Electronics Engineers, "IEEE
+ Standard for Binary Floating-Point Arithmetic", ANSI/IEEE
+ Standard 754-1985, August 1985.
+
+
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 47]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+ [RFC3418] Presuhn, R., Case, J., McCloghrie, K., Rose, M. and S.
+ Waldbusser, "Management Information Base (MIB) for the
+ Simple Network Management Protocol (SNMP)", STD 62, RFC
+ 3418, December 2002.
+
+ [RFC3416] Presuhn, R., Case, J., McCloghrie, K., Rose, M. and S.
+ Waldbusser, "Version 2 of the Protocol Operations for the
+ Simple Network Management Protocol (SNMP)", STD 62, RFC
+ 3416, December 2002.
+
+Authors' Addresses
+
+ Frank Strauss
+ TU Braunschweig
+ Muehlenpfordtstrasse 23
+ 38106 Braunschweig
+ Germany
+
+ Phone: +49 531 391 3266
+ EMail: strauss@ibr.cs.tu-bs.de
+ URI: http://www.ibr.cs.tu-bs.de/
+
+
+ Juergen Schoenwaelder
+ International University Bremen
+ P.O. Box 750 561
+ 28725 Bremen
+ Germany
+
+ Phone: +49 421 200 3587
+ EMail: j.schoenwaelder@iu-bremen.de
+ URI: http://www.eecs.iu-bremen.de/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 48]
+
+RFC 3781 SMIng Mappings to SNMP May 2004
+
+
+Full Copyright Statement
+
+ Copyright (C) The Internet Society (2004). This document is subject
+ to the rights, licenses and restrictions contained in BCP 78, and
+ except as set forth therein, the authors retain all their rights.
+
+ This document and the information contained herein are provided on an
+ "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
+ OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
+ ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
+ INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
+ INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
+ WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Intellectual Property
+
+ The IETF takes no position regarding the validity or scope of any
+ Intellectual Property Rights or other rights that might be claimed to
+ pertain to the implementation or use of the technology described in
+ this document or the extent to which any license under such rights
+ might or might not be available; nor does it represent that it has
+ made any independent effort to identify any such rights. Information
+ on the procedures with respect to rights in RFC documents can be
+ found in BCP 78 and BCP 79.
+
+ Copies of IPR disclosures made to the IETF Secretariat and any
+ assurances of licenses to be made available, or the result of an
+ attempt made to obtain a general license or permission for the use of
+ such proprietary rights by implementers or users of this
+ specification can be obtained from the IETF on-line IPR repository at
+ http://www.ietf.org/ipr.
+
+ The IETF invites any interested party to bring to its attention any
+ copyrights, patents or patent applications, or other proprietary
+ rights that may cover technology that may be required to implement
+ this standard. Please address the information to the IETF at ietf-
+ ipr@ietf.org.
+
+Acknowledgement
+
+ Funding for the RFC Editor function is currently provided by the
+ Internet Society.
+
+
+
+
+
+
+
+
+
+Strauss & Schoenwaelder Experimental [Page 49]
+