Skip to main content

ISUP Trunking

This document describes the ISUP (ISDN User Part) trunk interface implemented by OmniMSC, including trunk group management, circuit allocation, message encoding, timers, continuity check support, and integration with the route table and SIP-I.

For ISUP-SIP cause code mapping, see SIP Trunking. For SIP-I (SIP with encapsulated ISUP), see SIP-I Trunking. For routing configuration and the :isup route type, see Routing Configuration. For call flow diagrams showing ISUP signaling in context (IAM/ACM/ANM, ISUP-to-SIP transit), see Call Flow Diagrams.


ISUP Trunk Groups

OmniMSC organizes ISUP circuits into trunk groups. Each trunk group represents a bundle of voice circuits to a remote SS7 exchange, identified by a destination point code and a range of Circuit Identification Codes (CICs).

CIC Allocation

When a call is routed to an ISUP trunk group, the circuit manager allocates the first idle circuit found in the configured range. The allocated CIC is included in the outgoing IAM and reserved until the call is released.

ParameterTypeDescription
namestringUnique trunk group identifier, referenced in route table entries
dpcintegerDestination point code (encoded integer, e.g. a*2048 + b*8 + c for ITU 3-8-3)
cic_range{start, end}Inclusive range of CICs available for this trunk group

Circuit State Management

Each circuit within a trunk group tracks an independent state. The circuit manager handles blocking, unblocking, and group reset operations.

Circuit StateDescription
:idleAvailable for seizure
:outgoing_busyAllocated for an outgoing call (IAM sent)
:incoming_busyReserved for an incoming call (IAM received)
:blockedBlocked via BLO, unavailable for seizure
:unblocked_pendingUnblock (UBL) sent, awaiting acknowledgement
:reset_pendingCircuit reset in progress (RSC/GRS), awaiting acknowledgement

Circuit blocking (BLO) and unblocking (UBL) are performed per-circuit only. Group reset (GRS/GRA) resets all circuits in a range to idle and clears any blocking state; a single circuit can also be reset with RSC.


ISUP Message Flow

The standard ISUP signaling sequence for a successful call follows the IAM-ACM-ANM-REL-RLC pattern.

For incoming calls, the directions are reversed: IAM arrives from the remote exchange, and OmniMSC sends ACM and ANM as the call progresses through alerting and answer.


ISUP Handler States

The ISUP handler maintains per-call state that tracks the signaling progress for each circuit.

Outgoing Call States

Incoming Call States


ISUP Timers

OmniMSC implements the standard ISUP timers defined in ITU-T Q.764. These timers guard against signaling failures and ensure circuits are not left in indeterminate states.

TimerDurationStarted AfterExpires WhenAction on Expiry
T120sREL sentRLC not receivedRetransmit REL
T5300sT1 first expiryRLC still not receivedSend maintenance alert, reset circuit
T725sIAM sentACM not receivedRelease call, send REL
T9180sACM receivedANM not receivedRelease call, send REL

When T7 expires without receiving an ACM, OmniMSC sends a REL with cause 16 (normal call clearing) and notifies Call Control with cause 31 (normal, unspecified). When T9 expires without an ANM, OmniMSC sends a REL with cause 19 (no answer from user).


ISUP Message Encoding

OmniMSC implements a codec for encoding and decoding the five core ISUP message types used in call setup and release. All messages follow the ITU-T Q.763 format with mandatory fixed, mandatory variable, and optional parameter sections.

MessageType CodeDirectionKey Parameters
IAM0x01OriginatingNature of Connection, Forward Call Indicators, Calling Party Category, Transmission Medium Requirement, Called Party Number, Calling Party Number
ACM0x06TerminatingBackward Call Indicators, Optional Backward Call Indicators, Cause Indicators
ANM0x09TerminatingBackward Call Indicators
REL0x0CEitherCause Indicators
RLC0x10Either(none -- acknowledgement only)

Additional messages supported for circuit maintenance:

MessageType CodePurpose
BLO0x13Block a circuit (local maintenance)
UBL0x14Unblock a circuit
RSC0x12Reset a single circuit
GRS0x17Group reset of a circuit range
GRA0x29Group reset acknowledgement
COT0x05Continuity check result
CPG0x2CCall Progress (mid-call event/progress indication)

Continuity Check

OmniMSC supports the ISUP continuity check procedure for verifying the bearer path before connecting a call. When the Forward Call Indicators in an outgoing IAM request a continuity check, the following sequence occurs:

  1. OmniMSC seizes the circuit and sends IAM with the continuity check indicator set.
  2. A loopback is applied at the far end of the circuit.
  3. OmniMSC sends a test tone and verifies the return.
  4. On success, OmniMSC sends COT (continuity check successful) and the call proceeds.
  5. On failure, OmniMSC sends COT (check failed) and may re-attempt on an alternate circuit.

For incoming calls, when OmniMSC receives an IAM with the continuity check indicator, it applies a loopback on the specified circuit and waits for the COT message before proceeding with call setup.


Route Table Integration

Routes with type :isup in the route table direct calls to an ISUP trunk group. The route entry specifies the trunk group name, destination point code, and CIC range.

Route ParameterDescription
type:isup
trunk_groupTrunk group name matching a configured trunk group
dpcDestination point code (encoded integer)
cic_rangeCIC range as {start, end}

When routing selects an ISUP destination, the trunk router requests a free circuit from the circuit manager. If no circuits are available in the primary trunk group, the system attempts overflow trunk groups to the same destination point code.

For route configuration examples, see Routing Configuration.


SIP-I Support

SIP-I (SIP with encapsulated ISUP) provides an IP-based transport for ISUP messages. Routes with type :sip_i carry the full ISUP message (IAM, ACM, ANM, REL) as an application/ISUP MIME body within SIP signaling per ITU-T Q.1912.5 and RFC 3204.

SIP-I peers are configured separately from pure SIP peers. The ISUP encoder/decoder used for native ISUP trunks is shared with SIP-I for encoding and decoding the encapsulated ISUP bodies.

For SIP-I configuration, call flows, and header mapping, see SIP-I Trunking.


SIP with ISUP Failover

Routes with type :sip_with_failover attempt the call via a SIP peer first. If the SIP route fails (peer unreachable, 5xx response, or timeout), the trunk router automatically retries via the configured ISUP trunk group.

Failover TriggerDescription
Peer status :downSIP peer is unreachable (OPTIONS keepalive failed)
SIP 5xx responseServer error from the SIP peer
SIP timeoutNo response within the SIP transaction timer
max_channels exceededSIP peer has no available capacity

On failover, the trunk router allocates a CIC from the ISUP trunk group and sends an IAM. The CC FSM remains in the same state throughout the failover -- the retry is transparent to the radio-side signaling.

For failover route configuration, see Routing Configuration.


References

ReferenceTitleRelevance
ITU-T Q.761Functional Description of the ISUPISUP overview and architecture
ITU-T Q.762General Function of Messages and Signals of the ISUPMessage definitions
ITU-T Q.763Formats and Codes of the ISUPMessage encoding and parameter formats
ITU-T Q.764Signaling Procedures of the ISUPCall setup/release procedures, timer definitions
ITU-T Q.850Usage of Cause and Location in ISDNCause code definitions used in REL
RFC 3204MIME Media Type for ISUP and QSIG ObjectsISUP encapsulation in SIP-I
ITU-T Q.1912.5Interworking between SIP and BICC or ISUPSIP-I protocol definition