/*							-- DO NOT EDIT --
 * Generated by smidump version 0.4.8:
 *   smidump -f corba IF-MIB
 *
 * Derived from IF-MIB:
 *   The MIB module to describe generic objects for network
 *   interface sub-layers.  This MIB is an updated version of
 *   MIB-II's ifTable, and incorporates the extensions defined in
 *   RFC 1229.
 *
 * Revision 2000-06-14 00:00:
 *   Clarifications agreed upon by the Interfaces MIB WG, and
 *   published as RFC 2863.
 *
 * Revision 1996-02-28 21:55:
 *   Revisions made by the Interfaces MIB WG, and published in
 *   RFC 2233.
 *
 * Revision 1993-11-08 21:55:
 *   Initial revision, published as part of RFC 1573.
 *
 * $Id: IF_MIB.idl 8090 2008-04-18 12:56:29Z strauss $
 */

#ifndef _IF_MIB_IDL_
#define _IF_MIB_IDL_

#include <ASN1Types.idl>
#include <SNMPMgmt.idl>
#include <IANAifType_MIB.idl>
#include <SNMPv2_SMI.idl>
#include <SNMPv2_TC.idl>

module IF_MIB {

    typedef IANAifType_MIB::IANAifTypeType IANAifTypeType;
    typedef SNMPv2_SMI::Counter32Type Counter32Type;
    typedef SNMPv2_SMI::Counter64Type Counter64Type;
    typedef SNMPv2_SMI::Gauge32Type Gauge32Type;
    typedef SNMPv2_SMI::Integer32Type Integer32Type;
    typedef SNMPv2_SMI::TimeTicksType TimeTicksType;
    typedef SNMPv2_TC::AutonomousTypeType AutonomousTypeType;
    typedef SNMPv2_TC::DisplayStringType DisplayStringType;
    typedef SNMPv2_TC::PhysAddressType PhysAddressType;
    typedef SNMPv2_TC::RowStatusType RowStatusType;
    typedef SNMPv2_TC::TestAndIncrType TestAndIncrType;
    typedef SNMPv2_TC::TimeStampType TimeStampType;
    typedef SNMPv2_TC::TruthValueType TruthValueType;

    const string moduleIdentity = "ifMIB";
    const ASN1_ObjectIdentifier ifMIB = "::IF_MIB::ifMIB";

    /*
             The MIB module to describe generic objects for network
             interface sub-layers.  This MIB is an updated version of
             MIB-II's ifTable, and incorporates the extensions defined in
             RFC 1229.

    LAST-UPDATED:   200006140000Z

    ORGANIZATION:
            "IETF Interfaces MIB Working Group"

    CONTACT-INFO:
            "   Keith McCloghrie
             Cisco Systems, Inc.
             170 West Tasman Drive
             San Jose, CA  95134-1706
             US
             
             408-526-5260
             kzm@cisco.com"

    REVISION:       "200006140000Z"
    REVISION-DESCRIPTION:
            "Clarifications agreed upon by the Interfaces MIB WG, and
             published as RFC 2863."

    REVISION:       "199602282155Z"
    REVISION-DESCRIPTION:
            "Revisions made by the Interfaces MIB WG, and published in
             RFC 2233."

    REVISION:       "199311082155Z"
    REVISION-DESCRIPTION:
            "Initial revision, published as part of RFC 1573."

    */

    /*
             A unique value, greater than zero, for each interface or
             interface sub-layer in the managed system.  It is
             recommended that values are assigned contiguously starting
             from 1.  The value for each interface sub-layer must remain
             constant at least from one re-initialization of the entity's
             network management system to the next re-initialization.
    DISPLAY-HINT: d


    */
    typedef ASN1_Integer InterfaceIndexType; 

    /*
             This textual convention is an extension of the
             InterfaceIndex convention.  The latter defines a greater
             than zero value used to identify an interface or interface
             sub-layer in the managed system.  This extension permits the
             additional value of zero.  the value zero is object-specific
             and must therefore be defined as part of the description of
             any object which uses this syntax.  Examples of the usage of
             zero might include situations where interface was unknown,
             or when none or all interfaces need to be referenced.
    DISPLAY-HINT: d


    */
    typedef ASN1_Integer InterfaceIndexOrZeroType; 

