Dial Control Management Information Base
                 draft-ietf-isdnmib-dial-control-03.txt

                    Mon
                 draft-ietf-isdnmib-dial-control-04.txt

                    Sat Apr 22 23:15:11 27 10:59:38 MET DST 1996

                         Guenter Roeck (editor)
                              Conware GmbH
                            roeck@conware.de

                          Status of this Memo

This document is an Internet-Draft.  Internet-Drafts are working
documents of the Internet Engineering Task Force (IETF), its Areas, and
its Working Groups.  Note that other groups may also distribute working
documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time.  It is inappropriate to use Internet-Drafts as reference material
or to cite them other than as a "work in progress".

To learn the current status of any Internet-Draft, please check the
"1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe),
munnari.oz.au (Pacific Rim), ds.internic.net (US East Coast), or
ftp.isi.edu (US West Coast).

1.  Introduction

This draft defines an experimental portion of the Management Information
Base (MIB) for use with network management protocols in the Internet
community.  In particular, it describes managed objects used for
managing demand access circuits, including ISDN.

This document specifies a MIB module in a manner that is both compliant
to the SNMPv2 SMI, and semantically identical to the peer SNMPv1
definitions.

This document is a product of the ISDN MIB working group within the
Internet Engineering Task Force.  Comments are solicited and should be
addressed to the working group's mailing list at isdn-mib@cisco.com
and/or the author.

2.  The SNMPv2 Network Management Framework

The SNMPv2 Network Management Framework presently consists of three
major components.  They are:

o    the SMI, described in RFC 1902 [1] - the mechanisms used for
     describing and naming objects for the purpose of management.

o    the MIB-II, STD 17, RFC 1213 [2] - the core set of managed objects
     for the Internet suite of protocols.

o    the protocol, RFC 1157 [3] and/or RFC 1905 [4], - the protocol for
     accessing managed objects.

The Framework permits new objects to be defined for the purpose of
experimentation and evaluation.

2.1.  Object Definitions

Managed objects are accessed via a virtual information store, termed the
Management Information Base or MIB.  Objects in the MIB are defined
using the subset of Abstract Syntax Notation One (ASN.1) defined in the
SMI.  In particular, each object type is named by an OBJECT IDENTIFIER,
an administratively assigned name.  The object type together with an
object instance serves to uniquely identify a specific instantiation of
the object.  For human convenience, we often use a textual string,
termed the descriptor, to refer to the object type.

3.  Overview

3.1.  Structure of MIB

Managing Neighbors requires the following groups of information:

o    General configuration information.

o    Information to describe neighbors and neighbor statistics.

o    Information to retain call history.

The MIB, therefore, consists of three groups.

o    The dialCtlConfiguration group is used to specify general
     configuration information.

o    The dialCtlNeighbor group is used to describe neighbors and
     neighbor statistics.

o    The callHistory group is used to store call history information.
     These calls could be circuit switched or they could be virtual
     circuits. History of each and every call is stored, of successful
     calls as well as unsuccessful and rejected calls.  An entry will be
     created when a call is cleared.

3.2.  Relationship to RFC1573

RFC 1573, the Interface MIB Evolution, requires that any MIB module
which is an adjunct of the Interface MIB, clarify specific areas within
the Interface MIB.  These areas were intentionally left vague in RFC
1573 to avoid over constraining the MIB module, thereby precluding
management of certain media-types.

Section 3.3 of RFC 1573 enumerates several areas which a media-specific
MIB module must clarify.  Each of these areas is addressed in a
following subsection.  The implementor is referred to RFC 1573 in order
to understand the general intent of these areas.

3.2.1.  Layering Model and Virtual Circuits

On an occasional access channel, there are a number of neighboring
systems that are permitted to call or be called, all of which need to be
treated as active from a routing viewpoint, but most of which have no
call in progress at any given time.

On dialup interfaces, this is further complicated by the fact that calls
to a given neighbor float from channel to channel. One cannot
definitively say "I call this neighbor on that interface." It is
necessary, therefore, to provide a mapping algorithm between the low-

level interfaces, and the various logical interfaces supporting the
neighbors.  This is solved by creating a logical interface (ifEntry) for
each neighbor and a logical interface (ifEntry) for each low-level
interface.  These are then correlated using the ifStackTable.

The low-level interfaces will either be physical interfaces, e.g.  modem
interfaces, or logical interfaces, e.g. ISDN B channels, which then in
turn will be layered on top of physical ISDN interfaces.

The model, therefore, looks something like this, taking ISDN as an
example:

+-------------------------------------------------------+
|               Network Layer Protocol                  |
+------+ +-------+ +-------+ +-------+ +-------+ +------+
       | |       | |       | |       | |       | | <== appears active
     +-+ +-+   +-+ +-+   +-+ +-+   +-+ +-+   +-+ +-+
     | PPP |   | PPP |   | F/R |   | PPP |   | F/R |
     | for |   | for |   | for |   | for |   | for |   ifEntry with
     |Nbr 1|   |Nbr 2|   |switch   |Nbr 3|   |switch   shadow
     |     |   |     |   |  A  |   |     |   |  B  |   NeighborEntry
     +-+ +-+   +-+ +-+   +-+ +-+   +-+ +-+   +-+ +-+
                 | |                 | |           <== some actually are
    +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+
    |   B   | |   B   | |   B   | |   B   | |   B   |
    |channel| |channel| |channel| |channel| |channel|
    +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+
       | |       | |       | |       | |       | |
