Dial Control Management Information Base using SMIv2
Extracted elements (26)
dialCtlPeerStatsLastDisconnectText exists because a management station cannot feasibly store all possible cause codes for all interface types. It provides a human-readable fallback when the station cannot decode dialCtlPeerStatsLastDisconnectCause.
Multiple dialCtlPeerCfgTable entries sharing the same dialCtlPeerCfgId but with different ifIndex values support both multilink (bundling connections via PPP multilink) and backup line procedures for a single logical peer.
On dialup interfaces, calls to a given peer float across channels, making a static 'peer-to-interface' binding impossible. The MIB resolves this by creating a logical ifEntry per peer and per low-level interface, then correlating them via ifStackTable.
The callback(4) permission value is explicitly scoped to charging control, not security. Security-driven callback is delegated to PPP callback mechanisms, keeping the MIB's permission model focused on billing.
The Dial Control MIB depends on encapsulation-layer MIBs (e.g., PPP) for ifEntry creation, ifTestTable, and ifRcvAddressTable definitions. The Dial Control MIB adds supplementary RowStatus-controlled information but never independently creates ifEntries.
An entry in dialCtlPeerCfgTable can only be created if the associated ifEntry already exists. The Dial Control MIB will never itself create ifEntries.
Entities implementing the DIAL CONTROL MIB must implement all four mandatory groups: dialControlGroup, callActiveGroup, callHistoryGroup, and callNotificationsGroup, as stated in the MODULE-COMPLIANCE statement.
Several entries in dialCtlPeerCfgTable with the same dialCtlPeerCfgId value MUST have different ifIndex values. This supports multilink and backup line configurations where multiple physical paths reach the same peer.
AbsoluteCounter32 is a textual convention based on Unsigned32 that starts at zero, never decreases, never wraps, and locks at 4,294,967,295 on overflow. It is used for historical counters where wrap-around is not expected.
callActiveInfoType and callHistoryInfoType classify calls by information transfer capability: speech(2), unrestrictedDigital(3) at 64 kbps, unrestrictedDigital56(4) with 56k rate adaptation, restrictedDigital(5), audio31(6) at 3.1 kHz, audio7(7) at 7 kHz, video(8), packetSwitched(9), and fax(10).
callActiveTable stores one entry per active call, created when a call starts and deleted when it clears. The index is {callActiveSetupTime, callActiveIndex}, where callActiveIndex distinguishes calls starting within the same hundredth of a second.
callHistoryRetainTimer specifies the minimum time in minutes a history entry is retained. A value of zero prevents history retention in callHistoryTable but does not suppress callCompletion traps or affect other tables.
callHistoryTable stores completed call records indexed by {callActiveSetupTime, callActiveIndex}. It retains successful, unsuccessful, and rejected calls and is controlled by callHistoryTableMaxLength and callHistoryRetainTimer (in minutes); when full, the oldest entry is deleted.
dialCtlAcceptMode controls incoming call security with three values: acceptNone(1) rejects all incoming calls, acceptAll(2) accepts all calls even without a matching peer entry, and acceptKnown(3) accepts calls only if a matching dialCtlPeerCfgTable entry exists.
dialCtlPeerCallInformation notification is sent when a successful call clears or a failed call attempt ultimately fails after all retries. Only one trap is sent between successful call attempts; subsequent retry failures do not generate additional traps.
dialCtlPeerCallSetup notification is sent whenever a call setup message is received or sent, carrying callActivePeerId, callActivePeerIfIndex, callActiveLogicalIfIndex, ifOperStatus, callActivePeerAddress, callActivePeerSubAddress, callActiveInfoType, and callActiveCallOrigin.
dialCtlPeerCfgInactivityTimer specifies in seconds how long a connection with no useful data (forwarding packets including routing info, excluding encapsulator maintenance frames) will remain before automatic disconnection. Zero means the circuit is dedicated and will not be torn down.
dialCtlPeerCfgMinDuration and dialCtlPeerCfgMaxDuration bound call duration in seconds. MinDuration exists to align with per-unit charging in many countries; MaxDuration of zero means unlimited.
dialCtlPeerCfgPermission defines call direction permissions per peer: originate(1), answer(2), both(3), callback(4), or none(5). The callback(4) value either rejects then calls back or uses the 'Reverse charging' IE, and is intended to control charging rather than security.
dialCtlPeerCfgTable stores configuration for each peer including originate/answer addresses, subaddress, closed user group, speed, information type, permissions, inactivity timer, min/max call duration, carrier delay, retry counts, and trap enable. A new row requires dialCtlPeerCfgOriginateAddress to be set before becoming active.
dialCtlPeerStatsLastDisconnectCause is an OCTET STRING of 0 to 4 bytes encoding the network-specific cause value from the last call. Interpretation depends on interface type and protocol; references include ITU-T Q.931, X.25, Bellcore SR-NWT-001953/002343, and German Telekom FTZ 1TR6.
dialCtlPeerStatsTable augments dialCtlPeerCfgTable and tracks per-peer statistics: accumulated connect time, charged units, successful/failed/accepted/refused call counts, last disconnect cause (OCTET STRING 0..4 bytes), disconnect text, and last setup time.
dialCtlTrapEnable is a global trap switch. When enabled(1), traps are generated for all peers; when disabled(2), traps are only generated for peers whose dialCtlPeerCfgTrapEnable is individually set to enabled(1). Default is disabled.
The DIAL-CONTROL-MIB is structured into four groups: dialCtlConfiguration (general config), dialCtlPeer (peer config and statistics), callActive (active call info), and callHistory (historical call records including failed and rejected calls).
Supporting generic peers (e.g., wildcard characters in dialCtlPeerCfgAnswerAddress) creates a security hole: the device cannot identify the call origin, potentially allowing unauthorized access if no other authentication scheme such as PPP authentication is in place.
callActiveCallState models four call states: unknown(1) for indeterminate state, connecting(2) for outgoing call attempt in progress, connected(3) for incoming call undergoing validation, and active(4) for a fully established call.