    typedef ASN1_OctetString IfDescrType; 

    typedef ASN1_Integer IfAdminStatusType; 
    const IfAdminStatusType IfAdminStatusType_up = 1;
    const IfAdminStatusType IfAdminStatusType_down = 2;
    const IfAdminStatusType IfAdminStatusType_testing = 3;
    const string IfAdminStatusType_NameNumberList = "up (1) , down (2) , testing (3)";

    typedef ASN1_Integer IfOperStatusType; 
    const IfOperStatusType IfOperStatusType_up = 1;
    const IfOperStatusType IfOperStatusType_down = 2;
    const IfOperStatusType IfOperStatusType_testing = 3;
    const IfOperStatusType IfOperStatusType_unknown = 4;
    const IfOperStatusType IfOperStatusType_dormant = 5;
    const IfOperStatusType IfOperStatusType_notPresent = 6;
    const IfOperStatusType IfOperStatusType_lowerLayerDown = 7;
    const string IfOperStatusType_NameNumberList = "up (1) , down (2) , testing (3) , unknown (4) , dormant (5) , notPresent (6) , lowerLayerDown (7)";

    typedef ASN1_Integer IfLinkUpDownTrapEnableType; 
    const IfLinkUpDownTrapEnableType IfLinkUpDownTrapEnableType_enabled = 1;
    const IfLinkUpDownTrapEnableType IfLinkUpDownTrapEnableType_disabled = 2;
    const string IfLinkUpDownTrapEnableType_NameNumberList = "enabled (1) , disabled (2)";

    typedef ASN1_OctetString IfAliasType; 

    typedef ASN1_Integer IfRcvAddressTypeType; 
    const IfRcvAddressTypeType IfRcvAddressTypeType_other = 1;
    const IfRcvAddressTypeType IfRcvAddressTypeType_volatile = 2;
    const IfRcvAddressTypeType IfRcvAddressTypeType_nonVolatile = 3;
    const string IfRcvAddressTypeType_NameNumberList = "other (1) , volatile (2) , nonVolatile (3)";

    interface interfaces : SNMPMgmt::SmiEntry {

        /*
             The number of network interfaces (regardless of their
             current state) present on this system.
        */
        readonly attribute ASN1_Integer ifNumber;

        /*
             A list of interface entries.  The number of entries is
             given by the value of ifNumber.
        */
        SNMPMgmt::SmiTableIterator get_ifTable();
    };


    /*
             An entry containing management information applicable to a
             particular interface.
    */
    interface ifEntry : SNMPMgmt::SmiEntry {

        const string IndexVarList = "ifIndex";

        /*
             A unique value, greater than zero, for each interface.  It
             is recommended that values are assigned contiguously
             starting from 1.  The value for each interface sub-layer
             must remain constant at least from one re-initialization of
             the entity's network management system to the next re-
             initialization.
        */
        readonly attribute InterfaceIndexType ifIndex;

        /*
             A textual string containing information about the
             interface.  This string should include the name of the
             manufacturer, the product name and the version of the
             interface hardware/software.
        */
        readonly attribute IfDescrType ifDescr;

        /*
             The type of interface.  Additional values for ifType are
             assigned by the Internet Assigned Numbers Authority (IANA),
             through updating the syntax of the IANAifType textual
             convention.
        */
        readonly attribute IANAifTypeType ifType;

        /*
             The size of the largest packet which can be sent/received
             on the interface, specified in octets.  For interfaces that
             are used for transmitting network datagrams, this is the
             size of the largest network datagram that can be sent on the
             interface.
        */
        readonly attribute ASN1_Integer ifMtu;

        /*
             An estimate of the interface's current bandwidth in bits
             per second.  For interfaces which do not vary in bandwidth
             or for those where no accurate estimation can be made, this
             object should contain the nominal bandwidth.  If the
             bandwidth of the interface is greater than the maximum value
             reportable by this object then this object should report its
             maximum value (4,294,967,295) and ifHighSpeed must be used
             to report the interace's speed.  For a sub-layer which has
             no concept of bandwidth, this object should be zero.
        */
        readonly attribute Gauge32Type ifSpeed;