+------+ +-------+ +-------+ +-------+ +-------+ +------+
|             Basic/Primary Rate Interface              |
+-------------------------------------------------------+

Mapping of IP interfaces to Called Neighbors to B Channels

IfEntries are maintained for each neighbor.

In this model, each neighbor is required to have an associated network
layer interface. This interface can be of any kind, e.g. PPP or LAPB.

In order to specify the network address for a given neighbor, one would
then usually add a routing/forwarding table entry, pointing to the
network layer interface through which this neighbor can be reached.

3.2.2.  ifTestTable

The ifTestTable usage will be defined in the MIBs defining the
encapsulation below the network layer.  For example, if PPP
encapsulation is being used, the ifTestTable will be defined by PPP.

3.2.3.  ifRcvAddressTable

The ifRcvAddressTable usage will be defined in the MIBs defining the
encapsulation below the network layer.  For example, if PPP
encapsulation is being used, the ifRcvAddressTable will be defined by
PPP.

3.2.3.1.  ifEntry for a single neighbor

IfEntries will be defined in the MIBs defining the encapsulation below
the network layer.  For example, if PPP encapsulation is being used, the
ifEntry will be defined by PPP.

3.3.  Multilink and backup line support

In order to support multilink and backup procedures, there may be
several entries for a single neighbor in the dialCtlNbrCfgTable.

A single neighbor will be identified using the dialCtlNbrCfgId object of
the dialCtlNbrCfgTable.  There may be several entries in
dialCtlNbrCfgTable with the same value of dialCtlNbrCfgId, but different
ifIndex values.  Each of those entries will then describe a possible
connection to the same neighbor.  Such entries can then be used to
handle multilink as well as backup procedures, e.g. by bundling the
attached ifEntries using PPP multilink.

3.4.  Support for generic neighbors

Generic neighbors can for example be supported by permitting wild-card
characters (e.g., '?' or '*') in dialCtlNbrCfgAnswerAddress.  A number
to be accepted could then be defined as partly (e.g., '*1234') or
entirely generic (e.g., '*').

A detailed specification of such a functionality is outside the scope of
this document.

However, the implementor should be aware that supporting generic
neighbors may cause a security hole.  The user would not know where a
call is from, which could potentially allow unauthorized access.

4.  Definitions

4.1.  Dial Control MIB

DIAL-CONTROL-MIB DEFINITIONS ::= BEGIN

IMPORTS
        MODULE-IDENTITY,
        NOTIFICATION-TYPE,
        OBJECT-TYPE,
        Counter32
                FROM SNMPv2-SMI
        DisplayString,
        TimeStamp,
        RowStatus,
        TestAndIncr
                 FROM SNMPv2-TC
        MODULE-COMPLIANCE,
        OBJECT-GROUP
                FROM SNMPv2-CONF
        IANAifType
                FROM IANAifType-MIB
        ifOperStatus,
        InterfaceIndex,
        InterfaceIndexOrZero
                FROM IF-MIB
        transmission
                FROM RFC1213-MIB;

dialControlMib MODULE-IDENTITY
        LAST-UPDATED    "9604222310Z"    "9604271037Z" -- Apr 22, 27, 1996
        ORGANIZATION    "IETF ISDN Working Group"
        CONTACT-INFO
            "        Guenter Roeck
             Postal: Conware GmbH
                     Killisfeldstrasse 64
                     76227 Karlsruhe
                     Germany
             Tel:    +49 721 9495 0
             E-mail: roeck@conware.de"
        DESCRIPTION
            "The MIB module to describe neighbors
             for demand access and possibly other
             kinds of interfaces."
        ::= { transmission 21 }

-- Dial Control Mib objects definitions

dialControlMibObjects OBJECT IDENTIFIER ::= { dialControlMib 1 }

-- General configuration group

dialCtlConfiguration OBJECT IDENTIFIER ::= { dialControlMibObjects 1 }

-- general configuration data/parameters

dialCtlAcceptMode OBJECT-TYPE
        SYNTAX INTEGER {
            acceptNone(1),
            acceptAll(2),
            acceptKnown(3)
        }
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
            "The security level for acceptance of incoming calls.
             acceptNone(1)  - incoming calls will not be accepted
             acceptAll(2)   - incoming calls will be accepted,
                              even if there is no matching entry
                              in the dialCtlNbrCfgTable
             acceptKnown(3) - incoming calls will be accepted only
                              if there is a matching entry in the
                              dialCtlNbrCfgTable
            "
        ::= { dialCtlConfiguration 1 }

dialCtlCallInfoTrapEnable OBJECT-TYPE
        SYNTAX      INTEGER {
            enabled(1),
            disabled(2)
        }
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "This object indicates whether dialCtlNbrCallInformation
             traps should be generated for all neighbors. If the value
             of this object is enabled(1), dialCtlNbrCallInformation
             traps will be generated for all neighbors. If the value
             of this object is disabled(2), dialCtlNbrCallInformation
             traps will be generated only for neighbors having
             dialCtlNbrCallInfoTrapEnable set to enabled(1)."
        DEFVAL      { disabled }
        ::= { dialCtlConfiguration 2 }

