[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: examples of draft-bierman-sming-ds-02.txt in SMIng (NMRG)



At 11:35 AM 3/12/2002, Juergen Schoenwaelder wrote:

>Below are some examples from draft-bierman-sming-ds-02.txt translated
>into SMIng with flat OID naming.

How come your examples do not show any OID assignments?
I think it is better to have automatic reuse of the hierarchical
naming (for ease-of-use and reusable code generation)
than to manually flatten out every layer into a SMIv2
table. This goes against the very purpose of data abstraction.

Andy


>// This file shows the examples from <draft-bierman-sming-ds-02.txt>
>// expressed in SMIng syntax. There are also some notes about some
>// of the differences. This file assumes flat OID naming as it is
>// currently used by the SNMP standards.
>
>// In case there is WG agreement to support Andy's hierarchical naming,
>// then this can be easily accomodated, either by adding an additional
>// mapping or (if we are really sure hierarchical naming is the future)
>// by adding statements to define relative name portions in the attribute
>// definitions.
>
>union InetAddressUnion {
>
>    switch InetAddressType {
>
>        case unknown {
>            attribute unknown {
>                type InetAddress;
>                access readwrite;
>                status current;
>                description
>                   "Represents an Internet address of unknown format.";
>            };
>        };
>
>        case ipv4 {
>            attribute ipv4 {
>                type InetAddressIPv4;
>                access readwrite;
>                status current;
>                description
>                   "Represents an IPv4 Internet address.";
>            };
>        };
>
>        case ipv6 {
>            attribute ipv6 {
>                type InetAddressIPv6;
>                access readwrite;
>                status current;
>                description
>                   "Represents an IPv6 Internet address.";
>            };
>        };
>    };
>
>    status current;
>    description
>       "Internet address in several different representations.";
>};
>
>class GenericInetAddress {
>
>    attribute addrType {
>        type InetAddressType;
>        access readwrite;
>        status current;
>        description
>           "The type of the generic Internet address.";
>    };
>
>    attribute addrValue {
>        type InetAddressUnion (addrType);
>        access readwrite;
>        status current;
>        description
>           "The value of the generic Internet address.";
>    };
>
>    status current;
>    description
>       "Generic Internet address consisting of an InetAddressType
>        discriminator and an InetAddressUnion.";
>};
>
>snmp {
>    scalars myAddress {
>       oid someBase.1;
>       implements GenericInetAddress {
>           object myAddressType  addrType;
>           object myAddressValue addrValue;
>       };
>       status current;
>       description
>          "Internet address of this system.";
>    };
>};
>
>// Observations:
>//
>// - Mapping of the union in a single object statement is only possible
>//   if the union members are all of the same base type. Otherwise,
>//   multiple object statements are needed. This is due to the flat OID
>//   naming system in SMIv2, could be different with a hierarchical
>//  naming system.
>
>typedef GenericCounterType {
>    type        Enumeration (c32(1), c64(2), c32pair(3));
>    status      current;
>    description
>       "A type to indicate the type of a GenericCounter value.";
>};
>
>class Counter32Pair {
>
>    attribute c32low {
>        type Counter32;
>        access readonly;
>        status deprecated;
>        description
>           "The lower 32 bits of a 64 bit counter.";
>    };
>
>    attribute c32high {
>        type Counter32;
>        access readonly;
>        status deprecated;
>        description
>           "The upper 32 bits of a 64 bit counter.";
>    };
>
>    status current
>    description
>       "Pair of 32 bit counters to represent a 64 bit counter.";
>};
>
>union GenericCounter {
>    switch GenericCounterType {
>        case c32 {
>            attribute c32 {
>                type    Counter32;
>                access  readonly
>                status  current;
>                description
>                   "The Counter32 representation of the counter";
>            };
>        };
>
>        case c64 {
>            attribute c64 {
>                type    Counter64;
>                access  readonly
>                status  current;
>                description
>                   "The Counter64 representation of the counter";
>            };
>        };
>
>        case c32pair {
>            attribute c32pair {
>                type    Counter32Pair;
>                access  readonly
>                status  current;
>                description
>                   "The Counter32Pair representation of the counter";
>            };
>        };
>    };
>};
>
>snmp {
>    scalars myCounter {
>        oid someBase.3;
>        implements GenericCounter {
>            object myCounter32 c32;
>            object myCounter64 c64;
>            object myCounter32low  c32pair.c32low;
>            object myCounter32high c32pair.c32high;
>        };
>        status current;
>        description
>           "An example generic counter.";
>    };
>};
>
>// Observations:
>// 
>// - This example implements a union where the members are not of the
>//   same base type and some members are constructed. This requires to
>//   use multiple object statements to "flatten" out the nesting.
>// 
>// - This example does not use a discriminator. Instead, different values
>//   of the union are distinguished by the assigned OIDs.
>
>class IpStats {
>     attribute inetAddrType {
>          //...
>     };
>
>     attribute inetAddr {
>          //...
>     };
>
>     attribute inPkts {
>          //...
>     };
>
>     attribute outPkts {
>     };
>     // ...
>};
>
>snmp {
>
>    table ipStats {
>        oid someBase.4;
>        index (ifIndex, inetAddrType, inetAddr);
>        implements IpStats {
>            object ipStatsInetAddrType inetAddrType;
>            object ipStatsInetAddr     inetAddr;
>            object ipStatsInPkts       inPkts;
>            object ipStatsOutPkts      outPkts;
>        };
>    };
>};
>
>class TimeData {
>     attribute createTime {
>          //...
>     };
>     
>     attribute updateInterval {
>          //...
>     };
>     //...
>};
>
>class IpXStats {
>
>     attribute inHCPkts {
>          // ...
>     };
>     
>     attribute outHCPkts {
>          // ...
>     };
>     
>     attribute timeData {
>          // ...
>     };
>     
>    status current;
>    description
>        "Add high capacity counters and additional information to
>          the ipStats statistics.";
>};
>
>snmp {
>    table ipXStats {
>        oid someBase.5;
>        augments (ipStats);
>        implements IpXStats {
>             object ipXStatsInHCPkts       inHCPkts;
>             object ipXStatsOutHCPkts      outHCPkts;
>             object ipXStatsCreateTime     timeData.createTime;
>             object ipXStatsUpdateInterval timeData.updateInterval;
>        };
>    };
>};
>
>class IpPortStats {
>
>     attribute inetPort {
>          type InetPortNumber;
>          access readonly;
>          status current;
>          description
>               "The Internet port number for this statistic.";
>     };
>     
>     attribute uInPkts {
>          type GenericCounter;
>          access readonly;
>          status current;
>          description
>               "The number of packets received on this port.";
>     };
>     
>     attribute uOutPkts {
>          type GenericCounter;
>          access readonly;
>          status current;
>          description
>               "The number of packets transmitted over this port.";
>    };
>
>     status current;
>     description
>          "Port specific statistics.";
>};
>
>snmp {
>    table ipXPortStats {
>        oid someBase.42;
>        expands (ipStats, inetPort);
>        implements IpPortStats {
>              object ipXPortStatsUInPkts32 uInPkts.c32;
>              object ipXPortStatsUInPkts64 uInPkts.c64;
>              // ...
>              object ipXPortStatsUOutPkts32 uOutPkts.c32;
>              object ipXPortStatsUOutPkts32 uOutPkts.c64;
>              // ...
>        };
>    };
>
>};
>
>// Observation:
>// 
>// - With the current SMIng, you would model multi-valued attributes as separate tables.
>//   The expands clause defines this special kind of relationship.
>// 
>// - Our emacs says snmp is green.
>
>class EntSensorData {
>     attribute type {
>          //...
>     };
>
>     attribute scale {
>          //...
>     };
>
>     //...
>};
>
>snmp {
>     table entSensorData {
>          extends (entPhysicalTable);
>          implements EntSensorData {
>               object entSensorType  type;
>               object entSensorScale scale;
>          };
>     };
>};
>
>
>/js
>
> -frank
>
>-- 
>Juergen Schoenwaelder    <http://www.informatik.uni-osnabrueck.de/schoenw/>
>Frank Strauss            <http://www.ibr.cs.tu-bs.de/~strauss/>