        /*
             The interface's address at its protocol sub-layer.  For
             example, for an 802.x interface, this object normally
             contains a MAC address.  The interface's media-specific MIB
             must define the bit and byte ordering and the format of the
             value of this object.  For interfaces which do not have such
             an address (e.g., a serial line), this object should contain
             an octet string of zero length.
        */
        readonly attribute PhysAddressType ifPhysAddress;

        /*
             The desired state of the interface.  The testing(3) state
             indicates that no operational packets can be passed.  When a
             managed system initializes, all interfaces start with
             ifAdminStatus in the down(2) state.  As a result of either
             explicit management action or per configuration information
             retained by the managed system, ifAdminStatus is then
             changed to either the up(1) or testing(3) states (or remains
             in the down(2) state).
        */
        attribute IfAdminStatusType ifAdminStatus;

        /*
             The current operational state of the interface.  The
             testing(3) state indicates that no operational packets can
             be passed.  If ifAdminStatus is down(2) then ifOperStatus
             should be down(2).  If ifAdminStatus is changed to up(1)
             then ifOperStatus should change to up(1) if the interface is
             ready to transmit and receive network traffic; it should
             change to dormant(5) if the interface is waiting for
             external actions (such as a serial line waiting for an
             incoming connection); it should remain in the down(2) state
             if and only if there is a fault that prevents it from going
             to the up(1) state; it should remain in the notPresent(6)
             state if the interface has missing (typically, hardware)
             components.
        */
        readonly attribute IfOperStatusType ifOperStatus;

        /*
             The value of sysUpTime at the time the interface entered
             its current operational state.  If the current state was
             entered prior to the last re-initialization of the local
             network management subsystem, then this object contains a
             zero value.
        */
        readonly attribute TimeTicksType ifLastChange;

        /*
             The total number of octets received on the interface,
             
             
             including framing characters.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifInOctets;

        /*
             The number of packets, delivered by this sub-layer to a
             higher (sub-)layer, which were not addressed to a multicast
             or broadcast address at this sub-layer.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifInUcastPkts;

        /*
             The number of inbound packets which were chosen to be
             discarded even though no errors had been detected to prevent
             
             
             their being deliverable to a higher-layer protocol.  One
             possible reason for discarding such a packet could be to
             free up buffer space.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifInDiscards;

        /*
             For packet-oriented interfaces, the number of inbound
             packets that contained errors preventing them from being
             deliverable to a higher-layer protocol.  For character-
             oriented or fixed-length interfaces, the number of inbound
             transmission units that contained errors preventing them
             from being deliverable to a higher-layer protocol.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifInErrors;

        /*
             For packet-oriented interfaces, the number of packets
             received via the interface which were discarded because of
             an unknown or unsupported protocol.  For character-oriented
             or fixed-length interfaces that support protocol
             multiplexing the number of transmission units received via
             the interface which were discarded because of an unknown or
             unsupported protocol.  For any interface that does not
             support protocol multiplexing, this counter will always be
             0.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifInUnknownProtos;

        /*
             The total number of octets transmitted out of the
             interface, including framing characters.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifOutOctets;

        /*
             The total number of packets that higher-level protocols
             requested be transmitted, and which were not addressed to a
             multicast or broadcast address at this sub-layer, including
             those that were discarded or not sent.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifOutUcastPkts;

        /*
             The number of outbound packets which were chosen to be
             discarded even though no errors had been detected to prevent
             their being transmitted.  One possible reason for discarding
             such a packet could be to free up buffer space.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifOutDiscards;

        /*
             For packet-oriented interfaces, the number of outbound
             packets that could not be transmitted because of errors.
             For character-oriented or fixed-length interfaces, the
             number of outbound transmission units that could not be
             transmitted because of errors.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifOutErrors;
    };

    interface ifMIBObjects : SNMPMgmt::SmiEntry {

        /*
             A list of interface entries.  The number of entries is
             given by the value of ifNumber.  This table contains
             additional objects for the interface table.
        */
        SNMPMgmt::SmiTableIterator get_ifXTable();