-- Neighbor group

dialCtlNeighbor OBJECT IDENTIFIER ::= { dialControlMibObjects 2 }

dialCtlNbrGetIndex OBJECT-TYPE
        SYNTAX      TestAndIncr
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
            "The recommended procedure for selecting a new index for
             dialCtlNbrCfgTable row creation is to GET the value of
             this object, and then to SET the object with the same
             value. If the SET operation succeeds, the manager can use
             this value as an index to create a new row in this table."
        REFERENCE
            "RFC1903, TestAndIncr textual convention."
        ::= { dialCtlNeighbor 1 }

-- neighbor configuration table

dialCtlNbrCfgTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF DialCtlNbrCfgEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The list of neighbors from which the managed device
             will accept calls or to which it will place them."
       ::= { dialCtlNeighbor 2 }

dialCtlNbrCfgEntry OBJECT-TYPE
        SYNTAX      DialCtlNbrCfgEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A single Neighbor. This entry is effectively permanent,
             and contains information describing the neighbor and his
             permissions.
             The value of dialCtlNbrCfgOriginateAddress must be
             specified before a new row in this table can become
             active(1). Any writeable parameters in an existing entry
             can be modified while the entry is active. The modification
             will take effect when the neighbor in question will be
             called the next time."
        INDEX       { dialCtlNbrCfgId, dialCtlNbrCfgIndex }
      ::= { dialCtlNbrCfgTable 1 }

DialCtlNbrCfgEntry ::= SEQUENCE {
            dialCtlNbrCfgId                 INTEGER,
                                            -- neighbor ID
            dialCtlNbrCfgIndex              INTEGER,
                                            -- index value
            dialCtlNbrCfgIfIndex            InterfaceIndex,
            dialCtlNbrCfgIfType             IANAifType,
            dialCtlNbrCfgLowerIf            InterfaceIndexOrZero,
                                            -- ifIndex value of
                                            -- lower interface
            dialCtlNbrCfgOriginateAddress   DisplayString,
                                            -- Call Address (outgoing)
            dialCtlNbrCfgAnswerAddress      DisplayString,
                                            -- Call Address (incoming)
            dialCtlNbrCfgSubAddress         DisplayString,
                                            -- Call Subaddress
            dialCtlNbrCfgClosedUserGroup    DisplayString,
                                            -- Closed User Group
            dialCtlNbrCfgSpeed              INTEGER,
                                            -- desired speed in
                                            -- bit/second
            dialCtlNbrCfgPermission         INTEGER,
                                            -- applicable permissions
            dialCtlNbrCfgInactivityTimer    INTEGER,
                                            -- disconnect idle timer
            dialCtlNbrCfgMinDuration        INTEGER,
                                            -- Min call duration
            dialCtlNbrCfgMaxDuration        INTEGER,
                                            -- Max call duration
            dialCtlNbrCfgCarrierDelay       INTEGER,
                                            -- call connect time
            dialCtlNbrCfgCallRetries        INTEGER,
                                            -- number of call retries
            dialCtlNbrCfgRetryDelay         INTEGER,
                                            -- time between call
                                            -- attempts
            dialCtlNbrCfgFailureDelay       INTEGER,
                                            -- retry time after failure
            dialCtlNbrCallInfoTrapEnable    INTEGER,
                                            -- to enable/disable traps
            dialCtlNbrCfgStatus             RowStatus
        }

dialCtlNbrCfgId OBJECT-TYPE
        SYNTAX      INTEGER (1..2147483647)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "This object defines a single neighbor. There may
             be several entries in this table for one neighbor,
             defining different ways of reaching this neighbor.
             Thus, there may be several entries in this table
             with the same value of dialCtlNbrCfgId.
             Multiple entries for one neighbor may be used to support
             multilink as well as backup lines.
             A single neighbor will be identified by a unique value
             of this object. Several entries for one neighbor MUST
             have the same value of dialCtlNbrCfgId, but different
             ifEntries and thus different values of ifIndex and
             dialCtlNbrCfgIndex."
        ::= { dialCtlNbrCfgEntry 1 }

dialCtlNbrCfgIndex OBJECT-TYPE
        SYNTAX      INTEGER (1..2147483647)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The index value which uniquely identifies an entry
             in this table."
        ::= { dialCtlNbrCfgEntry 2 }

dialCtlNbrCfgIfIndex OBJECT-TYPE
        SYNTAX      InterfaceIndex
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The ifIndex value of the interface associated with this
             neighbor."
        ::= { dialCtlNbrCfgEntry 3 }

dialCtlNbrCfgIfType OBJECT-TYPE
        SYNTAX      IANAifType
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "The interface type to be used for calling this neighbor.
             In case of ISDN, the value of isdn(63) is to be used."
        DEFVAL      { other }
        ::= { dialCtlNbrCfgEntry 4 }

dialCtlNbrCfgLowerIf OBJECT-TYPE
        SYNTAX      InterfaceIndexOrZero
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "ifIndex value of an interface the neighbor will have to be
             called on. For example, on an ISDN interface, this can be
             the ifIndex value of a D channel or the ifIndex value of a
             B channel, whatever is appropriate for a given neighbor.
             As an example, for Basic Rate leased lines it will be
             necessary to specify a B channel ifIndex, while for
             semi-permanent connections the D channel ifIndex has
             to be specified.
             If the interface can be dynamically assigned, this object
             has a value of zero."
        DEFVAL      { 0 }
        ::= { dialCtlNbrCfgEntry 5 }

