[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Process for SMIng Syntax Proposal Submissions:
At 11:15 AM 10/9/2001 -0700, Durham, David wrote:
I am attaching a rough proposal for a SMIng syntax, by way
of an example. I converted the Aggregation Control objects
from the DSMON-MIB module to a proposed SMIng format.
The SMIv2 version is in draft-ietf-rmonmib-dsmon-mib-07.txt.
This new syntax is a cross between SMIv2 and the current SMIng proposal.
I have not written up a formal grammar or an item by item
objectives assessment. I just wanted to get a non-trivial example
out there to encourage discussion of constructs like arrays,
unions, pointers, instance naming for an arbitrary number and type
of containment levels. (I will do this if there's interest on the mailing
list.)
I am not trying to separate OID naming from the data definitions,
as done with the current SMIng proposal. I believe this is a horrible
thing to do. There should only be one naming scheme for a
data definition language.
Andy
>As recorded in the SMIng meeting minutes from the 51st IETF and presented on
>the mailing list, with the completion of the objectives I-D the working
>group will now address proposals for the next generation SMI. Submissions
>should ideally be based on grammars that already exist. These proposals
>will be used to drive the cost vs. benefits analysis of the SMIng Objectives
>and will be discussed on the mailing list as well as at the 52nd IETF.
>
>The proposal process acknowledges the existence of the NMRG proposal for
>SMIng. The purpose now is to determine if anyone:
> a. Believes there is a suitable existing grammar alternative for SMIng
>the WG should consider.
> b. Is willing to write an I-D describing the use of this grammar to
>improve the state-of-the-art of the SMI, specifically by addressing the WG
>objectives for the SMIng language.
>That is, it is not acceptable to dismiss our existing contributions without
>formally describing an alternative in the form of an equivalent
>internet-draft so that a full and open cost vs. benefits analysis can be
>pursued by the WG.
>
>Contents of the syntax proposal I-Ds shall:
> 1. Describe the selected grammar and/or provide references to freely
>available documents detailing the grammar
> 2. Describe the grammar's use as a syntax for naming and describing data
>carried by SNMP
> 3. State compliance with the accepted SMIng objectives (section 4.1 of
>draft-ietf-sming-reqs-06.txt) item by item including a syntax example
>showing applicability where compliance is claimed
>
>Proposals must be submitted as Internet Drafts by November 14th, in time for
>the ID-00 cutoff date, for discussion at the 52nd IETF.
MODULE DSMON-MIB {
IMPORTS {
MODULE-IDENTITY, OBJECT-TYPE, Integer32,
Counter32, Gauge32
FROM SNMPv2-SMI
MODULE-COMPLIANCE, OBJECT-GROUP
FROM SNMPv2-CONF
RowStatus, TimeStamp, TEXTUAL-CONVENTION, TruthValue
FROM SNMPv2-TC
OwnerString, rmon
FROM RMON-MIB
protocolDirLocalIndex, LastCreateTime,
DataSource, ZeroBasedCounter32, TimeFilter
FROM RMON2-MIB
CounterBasedGauge64, ZeroBasedCounter64
FROM HCNUM-TC
SnmpAdminString
FROM SNMP-FRAMEWORK-MIB
Dscp
FROM DIFFSERV-DSCP-TC
};
MODULE-IDENTITY dsmonMIB {
LAST-UPDATED "200110190000Z";
ORGANIZATION "IETF RMONMIB Working Group";
CONTACT-INFO
" Andy Bierman
Cisco Systems, Inc.
RMONMIB WG Chair and DSMON MIB Editor
Postal: 170 West Tasman Drive
San Jose, CA USA 95134
Tel: +1 408 527-3711
E-mail: abierman@cisco.com
Send comments to <rmonmib@ietf.org>
Mailing list subscription info:
http://www.ietf.org/mailman/listinfo/rmonmib ";
DESCRIPTION
"This module defines Remote Monitoring MIB extensions for
Differentiated Services enabled networks.
RMON DIFFSERV DSCP statistics
* Per Aggregation Group
* Per Protocol Per Aggregation Group
* Per Aggregation Group Per Host
* Per Aggregation Group Per Host-Pair
In order to maintain the RMON 'look-and-feel' and semantic
consistency, some of the text from the RMON-2 and HC-RMON
MIBs by Steve Waldbusser has been adapted for use in this
MIB.";
REVISION "200110190000Z" {
DESCRIPTION
"Initial version of the DSMON MIB module. This version
published as RFC xxxx (to be assigned by the RFC Editor).";
};
} ::= { rmon 26 };
NODES {
dsmonObjects OBJECT IDENTIFIER ::= { dsmonMIB 1 }
dsmonNotifications OBJECT IDENTIFIER ::= { dsmonMIB 2 }
dsmonConformance OBJECT IDENTIFIER ::= { dsmonMIB 3 }
dsmonAggObjects OBJECT IDENTIFIER ::= { dsmonObjects 1 }
dsmonStatsObjects OBJECT IDENTIFIER ::= { dsmonObjects 2 }
dsmonPdistObjects OBJECT IDENTIFIER ::= { dsmonObjects 3 }
dsmonHostObjects OBJECT IDENTIFIER ::= { dsmonObjects 4 }
dsmonCapsObjects OBJECT IDENTIFIER ::= { dsmonObjects 5 }
dsmonMatrixObjects OBJECT IDENTIFIER ::= { dsmonObjects 6 }
};
TYPEDEF SCALAR DsmonAggGroupIndex {
SYNTAX Integer32 (0..2147483647);
STATUS current;
DESCRIPTION
"This TC describes a data type which identifies a DSMON
aggregation group, which is an arbitrary grouping of DSCP
values, for monitoring purposes only. The range for this
data type begins with zero (instead of one), to allow for a
direct mapping between DSCP and aggregation group values.";
};
TYPEDEF SCALAR DsmonAggProfileIndex {
SYNTAX Integer32 (1..2147483647);
STATUS current;
DESCRIPTION
"This TC describes a data type which identifies a DSMON
aggregation profile, which is a set of aggregation group
assignments for each of the 64 DSCP values, for a particular
statistical collection.";
};
--
-- this object could have been defined as an ARRAY,
-- or wrappered (as it is) inside CLASS definition,
-- which can be extended over time.
--
-- converted dsmonAggProfileTable
TYPEDEF CLASS DsmonAggProfile {
STATUS current;
DESCRIPTION
"Controls the setup of a single aggregation profile,
for which every DSCP value MUST be configured
into exactly one aggregation group.
This table MUST NOT be modified if the dsmonAggControlLocked
object is equal to 'true'.
If the agent supports non-volatile configuration of this
table, then upon system initialization, this table SHOULD be
initialized with the saved values.";
ARRAY aggGroupMapping {
INDEX {
SYNTAX Dscp;
SIZE (64); -- fixed array of 64 entries
DESCRIPTION
"The specific DSCP value which is configured in an
aggregation group by this entry.";
};
-- more INDEX clauses may be present, for multi-dimensional arrays
SCALAR dsmonAggGroupIndex {
SYNTAX DsmonAggGroupIndex;
MAX-ACCESS read-write;
STATUS current;
DESCRIPTION
"The aggregation group which contains this DSCP value. Upon
creation of a new sub-tree (set of 64 entries with the same
dsmonAggControlIndex value) in this table, the agent SHOULD
initialize all related instances of this object to the value
zero.
This object MUST NOT be modified if the
dsmonAggControlLocked object is equal to 'true'.";
DEFVAL { 0 };
} ::= 1;
} ::= 1;
}; -- an abstract class, without a subroot assignment
-- following is done as an inline array instead of a
-- separate class definition (like DsmonAggProfile) for
-- demonstration purposes
-- converted dsmonAggGroupTable
TYPEDEF ARRAY DsmonAggGroup {
STATUS current;
DESCRIPTION
"Controls the setup of a single aggregation profile,
for which every DSCP value MUST be configured
into exactly one aggregation group.
This table MUST NOT be modified if the dsmonAggControlLocked
object is equal to 'true'.
If the agent supports non-volatile configuration of this
table, then upon system initialization, this table SHOULD be
initialized with the saved values.";
INDEX {
SYNTAX DsmonAggGroupIndex; -- range of the INDEX
SIZE (0..2147483647); -- range of the instances
DESCRIPTION
"The specific Aggregation Group which is represented
group by each entry.";
};
SCALAR dsmonAggGroupDescr {
SYNTAX SnmpAdminString (SIZE(0..64));
MAX-ACCESS read-create;
STATUS current;
DESCRIPTION
"An administratively assigned description of the
aggregation group identified by this entry.
Upon first creation of an instance of this object,
the agent SHOULD set this object to the empty string.
This object MUST NOT be modified if the associated
dsmonAggGroupStatus object is equal to 'active', or the
dsmonAggControlLocked object is equal to 'true'.";
} ::= 1;
SCALAR dsmonAggGroupStatus {
SYNTAX RowStatus;
MAX-ACCESS read-create;
STATUS current;
DESCRIPTION
"The status of this row.
An entry MUST NOT exist in the active state unless all
objects in the entry have an appropriate value.
This object MUST NOT be modified if the
dsmonAggControlLocked object is equal to 'true'.";
} ::= 2;
};
-- converted dsmonAggControlTable
TYPEDEF CLASS DsmonAggControl {
STATUS current;
DESCRIPTION
"Provides an overall description and control
point for a single aggregation control configuration.
This table MUST NOT be modified if the dsmonAggControlLocked
object is equal to 'true'.";
SCALAR dsmonAggControlDescr {
SYNTAX SnmpAdminString (SIZE(0..64));
MAX-ACCESS read-create;
STATUS current;
DESCRIPTION
"An administratively assigned description of the aggregation
profile identified by this entry.
Upon first creation of an instance of this object, the agent
SHOULD set this object to the empty string. If the agent
supports non-volatile storage, then this object SHOULD be
re-initialized with its stored value after a system reboot.
This object MUST NOT be modified if the associated
dsmonAggControlStatus object is equal to 'active', or the
dsmonAggControlLocked object is equal to 'true'.";
} ::= 1;
SCALAR dsmonAggControlOwner {
SYNTAX OwnerString;
MAX-ACCESS read-create;
STATUS current;
DESCRIPTION
"The entity that configured this entry and is therefore
using the resources assigned to it.";
} ::= 2;
SCALAR dsmonAggControlStatus {
SYNTAX RowStatus;
MAX-ACCESS read-create;
STATUS current;
DESCRIPTION
"The status of this aggregation control object.
An entry MUST NOT exist in the active state unless all
objects in the entry have an appropriate value.
This object MUST NOT be modified if the
dsmonAggControlLocked object is equal to 'true'.";
} ::= 3;
CLASS aggProfile {
SYNTAX DsmonAggProfile;
MAX-ACCESS read-write;
STATUS current;
DESCRIPTION
"A set of DSCP to Aggregation Group mappings";
} ::= 4;
ARRAY aggGroup {
SYNTAX DsmonAggGroup;
MAX-ACCESS read-create;
STATUS current;
DESCRIPTION
"An array of Aggregation Group descriptions";
} ::= 5;
};
ARRAY dsmonAggProfiles {
STATUS current;
DESCRIPTION
"A collection of DSMON aggregation control profiles.
This table MUST NOT be modified if the dsmonAggControlLocked
object is equal to 'true'.
If the agent supports non-volatile configuration of this
table, then upon system initialization, this table SHOULD be
initialized with the saved values.";
INDEX {
SYNTAX DsmonAggProfileIndex;
SIZE (1..2147483647); -- variable sized array
DESCRIPTION
"The specific Aggregation Profile which is represented
group by each entry.";
};
CLASS aggControl {
SYNTAX DsmonAggControl;
MAX-ACCESS read-create;
DESCRIPTION
"The DSMON Aggregation Control entry for each profile.";
} ::= 1;
} ::= { dsmonAggObjects 1 };
CLASS DsmonAggGlobal {
STATUS current;
DESCRIPTION
"Overall global controls and capabilities for DSMON
aggregation configuration.";
SCALAR dsmonMaxAggGroups {
SYNTAX Integer32 (2..64);
MAX-ACCESS read-only;
STATUS current;
DESCRIPTION
"The maximum number of aggregation groups that this agent
can support. The agent will allow this number of distinct
groups to be configured in the dsmonAggProfileTable,
numbered from '0' to 'dsmonMaxAggGroups - 1', for each
aggregation profile entry supported by the agent.
The agent MUST NOT lower this value during system operation,
and SHOULD set this object to an appropriate value during
system initialization.";
} ::= 1;
SCALAR dsmonAggControlLocked {
SYNTAX TruthValue;
MAX-ACCESS read-write;
STATUS current;
DESCRIPTION
"Controls the setup of aggregation groups for this agent.
If this object contains the value 'true', then write access
to the objects in the dsmonAggControlTable (except the
dsmonAggControlOwner object), dsmonAggProfileTable, and
dsmonAggGroupTable is not permitted, and data collection is
possible. This object only controls write access to these
MIB objects. The DSMON data collection control tables (e.g.,
dsmonHostCtlTable) can be configured at any time, regardless
of the value of this object.
If this object contains the value 'false', write access to
the objects in the dsmonAggControlTable,
dsmonAggProfileTable, and dsmonAggGroupTable is permitted,
and data collection is not possible. In addition, all
objects in all DSMON data tables (e.g., dsmonStatsTable)
shall be deleted.
An agent is not required to process SNMP Set Requests for
this object in conjunction with other objects from this MIB.
This is intended to simplify the processing of Set Requests
for tables such as the dsmonAggProfileTable, by eliminating
the possibility that a single Set PDU will contain multiple
varbinds which are in conflict, such as a PDU which both
modifies the dsmonAggProfileTable and locks the
dsmonAggProfileTable at the same time.
Note that the agent is not required to validate the entire
aggregation configuration when an attempt is made to
transition an instance of this object from 'true' to
'false'. That validation is done if and when a DSMON data
collection is activated.
An agent is required to reactivate any suspended data
collections when this object transitions to 'true', Each
active data control entry (e.g., dsmonStatsControlEntry),
will be validated with respect to the new aggregation
configuration. If the aggregation profile referenced in the
data collection is valid, then that collection will be
restarted. Otherwise, the RowStatus object (e.g.,
dsmonStatsControlStatus) will be set to 'notReady' for that
collection control entry.";
} ::= 2;
SCALAR dsmonAggControlChanges {
SYNTAX Counter32;
MAX-ACCESS read-only;
STATUS current;
DESCRIPTION
"This object counts the number of times the value of the
dsmonAggControlLocked object has changed. A management
station can use this object to detect if counters in the
DSMON data tables (e.g., dsmonStatsEntry) have been deleted
and recreated between polls.
This object shall be incremented by one each time the
dsmonAggControlLocked object changes from 'false' to 'true',
or from 'true' to 'false'.";
} ::= 3;
SCALAR dsmonAggControlLastChangeTime {
SYNTAX TimeStamp;
MAX-ACCESS read-only;
STATUS current;
DESCRIPTION
"This object identifies the value of sysUpTime at the moment
the dsmonAggControlLocked object was last modified. A
management station can use this object to detect if counters
in the DSMON data tables (e.g., dsmonStatsEntry) have been
deleted and recreated between polls.
This object shall be updated with the current value of
sysUpTime, if the dsmonAggControlLocked object changes from
'false' to 'true', or from 'true' to 'false'.
Upon system initialization, this object shall contain the
value zero.";
} ::= 4;
} ::= { dsmonAggObjects 2 };
--
-- Class definitions for all the statistics would be defined as well...
--
}; -- END DSMON-MIB MODULE
Notes
-----
Pointers are TBD
UNION construct TBD
MODULE-COMPLIANCE TBD (may not change at all)
NOTIFICATIONs are TBD (may not change at all)
Object Instance and Object Definition distinctions
are not made with the namespace, but rather with
different pointer types
Instance Identifiers are variable length, in that
not all the object instances (accessible via SNMP Get)
within a high-level object have the same number
of OID components.
Scalar instances do not end in .0. This gets ugly
when arbitrary containment is introduced, so it's
better to leave off the last zero on scalars.
INDEX components are encoded inline, after the object ID,
but fragmented, depending on the data structure definition.
This allows for arbitrarily complex nested containment,
but the instance components are not all grouped together
at the end.
For all TYPEDEFs: TYPEDEF FOO fooName { ... };
There is no OID assignment between the right brace
and the semi-colon;
For all objects within a typedef (except INDEX clauses):
FOO { ... } ::= N;
N is the number of the child sub-component,
simply relative to the parent object, not hard-assigned
from the root.
For all FOO declarations (no TYPEDEF keyword:
FOO { ... } ::= { <any valid OID expression> }
This is an objectect instance declaration, and must have
a valid MIB root assignment.
Just as with the C language, if the TYPEDEF keyword is
present, then the construct is a data structure definition,
and if it's missing, then the construct is a data structure
declaration.
Object Instance Examples
------------------------------
O=Old (SMIv2), N=New (SMIng)
dsmonAggControlTable example for row 77:
dsmonAggControlDescr
O: dsmonAggObjects.5.1.2.77
N: dsmonAggObjects.1.1.77.1
dsmonAggControlOwner
O: dsmonAggObjects.5.1.3.77
N: dsmonAggObjects.1.1.77.2
dsmonAggControlStatus
O: dsmonAggObjects.5.1.3.77
N: dsmonAggObjects.1.1.77.3
dsmonAggProfileTable example for row 77.22:
dsmonAggGroupIndex (e.g., == 44)
O: dsmonAggObjects.6.1.2.77.22
N: dsmonAggObjects.1.1.77.4.1.1.22
dsmonAggGroupTable example for row 77.44:
dsmonAggGroupDescr (e.g., == "Example Group 44")
O: dsmonAggObjects.7.1.1.77.44
N: dsmonAggObjects.1.1.77.5.1.44
dsmonAggGroupStatus (e.g., == active(1))
O: dsmonAggObjects.7.1.2.77.44
N: dsmonAggObjects.1.1.77.5.2.44
DSMON MIB scalars:
dsmonMaxAggGroups
O: dsmonAggObjects.1.0
N: dsmonAggObjects.2.1
dsmonAggControlLocked
O: dsmonAggObjects.2.0
N: dsmonAggObjects.2.2
dsmonAggControlChanges
O: dsmonAggObjects.3.0
N: dsmonAggObjects.2.3
dsmonAggControlLastChangeTime
O: dsmonAggObjects.4.0
N: dsmonAggObjects.2.4