        /*
             The table containing information on the relationships
             between the multiple sub-layers of network interfaces.  In
             particular, it contains information on which sub-layers run
             'on top of' which other sub-layers, where each sub-layer
             corresponds to a conceptual row in the ifTable.  For
             example, when the sub-layer with ifIndex value x runs over
             the sub-layer with ifIndex value y, then this table
             contains:
             
               ifStackStatus.x.y=active
             
             For each ifIndex value, I, which identifies an active
             interface, there are always at least two instantiated rows
             in this table associated with I.  For one of these rows, I
             is the value of ifStackHigherLayer; for the other, I is the
             value of ifStackLowerLayer.  (If I is not involved in
             multiplexing, then these are the only two rows associated
             with I.)
             
             For example, two rows exist even for an interface which has
             no others stacked on top or below it:
             
               ifStackStatus.0.x=active
               ifStackStatus.x.0=active 
        */
        SNMPMgmt::SmiTableIterator get_ifStackTable();

        /*
             This table contains an entry for each address (broadcast,
             multicast, or uni-cast) for which the system will receive
             packets/frames on a particular interface, except as follows:
             
             - for an interface operating in promiscuous mode, entries
             are only required for those addresses for which the system
             would receive frames were it not operating in promiscuous
             mode.
             
             
             - for 802.5 functional addresses, only one entry is
             required, for the address which has the functional address
             bit ANDed with the bit mask of all functional addresses for
             which the interface will accept frames.
             
             A system is normally able to use any unicast address which
             corresponds to an entry in this table as a source address.
        */
        SNMPMgmt::SmiTableIterator get_ifRcvAddressTable();

        /*
             The value of sysUpTime at the time of the last creation or
             deletion of an entry in the ifTable.  If the number of
             entries has been unchanged since the last re-initialization
             of the local network management subsystem, then this object
             contains a zero value.
        */
        readonly attribute TimeTicksType ifTableLastChange;

        /*
             The value of sysUpTime at the time of the last change of
             the (whole) interface stack.  A change of the interface
             stack is defined to be any creation, deletion, or change in
             value of any instance of ifStackStatus.  If the interface
             stack has been unchanged since the last re-initialization of
             the local network management subsystem, then this object
             contains a zero value.
        */
        readonly attribute TimeTicksType ifStackLastChange;
    };


    /*
             An entry containing additional management information
             applicable to a particular interface.
    */
    interface ifXEntry : IF_MIB::ifEntry {

        /*
             The textual name of the interface.  The value of this
             object should be the name of the interface as assigned by
             the local device and should be suitable for use in commands
             entered at the device's `console'.  This might be a text
             name, such as `le0' or a simple port number, such as `1',
             depending on the interface naming syntax of the device.  If
             several entries in the ifTable together represent a single
             interface as named by the device, then each will have the
             same value of ifName.  Note that for an agent which responds
             to SNMP queries concerning an interface on some other
             (proxied) device, then the value of ifName for such an
             interface is the proxied device's local name for it.
             
             If there is no local name, or this object is otherwise not
             applicable, then this object contains a zero-length string.
        */
        readonly attribute DisplayStringType ifName;