dialCtlNbrCfgOriginateAddress OBJECT-TYPE
        SYNTAX      DisplayString
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "Call Address at which the neighbor will be called.
             Think of this as the set of characters following 'ATDT '
             or the 'phone number' included in a D channel call request.

             The structure of this information will be switch type
             specific."
        ::= { dialCtlNbrCfgEntry 6 }

dialCtlNbrCfgAnswerAddress OBJECT-TYPE
        SYNTAX      DisplayString
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "Calling Party Number information element, as for example
             passed in an ISDN SETUP message by a PBX or switch,
             for incoming calls.
             This address can be used to identify the neighbor.
             If this address is either unknown or identical
             to dialCtlNbrCfgOriginateAddress, this object will be
             a zero length string."
        DEFVAL      { "" }
        ::= { dialCtlNbrCfgEntry 7 }

dialCtlNbrCfgSubAddress OBJECT-TYPE
        SYNTAX      DisplayString
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "Subaddress at which the neighbor will be called.
             If the subaddress is undefined for the given media or
             unused, this is a zero length string."
        DEFVAL      { "" }
        ::= { dialCtlNbrCfgEntry 8 }

dialCtlNbrCfgClosedUserGroup OBJECT-TYPE
        SYNTAX      DisplayString
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "Closed User Group at which the neighbor will be called.
             If the Closed User Group is undefined for the given media
             or unused, this is a zero length string."
        REFERENCE
            "Q.931, chapter 4.6.1."
        DEFVAL      { "" }
        ::= { dialCtlNbrCfgEntry 9 }

dialCtlNbrCfgSpeed OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "The desired information transfer speed in bits/second
             when calling this neighbor.
             The detailed media specific information, e.g. information
             type and information transfer rate for ISDN circuits,
             has to be extracted from this object.
             If the transfer speed to be used is unknown or the default
             speed for this type of interfaces, the value of this object
             may be zero."
        DEFVAL      { 0 }
        ::= { dialCtlNbrCfgEntry 10 }

dialCtlNbrCfgPermission OBJECT-TYPE
        SYNTAX      INTEGER {
            originate(1),
            answer(2),
            both(3),               -- both originate & answer
            callback(4),
            none(5)
        }
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "Applicable permissions. callback(4) either rejects the
             call and then calls back, or uses the 'Reverse charging'
             information element if it is available.
             Note that callback(4) is supposed to control charging, not
             security, and applies to callback prior to accepting a
             call. Callback for security reasons can be handled using
             PPP callback."
        DEFVAL      { both }
        ::= { dialCtlNbrCfgEntry 11 }

dialCtlNbrCfgInactivityTimer OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        UNITS       "seconds"
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "The connection will be automatically disconnected
             if no longer carrying useful data for a time
             period, in seconds, specified in this object.
             Useful data in this context refers to forwarding
             packets, including routing information; it
             excludes the encapsulator maintenance frames.
             A value of zero means the connection will not be
             automatically taken down due to inactivity,
             which implies that it is a dedicated circuit."
        DEFVAL      { 0 }
        ::= { dialCtlNbrCfgEntry 12 }

dialCtlNbrCfgMinDuration OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "Minimum duration of a call in seconds, starting from the
             time the call is connected until the call is disconnected.
             This is to accomplish the fact that in most countries
             charging applies to units of time, which should be matched
             as closely as possible."
        DEFVAL      { 0 }
        ::= { dialCtlNbrCfgEntry 13 }

dialCtlNbrCfgMaxDuration OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "Maximum call duration in seconds. Zero means 'unlimited'."
        DEFVAL      { 0 }
        ::= { dialCtlNbrCfgEntry 14 }

dialCtlNbrCfgCarrierDelay OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        UNITS       "seconds"
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "The call timeout time in seconds. The default value
             of zero means that the call timeout as specified for
             the media in question will apply."
        DEFVAL      { 0 }
        ::= { dialCtlNbrCfgEntry 15 }

dialCtlNbrCfgCallRetries OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "The number of calls to a non-responding address
             that may be made. A retry count of zero means
             there is no bound. The intent is to bound
             the number of successive calls to an address
             which is inaccessible, or which refuses those calls.

             Some countries regulate the number of call retries
             to a given neighbor that can be made."
        DEFVAL      { 0 }
        ::= { dialCtlNbrCfgEntry 16 }

dialCtlNbrCfgRetryDelay OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        UNITS       "seconds"
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "The time in seconds between call retries if a neighbor
             cannot be reached.

             A value of zero means that call retries may be done
             without any delay."
        DEFVAL      { 0 }
        ::= { dialCtlNbrCfgEntry 17 }

dialCtlNbrCfgFailureDelay OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        UNITS       "seconds"
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "The time in seconds after which call attempts are
             to be placed again after a neighbor has been noticed
             to be unreachable, i.e. after dialCtlNbrCfgCallRetries
             unsuccessful call attempts.
             A value of zero means that a neighbor will not be called
             again after dialCtlNbrCfgCallRetries unsuccessful call
             attempts."
        DEFVAL      { 0 }
        ::= { dialCtlNbrCfgEntry 18 }

