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

                     Fri Nov 17 14:49:37
                 draft-ietf-isdnmib-dial-control-02.txt

                      Mon Feb  5 21:53:26 MET 1995 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.  The set of objects
will be consistent with

This document specifies a MIB module in a manner that is both compliant
to the SNMP framework SNMPv2 SMI, and existing SNMP standards. 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 Community-based SNMPv2 Network Management Framework

The Community-based SNMPv2 Network Management Framework consists of four
major components.  They are:

o    RFC 1442 1902 [1] which defines the SMI, the mechanisms used for
     describing and naming objects for the purpose of management.

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

o    RFC 1445 1901 [3] which defines the administrative and other
     architectural aspects of the framework.

o    RFC 1448 1905 [4] which defines the protocol used for network access to
     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    Some 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 sucessful successful
     calls as well as unsucessful 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 leyer. 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,
        Integer32
                FROM SNMPv2-SMI
        DisplayString,
        TimeStamp,
        RowStatus
                 FROM SNMPv2-TC
        MODULE-COMPLIANCE,
        OBJECT-GROUP
                FROM SNMPv2-CONF
        IANAifType
                FROM IANAifType-MIB
        ifIndex,
        ifOperStatus,
        InterfaceIndex
                FROM IF-MIB
        transmission
                FROM RFC1213-MIB;

dialControlMib MODULE-IDENTITY
        LAST-UPDATED    "9511171437Z"    "MIB_DATE"
        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 }

-- Neighbor group

dialCtlNeighbor OBJECT IDENTIFIER ::= { dialControlMibObjects 2 }

-- 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 1 }

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."
        INDEX   { dialCtlNbrCfgId, ifIndex }
      ::= { dialCtlNbrCfgTable 1 }

DialCtlNbrCfgEntry ::=
 SEQUENCE {
        dialCtlNbrCfgId            INTEGER,
                                    -- neighbor ID
        dialCtlNbrCfgIfType        IANAifType,
        dialCtlNbrCfgLowerIf       InterfaceIndex,
                                    -- 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 in seconds
        dialCtlNbrCfgMaxDuration   INTEGER,
                                    -- Max call duration in seconds
        dialCtlNbrCfgCarrierDelay   INTEGER,
                                    -- call connect time
        dialCtlNbrCfgCallRetries   INTEGER,
                                    -- number of call retries
        dialCtlNbrCfgRetryDelay    INTEGER,
                                    -- time between call attempts
        dialCtlNbrCfgFailureDelay  INTEGER,
                                    -- retry time after failure
        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."
        ::= { dialCtlNbrCfgEntry 1 }

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 basicISDN(20) is to be used."
        DEFVAL { other }
        ::= { dialCtlNbrCfgEntry 2 }

dialCtlNbrCfgLowerIf OBJECT-TYPE
        SYNTAX  InterfaceIndex
        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
         'Semipermanente Verbindungen' (semi permanent connections)
         in 1TR6,
         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 3 }

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 4 }

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."
        ::= { dialCtlNbrCfgEntry 5 }

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 6 }

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

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 8 }

dialCtlNbrCfgPermission     OBJECT-TYPE
        SYNTAX  INTEGER {
            originate (1),
            answer (2),
            both (3),              -- both originate & answer
            callback(4)
        }
        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 9 }

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 10 }

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 11 }

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 12 }

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 13 }

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 14 }

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 15 }

dialCtlNbrCfgFailureDelay    OBJECT-TYPE
        SYNTAX  INTEGER (0..2147483647)
        UNITS "seconds"
        MAX-ACCESS      read-create
        STATUS  current
        DESCRIPTION
        "The time in seconds after whichcall 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 16 }

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