        /*
             The number of packets, delivered by this sub-layer to a
             higher (sub-)layer, which were addressed to a multicast
             address at this sub-layer.  For a MAC layer protocol, this
             includes both Group and Functional addresses.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             
             
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifInMulticastPkts;

        /*
             The number of packets, delivered by this sub-layer to a
             higher (sub-)layer, which were addressed to a broadcast
             address at this sub-layer.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifInBroadcastPkts;

        /*
             The total number of packets that higher-level protocols
             requested be transmitted, and which were addressed to a
             multicast address at this sub-layer, including those that
             were discarded or not sent.  For a MAC layer protocol, this
             includes both Group and Functional addresses.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifOutMulticastPkts;

        /*
             The total number of packets that higher-level protocols
             requested be transmitted, and which were addressed to a
             broadcast address at this sub-layer, including those that
             were discarded or not sent.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             
             
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter32Type ifOutBroadcastPkts;

        /*
             The total number of octets received on the interface,
             including framing characters.  This object is a 64-bit
             version of ifInOctets.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter64Type ifHCInOctets;

        /*
             The number of packets, delivered by this sub-layer to a
             higher (sub-)layer, which were not addressed to a multicast
             or broadcast address at this sub-layer.  This object is a
             64-bit version of ifInUcastPkts.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter64Type ifHCInUcastPkts;

        /*
             The number of packets, delivered by this sub-layer to a
             higher (sub-)layer, which were addressed to a multicast
             address at this sub-layer.  For a MAC layer protocol, this
             includes both Group and Functional addresses.  This object
             is a 64-bit version of ifInMulticastPkts.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter64Type ifHCInMulticastPkts;

        /*
             The number of packets, delivered by this sub-layer to a
             higher (sub-)layer, which were addressed to a broadcast
             address at this sub-layer.  This object is a 64-bit version
             of ifInBroadcastPkts.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter64Type ifHCInBroadcastPkts;

        /*
             The total number of octets transmitted out of the
             interface, including framing characters.  This object is a
             64-bit version of ifOutOctets.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter64Type ifHCOutOctets;

        /*
             The total number of packets that higher-level protocols
             requested be transmitted, and which were not addressed to a
             multicast or broadcast address at this sub-layer, including
             those that were discarded or not sent.  This object is a
             64-bit version of ifOutUcastPkts.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter64Type ifHCOutUcastPkts;

        /*
             The total number of packets that higher-level protocols
             requested be transmitted, and which were addressed to a
             multicast address at this sub-layer, including those that
             were discarded or not sent.  For a MAC layer protocol, this
             includes both Group and Functional addresses.  This object
             is a 64-bit version of ifOutMulticastPkts.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter64Type ifHCOutMulticastPkts;

        /*
             The total number of packets that higher-level protocols
             requested be transmitted, and which were addressed to a
             broadcast address at this sub-layer, including those that
             were discarded or not sent.  This object is a 64-bit version
             of ifOutBroadcastPkts.
             
             Discontinuities in the value of this counter can occur at
             re-initialization of the management system, and at other
             times as indicated by the value of
             ifCounterDiscontinuityTime.
        */
        readonly attribute Counter64Type ifHCOutBroadcastPkts;

        /*
             Indicates whether linkUp/linkDown traps should be generated
             for this interface.
             
             By default, this object should have the value enabled(1) for
             interfaces which do not operate on 'top' of any other
             interface (as defined in the ifStackTable), and disabled(2)
             otherwise.
        */
        attribute IfLinkUpDownTrapEnableType ifLinkUpDownTrapEnable;

        /*
             An estimate of the interface's current bandwidth in units
             of 1,000,000 bits per second.  If this object reports a
             value of `n' then the speed of the interface is somewhere in
             the range of `n-500,000' to `n+499,999'.  For interfaces
             which do not vary in bandwidth or for those where no
             accurate estimation can be made, this object should contain
             the nominal bandwidth.  For a sub-layer which has no concept
             of bandwidth, this object should be zero.
        */
        readonly attribute Gauge32Type ifHighSpeed;

        /*
             This object has a value of false(2) if this interface only
             accepts packets/frames that are addressed to this station.
             This object has a value of true(1) when the station accepts
             all packets/frames transmitted on the media.  The value
             true(1) is only legal on certain types of media.  If legal,
             setting this object to a value of true(1) may require the
             interface to be reset before becoming effective.
             
             The value of ifPromiscuousMode does not affect the reception
             of broadcast and multicast packets/frames by the interface.
        */
        attribute TruthValueType ifPromiscuousMode;

        /*
             This object has the value 'true(1)' if the interface
             sublayer has a physical connector and the value 'false(2)'
             otherwise.
        */
        readonly attribute TruthValueType ifConnectorPresent;

        /*
             This object is an 'alias' name for the interface as
             specified by a network manager, and provides a non-volatile
             'handle' for the interface.
             
             On the first instantiation of an interface, the value of
             ifAlias associated with that interface is the zero-length
             string.  As and when a value is written into an instance of
             ifAlias through a network management set operation, then the
             agent must retain the supplied value in the ifAlias instance
             associated with the same interface for as long as that
             interface remains instantiated, including across all re-
             initializations/reboots of the network management system,
             including those which result in a change of the interface's
             ifIndex value.
             
             An example of the value which a network manager might store
             in this object for a WAN interface is the (Telco's) circuit
             number/identifier of the interface.
             
             Some agents may support write-access only for interfaces
             having particular values of ifType.  An agent which supports
             write access to this object is required to keep the value in
             non-volatile storage, but it may limit the length of new
             values depending on how much storage is already occupied by
             the current values for other interfaces.
        */
        attribute IfAliasType ifAlias;