dialCtlNbrCallInfoTrapEnable OBJECT-TYPE
        SYNTAX      INTEGER {
            enabled(1),
            disabled(2)
        }
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "Indicates
            "This object indicates whether dialCtlNbrCallInformation
             traps should be generated for this neighbor."
        DEFVAL      { disabled }
        ::= { dialCtlNbrCfgEntry 19 }

dialCtlNbrCfgStatus OBJECT-TYPE
        SYNTAX      RowStatus
        MAX-ACCESS  read-create
        STATUS      current
        DESCRIPTION
            "Status of one row in this table."
        ::= { dialCtlNbrCfgEntry 20 }

-- Neighbor statistics table

dialCtlNbrStatsTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF DialCtlNbrStatsEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "Statistics information for each neighbor entry.
             There will be one entry in this table for each entry
             in the dialCtlNbrCfgTable."
       ::= { dialCtlNeighbor 3 }

dialCtlNbrStatsEntry OBJECT-TYPE
        SYNTAX      DialCtlNbrStatsEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "Statistics information for a single Neighbor. This entry
             is effectively permanent, and contains information
             describing the last call attempt as well as supplying
             statistical information."
        AUGMENTS    { dialCtlNbrCfgEntry }
      ::= { dialCtlNbrStatsTable 1 }

DialCtlNbrStatsEntry ::=
        SEQUENCE {
            dialCtlNbrStatsConnectTime          Counter32,
                        -- total connect time to neighbor
            dialCtlNbrStatsChargedUnits         Counter32,
                        -- number of charged units to this neighbor
            dialCtlNbrStatsSuccessCalls         Counter32,
                        -- number of completed calls to neighbor
            dialCtlNbrStatsFailCalls            Counter32,
                        -- number of failed call attempts
            dialCtlNbrStatsAcceptCalls          Counter32,
                        -- number of calls from neighbor accepted
            dialCtlNbrStatsRefuseCalls          Counter32,
                        -- number of calls from neighbor refused
            dialCtlNbrStatsLastDisconnectCause  OCTET STRING,
            dialCtlNbrStatsLastDisconnectText   DisplayString,
                        -- textual and encoded reasons for last
                        -- call clearing
            dialCtlNbrStatsLastSetupTime        TimeStamp
                        -- time of last call attempt
        }

dialCtlNbrStatsConnectTime OBJECT-TYPE
        SYNTAX      Counter32
        UNITS       "seconds"
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Accumulated connect time to neighbor since system startup.
             This is the total connect time, i.e. the connect time
             for outgoing calls plus the time for incoming calls."
        ::= { dialCtlNbrStatsEntry 1 }

dialCtlNbrStatsChargedUnits OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The total number of charging units applying to this
             neighbor since system startup.
             Only the charging units applying to the local interface,
             i.e. for originated calls or for calls with 'Reverse
             charging' being active, will be counted here."
        ::= { dialCtlNbrStatsEntry 2 }

dialCtlNbrStatsSuccessCalls OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Number of completed calls to neighbor."
        ::= { dialCtlNbrStatsEntry 3 }

dialCtlNbrStatsFailCalls OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Number of failed call attempts to neighbor since system
             startup."
        ::= { dialCtlNbrStatsEntry 4 }

dialCtlNbrStatsAcceptCalls OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Number of calls from neighbor accepted since system
             startup."
        ::= { dialCtlNbrStatsEntry 5 }

dialCtlNbrStatsRefuseCalls OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "Number of calls from neighbor refused since system
             startup."
        ::= { dialCtlNbrStatsEntry 6 }

dialCtlNbrStatsLastDisconnectCause OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..4))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The encoded network cause value associated with the last
             call.
             This object will be updated whenever a call is started
             or cleared.
             The value of this object will depend on the interface type
             as well as on the protocol and protocol version being
             used on this interface. Some references for possible cause
             values are given below."
        REFERENCE
            "- Bellcore SR-NWT-001953, Generic Guidelines for
               ISDN Terminal Equipment On Basic Access Interfaces,
               chapter 5.2.5.8.
             - Bellcore SR-NWT-002343, ISDN Primary Rate Interface
               Generic Guidelines for Customer Premises Equipment,
               chapter 8.2.5.8.
             - ITU-T Q.931, Annex I.
             - ITU-T X.25, CAUSE and DIAGNOSTIC field values.
             - German Telekom FTZ 1TR6, chapter 3.2.3.4.4.4."
        ::= { dialCtlNbrStatsEntry 7 }

dialCtlNbrStatsLastDisconnectText OBJECT-TYPE
        SYNTAX      DisplayString
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "ASCII text describing the reason for the last call
             termination.

             This object exists because it would be impossible for
             a management station to store all possible cause values
             for all types of interfaces. It should be used only if
             a management station is unable to decode the value of
             dialCtlNbrStatsLastDisconnectCause.

             This object will be updated whenever a call is started
             or cleared."
        ::= { dialCtlNbrStatsEntry 8 }

dialCtlNbrStatsLastSetupTime OBJECT-TYPE
        SYNTAX      TimeStamp
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The value of sysUpTime when the last call to this neighbor
             was started.
             For ISDN media, this will be the time when the setup
             message was received from or sent to the network.
             This object will be updated whenever a call is started
             or cleared."
        ::= { dialCtlNbrStatsEntry 9 }