-- 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 2 }

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."
        INDEX   { dialCtlNbrCfgId, ifIndex }
      ::= { 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 'Advice of Charge'
         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."
        ::= { 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 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 sucessful successful calls as well as of unsucessful 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,
            callHistoryNeighborIfIndex           InterfaceIndex,
            callHistoryNeighborId                INTEGER,
            callHistoryLogicalIfIndex            InterfaceIndex,
            callHistoryDisconnectCause           OCTET STRING,
            callHistoryDisconnectText            DisplayString,
            callHistoryConnectTime               TimeStamp,
            callHistoryDisconnectTime            TimeStamp,
            callHistoryCallOrigin                INTEGER,
            callHistoryChargedUnits              Integer32,
            callHistoryInfoType                  INTEGER,
            callHistoryTransmitPackets           Counter32,
            callHistoryTransmitBytes             Counter32,
            callHistoryReceivePackets            Counter32,
            callHistoryReceiveBytes              Counter32
          }

callHistorySetupTime OBJECT-TYPE
        SYNTAX   TimeStamp
        MAX-ACCESS   read-only
        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 }

callHistoryNeighborIfIndex    OBJECT-TYPE
        SYNTAX   InterfaceIndex
        MAX-ACCESS   read-only
        STATUS   current
        DESCRIPTION
        "This is the ifIndex value of the neighbor table entry
         to which this call was made."
        ::= { callHistoryEntry 5 }

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 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."
        ::= { callHistoryEntry 8 }

callHistoryDisconnectText   OBJECT-TYPE
        SYNTAX   DisplayString
        MAX-ACCESS   read-only
        STATUS   current
        DESCRIPTION
        "ASCII text describing the reason for call termination."
        ::= { 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   Integer32
        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 {
                callHistoryNeighborIfIndex,
                callHistoryNeighborId,
                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
         callHistoryNeighborIfIndex."
     ::= { 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,
        dialCtlNbrCfgIfType,
        dialCtlNbrCfgLowerIf,
        dialCtlNbrCfgOriginateAddress,
        dialCtlNbrCfgAnswerAddress,
        dialCtlNbrCfgSubAddress,
        dialCtlNbrCfgClosedUserGroup,
        dialCtlNbrCfgSpeed,
        dialCtlNbrCfgPermission,
        dialCtlNbrCfgInactivityTimer,
        dialCtlNbrCfgMinDuration,
        dialCtlNbrCfgMaxDuration,
        dialCtlNbrCfgCarrierDelay,
        dialCtlNbrCfgCallRetries,
        dialCtlNbrCfgRetryDelay,
        dialCtlNbrCfgFailureDelay,
        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,
          callHistorySetupTime,
          callHistoryPeerAddress,
          callHistoryPeerSubAddress,
          callHistoryNeighborIfIndex,
          callHistoryNeighborId,
          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.  Acknowledgements  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 Version 2
     of the Simple Network Management Protocol (SNMPv2)", RFC 1442, SNMP Research,Inc., Hughes
     LAN Systems, Dover Beach Consulting, Inc., Carnegie Mellon
     University, April 1993. 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]  Galvin,  SNMPv2 Working Group, Case, J., and K. McCloghrie, "Administrative Model for version 2
     of the Simple Network Management Protocol (SNMPv2)", K., Rose, M. and
     S. Waldbusser, "Introduction to Community-based SNMPv2", RFC 1445,
     Trusted Information Systems, Hughes LAN Systems, April 1993. 1901,
     January 1996.

[4]  SNMPv2 Working Group, Case, J., McCloghrie, K., Rose, M., M. and
     S. Waldbusser, "Protocol Operations for version Version 2 of the Simple
     Network Management Protocol (SNMPv2)", RFC 1448, SNMP Research,Inc., Hughes LAN Systems, Dover
     Beach Consulting, Inc., Carnegie Mellon University, April 1993. 1905, January 1996.

[5]  ITU-T Recommendation "Digital subscriber Signalling System No. 1
     (DSS 1) - ISDN user-network interface layer 3 specification for

[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

Security issues are not discussed

Information in this memo. 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) +49 721 9495-0 9495 0
     Email: roeck@conware.de

Table of Contents

1 Introduction ....................................................    2
2 The Community-based 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 .................................................    6
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    8
4.1 Dial Control MIB ..............................................    7    8
5 Acknowledgements ................................................   27 Acknowledgments .................................................   28
6 References ......................................................   27   28
7 Security Considerations .........................................   29   30
8 Author's Address ................................................   29   30