        /*
             The value of sysUpTime on the most recent occasion at which
             any one or more of this interface's counters suffered a
             discontinuity.  The relevant counters are the specific
             instances associated with this interface of any Counter32 or
             
             
             Counter64 object contained in the ifTable or ifXTable.  If
             no such discontinuities have occurred since the last re-
             initialization of the local management subsystem, then this
             object contains a zero value.
        */
        readonly attribute TimeStampType ifCounterDiscontinuityTime;
    };


    /*
             Information on a particular relationship between two sub-
             layers, specifying that one sub-layer runs on 'top' of the
             other sub-layer.  Each sub-layer corresponds to a conceptual
             row in the ifTable.
    */
    interface ifStackEntry : SNMPMgmt::SmiEntry {

        const string IndexVarList = "ifStackHigherLayer ifStackLowerLayer";

        /*
             The status of the relationship between two sub-layers.
             
             Changing the value of this object from 'active' to
             'notInService' or 'destroy' will likely have consequences up
             and down the interface stack.  Thus, write access to this
             object is likely to be inappropriate for some types of
             interfaces, and many implementations will choose not to
             support write-access for any type of interface.
        */
        attribute RowStatusType ifStackStatus;
    };


    /*
             A list of objects identifying an address for which the
             system will accept packets/frames on the particular
             interface identified by the index value ifIndex.
    */
    interface ifRcvAddressEntry : SNMPMgmt::SmiEntry {

        const string IndexVarList = "ifIndex ifRcvAddressAddress";

        /*
             This object is used to create and delete rows in the
             ifRcvAddressTable.
        */
        attribute RowStatusType ifRcvAddressStatus;

        /*
             This object has the value nonVolatile(3) for those entries
             in the table which are valid and will not be deleted by the
             next restart of the managed system.  Entries having the
             value volatile(2) are valid and exist, but have not been
             saved, so that will not exist after the next restart of the
             managed system.  Entries having the value other(1) are valid
             and exist but are not classified as to whether they will
             continue to exist after the next restart.
        */
        attribute IfRcvAddressTypeType ifRcvAddressType;
    };

    struct IfIndexVBType {
        string var_name;
        string var_index;
        InterfaceIndexType ifIndex;
    };

    struct IfAdminStatusVBType {
        string var_name;
        string var_index;
        IfAdminStatusType ifAdminStatus;
    };

    struct IfOperStatusVBType {
        string var_name;
        string var_index;
        IfOperStatusType ifOperStatus;
    };

    struct LinkDownType {
        IfIndexVBType ifIndex;
        IfAdminStatusVBType ifAdminStatus;
        IfOperStatusVBType ifOperStatus;
    };

    struct LinkUpType {
        IfIndexVBType ifIndex;
        IfAdminStatusVBType ifAdminStatus;
        IfOperStatusVBType ifOperStatus;
    };

    /* typed push event communication */
    interface Notifications : SNMPMgmt::Notifications {

        /*
             A linkDown trap signifies that the SNMP entity, acting in
             an agent role, has detected that the ifOperStatus object for
             one of its communication links is about to enter the down
             state from some other state (but not from the notPresent
             state).  This other state is indicated by the included value
             of ifOperStatus.
        */
        void linkDown (
            in CosNaming::Name src_entry_name,
            in CORBA::ScopedName event_type,
            in ASN1_GeneralizedTime event_time,
            in LinkDownType notification_info
        );

        /*
             A linkUp trap signifies that the SNMP entity, acting in an
             agent role, has detected that the ifOperStatus object for
             one of its communication links left the down state and
             transitioned into some other state (but not into the
             notPresent state).  This other state is indicated by the
             included value of ifOperStatus.
        */
        void linkUp (
            in CosNaming::Name src_entry_name,
            in CORBA::ScopedName event_type,
            in ASN1_GeneralizedTime event_time,
            in LinkUpType notification_info
        );
    };

    /* typed pull event communication */
    interface PullNotifications : SNMPMgmt::PullNotifications {