--
-- the call history group
--

callHistory OBJECT IDENTIFIER ::= { dialControlMibObjects 3 }

callHistoryTableMaxLength OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
            "The upper limit on the number of entries that the
             callHistoryTable may contain.  A value of 0
             will prevent any history from being retained. When
             this table is full, the oldest entry will be deleted
             and the new one will be created."
        ::= { callHistory 1 }

callHistoryRetainTimer OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        UNITS       "minutes"
        MAX-ACCESS  read-write
        STATUS      current
        DESCRIPTION
            "The minimum amount of time that an callHistoryEntry
             will be maintained before being deleted. A value of
             0 will prevent any history from being retained in the
             callHistoryTable, but will neither prevent callCompletion
             traps being generated nor affect other tables."
        ::= { callHistory 2 }

-- callHistoryTable
-- Table to store the past call information. The Destination number
-- and the call connect and disconnect time, the disconnection cause
-- are stored. These calls could be circuit switched or they could
-- be virtual circuits. History of each and every call is stored,
-- of successful calls as well as of unsuccessful and rejected calls.
-- An entry will be created when a call is cleared.

callHistoryTable OBJECT-TYPE
        SYNTAX      SEQUENCE OF CallHistoryEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "A table containing information about specific
             calls to a specific destination."
        ::= { callHistory 3 }

callHistoryEntry OBJECT-TYPE
        SYNTAX      CallHistoryEntry
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The information regarding a single Connection."
        INDEX       { callHistorySetupTime, callHistoryIndex }
        ::= { callHistoryTable 1 }

CallHistoryEntry ::=
        SEQUENCE {
            callHistorySetupTime                 TimeStamp,
            callHistoryIndex                     INTEGER,
            callHistoryPeerAddress               DisplayString,
            callHistoryPeerSubAddress            DisplayString,
            callHistoryNeighborId                INTEGER,
            callHistoryNeighborIndex             INTEGER,
            callHistoryLogicalIfIndex            InterfaceIndex,
            callHistoryDisconnectCause           OCTET STRING,
            callHistoryDisconnectText            DisplayString,
            callHistoryConnectTime               TimeStamp,
            callHistoryDisconnectTime            TimeStamp,
            callHistoryCallOrigin                INTEGER,
            callHistoryChargedUnits              Counter32,
            callHistoryInfoType                  INTEGER,
            callHistoryTransmitPackets           Counter32,
            callHistoryTransmitBytes             Counter32,
            callHistoryReceivePackets            Counter32,
            callHistoryReceiveBytes              Counter32
        }

callHistorySetupTime OBJECT-TYPE
        SYNTAX      TimeStamp
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "The value of sysUpTime when the call associated to this
             entry was started. This will be useful for an NMS to
             retrieve all calls after a specific time. Also, this object
             can be useful in finding large delays between the time the
             call was started and the time the call was connected.
             For ISDN media, this will be the time when the setup
             message was received from or sent to the network."
        ::= { callHistoryEntry 1 }

callHistoryIndex OBJECT-TYPE
        SYNTAX      INTEGER (1..'7fffffff'h)
        MAX-ACCESS  not-accessible
        STATUS      current
        DESCRIPTION
            "Index variable to access the CallHistoryEntry objects
             of the callHistoryTable."
        ::= { callHistoryEntry 2 }

callHistoryPeerAddress OBJECT-TYPE
        SYNTAX      DisplayString
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number this call is connected to. If the number is
             not available, then it will have a length of zero."
        ::= { callHistoryEntry 3 }

callHistoryPeerSubAddress OBJECT-TYPE
        SYNTAX      DisplayString
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The subaddress this call is connected to. If the subaddress
             is undefined or not available, this will be a zero length
             string."
        ::= { callHistoryEntry 4 }

callHistoryNeighborId OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "This is the Id value of the neighbor table entry
             to which this call was made. If a neighbor table entry
             for this call does not exist, the value of this object
             will be zero."
        ::= { callHistoryEntry 5 }

callHistoryNeighborIndex OBJECT-TYPE
        SYNTAX      INTEGER (0..2147483647)
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "This is the index value of the neighbor table entry
             to which this call was made. If a neighbor table entry
             for this call does not exist, the value of this object
             will be zero."
        ::= { callHistoryEntry 6 }

callHistoryLogicalIfIndex OBJECT-TYPE
        SYNTAX      InterfaceIndex
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "This is the ifIndex value of the logical interface through
             which this call was made. For ISDN media, this would be
             the ifIndex of the B channel which was used for this call."
        ::= { callHistoryEntry 7 }

callHistoryDisconnectCause OBJECT-TYPE
        SYNTAX      OCTET STRING (SIZE (0..4))
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The encoded network cause value associated with this call.

             The value of this object will depend on the interface type
             as well as on the protocol and protocol version being
             used on this interface. Some references for possible cause
             values are given below."
        REFERENCE
            "- Bellcore SR-NWT-001953, Generic Guidelines for
               ISDN Terminal Equipment On Basic Access Interfaces,
               chapter 5.2.5.8.
             - Bellcore SR-NWT-002343, ISDN Primary Rate Interface
               Generic Guidelines for Customer Premises Equipment,
               chapter 8.2.5.8.
             - ITU-T Q.931, Annex I.
             - ITU-T X.25, CAUSE and DIAGNOSTIC field values.
             - German Telekom FTZ 1TR6, chapter 3.2.3.4.4.4."
        ::= { callHistoryEntry 8 }