        /*
             A linkDown trap signifies that the SNMP entity, acting in
             an agent role, has detected that the ifOperStatus object for
             one of its communication links is about to enter the down
             state from some other state (but not from the notPresent
             state).  This other state is indicated by the included value
             of ifOperStatus.
        */
        void pull_linkDown (
            out CosNaming::Name src_entry_name,
            out CORBA::ScopedName event_type,
            out ASN1_GeneralizedTime event_time,
            out LinkDownType notification_info
        );
        boolean try_linkDown (
            out CosNaming::Name src_entry_name,
            out CORBA::ScopedName event_type,
            out ASN1_GeneralizedTime event_time,
            out LinkDownType notification_info
        );

        /*
             A linkUp trap signifies that the SNMP entity, acting in an
             agent role, has detected that the ifOperStatus object for
             one of its communication links left the down state and
             transitioned into some other state (but not into the
             notPresent state).  This other state is indicated by the
             included value of ifOperStatus.
        */
        void pull_linkUp (
            out CosNaming::Name src_entry_name,
            out CORBA::ScopedName event_type,
            out ASN1_GeneralizedTime event_time,
            out LinkUpType notification_info
        );
        boolean try_linkUp (
            out CosNaming::Name src_entry_name,
            out CORBA::ScopedName event_type,
            out ASN1_GeneralizedTime event_time,
            out LinkUpType notification_info
        );
    };

    interface SmiEntryFactory : SNMPMgmt::GenericFactory {

        ifEntry create_ifEntry (
            in InterfaceIndexType ifIndex,
            in IfAdminStatusType ifAdminStatus
        ) raises (
            SNMPMgmt::AlreadyExists,
            CosLifeCycle::InvalidCriteria,
            CosLifeCycle::CannotMeetCriteria
        );

        ifXEntry create_ifXEntry (
            in IfLinkUpDownTrapEnableType ifLinkUpDownTrapEnable,
            in TruthValueType ifPromiscuousMode,
            in IfAliasType ifAlias
        ) raises (
            SNMPMgmt::AlreadyExists,
            CosLifeCycle::InvalidCriteria,
            CosLifeCycle::CannotMeetCriteria
        );

        ifStackEntry create_ifStackEntry (
            in InterfaceIndexOrZeroType ifStackHigherLayer,
            in InterfaceIndexOrZeroType ifStackLowerLayer,
            in RowStatusType ifStackStatus
        ) raises (
            SNMPMgmt::AlreadyExists,
            CosLifeCycle::InvalidCriteria,
            CosLifeCycle::CannotMeetCriteria
        );

        ifRcvAddressEntry create_ifRcvAddressEntry (
            in InterfaceIndexType ifIndex,
            in PhysAddressType ifRcvAddressAddress,
            in RowStatusType ifRcvAddressStatus,
            in IfRcvAddressTypeType ifRcvAddressType
        ) raises (
            SNMPMgmt::AlreadyExists,
            CosLifeCycle::InvalidCriteria,
            CosLifeCycle::CannotMeetCriteria
        );
    };

    /* pseudo */
    interface DefaultValues {
        /* DEFVAL:  volatile */
        IfRcvAddressTypeType ifRcvAddressType();

    };

    /* pseudo */
    interface TextualConventions {

        /*
             A unique value, greater than zero, for each interface or
             interface sub-layer in the managed system.  It is
             recommended that values are assigned contiguously starting
             from 1.  The value for each interface sub-layer must remain
             constant at least from one re-initialization of the entity's
             network management system to the next re-initialization.
        DISPLAY-HINT: d
        */
        string InterfaceIndexToString (in InterfaceIndexType Value);
        InterfaceIndexType InterfaceIndexFromString (in string str);

        /*
             This textual convention is an extension of the
             InterfaceIndex convention.  The latter defines a greater
             than zero value used to identify an interface or interface
             sub-layer in the managed system.  This extension permits the
             additional value of zero.  the value zero is object-specific
             and must therefore be defined as part of the description of
             any object which uses this syntax.  Examples of the usage of
             zero might include situations where interface was unknown,
             or when none or all interfaces need to be referenced.
        DISPLAY-HINT: d
        */
        string InterfaceIndexOrZeroToString (in InterfaceIndexOrZeroType Value);
        InterfaceIndexOrZeroType InterfaceIndexOrZeroFromString (in string str);
    };

};

#endif /* !_IF_MIB_IDL_ */