callHistoryDisconnectText OBJECT-TYPE
        SYNTAX      DisplayString
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "ASCII text describing the reason for call termination.

             This object exists because it would be impossible for
             a management station to store all possible cause values
             for all types of interfaces. It should be used only if
             a management station is unable to decode the value of
             dialCtlNbrStatsLastDisconnectCause."
        ::= { callHistoryEntry 9 }

callHistoryConnectTime OBJECT-TYPE
        SYNTAX      TimeStamp
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The value of sysUpTime when the call was connected."
        ::= { callHistoryEntry 10 }

callHistoryDisconnectTime OBJECT-TYPE
        SYNTAX      TimeStamp
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The value of sysUpTime when the call was disconnected."
        ::= { callHistoryEntry 11 }

callHistoryCallOrigin OBJECT-TYPE
        SYNTAX      INTEGER {
            originate(1),
            answer(2),
            callback(3)
        }
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The call origin."
        ::= { callHistoryEntry 12 }

callHistoryChargedUnits OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of charged units for this connection.
             For incoming calls or if charging information is
             not supplied by the switch, the value of this object
             will be zero."
        ::= { callHistoryEntry 13 }

callHistoryInfoType OBJECT-TYPE
        SYNTAX      INTEGER {
            other(1),                   -- e.g. for non-isdn media
            speech(2),
            unrestrictedDigital(3),     -- 64k/s data
            unrestrictedDigital56(4),   -- with 56k rate adaption
            restrictedDigital(5),
            audio31(6),                 -- 3.1 kHz audio
            audio7(7),                  -- 7 kHz audio
            video(8),
            packetSwitched(9)
        }
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The information type for this call."
        ::= { callHistoryEntry 14 }

callHistoryTransmitPackets OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS     current
        DESCRIPTION
            "The number of packets which were transmitted while this
             call was active."
        ::= { callHistoryEntry 15 }

callHistoryTransmitBytes OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of bytes which were transmitted while this
             call was active."
        ::= { callHistoryEntry 16 }

callHistoryReceivePackets OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of packets which were received while this
             call was active."
        ::= { callHistoryEntry 17 }

callHistoryReceiveBytes OBJECT-TYPE
        SYNTAX      Counter32
        MAX-ACCESS  read-only
        STATUS      current
        DESCRIPTION
            "The number of bytes which were received while this
             call was active."
        ::= { callHistoryEntry 18 }

-- Traps related to Connection management

dialControlMibTrapPrefix OBJECT IDENTIFIER ::= { dialControlMib 2 }
dialControlMibTraps OBJECT IDENTIFIER ::= { dialControlMibTrapPrefix 0 }

dialCtlNbrCallInformation NOTIFICATION-TYPE
        OBJECTS {
            callHistoryNeighborId,
            callHistoryNeighborIndex,
            callHistoryLogicalIfIndex,
            ifOperStatus,
            callHistoryPeerAddress,
            callHistoryPeerSubAddress,
            callHistoryDisconnectCause,
            callHistoryConnectTime,
            callHistoryDisconnectTime,
            callHistoryInfoType,
            callHistoryCallOrigin
        }
        STATUS      current
        DESCRIPTION
            "This trap/inform is sent to the manager whenever
             a successful call clears, or a failed call attempt
             is determined to have ultimately failed. In the
             event that call retry is active, then this is after
             all retry attempts have failed. However, only one such
             trap is sent in between successful call attempts;
             subsequent call attempts result in no trap.
             ifOperStatus will return the operational status of the
             virtual interface associated with the neighbor to whom
             this call was made to."
     ::= { dialControlMibTraps 1 }

-- conformance information

dialControlMibConformance OBJECT IDENTIFIER ::=
                                { dialControlMib 3 }
dialControlMibCompliances OBJECT IDENTIFIER ::=
                                { dialControlMibConformance 1 }
dialControlMibGroups      OBJECT IDENTIFIER ::=
                                { dialControlMibConformance 2 }

-- compliance statements

dialControlMibCompliance MODULE-COMPLIANCE
        STATUS      current
        DESCRIPTION
            "The compliance statement for entities which
             implement the DIAL CONTROL MIB"
        MODULE      -- this module
        MANDATORY-GROUPS
            { dialControlGroup, callHistoryGroup }
        ::= { dialControlMibCompliances 1 }

-- units of conformance

dialControlGroup OBJECT-GROUP
        OBJECTS {
            dialCtlAcceptMode,
            dialCtlCallInfoTrapEnable,
            dialCtlNbrGetIndex,
            dialCtlNbrCfgIfIndex,
            dialCtlNbrCfgIfType,
            dialCtlNbrCfgLowerIf,
            dialCtlNbrCfgOriginateAddress,
            dialCtlNbrCfgAnswerAddress,
            dialCtlNbrCfgSubAddress,
            dialCtlNbrCfgClosedUserGroup,
            dialCtlNbrCfgSpeed,
            dialCtlNbrCfgPermission,
            dialCtlNbrCfgInactivityTimer,
            dialCtlNbrCfgMinDuration,
            dialCtlNbrCfgMaxDuration,
            dialCtlNbrCfgCarrierDelay,
            dialCtlNbrCfgCallRetries,
            dialCtlNbrCfgRetryDelay,
            dialCtlNbrCfgFailureDelay,
            dialCtlNbrCallInfoTrapEnable,
            dialCtlNbrCfgStatus,
            dialCtlNbrStatsConnectTime,
            dialCtlNbrStatsChargedUnits,
            dialCtlNbrStatsSuccessCalls,
            dialCtlNbrStatsFailCalls,
            dialCtlNbrStatsAcceptCalls,
            dialCtlNbrStatsRefuseCalls,
            dialCtlNbrStatsLastDisconnectCause,
            dialCtlNbrStatsLastDisconnectText,
            dialCtlNbrStatsLastSetupTime
        }
        STATUS      current
        DESCRIPTION
            "A collection of objects providing the DIAL CONTROL
             capability."
        ::= { dialControlMibGroups 1 }

callHistoryGroup OBJECT-GROUP
        OBJECTS {
            callHistoryTableMaxLength,
            callHistoryRetainTimer,
            callHistoryPeerAddress,
            callHistoryPeerSubAddress,
            callHistoryNeighborId,
            callHistoryNeighborIndex,
            callHistoryLogicalIfIndex,
            callHistoryDisconnectCause,
            callHistoryDisconnectText,
            callHistoryConnectTime,
            callHistoryDisconnectTime,
            callHistoryCallOrigin,
            callHistoryChargedUnits,
            callHistoryInfoType,
            callHistoryTransmitPackets,
            callHistoryTransmitBytes,
            callHistoryReceivePackets,
            callHistoryReceiveBytes
        }
        STATUS      current
        DESCRIPTION
            "A collection of objects providing the Call History
             capability."
        ::= { dialControlMibGroups 2 }

END

5.  Acknowledgments

This document was produced by the ISDN MIB Working Group.  Special
thanks is due to the following persons:

        Ed Alcoff
        Fred Baker
        Bibek A. Das
        Ken Grigg
        Jeffrey T. Johnson
        Glenn Kime
        Oliver Korfmacher
        Kedar Madineni
        Bill Miskovetz
        David M. Piscitello
        Lisa A. Phifer
        Randy Roberts
        Hascall H. Sharp
        Robert Snyder
        Ron Stoughton
        James Watt

6.  References

[1]  SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., and
     S. Waldbusser, "Structure of Management Information for Version 2
     of the Simple Network Management Protocol (SNMPv2)", RFC 1902,
     January 1996.

[2]  McCloghrie, K., and M. Rose, Editors, "Management Information Base
     for Network Management of TCP/IP-based internets: MIB-II", STD 17,
     RFC 1213, Hughes LAN Systems, Performance Systems International,
     March 1991.

[3]  Case, J., Fedor, M., Schoffstall, M., and J. Davin, "A Simple
     Network Management Protocol (SNMP)", STD 15, RFC 1157, SNMP
     Research, Performance Systems International, MIT Lab for Computer
     Science, May 1990.

[4]  SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M. and
     S. Waldbusser, "Protocol Operations for Version 2 of the Simple
     Network Management Protocol (SNMPv2)", RFC 1905, January 1996.

[5]  ITU-T Recommendation "Digital subscriber Signalling System No. 1
     (DSS 1) - ISDN user-network interface layer 3 specification for
     basic call control", Rec. Q.931(I.451), March 1993.

[6]  ITU-T Recommendation "Generic procedures for the control of ISDN
     supplementary services ISDN user-network interface layer 3
     specification", Rec. Q.932(I.452).

[7]  ITU-T Recommendation "Digital subscriber Signalling System No. 1
     (DSS 1) - Signalling specification for frame-mode basic call
     control", Rec. Q.933.

7.  Security Considerations

Information in this MIB may be used by upper protocol layers for
security purpose.

The implementor should be aware that supporting generic neighbors as
described in section 3.4 may cause a security hole.  The user would not
know where a call is from, which could potentially allow unauthorized
access if there is no other authentication scheme, e.g. PPP
authentication, available.

8.  Author's Address

     Guenter Roeck
     Conware GmbH
     Killisfeldstrasse 64
     76137 Karlsruhe, Germany

     Phone: +49 721 9495 0
     Email: roeck@conware.de

Table of Contents

1 Introduction ....................................................    2
2 The SNMPv2 Network Management Framework .........................    3
2.1 Object Definitions ............................................    3
3 Overview ........................................................    4
3.1 Structure of MIB ..............................................    4
3.2 Relationship to RFC1573 .......................................    4
3.2.1 Layering Model and Virtual Circuits .........................    4
3.2.2 ifTestTable .................................................    5
3.2.3 ifRcvAddressTable ...........................................    6
3.2.3.1 ifEntry for a single neighbor .............................    6
3.3 Multilink and backup line support .............................    6
3.4 Support for generic neighbors .................................    6
4 Definitions .....................................................    7
4.1 Dial Control MIB ..............................................    7
5 Acknowledgments .................................................   27
6 References ......................................................   27
7 Security Considerations .........................................   29
8 Author's Address ................................................   29