RFC 3057

ISDN Q.921-User Adaptation Layer

๐Ÿ“… published February 2001, from ietf

ISDN Q.921-User Adaptation Layer ๐ŸŽ€

Okay bestie, this is RFC 3057 ๐Ÿ’– and it's an IETF Standards Track doc from the Network Working Group, dated February 2001. The authors are K. Morneault (Cisco Systems), S. Rengasami and M. Kalla (Telcordia Technologies), and G. Sidebottom (Nortel Networks) ๐Ÿ‘‘. It doesn't obsolete or update any other RFCs, so it's a clean new start โœจ. This is part 1 of 12, so more is coming ๐Ÿฆ‹

Status of this Memo

This doc specifies an Internet standards track protocol for the Internet community and asks for discussion and suggestions for improvements ๐Ÿ’…. If you want to know where this protocol stands in standardization, check the current edition of the "Internet Official Protocol Standards" (STD 1) ๐Ÿ“š. Distribution of this memo is unlimited ๐ŸŒˆ.

Copyright (C) The Internet Society (2001). All Rights Reserved. ๐Ÿ”’

Abstract

Okay so the big idea is this: this doc defines a way to backhaul ISDN Q.921 User messages over IP using the Stream Control Transmission Protocol (SCTP) ๐Ÿš€. It's meant to run between a Signaling Gateway (SG) and a Media Gateway Controller (MGC), and it assumes the SG gets its ISDN signaling over a standard ISDN interface ๐Ÿงš

Table of Contents

1.  Introduction.................................................  2
  1.1  Scope.....................................................  2
  1.2  Terminology...............................................  3
  1.3  IUA Overview..............................................  4
  1.4  Services Provided by the IUA Layer........................  9
  1.5  Functions Implemented by the IUA Layer.................... 12
  1.6  Definition of IUA Boundaries.............................. 14
2.  Conventions.................................................. 16
3.  Protocol Elements............................................ 17
  3.1  Common Message Header..................................... 17
  3.2  IUA Message Header........................................ 20
  3.3  Description of Messages................................... 22
4.  Procedures................................................... 45
  4.1  Procedures to Support Service in Section 1.4.1............ 45
  4.2  Procedures to Support Service in Section 1.4.2............ 46
  4.3  Procedures to Support Service in Section 1.4.3............ 47
5. Examples...................................................... 56
  5.1 Establishment of associations between SG and MGC examples.. 56
  5.2 ASP Traffic Fail-over Examples............................. 58
  5.3 Q.921/Q.931 primitives backhaul Examples................... 59
  5.4 Layer Management Communication Examples.................... 61
6.  Security..................................................... 61
  6.1 Threats.................................................... 61
  6.2 Protecting Confidentiality ................................ 62
7.  IANA Considerations.......................................... 62
  7.1 SCTP Payload Protocol Identifier........................... 62
  7.2 IUA Protocol Extensions.................................... 62
8.  Acknowledgements............................................. 64
9.  References................................................... 64
10. Authors' Addresses........................................... 65
11. Full Copyright Statement..................................... 66

1. Introduction โœจ

Quick vocab check ๐Ÿค“: in this doc, Q.921-User means an upper layer that uses the services of Q.921. It does not mean the user side of the ISDN interface [1] ๐Ÿ™ˆ. Examples of that upper layer are Q.931 and QSIG ๐Ÿ’œ.

This section explains why we need the ISDN Q.921-User Adaptation (IUA) layer protocol, and how this protocol shall be implemented ๐ŸŽ€.

1.1 Scope

Here's the situation ๐Ÿ’โ€โ™€๏ธ: we need to get Switched Circuit Network (SCN) signaling from an ISDN Signaling Gateway (SG) over to a Media Gateway Controller (MGC), like the Framework Architecture for Signaling Transport [4] describes. The delivery mechanism SHOULD meet these criteria:

  • Support for transport of the Q.921 / Q.931 boundary primitives
  • Support for communication between Layer Management modules on SG and MGC
  • Support for management of active associations between SG and MGC

This doc covers both ISDN Primary Rate Access (PRA) and Basic Rate Access (BRA), including both point-to-point and point-to-multipoint modes ๐ŸŒธ. That also includes Facility Associated Signaling (FAS), Non-Facility Associated Signaling (NFAS), and NFAS with backup D channel ๐Ÿซถ. QSIG's adaptation layer requirements are the same as Q.931's, so the procedures here work for QSIG too โœจ. To keep things simple, we'll only say Q.931 from here on ๐Ÿ’….

1.2 Terminology

Let's get the definitions straight, babe ๐Ÿ“–:

  • Interface: for this doc, an interface supports the relevant ISDN signaling channel. That channel MAY be a 16 kbps D channel for an ISDN BRA, or a 64 kbps primary or backup D channel for an ISDN PRA. For QSIG, the signaling channel is a Qc channel ๐Ÿฆ‹.
  • Q.921-User: any protocol that normally uses the services of the ISDN Q.921, like Q.931, QSIG, etc. ๐Ÿ’–
  • Backhaul: the SG terminates the lower layers of an SCN protocol and backhauls the upper layer(s) to the MGC for call processing. In this doc, the SG terminates Q.921 and backhauls Q.931 to the MGC ๐Ÿงš
  • Association: an association is an SCTP association. It provides the transport for delivering Q.921-User protocol data units and IUA adaptation layer peer messages ๐Ÿš€
  • Stream: a stream is an SCTP stream, a one-way logical channel from one SCTP endpoint to another associated endpoint. Within it, all user messages are delivered in sequence, except for the ones sent through the un-ordered delivery service ๐ŸŒˆ
  • Interface Identifier: this identifies the physical interface at the SG where the signaling messages are sent or received. It can be text or integer, and its values are assigned according to network operator policy ๐ŸŽ€. The values are only of local significance, coordinated between the SG and ASP. Significance is not implied across SGs served by an AS ๐Ÿ‘€
  • Application Server (AS): a logical entity serving one specific application instance. An example is an MGC handling Q.931 and call processing for D channels terminated by the Signaling Gateways ๐Ÿ‘‘. In practice, the SG models an AS as an ordered list of one or more related Application Server Processes (e.g., primary, secondary, tertiary) ๐Ÿ“‹
  • Application Server Process (ASP): a process instance of an Application Server. Examples are primary or backup MGC instances ๐Ÿ’…
  • Fail-over: the ability to re-route signaling traffic as needed between related ASPs when the one in use fails or becomes unavailable (e.g., from primary MGC to back-up MGC). Fail-over also applies when a previously unavailable process returns to service ๐Ÿ”ฅ
  • Layer Management: a nodal function that handles the inputs and outputs between the IUA layer and a local management entity ๐Ÿง 
  • Network Byte Order: most significant byte first, a.k.a. Big Endian ๐Ÿ“
  • Host: the computing platform the ASP process is running on ๐Ÿ’ป
Heads up ๐Ÿ™ˆ: the terms "Application Server" and "Application Server Process" are easy to mix up. An AS is the logical service, and an ASP is one running instance of it.

1.3 IUA Overview

The architecture defined in [4] for SCN signaling transport over IP has several pieces: an IP transport protocol, a signaling common transport protocol, and an adaptation module that gives a specific SCN signaling protocol the services it expects from the layer below it ๐Ÿงฉ.

This doc defines an adaptation module that's built for transporting ISDN Q.921-User messages (e.g., Q.931) ๐Ÿ’œ.

1.3.1 Example - SG to MGC

Picture this ๐ŸŽฌ: at a Signaling Gateway, ISDN signaling comes in over a standard ISDN network termination. The SG then does interworking of transport functions with IP Signaling Transport, so it can carry Q.931 signaling messages to the MGC, where the peer Q.931 protocol layer lives ๐ŸŒŸ. Here's the picture:

       ******   ISDN        ******      IP      *******
       * EP *---------------* SG *--------------* MGC *
       ******               ******              *******

       +-----+                                  +-----+
       |Q.931|              (NIF)               |Q.931|
       +-----+           +----------+           +-----+
       |     |           |     | IUA|           | IUA |
       |     |           |     +----+           +-----+
       |Q.921|           |Q.921|SCTP|           |SCTP |
       |     |           |     +----+           +-----+
       |     |           |     | IP |           | IP  |
       +-----+           +-----+----+           +-----+

       NIF  - Nodal Interworking Function
       EP   - ISDN End Point
       SCTP - Stream Control Transmission Protocol (Refer to [3])
       IUA  - ISDN User Adaptation Layer Protocol

It is recommended that the IUA use SCTP as its underlying reliable common signaling transport protocol ๐Ÿซถ. SCTP brings these features to the party ๐ŸŽ€:

  • explicit packet-oriented delivery (not stream-oriented)
  • sequenced delivery of user messages within multiple streams, with an option for order-of-arrival delivery of individual user messages
  • optional multiplexing of user messages into SCTP datagrams
  • network-level fault tolerance through support of multi-homing at either or both ends of an association
  • resistance to flooding and masquerade attacks
  • data segmentation to conform to discovered path MTU size

Not every setup needs redundancy ๐Ÿ™Œ. Some scenarios don't need it, and others get redundancy below the transport layer. In those cases, the SCTP functions above MAY NOT be a requirement, and TCP can be used as the underlying common transport protocol ๐ŸŒˆ.

1.3.2 Support for the management of SCTP associations between the SG and ASPs

Okay this is the part where the SG keeps track of everything ๐Ÿ—‚๏ธ๐Ÿ’…. The IUA layer at the SG keeps tabs on the availability state of all dynamically registered remote ASPs. That lets it manage the SCTP Associations and the traffic between the SG and ASPs โœจ. It also tracks whether each remote ASP is active or inactive. Active ASPs are the ones currently receiving traffic from the SG ๐Ÿฆ‹.

The IUA layer MAY be told by local management to set up an SCTP association with a peer IUA node ๐Ÿ‘‘. It can do this with the M-SCTP ESTABLISH primitive, which handles requesting, indicating, and confirming the establishment of an SCTP association with that peer ๐Ÿ’–.

The IUA layer MAY also need to tell local management what's going on with the underlying SCTP associations, using the M-SCTP STATUS request and indication primitive ๐Ÿ“ฃ. For example, the IUA MAY let local management know why an SCTP association was released ๐Ÿ”. That reason could be decided locally inside the IUA layer, or come in as a primitive from SCTP ๐Ÿซถ.

1.3.3 Signaling Network Architecture โœจ

okay so the Signaling Gateway is the thing that carries Q.921-User signaling traffic out to one or more distributed ASPs (think MGCs) ๐Ÿซถ real talk though, IUA is NOT built to hit the performance and reliability needs for that kind of transport all by itself ๐Ÿ˜ญ but when you combine a distributed setup with redundant networks, you CAN get signaling traffic over IP that's reliable enough โœจ and IUA is flexible enough to run and manage in a bunch of different physical setups, so Network Operators can actually hit their own performance and reliability goals ๐Ÿ’…

so for ISDN signaling to be carrier grade ๐Ÿ‘‘, Network Operators SHOULD ensure there is no single point of failure in the whole end-to-end network between an ISDN node and an IP ASP. no weak links, bestie ๐Ÿ”—

depending on how reliable the SG and ASP elements are (obviously), this is usually done with redundant QOS-bounded IP network paths for SCTP Associations between SCTP End Points, plus redundant Hosts and redundant SGs ๐Ÿงš where the ASPs live matters too. for a given Application Server, the related ASPs SHOULD be distributed over at least two Hosts ๐ŸŒธ

here's an example logical network architecture for carrier-grade operation in the IP network domain, shown in Figure 1 below ๐Ÿฆ‹

                                                          Host1
  ********                                         **************
  *      *_________________________________________*  ********  *
  *      *                                _________*  * ASP1 *  *
  *  SG1 *   SCTP Associations           |         *  ********  *
  *      *_______________________        |         *            *
  ********                       |       |         **************
                                 |       |
  ********                       |       |
  *      *_______________________________|
  *      *                       |
  *  SG2 *    SCTP Associations  |
  *      *____________           |
  *      *            |          |                     Host2
  ********            |          |                 **************
                      |          |_________________*  ********  *
                      |____________________________*  * ASP1 *  *
                                                   *  ********  *
                                                   *            *
                                                   **************
                                                           .
                                                           .
                                                           .

                    Figure 2 - Logical Model Example

and for carrier grade networks, if an ASP fails or gets cut off, that SHOULD NOT cause stable calls to be dropped ๐Ÿ˜ญ which means ASPs sometimes need to share call state or be able to pass it between each other. BUT that sharing or communication of call state info is outside the scope of this document, so we're leaving it for another day ๐Ÿ™ˆ

1.3.4 ASP Fail-over Model and Terminology ๐Ÿ”ฅ

IUA supports ASP fail-over so call processing stays highly available ๐Ÿซถ every Q.921-User message coming into an SG gets assigned to one unique Application Server, based on its Interface Identifier.

the Application Server is basically a list of all the ASPs set up to process Q.921-User messages from certain Interface Identifiers ๐Ÿ“ one or more ASPs on that list are normally active (aka actually handling traffic), while any others MAY be unavailable or inactive, so they can jump in if the active one(s) fail or become unavailable ๐Ÿ’œ

the fail-over model supports an n+k redundancy model ๐Ÿงฎ where n ASP(s) is the minimum number of redundant ASPs needed to handle traffic, and k ASPs are available to take over for a failed or unavailable ASP. 1+1 active/standby redundancy is just a subset of this model, and a simplex 1+0 model is also supported as a subset, with no ASP redundancy at all ๐Ÿ“

to avoid a single point of failure, it is recommended that the list have a minimum of two ASPs, sitting in separate hosts so they're reachable over different SCTP Associations ๐ŸŒˆ for example, in the network from Figure 2, all messages from one particular D Channel (Interface Identifier) could go to ASP1 in Host1 OR ASP1 in Host2. the AS list at SG1 might look like this:

   Interface Identifier(s) - Application Server #1
       ASP1/Host1  - State=Up, Active
       ASP1/Host2  - State=Up, Inactive

in this 1+1 redundancy case, ASP1 in Host1 gets every incoming message for the registered Interface Identifiers โœจ ASP1 in Host2 would normally be brought to the active state when ASP1/Host1 fails or loses connectivity ๐Ÿฆ‹ and in this example both ASPs are Up, which just means the related SCTP association and far-end IUA peer are ready to go ๐Ÿ’–

the AS List at SG1 can also be set up in load-share mode, like this:

   Interface Identifier(s) - Application Server #1
       ASP1/Host1 - State=Up, Active
       ASP1/Host2 - State=Up, Active

in this case, both ASPs get a portion of the traffic ๐ŸŽ€

during fail-over, it is recommended that for ASPs doing call processing, stable calls do NOT get released ๐Ÿ˜ญ calls in transition MAY fail, though measures of communication between the involved ASPs can help mitigate that ๐Ÿ’… for example, the two ASPs MAY share call state via shared memory, or MAY use an ASP to ASP protocol to pass call state info. and yep, the ASP to ASP protocol is outside the scope of this document too ๐Ÿ™ˆ

1.3.5 Client/Server Model ๐ŸŒธ

it is recommended that the SG and ASP be able to support BOTH client and server operation ๐Ÿซถ the peer endpoints using IUA SHOULD be configured so one always takes the client role and the other takes the server role when initiating SCTP associations. the default setup is for the SG to be the server and the ASP to be the client, and in that case ASPs SHOULD initiate the SCTP association to the SG ๐Ÿงš

the SCTP (and UDP/TCP) Registered User Port Number Assignment for IUA is 9900 ๐Ÿ”ฅ

1.4 Services Provided by the IUA Layer ๐Ÿ’…

1.4.1 Support for transport of Q.921/Q.931 boundary primitives โœจ

in the backhaul scenario, the Q.921/Q.931 boundary primitives are exposed ๐Ÿ‘‘ the IUA layer needs to support ALL of the primitives at this boundary to successfully backhaul Q.931 ๐Ÿ’–

this includes the following primitives [1]:

DL-ESTABLISH ๐Ÿฆ‹

the DL-ESTABLISH primitives are used to request, indicate and confirm the outcome of the procedures for establishing multiple frame operation.

DL-RELEASE ๐ŸŒˆ

DL-RELEASE primitives are used to request, indicate, and confirm the outcome of the procedures for terminating a previously established multiple frame operation, OR for reporting an unsuccessful establishment attempt.

DL-DATA ๐ŸŽ€

the DL-DATA primitives are used to request and indicate layer 3 (Q.931) messages which are to be transmitted, or have been received, by the Q.921 layer using the acknowledged information transfer service.

DL-UNIT DATA ๐Ÿ“

the DL-UNIT DATA primitives are used to request and indicate layer 3 (Q.931) messages which are to be transmitted, by the Q.921 layer using the unacknowledged information transfer service.

1.4.2 Support for communication between Layer Management modules on SG and MGC ๐Ÿงš

the IUA layer needs to provide some services that make it easier for Layer Management modules on the SG and MGC to talk to each other ๐Ÿซถ these primitives are pointed out in [2], and they're shown below:

M-TEI STATUS ๐Ÿ’œ

the M-TEI STATUS primitives are used to request, confirm and indicate the status (assigned/unassigned) of a TEI.

M-ERROR ๐Ÿ˜ญ

the M-ERROR primitive is used to indicate an error with a received IUA message (e.g., interface identifier value is not known to the SG).

1.4.3 Support for management of active associations between SG and MGC ๐Ÿ”ฅ

there's a set of primitives between the IUA layer and Layer Management, defined below, so Layer Management can manage the SCTP association(s) between the SG and MGC ๐Ÿ’… Layer Management can instruct the IUA layer to establish an SCTP association to a peer IUA node, and that's done with the M-SCTP ESTABLISH primitive โœจ

M-SCTP ESTABLISH ๐Ÿ‘‘

the M-SCTP ESTABLISH primitives are used to request, indicate, and confirm the establishment of an SCTP association to a peer IUA node.

M-SCTP RELEASE ๐Ÿฆ‹

the M-SCTP RELEASE primitives are used to request, indicate, and confirm the release of an SCTP association to a peer IUA node.

the IUA layer MAY also need to tell Layer Management the status of the SCTP associations ๐ŸŒธ that's done with the M-SCTP STATUS primitive.

M-SCTP STATUS ๐ŸŒˆ

the M-SCTP STATUS primitives are used to request and indicate the status of the underlying SCTP association(s).

the Layer Management MAY need to inform the IUA layer of an AS/ASP status (like failure, active, etc.), so messages can be exchanged between IUA layer peers to stop traffic to the local IUA user ๐Ÿงš that's done with the M-ASP STATUS primitive.

M-ASP STATUS ๐ŸŽ€

the ASP status is stored inside the IUA layer on both the SG and MGC sides ๐Ÿซถ the M-ASP STATUS primitive can be used by Layer Management to request the status of the Application Server Process from the IUA layer, and it can also be used to indicate the status of the Application Server Process.

M-ASP-UP ๐Ÿ’–

the M-ASP-UP primitive can be used by Layer Management to send an ASP Up message for the Application Server Process. it can also be used to generate an ASP Up Acknowledgement.

M-ASP-DOWN ๐Ÿ“

the M-ASP-DOWN primitive can be used by Layer Management to send an ASP Down message for the Application Server Process. it can also be used to generate an ASP Down Acknowledgement.

M-ASP-ACTIVE ๐Ÿ’œ

the M-ASP-UP primitive can be used by Layer Management to send an ASP Active message for the Application Server Process. it can also be used to generate an ASP Active Acknowledgement.

M-ASP-INACTIVE ๐ŸŒธ

the M-ASP-UP primitive can be used by Layer Management to send an ASP Inactive message for the Application Server Process. it can also be used to generate an ASP Inactive Acknowledgement.

M-AS STATUS ๐Ÿ”ฅ

the M-AS STATUS primitive can be used by Layer Management to request the status of the Application Server ๐Ÿฆ‹ it can also be used to indicate the status of the Application Server.

1.5 Functions Implemented by the IUA Layer ๐ŸŒˆ

1.5.1 Mapping โœจ

okay so the IUA layer MUST maintain a map of each Interface Identifier to a physical interface on the Signaling Gateway ๐Ÿ—บ๏ธ ๐Ÿ’– A physical interface could be a T1 line, an E1 line, and so on, and it could even include the TDM timeslot. For any given interface, the SG MUST be able to identify the signaling channel that goes with it. IUA layers on both the SG and the MGC MAY maintain the status of TEIs and SAPIs ๐ŸŽ€

the SG only maps an Interface Identifier to an SCTP association/stream when an ASP sends an ASP Active message for that particular Interface Identifier. It MUST be noted, though, that this mapping is dynamic and could change at any time because the ASP state changed ๐Ÿฆ‹ It could even be temporarily invalid, like during a failover from one ASP to another ๐Ÿ˜ญ So the SG MUST maintain the states of AS/ASP and check them when routing a message to an AS/ASP ๐Ÿซถ

here's a logical picture of how the D channel, Interface Identifier, AS and ASP fit together in the SG ๐Ÿงš

          /---------------------------------------------------+
         /   /------------------------------------------------|--+
        /   /                                                 v  |
       /   /    +----+             act+-----+    +-------+ -+--+-|+--+-
D chan1-------->|IID |-+          +-->| ASP |--->| Assoc |       v
         /      +----+ |  +----+  |   +-----+    +-------+ -+--+--+--+-
        /              +->| AS |--+                        Streams
       /        +----+ |  +----+   stb+-----+
D chan2-------->|IID |-+              | ASP |
                +----+                +-----+

where IID = Interface Identifier

note that an ASP can be in more than one AS ๐Ÿ‘‘

1.5.2 Status of ASPs ๐ŸŒธ

the IUA layer on the SG MUST maintain the state of the ASPs it supports ๐Ÿ’… An ASP's state changes when it receives peer-to-peer messages (ASPM messages, as described in Section 3.3.2) or when it gets indications from the local SCTP association. The ASP state transition procedures are described in Section 4.3.1 ๐Ÿ“–

at an SG, an Application Server list MAY contain active and inactive ASPs so you can do ASP load-sharing and fail-over ๐Ÿ”„ For example, when both a primary and a back-up ASP are available, the IUA peer protocol is required to control which ASP is currently active ๐Ÿ‘€ The ordered list of ASPs inside a logical Application Server is kept up to date in the SG so it reflects the active Application Server Process(es) โœจ

the IUA layer MAY also need to tell local management when an ASP or AS changes status ๐Ÿ“ฃ That can be done with the M-ASP STATUS or M-AS STATUS primitives ๐Ÿ“

1.5.3 SCTP Stream Management ๐ŸŒˆ

SCTP lets you open a user-specified number of streams during initialization ๐Ÿง It's the IUA layer's job to make sure those streams are managed properly ๐Ÿ’œ Streams are unidirectional, so an IUA layer doesn't know the stream number to Interface Identifier mapping of its peer IUA layer. Instead, the Interface Identifier lives in the IUA message header ๐ŸŽ€

using SCTP streams within IUA is recommended, because it minimizes transmission and buffering delay, which improves the overall performance and reliability of the signaling elements ๐Ÿš€ It is also recommended that each D channel gets its own SCTP stream ๐Ÿฆ‹

1.5.4 Seamless Network Management Interworking ๐Ÿ’ซ

if the currently active ASP moves out of the ACTIVE state, the IUA layer on the SG SHOULD pass an indication that the IUA-User (Q.931) is unavailable up to the local Layer Management ๐Ÿšจ The Layer Management could then tell Q.921 to take some action, if it thinks that's appropriate ๐Ÿง 

and if an SCTP association fails, the IUA layer on both the SG and ASP sides MAY generate Release primitives to take the data links out-of-service ๐Ÿ™ˆ

1.5.5 Congestion Management ๐ŸŒŠ

if the IUA layer gets congested (this part is implementation dependent), it MAY stop reading from the SCTP association to flow control the peer IUA ๐Ÿ›‘ bestie, that's a whole flow-control move ๐Ÿ’…

1.6 Definition of IUA Boundaries ๐ŸŽ€

1.6.1 Definition of IUA/Q.921 boundary ๐Ÿ’–

these are the primitives at the IUA/Q.921 boundary:

DL-ESTABLISH
DL-RELEASE
DL-DATA
DL-UNIT DATA

1.6.2 Definition of IUA/Q.931 boundary ๐ŸŒธ

these are the primitives at the IUA/Q.931 boundary:

DL-ESTABLISH
DL-RELEASE
DL-DATA
DL-UNIT DATA

1.6.3 Definition of SCTP/IUA Boundary โœจ

an example of the upper layer primitives SCTP provides can be found in Reference [3] section 10 ๐Ÿ“š

1.6.4 Definition of IUA/Layer-Management Boundary ๐Ÿ‘‘

here's the full list of primitives between IUA and Layer Management, with who sends what and why ๐Ÿ’…

M-SCTP ESTABLISH request
Direction: LM -> IUA
Purpose: LM requests ASP to establish an SCTP association with an SG.

M-STCP ESTABLISH confirm
Direction: IUA -> LM
Purpose: ASP confirms to LM that it has established an SCTP
         association with an SG.

M-SCTP ESTABLISH indication
Direction: IUA -> LM
Purpose: SG informs LM that an ASP has established an SCTP
         association.

M-SCTP RELEASE request
Direction: LM -> IUA
Purpose: LM requests ASP to release an SCTP association with SG.

M-SCTP RELEASE confirm
Direction: IUA -> LM
Purpose: ASP confirms to LM that it has released SCTP association
         with SG.

M-SCTP RELEASE indication
Direction: IUA -> LM
Purpose: SG informs LM that ASP has released an SCTP association.

M-SCTP STATUS request
Direction: LM -> IUA
Purpose: LM requests IUA to report status of SCTP association.

M-SCTP STATUS indication
Direction: IUA -> LM
Purpose: IUA reports status of SCTP association.

M-ASP STATUS request
Direction: LM -> IUA
Purpose: LM requests SG to report status of remote ASP.

M-ASP STATUS indication
Direction: IUA -> LM
Purpose: SG reports status of remote ASP.

M-AS-STATUS request
Direction: LM -> IUA
Purpose: LM requests SG to report status of AS.

M-AS-STATUS indication
Direction: IUA -> LM
Purpose: SG reports status of AS.

M-NOTIFY indication
Direction: IUA -> LM
Purpose: ASP reports that it has received a NOTIFY message
         from its peer.

M-ERROR indication
Direction: IUA -> LM
Purpose: ASP or SG reports that it has received an ERROR
         message from its peer.

M-ASP-UP request
Direction: LM -> IUA
Purpose: LM requests ASP to start its operation and send an ASP UP
         message to the SG.

M-ASP-UP confirm
Direction: IUA -> LM
Purpose: ASP reports that is has received an ASP UP Acknowledgement
         message from the SG.

M-ASP-DOWN request
Direction: LM -> IUA
Purpose: LM requests ASP to stop its operation and send an ASP DOWN
         message to the SG.

M-ASP-DOWN confirm
Direction: IUA -> LM
Purpose: ASP reports that is has received an ASP DOWN
         Acknowledgement message from the SG.

M-ASP-ACTIVE request
Direction: LM -> IUA
Purpose: LM requests ASP to send an ASP ACTIVE message to the SG.

M-ASP-ACTIVE confirm
Direction: IUA -> LM
Purpose: ASP reports that is has received an ASP ACTIVE
         Acknowledgement message from the SG.

M-ASP-INACTIVE request
Direction: LM -> IUA
Purpose: LM requests ASP to send an ASP INACTIVE message to the SG.

M-ASP-INACTIVE confirm
Direction: IUA -> LM
Purpose: ASP reports that is has received an ASP INACTIVE
         Acknowledgement message from the SG.

M-TEI STATUS request
Direction: LM -> IUA
Purpose: LM requests ASP to send a TEI status request to the SG.

M-TEI STATUS indication
Direction: IUA -> LM
Purpose: ASP reports that is has received a TEI status indication
         from the SG.

M-TEI STATUS confirm
Direction: IUA -> LM
Purpose: ASP reports that is has received a TEI status confirm from the
         SG.

2.0 Conventions ๐ŸŽ€

okay so the keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL, when they show up in this document, are to be read as described in [RFC2119] ๐Ÿง ๐Ÿ’œ

3.0 Protocol Elements ๐ŸŒท

this section describes the format of the various messages used in this protocol ๐Ÿ“ฆ

3.1 Common Message Header ๐Ÿฆ‹

the protocol messages for Q.921-User Adaptation need a message header that holds the adaptation layer version, the message type, and the message length ๐Ÿ’Œ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Version    |   Reserved    | Message Class | Message Type  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Message Length                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 3 Common Header Format

all fields in an IUA message MUST be transmitted in network byte order, unless stated otherwise ๐Ÿ”ฅ

3.1.1 Version ๐Ÿ’–

the version field holds the version of the IUA adaptation layer. The supported versions are below ๐ŸŒˆ

      Value    Version
      -----    -------
        1      Release 1.0

3.1.2 Message Classes and Types โœจ

here's the list of valid Message Classes ๐Ÿ“‹

   Message Class: 8 bits (unsigned integer)

     0      Management (MGMT) Message [IUA/M2UA/M3UA/SUA]
     1      Transfer Messages [M3UA]
     2      SS7 Signalling Network Management (SSNM) Messages [M3UA/SUA]
     3      ASP State Maintenance (ASPSM) Messages [IUA/M2UA/M3UA/SUA]
     4      ASP Traffic Maintenance (ASPTM) Messages [IUA/M2UA/M3UA/SUA]
     5      Q.921/Q.931 Boundary Primitives Transport (QPTM)
            Messages [IUA]
     6      MTP2 User Adaptation (MAUP) Messages [M2UA]
     7      Connectionless Messages [SUA]
     8      Connection-Oriented Messages [SUA]
  9 to 127  Reserved by the IETF
128 to 255  Reserved for IETF-Defined Message Class extensions

and here are the message names for the defined messages ๐Ÿง

    Q.921/Q.931 Boundary Primitives Transport (QPTM) Messages

       0        Reserved
       1        Data Request Message
       2        Data Indication Message
       3        Unit Data Request Message
       4        Unit Data Indication Message
       5        Establish Request
       6        Establish Confirm
       7        Establish Indication
       8        Release Request
       9        Release Confirm
      10        Release Indication
    11 to 127   Reserved by the IETF
   128 to 255   Reserved for IETF-Defined QPTM extensions

    Application Server Process State Maintenance (ASPSM) messages

       0        Reserved
       1        ASP Up (UP)
       2        ASP Down (DOWN)
       3        Heartbeat (BEAT)
       4        ASP Up Ack (UP ACK)
       5        ASP Down Ack (DOWN ACK)
       6        Heatbeat Ack (BEAT ACK)
     7 to 127   Reserved by the IETF
   128 to 255   Reserved for IETF-Defined ASPSM extensions

    Application Server Process Traffic Maintenance (ASPTM) messages

       0        Reserved
       1        ASP Active (ACTIVE)
       2        ASP Inactive (INACTIVE)
       3        ASP Active Ack (ACTIVE ACK)
       4        ASP Inactive Ack (INACTIVE ACK)
     5 to 127   Reserved by the IETF
   128 to 255   Reserved for IETF-Defined ASPTM extensions

    Management (MGMT) Messages

       0        Error (ERR)
       1        Notify (NTFY)
       2        TEI Status Request
       3        TEI Status Confirm
       4        TEI Status Indication
     5 to 127   Reserved by the IETF
   128 to 255   Reserved for IETF-Defined MGMT extensions

3.1.3 Reserved ๐ŸŒธ

the Reserved field is 8 bits. It SHOULD be set to all '0's and ignored by the receiver ๐Ÿ™ˆ

3.1.4 Message Length ๐Ÿ’œ

the Message length is the length of the message in octets, and that includes the Common header ๐Ÿ“โœจ

3.1.5 Variable-Length Parameter Format ๐ŸŽ€

okay so every IUA message is a Common Header ๐Ÿ’… followed by zero or more variable-length parameters, and which ones show up depends on the message type ๐ŸŒธ each parameter comes in a Tag-Length-Value format that looks like this:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Parameter Tag        |       Parameter Length        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   \                                                               \
   /                       Parameter Value                         /
   \                                                               \
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Mandatory parameters MUST be placed before optional parameters in a message. ๐Ÿ’– no skipping the line, bestie!

Parameter Tag: 16 bits (unsigned integer) ๐Ÿงš

The Tag field is a 16 bit identifier of the type of parameter. It takes a value of 0 to 65534. The value of 65535 is reserved for IETF-defined extensions. Values other than those defined in specific parameter description are reserved for use by the IETF. โœจ

Parameter Length: 16 bits (unsigned integer) ๐Ÿฆ‹

This is the size of the parameter in bytes, counting the Parameter Tag, Parameter Length, and Parameter Value fields all together. The Parameter Length does not include any padding bytes. ๐Ÿ™ˆ

Parameter Value: variable-length ๐Ÿ’œ

This is where the actual information being sent in the parameter lives. ๐Ÿซถ

The total length of a parameter (including Tag, Parameter Length and Value fields) MUST be a multiple of 4 bytes. If the length of the parameter is not a multiple of 4 bytes, the sender pads the Parameter at the end (i.e., after the Parameter Value field) with all zero bytes. The length of the padding is not included in the parameter length field. A sender SHOULD NEVER pad with more than 3 bytes. The receiver MUST ignore the padding bytes. ๐Ÿ”ฅ so the sender pads with zeros, the padding doesn't count toward the length, and the receiver just ignores it. iconic behaviour ๐Ÿ‘‘

3.2 IUA Message Header โœจ

okay so in addition to the common message header, QPTM and the TEI Status MGMT messages get a specific message header of their own ๐ŸŒˆ the IUA message header comes right after the Common header in these messages.

This header holds the Interface Identifier and the Data Link Connection Identifier (DLCI). The Interface Identifier points at the physical interface that terminates the signaling channel at the SG, which is the one the signaling messages are sent and received on. It can be text or integer, and Interface Identifiers are assigned according to network operator policy. The integer values are of local significance only, and they get coordinated between the SG and ASP. ๐Ÿฆ‹

The integer formatted Interface Identifier MUST be supported. The text formatted Interface Identifier MAY optionally be supported. ๐Ÿ’… so integer is a must, text is a bonus!

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0x1)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier (integer)                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0x5)           |             Length=8          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            DLCI               |              Spare            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 4 IUA Message Header (Integer-based Interface Identifier)

The Tag value for the Integer-based Interface Identifier is 0x1. The length is always set to a value of 8. ๐Ÿ“

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0x3)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                   Interface Identifier (text)                 |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0x5)           |             Length=8          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            DLCI               |             Spare             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 5 IUA Message Header (Text-based Interface Identifier)

The Tag value for the Text-based Interface Identifier is 0x3. The length is variable. ๐ŸŒธ

The DLCI format is shown below in Figure 6.

      0     1     2     3     4     5     6     7
   +-----+-----+-----+-----+-----+-----+-----+-----+
   |  0  | SPR |      SAPI                         |
   +-----------------------------------------------+
   |  1  |            TEI                          |
   +-----------------------------------------------+

              Figure 6  DLCI Format

Here's the breakdown ๐Ÿง:

  • SPR: Spare 2nd bit in octet 1, (1 bit)
  • SAPI: Service Access Point Identifier, 3rd through 8th bits in octet 1 (6 bits)
  • TEI: Terminal Endpoint Identifier, 2nd through 8th bits in octet 2 (7 bits)

The DLCI field (including the SAPI and TEI) is coded in accordance with Q.921. ๐Ÿซถ

3.3 IUA Messages ๐Ÿฆ‹

this section defines the messages and what their parameter contents look like. The IUA messages use the common message header (Figure 3) and the IUA message header (Figure 4 and Figure 5). ๐Ÿ’–

3.3.1 Q.921/Q.931 Boundary Primitives Transport (QPTM) Messages ๐ŸŒˆ

3.3.1.1 Establish Messages (Request, Confirm, Indication) ๐ŸŽ€

The Establish Messages are used to establish a data link on the signaling channel, or to confirm that one has been established. The MGC controls the state of the D channel. When the MGC wants the D channel to be in-service, it sends the Establish Request message. ๐Ÿ‘‘

When the MGC sends an IUA Establish Request message, the MGC MAY start a timer. This timer gets stopped when an IUA Establish Confirm or Establish Indication comes back. If the timer expires, the MGC re-sends the IUA Establish Request message and restarts the timer. In other words, the MGC MAY keep requesting the establishment of the data link on a periodic basis until the desired state is achieved, or take some other action (notify the Management Layer). ๐Ÿ” persistence is giving main character energy โœจ

When the SG receives an IUA Establish Request from the MGC, the SG shall send the Q.921 Establish Request primitive to its Q.921 entity. On top of that, the SG shall map any response received from the Q.921 entity to the appropriate message for the MGC. For example, if the Q.921 entity responds with a Q.921 Establish Confirm primitive, the IUA layer shall map this to an IUA Establish Confirm message. As another example, if the IUA Layer receives a Q.921 Release Confirm or Release Indication as an apparent response to the Q.921 Establish Request primitive, the IUA Layer shall map these to the corresponding IUA Release Confirm or Release Indication messages. ๐Ÿ”ฅ

The Establish messages contain the common message header followed by the IUA message header. They do not contain any additional parameters. ๐Ÿ’…

3.3.1.2 Release Messages (Request, Indication, Confirmation) ๐ŸŒธ

The Release Request message is used to release the data link on the signaling channel. The Release Confirm and Indication messages are used to indicate that the data link on the signaling channel has been released. ๐Ÿฆ‹

If a response to the Release Request message is not received, the MGC MAY resend the Release Request message. If no response shows up, the MGC can consider the data link as released. In that case, signaling traffic on that D channel is not expected from the SG, and signaling traffic will not be sent to the SG for that D channel. ๐Ÿ™ˆ

The Release messages contain the common message header followed by the IUA message header. The Release Confirm message is in response to a Release Request message, and it does not contain any additional parameters. The Release Request and Indication messages contain the following parameter: ๐Ÿซถ

REASON

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xf)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              Reason                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The valid values for Reason are in the table below ๐Ÿ’œ:

   Define     Value           Description
RELEASE_MGMT   0x0     Management layer generated release.
RELEASE_PHYS   0x1     Physical layer alarm generated release.
RELEASE_DM     0x2     Specific to a request.  Indicates Layer 2
                       SHOULD release and deny all requests from
                       far end to establish a data link on the
                       signaling channel (i.e., if SABME is
                       received send a DM)
RELEASE_OTHER  0x3     Other reasons
Note: Only RELEASE_MGMT, RELEASE_DM and RELEASE_OTHER are valid reason codes for a Release Request message. ๐Ÿšจ hold up, the other two aren't allowed here!

3.3.1.3 Data Messages (Request, Indication) ๐Ÿ’–

The Data message carries an ISDN Q.921-User Protocol Data Unit (PDU) that goes with acknowledged information transfer service. ๐ŸŽ€

The Data messages contain the common message header followed by the IUA message header. The Data message contains the following parameters: ๐Ÿงš

PROTOCOL DATA

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xe)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          Protocol Data                        |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The protocol data carries an upper layer signaling message, e.g. Q.931, QSIG. ๐Ÿ“ž

3.3.1.4 Unit Data Messages (Request, Indication) โœจ

The Unit Data message carries an ISDN Q.921-User Protocol Data Unit (PDU) that goes with unacknowledged information transfer service. ๐Ÿฆ‹

The Unit Data messages contain the common message header followed by the IUA message header. The Unit Data message contains the following parameters: ๐Ÿ’…

PROTOCOL DATA

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xe)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          Protocol Data                        |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.3.2 Application Server Process Maintenance (ASPM) Messages ๐ŸŒˆ

The ASPM messages will only use the common message header. ๐Ÿซถ

3.3.2.1 ASP Up (ASPUP) ๐Ÿฆ‹

okay so the ASP Up (ASPUP) message is how an ASP tells an SG "hey, I'm ready to receive traffic or maintenance messages" ๐Ÿ’…โœจ

The ASPUP message contains the following parameters:

  • Info String (optional)

The format for ASPUP Message parameters is as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0x4)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          INFO String*                         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The optional INFO String parameter can carry any meaningful 8-bit ASCII character string along with the message. Length of the INFO String parameter is from 0 to 255 characters. No procedures are presently identified for its use, but the INFO String MAY be used for debugging purposes. ๐Ÿ™ˆ

3.3.2.2 ASP Up Ack ๐ŸŒธ

The ASP Up Ack message is used to acknowledge an ASP Up message received from a remote IUA peer. Basically it's the "got it, bestie" reply ๐Ÿซถ

The ASPUP Ack message contains the following parameters:

  • INFO String (optional)

The format for ASPUP Ack Message parameters is as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0x4)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          INFO String*                         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The format and description of the optional Info String parameter is the same as for the ASP Up message (See Section 3.3.3.1).

3.3.2.3 ASP Down (ASPDN) ๐Ÿ“

The ASP Down (ASPDN) message is sent by an ASP to indicate to an SG that it is NOT ready to receive traffic or maintenance messages. So this is the "pause, don't send me stuff" message ๐Ÿ’€

The ASPDN message contains the following parameters:

  • Reason
  • INFO String (Optional)

The format for the ASPDN message parameters is as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xa)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              Reason                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0x4)           |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                         INFO String*                          |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The format and description of the optional Info String parameter is the same as for the ASP Up message (See Section 3.3.3.1.).

The Reason parameter indicates the reason that the remote IUA adaptation layer is unavailable. The valid values for Reason are shown in the following table.

     Value         Description
      0x1          Management Inhibit

If a ASP is removed from Management Inhibit, the ASP will send an ASP Up message. โœจ

3.3.2.4 ASP Down Ack ๐Ÿ’œ

The ASP Down Ack message is used to acknowledge an ASP Down message received from a remote IUA peer. Same energy as the Up Ack, just for going down ๐ŸŒˆ

The ASP Down Ack message contains the following parameters:

  • Reason
  • INFO String (Optional)

The format for the ASP Down Ack message parameters is as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xa)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              Reason                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0x4)           |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                         INFO String*                          |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The format and description of the optional Info String parameter is the same as for the ASP Up message (See Section 3.3.2.1.).

The format of the Reason parameter is the same as for the ASP Down message (See Section 3.3.2.3).

3.3.2.5 ASP Active (ASPAC) ๐Ÿ‘‘

The ASPAC message is sent by an ASP to indicate to an SG that it is Active and ready to be used. This one is the main event, bestie ๐Ÿ”ฅ

The ASPAC message contains the following parameters

  • Traffic Mode Type (Mandatory)
  • Interface Identifier (Optional)
    • Combination of integer and integer ranges, OR
    • string (text formatted)
  • INFO String (Optional)

The format for the ASPAC message using integer formatted Interface Identifiers is as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xb)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Traffic Mode Type                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Tag (0x1=integer)         |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                     Interface Identifiers*                    |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Tag (0x8=integer range)    |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier Start1*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Interface Identifier Stop1*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier Start2*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Interface Identifier Stop2*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           .                                                           .
           .                                                           .
           .                                                           .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier StartN*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Interface Identifier StopN*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |              Additional Interface Identifiers                 |
   |                    of Tag Type 0x1 or 0x8                     |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Tag (0x4)             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          INFO String*                         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The format for the ASPAC message using text formatted (string) Interface Identifiers is as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xb)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Traffic Mode Type                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag (0x3=string)        |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                     Interface Identifier*                     |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Additional Interface Identifiers                 |
   |                        of Tag Type 0x3                        |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Tag (0x4)             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          INFO String*                         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The Traffic Mode Type parameter identifies the traffic mode of operation of the ASP within an AS. The valid values for Type are shown in the following table:

     Value          Description
      0x1            Over-ride
      0x2            Load-share

Within a particular Interface Identifier, only one Traffic Mode Type can be used. The Over-ride value indicates that the ASP is operating in Over-ride mode, where the ASP takes over all traffic in an Application Server (i.e., primary/back-up operation), over-riding any currently active ASPs in the AS. In Load-share mode, the ASP will share in the traffic distribution with any other currently active ASPs. ๐Ÿฆ‹

The optional Interface Identifiers parameter contains a list of Interface Identifier integers (Type 0x1 or Type 0x8) or text strings (Type 0x3) indexing the Application Server traffic that the sending ASP is configured/registered to receive. If integer formatted Interface Identifiers are being used, the ASP can also send ranges of Interface Identifiers (Type 0x8). Interface Identifier types Integer (0x1) and Integer Range (0x8) are allowed in the same message. Text formatted Interface Identifiers (0x3) cannot be used with either Integer (0x1) or Integer Range (0x8) types.

If no Interface Identifiers are included, the message is for all provisioned Interface Identifiers within the AS(s) in which the ASP is provisioned. If only a subset of Interface Identifiers are included, the ASP is noted as Active for all the Interface Identifiers provisioned for that AS.

Note: If the optional Interface Identifier parameter is present, the integer formatted Interface Identifier MUST be supported, while the text formatted Interface Identifier MAY be supported.

The format and description of the optional Info String parameter is the same as for the ASP Up message (See Section 3.3.2.1.).

An SG that receives an ASPAC with an incorrect Traffic Mode Type for a particular Interface Identifier will respond with an Error Message (Cause: Unsupported Traffic Handling Mode). ๐Ÿ’–

3.3.2.6 ASP Active Ack ๐Ÿฆ‹

okay so the ASPAC Ack is the "got it, you're active now" reply ๐Ÿ’… It gets sent to say yes, I saw that ASP-Active message from a remote IUA peer ๐Ÿซถ

the ASPAC Ack has these parameters, bestie:

  • Traffic Mode Type (Mandatory)
  • Interface Identifier (Optional)
    • Combination of integer and integer ranges, OR
    • string (text formatted)
  • INFO String (Optional)

here's the layout when your Interface Identifiers are integers ๐Ÿ”ขโœจ

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Tag (0xb)           |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Traffic Mode Type                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Tag (0x1=integer)         |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|                     Interface Identifiers*                    |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Tag (0x8=integer range)    |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Interface Identifier Start1*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Interface Identifier Stop1*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Interface Identifier Start2*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Interface Identifier Stop2*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        .                                                           .
        .                                                           .
        .                                                           .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Interface Identifier StartN*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Interface Identifier StopN*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|              Additional Interface Identifiers                 |
|                    of Tag Type 0x1 or 0x8                     |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Tag (0x4)             |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|                          INFO String*                         |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

and here's the one for text formatted (string) Interface Identifiers ๐Ÿ“๐ŸŒธ

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Tag (0xb)           |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Traffic Mode Type                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Tag (0x3=string)        |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|                     Interface Identifier*                     |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|              Additional Interface Identifiers                 |
|                        of Tag Type 0x3                        |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Tag (0x4)             |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|                          INFO String*                         |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

the Traffic Mode Type and Interface Identifier parameters work exactly the same as in the ASP Active message, so peep Section 3.3.2.5 for the full tea ๐Ÿต and the optional Info String is the same as in the ASP Up message, see Section 3.3.2.1. ๐Ÿ’œ

3.3.2.7 ASP Inactive (ASPIA) ๐ŸŒˆ

okay bestie, the ASPIA message is how an ASP says "I'm no longer an active ASP in the list, don't send me stuff anymore" ๐Ÿ™ˆ an ASP sends it to an SG, and the SG replies with an ASPIA Ack and then either drops incoming messages or buffers them for a set time and drops them after ๐Ÿ—‘๏ธ

the ASPIA message has these parameters:

  • Traffic Mode Type (Mandatory)
  • Interface Identifiers (Optional)
    • Combination of integer and integer ranges, OR
    • string (text formatted)
  • INFO String (Optional)

here's the integer-formatted version ๐Ÿ”ข

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Tag (0xb)           |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Traffic Mode Type                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Tag (0x1=integer)         |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|                     Interface Identifiers*                    |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Tag (0x8=integer range)    |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Interface Identifier Start1*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Interface Identifier Stop1*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Interface Identifier Start2*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Interface Identifier Stop2*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        .                                                           .
        .                                                           .
        .                                                           .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Interface Identifier StartN*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Interface Identifier StopN*                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|              Additional Interface Identifiers                 |
|                    of Tag Type 0x1 or 0x8                     |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Tag (0x4)           |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|                          INFO String*                         |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

and the text formatted (string) version ๐Ÿ“โœจ

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Tag (0xb)           |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Traffic Mode Type                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Tag (0x3=string)        |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|                     Interface Identifier*                     |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|              Additional Interface Identifiers                 |
|                        of Tag Type 0x3                        |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Tag (0x4)             |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|                          INFO String*                         |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

the Traffic Mode Type parameter tells you the traffic mode the ASP is running in within an AS ๐Ÿงš the valid values are in this little table:

   Value          Description
    0x1            Over-ride
    0x2            Load-share

the optional Interface Identifiers and Info String parameters work the same as in the ASP Active message, so check Section 3.3.2.3. ๐Ÿซถ

the optional Interface Identifiers parameter holds a list of Interface Identifier integers or text strings, pointing at the Application Server traffic the sending ASP is configured/registered to receive but doesn't want to receive right now ๐ŸŒธ

3.3.2.8 ASP Inactive Ack โœจ

okay so the ASP Inactive (ASPIA) Ack is the "got it, bestie" ๐Ÿ’… message. It gets sent back to acknowledge an ASP Inactive message that came in from a remote IUA peer ๐Ÿซถ

The ASPIA Ack message contains the following parameters:

  • Traffic Mode Type (Mandatory)
  • Interface Identifiers (Optional)
    • Combination of integer and integer ranges, OR
    • string (text formatted)
  • INFO String (Optional)
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xb)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Traffic Mode Type                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Tag (0x1=integer)         |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                     Interface Identifiers*                    |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Tag (0x8=integer range)    |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier Start1*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Interface Identifier Stop1*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier Start2*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Interface Identifier Stop2*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           .                                                           .
           .                                                           .
           .                                                           .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier StartN*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Interface Identifier StopN*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |              Additional Interface Identifiers                 |
   |                    of Tag Type 0x1 or 0x8                     |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Tag (0x4)             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          INFO String*                         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The format for the ASP Inactive Ack message using text formatted (string) Interface Identifiers is as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xb)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     Traffic Mode Type                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag (0x3=string)        |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                     Interface Identifier*                     |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |              Additional Interface Identifiers                 |
   |                        of Tag Type 0x3                        |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Tag (0x4)             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          INFO String*                         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The format of the Traffic Mode Type and Interface Identifier parameters is the same as for the ASP Inactive message (See Section 3.3.2.7).

The format and description of the optional Info String parameter is the same as for the ASP Up message (See Section 3.3.2.1).


3.3.2.9 Heartbeat (BEAT) ๐Ÿ’“

The Heartbeat message is optionally used to ensure that the IUA peers are still available to each other. It is recommended for use when the IUA runs over a transport layer other than the SCTP, which has its own heartbeat โœจ

The BEAT message contains the following parameters:

   Heartbeat Data         Optional

The format for the BEAT message is as follows:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            Tag = 9            |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   \                                                               \
   |                       Heartbeat Data *                        |
   \                                                               \
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The Heartbeat Data parameter contents are defined by the sending node. The Heartbeat Data could include, for example, a Heartbeat Sequence Number and, or Timestamp. The receiver of a Heartbeat message does not process this field as it is only of significance to the sender. The receiver MUST respond with a Heartbeat Ack message. ๐Ÿซถ

3.3.2.10 Heartbeat Ack (BEAT-Ack) ๐Ÿฆ‹

The Heartbeat Ack message is sent in response to a received Heartbeat message. It includes all the parameters of the received Heartbeat message, without any change. Literally a perfect mirror ๐Ÿชž

3.3.3 Layer Management (MGMT) Messages ๐Ÿงš

3.3.3.1 Error (ERR) ๐Ÿšจ

The Error message is used to notify a peer of an error event associated with an incoming message. For example, the message type might be unexpected given the current state, or a parameter value might be invalid. It's the "um, excuse me?" message ๐Ÿ’€

The Error message will only have the common message header. The Error message contains the following parameters:

  • Error Code
  • Diagnostic Information (optional)
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xc)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          Error Code                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0x7)           |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                     Diagnostic Information*                   |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The Error Code parameter indicates the reason for the Error Message. The Error parameter value can be one of the following values:

      Invalid Version                               0x01
      Invalid Interface Identifier                  0x02
      Unsupported Message Class                     0x03
      Unsupported Message Type                      0x04
      Unsupported Traffic Handling Mode             0x05
      Unexpected Message                            0x06
      Protocol Error                                0x07
      Unsupported Interface Identifier Type         0x08
      Invalid Stream Identifier                     0x09
      Unassigned TEI                                0x0a
      Unrecognized SAPI                             0x0b
      Invalid TEI, SAPI combination                 0x0c

The "Invalid Version" error would be sent if a message was received with an invalid or unsupported version. The Error message would contain the supported version in the Common header. The Error message could optionally provide the supported version in the Diagnostic Information area. ๐Ÿ”ข

The "Invalid Interface Identifier" error would be sent by a SG if an ASP sends a message with an invalid (unconfigured) Interface Identifier value. ๐Ÿ™…โ€โ™€๏ธ

The "Unsupported Traffic Handling Mode" error would be sent by a SG if an ASP sends an ASP Active with an unsupported Traffic Handling Mode. An example would be a case in which the SG did not support load-sharing. โš–๏ธ

The "Unexpected Message" error would be sent by an ASP if it received a QPTM message from an SG while it was in the Inactive state (the ASP could optionally drop the message and not send an Error). It would also be sent by an ASP if it received a defined and recognized message that the SG is not expected to send (e.g., if the MGC receives an IUA Establish Request message). very plot twist ๐Ÿ™ƒ

The "Protocol Error" error would be sent for any protocol anomaly (i.e., a bogus message). ๐Ÿซ 

The "Invalid Stream Identifier" error would be sent if a message was received on an unexpected SCTP stream (i.e., a MGMT message was received on a stream other than "0"). ๐Ÿงต

The "Unsupported Interface Identifier Type" error would be sent by a SG if an ASP sends a Text formatted Interface Identifier and the SG only supports Integer formatted Interface Identifiers. When the ASP receives this error, it will need to resend its message with an Integer formatted Interface Identifier. ๐Ÿ”

The "Unsupported Message Type" error would be sent if a message with an unexpected or unsupported Message Type is received. ๐Ÿ“ญ

The "Unsupported Message Class" error would be sent if a message with an unexpected or unsupported Message Class is received. ๐Ÿ“ช

The "Unassigned TEI" error may be used when the SG receives an IUA message that includes a TEI which has not been assigned or recognized for use on the indicated ISDN D-channel. ๐Ÿ“ก

The "Unrecognized SAPI" error would handle the case of using a SAPI that is not recognized by the SG. The "Invalid TEI, SAPI combination" error identify errors where the TEI is assigned and the the SAPI is recognized, but the combination is not valid for the interface (e.g., on a BRI the MGC tries to send Q.921 Management messages via IUA when Layer Management at the SG SHOULD be performing this function). this one is spicy, read it twice ๐ŸŒถ๏ธ

The optional Diagnostic information can be any information germane to the error condition, to assist in identification of the error condition. To enhance debugging, the Diagnostic information could contain the first 40 bytes of the offending message. ๐Ÿ”โœจ

3.3.3.2 Notify (NTFY) ๐Ÿ””

Notify is the message an IUA peer uses to tell its buddy about stuff happening on the other side, without being asked. It's giving "heads up, something changed" ๐Ÿซถ

Notify only uses the common message header, and it carries these parameters:

  • Status Type
  • Status Identification
  • Interface Identifiers (Optional)
  • INFO String (Optional)

Here's the layout when the Interface Identifiers are Integer-formatted ๐Ÿ’–:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xd)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Status Type            |    Status Identification      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Tag (0x1=integer)         |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                     Interface Identifiers*                    |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Tag (0x8=integer range)    |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier Start1*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Interface Identifier Stop1*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier Start2*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Interface Identifier Stop2*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           .                                                           .
           .                                                           .
           .                                                           .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 Interface Identifier StartN*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  Interface Identifier StopN*                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |              Additional Interface Identifiers                 |
   |                    of Tag Type 0x1 or 0x8                     |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Tag (0x4)             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          INFO String*                         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

And here's the layout when the Interface Identifiers are Text-formatted ๐ŸŽ€:

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           Tag (0xd)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Status Type            |    Status Identification      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       Tag (0x3=string)        |            Length             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                     Interface Identifier*                     |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |              Additional Interface Identifiers                 |
   |                        of Tag Type 0x3                        |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         Tag (0x4)             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |                          INFO String*                         |

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The Status Type parameter tells you what kind of Notify this is ๐Ÿง. The valid Status Type values are:

      Value          Description
       0x1   Application Server state change (AS_State_Change)
       0x2   Other

The Status Identification parameter gives the juicy details for the notification, and what it means depends on the Status Type. If the Status Type is AS_State_Change, the Status Identification values are:

      Value          Description
        1    Application Server Down (AS_Down)
        2    Application Server Inactive (AS_Inactive)
        3    Application Server Active (AS_Active)
        4    Application Server Pending (AS_Pending)

These notifications go from an SG to an ASP whenever an Application Server's status changes ๐Ÿ“ก. The value tells you the new state of that AS.

If the Status Type is Other, these Status Information values are defined:

      Value          Description
        1    Insufficient ASP resources active in AS
        2    Alternate ASP Active

These ones aren't about the SG reporting a state change of an ASP or AS, so they're a different vibe ๐Ÿ’…. For Insufficient ASP Resources, the SG is basically telling the "Inactive" ASP(s) in the AS that another ASP is needed to handle the AS's load (that's Load-sharing mode). For Alternate ASP Active, an ASP gets the news when an alternate ASP moves to the ASP-Active state in Over-ride mode ๐Ÿ‘‘.

The optional Interface Identifiers and Info String parameters work the same way they do for the ASP Active message (See Section 3.3.2.3.) โœจ.

3.3.3.3 TEI Status Messages (Request, Confirm and Indication) ๐Ÿฆ‹

TEI Status messages are how IUA layer peers talk about a particular TEI: they request its status, confirm it, or indicate it.

Every TEI Status message has the common message header, followed by the IUA message header. The TEI Status Request message doesn't carry any extra parameters, so it's a chill one ๐ŸŒธ.

Okay so, in the integrated ISDN Layer 2/3 model (like in traditional ISDN switches), it's assumed that Layer Management for Q.921 and Q.931 live in the same place. When you're backhauling ISDN, that assumption isn't necessarily true anymore ๐Ÿ™ˆ. TEI status messages let the two Layer Management entities share what's up with the TEI. Knowing a TEI is in service also lets the ASP ask the SG to set up the datalink to the terminal (using the IUA Establish message) for signaling, if the ASP wants to be in charge of data link establishment ๐Ÿ’œ.

Another use: the Layer Management at the ASP can get ready to send and receive signaling to and from a given TEI, and confirm or verify that a datalink to that TEI got established ๐Ÿงš. For example, if a datalink gets established for a TEI the ASP didn't know had been assigned, the ASP can check whether it really was assigned or whether there was an error in the signaling message. And if a TEI is out of service, the ASP doesn't need to bother asking the SG to set up a datalink to it ๐Ÿ™Œ.

The TEI Status Indication and Confirm messages contain this parameter:

STATUS

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          Tag (0x10)           |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              Status                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

The valid values for Status are in this table ๐Ÿ“:

   Define     Value           Description
ASSIGNED       0x0        TEI is considered assigned by Q.921
UNASSIGNED     0x1        TEI is considered unassigned by Q.921

4.0 Procedures ๐ŸŒˆ

The IUA layer has to respond to all sorts of primitives coming in from other layers, plus messages from its peer IUA layer ๐Ÿ’…. This section walks through the procedures for responding to those events.

4.1 Procedures to support service in section 1.4.1 ๐ŸŽ€

These procedures make the IUA layer's "Transport of Q.921/Q.931 boundary" service happen โœจ.

4.1.1 Q.921 or Q.931 primitives procedures

When the IUA layer gets these primitives from the local layer, it sends the matching QPTM message (Data, Unit Data, Establish, Release) to its peer ๐Ÿ“จ. While doing that, the IUA layer needs to fill in the various fields of the common and specific headers correctly. The message also needs to go out on the SCTP stream that matches the D channel (Interface Identifier) ๐Ÿฆ‹.

4.1.2 QPTM message procedures

When the IUA layer on an SG or MGC receives QPTM messages from a peer IUA layer, it needs to invoke the matching layer primitives (DL-ESTABLISH, DL-DATA, DL-UNIT DATA, DL-RELEASE) toward the local Q.921 or Q.931 layer ๐Ÿซถ.

4.2 Procedures to support service in section 1.4.2 ๐Ÿงš

These procedures make the IUA layer's "Support for Communication between Layer Managements" service work ๐Ÿ”ฅ.

4.2.1 Layer Management primitives procedures

When the IUA layer gets these primitives from the local Layer Management, it gives back the appropriate response primitive across the internal local Layer Management interface ๐Ÿ’–.

An M-SCTP ESTABLISH request from Layer Management starts setting up an SCTP association. An M-SCTP ESTABLISH confirm goes back to Layer Management once that association setup finishes. An M-SCTP ESTABLISH indication goes to Layer Management when an incoming SCTP association from a peer IUA node has been set up successfully ๐ŸŒธ.

An M-SCTP RELEASE request from Layer Management starts tearing down an SCTP association. An M-SCTP RELEASE confirm gets sent by Layer Management when the teardown is done. An M-SCTP RELEASE indication goes to Layer Management when an SCTP association that a peer IUA started has been torn down successfully ๐Ÿ’€.

M-SCTP STATUS request and indication let Layer Management query the local status of a particular SCTP association ๐Ÿ”.

M-NOTIFY indication and M-ERROR indication tell Layer Management about the notification or error info in a received IUA Notify or Error message, respectively. These indications can also be generated from local IUA events ๐Ÿ™ˆ.

M-ASP STATUS request/indication and M-AS-STATUS request/indication let Layer Management query the local status of a particular ASP or AS. No IUA peer protocol is involved here ๐Ÿง .

M-ASP-UP request, M-ASP-DOWN request, M-ASP-INACTIVE request and M-ASP-ACTIVE request let Layer Management at an ASP kick off state changes ๐Ÿ‘‘. These requests end up as outgoing IUA ASP UP, ASP DOWN, ASP INACTIVE and ASP ACTIVE messages.

M-ASP-UP confirmation, M-ASP-DOWN confirmation, M-ASP-INACTIVE confirmation and M-ASP-ACTIVE confirmation tell Layer Management that the previous request got confirmed โœ….

When the IUA gets an M-TEI Status primitive from Layer Management, it sends the matching MGMT message (TEI Status) to its peer ๐Ÿฆ‹. While doing that, the IUA layer needs to fill in the various fields of the common and specific headers correctly.

All MGMT messages go out on a sequenced stream so they stay in order ๐ŸŽ€. SCTP stream '0' SHOULD be used.

4.2.2 Receipt of IUA Peer Management messages ๐Ÿ’Œ

okay so whenever IUA gets a management message from its peer, it MUST invoke the matching Layer Management primitive indication to the local layer management ๐Ÿซถ Think M-AS Status ind., M-ASP Status ind., M-ERROR ind., M-TEI STATUS... and so on. Totally iconic handoff ๐Ÿ’…

M-NOTIFY ind. and M-ERROR ind. are the ones that tell Layer Management what's inside a received IUA Notify or Error message ๐Ÿ”ฅ But these indications can also be generated from local IUA events, so they're not only for incoming messages. Very flexible, very cute ๐Ÿฆ‹

All MGMT messages are sent on a sequenced stream so the order stays intact โœจ SCTP stream '0' SHOULD be used for this, bestie ๐ŸŽ€


4.3 Procedures to support service in section 1.4.3 ๐ŸŒธ

These procedures are how the IUA layer delivers its "Support for management of active associations between SG and MGC" service ๐Ÿ‘‘ It's giving reliable connection management, no cap ๐Ÿ’–

4.3.1 AS and ASP State Maintenance ๐Ÿงš

The IUA layer on the SG has to keep track of the state of each ASP, and also the state of the AS ๐Ÿ’œ

4.3.1.1 ASP States

okay so the SG's IUA layer keeps the state of every ASP in every AS that the ASP is configured for ๐Ÿ’… An ASP's state changes because of three kinds of events:

  • Reception of messages from the peer IUA layer at that ASP
  • Reception of some messages from the peer IUA layer at other ASPs in the AS
  • Reception of indications from the SCTP layer

The ASP state transition diagram is shown in Figure 7 ๐Ÿฆ‹ Here are the possible ASP states:

ASP-DOWN: The Application Server Process is unavailable and/or the related SCTP association is down ๐Ÿ’€ Every ASP starts out in this state. An ASP in this state SHOULD NOT be sent any IUA messages ๐Ÿ™ˆ

ASP-INACTIVE: The remote IUA peer at the ASP is available (and the related SCTP association is up), but application traffic is stopped ๐Ÿ˜ด In this state the ASP can be sent any non-QPTM IUA messages (except for TEI Status messages) โœจ

ASP-ACTIVE: The remote IUA peer at the ASP is available and application traffic is active ๐Ÿ”ฅ

                   Figure 7  ASP State Transition Diagram

                                    +-------------+
             +----------------------|             |
             |   Alternate  +-------| ASP-ACTIVE  |
             |       ASP    |       +-------------+
             |    Takeover  |           ^     |
             |              |    ASP    |     | ASP
             |              |    Active |     | Inactive
             |              |           |     v
             |              |       +-------------+
             |              |       |             |
             |              +------>|  ASP-INACT  |
             |                      +-------------+
             |                          ^    |
   ASP Down/ |                     ASP  |    | ASP Down /
   SCTP CDI  |                     Up   |    | SCTP CDI
             |                          |    v
             |                      +-------------+
             +--------------------->|             |
                                    |  ASP-DOWN   |
                                    +-------------+

SCTP CDI: This is the local SCTP layer's Communication Down Indication to the Upper Layer Protocol (IUA) on an SG ๐Ÿ“ก The local SCTP will send this indication when it detects the loss of connectivity to the ASP's peer SCTP layer. SCTP CDI is understood as either a SHUTDOWN COMPLETE notification or a COMMUNICATION LOST notification from the SCTP ๐Ÿซถ

4.3.1.2 AS States

The state of the AS is maintained in the IUA layer on the SG ๐Ÿ’–

The AS state changes due to events, and these include:

  • ASP state transitions
  • Recovery timer triggers

The possible AS states are these ๐Ÿ‘‘

AS-DOWN: The Application Server is unavailable ๐Ÿ’€ This state implies that all related ASPs are in the ASP-DOWN state for this AS. Every AS starts out here.

AS-INACTIVE: The Application Server is available, but no application traffic is active (so one or more related ASPs are in the ASP-INACTIVE state, but none are in the ASP-ACTIVE state) ๐Ÿ˜ด The recovery timer T(r) is not running or has already expired.

AS-ACTIVE: The Application Server is available and application traffic is active ๐Ÿ”ฅ This state implies that at least one ASP is in the ASP-ACTIVE state.

AS-PENDING: An active ASP has moved from active to inactive or down, and it was the last remaining active ASP in the AS ๐Ÿ˜ฑ A recovery timer T(r) gets started, and all incoming SCN messages get queued by the SG ๐Ÿ“ฆ If an ASP becomes active before T(r) expires, the AS moves to AS-ACTIVE and all the queued messages get sent to the active ASP ๐ŸŽ‰

If T(r) expires before an ASP becomes active, the SG stops queuing messages and discards all previously queued messages ๐Ÿ’” The AS then moves to AS-INACTIVE if at least one ASP is in ASP-INACTIVE state, otherwise it moves to AS-DOWN state.

                 Figure 8  AS State Transition Diagram

        +----------+  one ASP trans ACTIVE   +-------------+
        |          |------------------------>|             |
        | AS-INACT |                         |  AS-ACTIVE  |
        |          |                         |             |
        |          |<                        |             |
        +----------+ \                       +-------------+
           ^   |      \ Tr Trigger                ^    |
           |   |       \ at least one             |    |
           |   |        \ ASP in UP               |    |
           |   |         \                        |    |
           |   |          \                       |    |
           |   |           \                      |    |
   one ASP |   |            \            one ASP  |    | Last ACTIVE ASP
   trans   |   | all ASP     \------\    trans to |    | trans to INACT
   to      |   | trans to            \   ACTIVE   |    | or DOWN
   INACT   |   | DOWN                 \           |    | (start Tr timer)
           |   |                       \          |    |
           |   |                        \         |    |
           |   |                         \        |    |
           |   v                          \       |    v
        +----------+                       \ +-------------+
        |          |                        -|             |
        | AS-DOWN  |                         | AS-PENDING  |
        |          |                         |  (queueing) |
        |          |<------------------------|             |
        +----------+    Tr Expiry and no     +-------------+
                       ASP in INACTIVE state

      Tr = Recovery Timer

4.3.2 ASPM procedures for primitives ๐ŸŽ€

Before an SCTP association is set up, the ASP state at both the SG and the ASP is assumed to be "Down" ๐Ÿ™ˆ

The ASP is the one responsible for starting the setup of an SCTP association to an SG ๐Ÿซถ So when the IUA layer at an ASP gets an M-SCTP ESTABLISH request primitive from Layer Management, it tries to establish an SCTP association with the remote IUA peer at an SG. When it gets an SCTP-Communication Up confirm primitive from SCTP, it invokes M-SCTP ESTABLISH confirm to Layer Management ๐Ÿ’–

At the SG, the IUA layer receives an SCTP Communication Up indication primitive from SCTP, and then invokes M-SCTP ESTABLISH indication to Layer Management โœจ

Once the SCTP association is up and the local IUA-User is ready, the local ASP's Application Server Process Maintenance (ASPM) function starts the ASPM procedures ๐Ÿš€ It uses the ASP Up/-Down/-Active/-Inactive messages to tell the SG the ASP state. See Section 4.3.3 for those ๐Ÿฆ‹

Layer Management and the IUA layer on the SG can share the status of the application server using the M-AS STATUS primitives ๐Ÿ“ฃ Layer Management and the IUA layer on both the SG and the ASP can share the status of an SCTP association using the M-SCTP STATUS primitives ๐Ÿ”ฅ

If Layer Management on the SG or the ASP wants to bring down an SCTP association for management reasons, it sends an M-SCTP RELEASE request primitive to the local IUA layer ๐Ÿ™…โ€โ™€๏ธ The IUA layer releases the SCTP association, and once it gets the SCTP Communication Down indication from the underlying SCTP layer, it informs the local Layer Management using an M-SCTP RELEASE confirm primitive ๐Ÿงš

If the IUA layer gets an SCTP-Communication Down indication from the underlying SCTP layer, it tells Layer Management by invoking the M-SCTP RELEASE indication primitive ๐Ÿ˜ฑ The ASP state then moves to "Down" at both the SG and the ASP ๐Ÿ’€

At an ASP, Layer Management MAY try to reestablish the SCTP association using the M-SCTP ESTABLISH request primitive ๐ŸŒˆ

4.3.3 ASPM procedures for peer-to-peer messages ๐Ÿ’Œ

All ASPM messages are sent on a sequenced stream so the order stays intact โœจ SCTP stream '0' SHOULD be used ๐ŸŽ€

4.3.3.1 ASP Up ๐Ÿฆ‹

After an ASP has successfully set up an SCTP association to an SG, the SG waits for the ASP to send an ASP Up message, which says the ASP IUA peer is available ๐ŸŒธ The ASP is always the one who starts the ASP Up exchange.

When an ASP Up message shows up at an SG and the remote ASP isn't considered locked out for local management reasons, the SG marks that remote ASP as "Inactive" ๐Ÿซถ Then the SG replies with an ASP Up Ack message to acknowledge it. The SG sends an ASP Up Ack in response to every ASP Up it receives, even when the ASP is already marked as "Inactive" at the SG ๐Ÿ’…

If for any local reason the SG can't respond with an ASP Up Ack, it responds to the ASP Up with an ASP-Down Ack message with Reason "Management Blocking" ๐Ÿ™…โ€โ™€๏ธ

At the ASP, the ASP Up Ack message from the SG is not acknowledged by the ASP ๐Ÿ’– If the ASP doesn't get a response from the SG, or it gets an ASP Down Ack instead, the ASP MAY resend ASP Up messages every 2 seconds until it gets an ASP Up Ack from the SG โฐ If an ASP Up Ack still hasn't shown up after a few tries, the ASP MAY decide to slow down to every 5 seconds ๐Ÿข

The ASP MUST wait for the ASP Up Ack message from the SG before it sends any ASP traffic control messages (ASPAC or ASPIA) or Data messages, or it risks message loss ๐Ÿ˜ฌ If the SG receives QPTM, ASP Active or ASP Inactive messages before an ASP Up has been received, the SG SHOULD discard those messages ๐Ÿ—‘๏ธ

4.3.3.2 ASP Down ๐ŸŒˆ

The ASP sends an ASP Down to an SG when the ASP is being removed from the list of ASPs in all the Application Servers it belongs to, and it won't receive any IUA traffic or management messages anymore ๐Ÿ‘‹

Whether the ASP is permanently removed from an AS is up to configuration management ๐Ÿ› ๏ธ

The SG marks the ASP as "Down" and returns an ASP Down Ack message to the ASP if either of these happens:

  • to acknowledge an ASP Down message from an ASP,
  • to reply to ASPM messages from an ASP that is locked out for management reasons.

The SG sends an ASP Down Ack message in response to every ASP Down message it receives from the ASP, even if the ASP is already marked as "Down" at the SG ๐Ÿ’…

If the ASP doesn't get a response from the SG, the ASP MAY send ASP Down messages every 2 seconds until it gets an ASP Down Ack from the SG or the SCTP association goes down ๐Ÿ” If an ASP Down Ack still hasn't arrived after a few tries, the ASP MAY decide to slow down to every 5 seconds ๐ŸŒ

4.3.3.3 IUA Version Control ๐ŸŽ€

okay so if an ASP Up message shows up with a version the receiving end doesn't support, that end sends back an Error message saying which version it does support, and it also tells Layer Management what happened ๐Ÿ’…

this is super useful when protocol version upgrades are rolling out across a network ๐ŸŒธ a node that got upgraded to a newer version SHOULD still support the older versions that the other nodes it talks to are using ๐Ÿซถ

ASPs are the ones who kick off the ASP Up procedure, so it's assumed the Error message would normally come from the SG ๐Ÿงš

4.3.3.4 ASP Active โœจ

any time after the ASP gets an ASP Up Ack from the SG, it sends an ASP-Active (ASPAC) to say "I'm ready to process traffic" ๐Ÿ’– if the ASP is set up to handle traffic for more than one Application Server across one SCTP association, the ASPAC carries one or more Interface Identifiers so the SG knows which Application Servers it applies to ๐Ÿฆ‹

when the SG gets an ASPAC, it replies with an ASPAC Ack saying "got it" and starts sending traffic for the associated Application Server(s) to that ASP ๐Ÿ”ฅ

the ASP MUST wait for the ASP-Active Ack message from the SG before sending any Data messages, or it'll risk message loss ๐Ÿ’€ and if the SG gets QPTM messages before an ASP Active shows up, it SHOULD discard them ๐Ÿ™ˆ

there are two modes of Application Server traffic handling in the SG IUA: Over-ride and Load-sharing ๐Ÿ‘‘ the Type parameter in the ASPAC message tells you which mode is used for a particular Application Server. if the SG decides the mode in an ASPAC is incompatible with the traffic handling mode the AS is currently using, it responds with an Error message indicating Unsupported Traffic Handling Mode ๐Ÿ˜ญ

in an Over-ride mode AS, getting an ASPAC at the SG redirects all traffic for the AS to the ASP that sent it ๐Ÿ‘‘ the SG answers with an ASP-Active Ack to that ASP. any previously active ASP in the AS is now considered Inactive and stops getting traffic from the SG within the AS. the SG sends a Notify (Alternate ASP-Active) to the previously active ASP, but only after it has stopped all traffic to that ASP ๐Ÿซถ

in a load-share mode AS, getting an ASPAC at the SG directs traffic to the ASP that sent it, on top of all the other ASPs that are currently active in the AS ๐ŸŒˆ the algorithm the SG uses to load-share traffic across the active ASPs is implementation dependent. it could be round-robin, or based on info in the Data message such as the Interface Identifier, depending on what the application needs and how the ASPs in the AS handle call state ๐Ÿง  the SG responds to the ASPAC with an ASP-Active Ack message to the ASP โœจ

4.3.3.5 ASP Inactive ๐Ÿ‘‹

when an ASP wants to withdraw from receiving traffic within an AS, it sends an ASP Inactive (ASPIA) to the SG ๐Ÿ’… if the ASP is set up to process traffic for more than one Application Server across one SCTP association, the ASPIA carries one or more Interface Identifiers to say which Application Servers it applies to ๐Ÿฆ‹

there are two modes of Application Server traffic handling when withdrawing an ASP from service in the SG IUA: Over-ride and Load-sharing ๐Ÿ‘‘ the Type parameter in the ASPIA message tells you the mode used for a particular Application Server. if the SG determines that the mode indicated in an ASPAC is incompatible with the traffic handling mode currently used in the AS, it responds with an Error message indicating Unsupported Traffic Handling Mode ๐Ÿ˜ญ

in an Over-ride mode AS, another ASP has usually already taken over the traffic with an Over-ride ASPAC, so the ASP sending the ASPIA is already considered "Inactive" by the SG ๐Ÿ’€ an ASPIA Ack message goes back to that ASP, but only after the SG has made sure all traffic to it is stopped ๐Ÿ›‘

in a Load-share mode AS, the SG moves the ASP to the "Inactive" state and the AS traffic gets re-allocated across the remaining "active" ASPs using the load-sharing algorithm in use within the AS ๐Ÿ”„ an ASPIA Ack message is sent to the ASP after all traffic to it has halted. a NTFY (Insufficient ASPs) MAY be sent to all inactive ASPs, if required ๐ŸŒธ

if no other ASPs are Active in the Application Server, the SG sends a NTFY (AS-Pending) to all inactive ASPs of the AS ๐Ÿšจ then it either discards all incoming messages for the AS, or starts buffering them for T(r) seconds, after which those messages get discarded. T(r) is configurable by the network operator โณ if the SG gets an ASPAC from an ASP in the AS before T(r) expires, the buffered traffic is sent to that ASP and the timer is cancelled ๐ŸŽ‰ if T(r) expires, the AS is moved to the "Inactive" state ๐Ÿ˜”

4.3.3.6 Notify ๐Ÿ“ฃ

a Notify message that reflects a change in the AS state gets sent to all ASPs in the AS, except the ones in the "Down" state, with the appropriate Status Identification ๐Ÿ’Œ

in the case where a Notify (AS-Pending) is sent by an SG that now has no ASPs active to service the traffic, or a NTFY (Insufficient ASPs) is sent in Load-share mode, the Notify does not explicitly force the ASP(s) that receive it to become active ๐Ÿ™…โ€โ™€๏ธ the ASPs stay in control of what happens and when ๐Ÿ‘‘

4.3.3.7 Heartbeat ๐Ÿ’“

the optional Heartbeat procedures MAY be used when operating over transport layers that don't have their own heartbeat mechanism for detecting loss of the transport association (so, anything other than SCTP) ๐Ÿฆ‹

after the ASP gets an ASP Up Ack from the SG in response to an ASP Up message, the ASP MAY optionally send Beat messages periodically, subject to a provisionable timer T(beat) ๐Ÿ’– the SG IUA, on receiving a BEAT message from the ASP, responds with a BEAT ACK message. if no BEAT message (or any other IUA message) is received from the SG within the timer 2*T(beat), the SG will consider the remote IUA as "Down" ๐Ÿ“‰ the SG will also send an ASP Down Ack message to the ASP ๐Ÿ’…

at the ASP, if no BEAT ACK message (or any other IUA message) is received from the SG within 2*T(beat), the SG is considered unavailable ๐Ÿ˜ญ the ASP stops sending BEAT messages and uses the ASP Up procedures to re-establish communication with the SG IUA peer ๐Ÿ”

the BEAT message MAY optionally contain an opaque Heartbeat Data parameter that MUST be echoed back unchanged in the related Beat Ack message ๐Ÿซถ the ASP, after examining the contents of the returned BEAT Ack message, MAY choose to consider the remote ASP unavailable ๐Ÿ™ˆ the contents and format of the Heartbeat Data parameter are implementation-dependent and only of local interest to the original sender ๐Ÿง the contents MAY be used, for example, to support a Heartbeat sequence algorithm (to detect missing Heartbeats), and/or a timestamp mechanism (to evaluate delays) โฑ๏ธ

Note: Heartbeat related events are not shown in Figure 4 "ASP state transition diagram".

5.0 Examples ๐Ÿงš

5.1 Establishment of Association and Traffic between SGs and ASPs ๐ŸŒท

5.1.1 Single ASP in an Application Server (1+0 sparing)

this scenario shows the example IUA message flows for establishing traffic between an SG and an ASP, where only one ASP is configured within an AS (no backup) ๐ŸŒฑ it's assumed the SCTP association is already set up โœ…

            SG                       ASP1
             |
             |<---------ASP Up----------|
             |--------ASP Up Ack------->|
             |                          |
             |<-------ASP Active--------|
             |------ASP Active Ack----->|
             |                          |

5.1.2 Two ASPs in Application Server (1+1 sparing)

this scenario shows the example IUA message flows for establishing traffic between an SG and two ASPs in the same Application Server ๐Ÿ‘ฏโ€โ™€๏ธ ASP1 is configured to be Active, and ASP2 is a standby in case of a communication failure or ASP1 withdrawing from service ๐Ÿ›Ÿ ASP2 MAY act as a hot, warm, or cold standby, depending on how much ASP1 and ASP2 share call state, or can communicate call state, during failure or withdrawal events ๐Ÿง  the example message flow is the same whether the ASP-Active messages are Over-ride or Load-share mode, although typically this example would use Over-ride mode ๐Ÿ‘‘

      SG                        ASP1                        ASP2
       |                         |                          |
       |<--------ASP Up----------|                          |
       |-------ASP Up Ack------->|                          |
       |                         |                          |
       |<-----------------------------ASP Up----------------|
       |----------------------------ASP Up Ack------------->|
       |                         |                          |
       |                         |                          |
       |<-------ASP Active-------|                          |
       |-----ASP Active Ack----->|                          |
       |                         |                          |

5.1.3 Two ASPs in an Application Server (1+1 sparing, load-sharing case)

this scenario is similar to Section 5.1.2, but this time the two ASPs are brought to active and load-share the traffic ๐ŸŒˆ in this case, one ASP is enough to handle the total traffic load ๐Ÿ’ช

      SG                       ASP1                       ASP2
       |                         |                          |
       |<---------ASP Up---------|                          |
       |--------ASP Up Ack------>|                          |
       |                         |                          |
       |<------------------------------ASP Up---------------|
       |-----------------------------ASP Up Ack------------>|
       |                         |                          |
       |                         |                          |
       |<--ASP Active (Ldshr)----|                          |
       |----ASP Active Ack------>|                          |
       |                         |                          |
       |<----------------------------ASP Active (Ldshr)-----|
       |-----------------------------ASP Active Ack-------->|
       |                         |                          |

5.1.4 Three ASPs in an Application Server (n+k sparing, load-sharing case) ๐Ÿฆ‹

okay so this one is giving three ASPs in the same Application Server ๐Ÿ‘ฏโ€โ™€๏ธ two of them get brought to active and they split the load, so the total traffic is covered by a minimum of two ASPs. that's the 2+1 sparing vibe, and the third one just chills as the backup ๐Ÿ’…

   SG                  ASP1                ASP2                ASP3
    |                    |                   |                   |
    |<------ASP Up-------|                   |                   |
    |-----ASP Up Ack---->|                   |                   |
    |                    |                   |                   |
    |<--------------------------ASP Up-------|                   |
    |------------------------ASPUp Ack)----->|                   |
    |                    |                   |                   |
    |<---------------------------------------------ASP Up--------|
    |--------------------------------------------ASP Up Ack----->|
    |                    |                   |                   |
    |                    |                   |                   |
    |<-ASP Act (Ldshr)---|                   |                   |
    |----ASP Act Ack---->|                   |                   |
    |                    |                   |                   |
    |<---------------------ASP Act (Ldshr)---|                   |
    |----------------------ASP Act Ack------>|                   |
    |                    |                   |                   |

5.2 ASP Traffic Fail-over Examples ๐ŸŒธ

5.2.1 (1+1 Sparing, withdrawal of ASP, Back-up Over-ride) ๐Ÿซถ

this one shows what happens when an ASP withdraws from service ๐Ÿ‘‹

       SG                       ASP1                       ASP2
        |                         |                          |
        |<-----ASP Inactive-------|                          |
        |----ASP Inactive Ack---->|                          |
        |-------------------NTFY(AS-Pending) --------------->|
        |                         |                          |
        |<------------------------------ ASP Active----------|
        |-----------------------------ASP Active Ack)------->|
        |                                                    |

so basically the SG tells ASP2 that the AS has moved to the Down state ๐Ÿ“‰ the SG could also (optionally) send a Notify message when the AS moved to the Pending state, so it's not required, just a nice extra ๐Ÿ’œ

Note: if the SG detects loss of the IUA peer (IUA heartbeat loss or detection of SCTP failure), the initial SG-ASP1 ASP Inactive message exchange would not occur. no drama, the peer is already gone ๐Ÿ’€

5.2.2 (1+1 Sparing, Back-up Over-ride) ๐Ÿ‘‘

this is the main character moment where ASP2 wants to over-ride ASP1 and take over the traffic ๐Ÿ˜ค

       SG                       ASP1                       ASP2
        |                         |                          |
        |<-------------------------------ASP Active----------|
        |-----------------------------ASP Active Ack-------->|
        |----NTFY( Alt ASP-Act)-->|
        |                         |                          |

in this case the SG notifies ASP1 that an alternative ASP has overridden it. rip ASP1 ๐Ÿซ 

5.2.3 (n+k Sparing, Load-sharing case, withdrawal of ASP) ๐Ÿ“

picking up right where Section 5.1.4 left off, ASP1 decides to withdraw from service ๐Ÿšช

  SG                  ASP1                 ASP2                 ASP3
   |                    |                   |                   |
   |<----ASP Inact------|                   |                   |
   |---ASP Inact Ack--->|                   |                   |
   |                    |                   |                   |
   |---------------------------------NTFY(Ins. ASPs)----------->|
   |                    |                   |                   |
   |<-----------------------------------------ASP Act (Ldshr)---|
   |-------------------------------------------ASP Act (Ack)--->|
   |                    |                   |                   |

the SG has to know the minimum ASP resources it needs (this part is implementation dependent) ๐Ÿง  for example, if the SG knows that n+k = 2+1 for a load-share AS and n currently equals 1, it can work out what to do from there ๐Ÿ”ฅ

Note: if the SG detects loss of the ASP1 IUA peer (IUA heartbeat loss or detection of SCTP failure), the first SG-ASP1 ASP Inactive message exchange would not occur. same energy as before, the peer just vanished ๐Ÿ‘ป

5.3 Q.921/Q.931 primitives backhaul Examples ๐ŸŒˆ

okay so here's how the IUA layer handles a QPTM message going from the ASP to the SG ๐Ÿ“จ it's a whole checklist:

  • Determine the correct SG
  • Find the SCTP association to the chosen SG
  • Determine the correct stream in the SCTP association based on the D channel
  • Fill in the QPTM message, fill in IUA Message Header, fill in Common Header
  • Send the QPTM message to the remote IUA peer in the SG, over the SCTP association

and going the other way, when the IUA layer on the SG has a QPTM message for the ASP, it does this:

  • Determine the AS for the Interface Identifier
  • Determine the Active ASP (SCTP association) within the AS
  • Determine the correct stream in the SCTP association based on the D channel
  • Fill in the QPTM message, fill in IUA Message Header, fill in Common Header
  • Send the QPTM message to the remote IUA peer in the ASP, over the SCTP association

here's the message flow for establishing a data link on a signaling channel, passing PDUs, and releasing the data link. an active association between MGC and SG is set up first (Section 5.1) before any of this happens โœจ

         SG                             ASP

                     <----------- Establish Request
   Establish Confirm  ---------->

                     <----------- Data Request
      Data Indication ----------->
                     <----------- Data Request
      Data Indication ----------->
                     <----------- Data Request
                     <----------- Data Request
      Data Indication ----------->

                     <----------- Release Request (RELEASE_MGMT)
     Release Confirm  ---------->

and now the sad one ๐Ÿ˜ญ a failed attempt to establish a data link on the signaling channel. the gateway has a problem with its physical connection (e.g., Red Alarm), so it just cannot set up the data link ๐Ÿšจ

         SG                             ASP

                     <----------- Establish Request (ESTABLISH_START)
   Release Indication ---------->
   (RELEASE_PHYS)

5.4 Layer Management Communication Examples ๐Ÿงš

this shows Layer Management modules talking between the SG and the ASP ๐Ÿ’ฌ again, an active association between ASP and SG is set up first (Section 5.1) before the flows below happen ๐Ÿ™Œ

              SG                       ASP

                     <----------- Data Request
    Error Indication ---------->
     (INVALID_TEI)

                     <----------- TEI Status Request
   TEI Status Confirm ---------->
       (Unassigned)

6.0 Security ๐Ÿ”

okay bestie, this section is SERIOUS. not a vibe check, a real one ๐Ÿšจ

IUA is designed to carry signaling messages for telephony services, so it has to think about the security needs of several parties ๐Ÿซฃ the end users of the services, the network providers, and the applications involved. IUA MUST involve all of those needs ๐Ÿ˜ค additional requirements MAY come from local regulation too ๐Ÿ“œ while there's some overlap between these needs, any security solution SHOULD fulfill all of the different parties' needs ๐Ÿค

6.1 Threats ๐Ÿ’€

there is no quick fix or one-size-fits-all solution for security, sorry not sorry ๐Ÿ™ƒ as a transport protocol, IUA has the following security objectives:

  • Availability of reliable and timely user data transport.
  • Integrity of user data transport.
  • Confidentiality of user data.

IUA runs on top of SCTP. SCTP [3] already provides some transport related security features, such as:

  • Blind Denial of Service Attacks
  • Flooding
  • Masquerade
  • Improper Monopolization of Services

when IUA is running in a professionally managed corporate or service provider network, it's reasonable to expect that this network has an appropriate security policy framework ๐Ÿข the "Site Security Handbook" [5] SHOULD be consulted for guidance ๐Ÿ“–

but when the network IUA runs in involves more than one party, it MAY NOT be reasonable to expect that all parties have implemented security in a sufficient manner ๐Ÿ˜ฌ in that case, it is recommended that IPSEC is used to ensure confidentiality of user payload. consult [6] for more information on configuring IPSEC services ๐Ÿ”’

6.2 Protecting Confidentiality ๐Ÿซง

especially for mobile users, the requirement for confidentiality MAY include masking IP addresses and ports ๐Ÿ•ต๏ธโ€โ™€๏ธ in that case application level encryption is not sufficient, so IPSEC ESP SHOULD be used instead. no matter which level does the encryption, the IPSEC ISAKMP service SHOULD be used for key management ๐Ÿ—๏ธ

7.0 IANA Considerations ๐Ÿ“‹

7.1 SCTP Payload Protocol Identifier ๐Ÿท๏ธ

a request will be made to IANA to assign an IUA value for the Payload Protocol Identifier in the SCTP Payload Data chunk. the following SCTP Payload Protocol Identifier will be registered:

      IUA    "1"

the SCTP Payload Protocol Identifier is included in each SCTP Data chunk to show which protocol SCTP is carrying ๐Ÿ“ฆ SCTP doesn't use it directly, but certain network entities MAY be used to spot what kind of info is in a Data chunk using it ๐Ÿ‘€

the User Adaptation peer MAY use the Payload Protocol Identifier to figure out extra info about the data SCTP hands it ๐Ÿงฉ

7.2 IUA Protocol Extensions ๐Ÿš€

this protocol can be extended through IANA in three ways:

  • through definition of additional message classes,
  • through definition of additional message types, and
  • through definition of additional message parameters.

defining and using new message classes, types and parameters is an integral part of SIGTRAN adaptation layers ๐Ÿ’ซ so these extensions get assigned by IANA through an IETF Consensus action as defined in [RFC2434] ๐Ÿค“

the proposed extension must in no way adversely affect the general working of the protocol ๐Ÿ™…โ€โ™€๏ธ

7.2.1 IETF Defined Message Classes ๐ŸŽ€

the documentation for a new message class MUST include the following information:

(a) A long and short name for the message class. (b) A detailed description of the purpose of the message class.

7.2.2 IETF Defined Message Types ๐Ÿ’œ

documentation for a message type MUST contain the following information:

(a) A long and short name for the new message type. (b) A detailed description of the structure of the message. (c) A detailed definition and description of intended use of each field within the message. (d) A detailed procedural description of the use of the new message type within the operation of the protocol. (e) A detailed description of error conditions when receiving this message type.

when an implementation receives a message type it does not support, it MUST respond with an Error (ERR) message with an Error Code of Unsupported Message Type. no ghosting allowed ๐Ÿซถโœจ

7.2.3 is where we get to document our own parameters, and honestly it's giving organized ๐Ÿ’… Your documentation MUST contain the following information:

  • (a) Name of the parameter type. ๐ŸŽ€
  • (b) Detailed description of the structure of the parameter field. This structure MUST conform to the general type-length-value format described in Section 3.1.5. ๐Ÿงš
  • (c) Detailed definition of each component of the parameter value. ๐Ÿ’œ
  • (d) Detailed description of the intended use of this parameter type, and an indication of whether and under what circumstances multiple instances of this parameter type may be found within the same message type. ๐ŸŒˆ

8.0 Acknowledgements โœจ

Okay, the authors want to say thank you to Alex Audu, Maria Sonia Vazquez Arevalillo, Ming-te Chao, Keith Drage, Norm Glaude, Nikhil Jain, Bernard Kuc, Ming Lin, Stephen Lorusso, John Loughney, Barry Nagelberg, Neil Olson, Lyndon Ong, Heinz Prantner, Jose Luis Jimenez Ramirez, Ian Rytina, Michael Tuexen and Hank Wang for their valuable comments and suggestions. ๐Ÿซถ Main character energy for sure ๐Ÿ‘‘

9.0 References ๐Ÿ“š

  • [1] ITU-T Recommendation Q.920, 'Digital Subscriber signaling System No. 1 (DSS1) - ISDN User-Network Interface Data Link Layer - General Aspects' ๐ŸŒธ
  • [2] T1S1.7/99-220 Contribution, 'Back-hauling of DSS1 protocol in a Voice over Packet Network' ๐Ÿฆ‹
  • [3] Stewart, R., Xie, Q., Morneault, K., Sharp, C., Schwarzbauer, H., Taylor, T., Rytina, I., Kalla, M., Zhang, L. and V. Paxson, "Stream Control Transmission Protocol", RFC 2960, October 2000. ๐Ÿ’–
  • [4] Ong, L., Rytina, I., Garcia, M., Schwarzbauer, H., Coene, L., Lin, H., Juhasz, I., Holdrege, M., and C. Sharp, "Architectural Framework for Signaling Transport", RFC 2719, October 1999. ๐Ÿ“
  • [5] Fraser, B., "Site Security Handbook", FYI 8, RFC 2196, September 1997. ๐Ÿ”
  • [6] Kent, S. and R. Atkinson, "Security Architecture for the Internet Protocol", RFC 2401, November 1998. ๐Ÿ›ก๏ธ
  • [7] Bradner, s., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. ๐ŸŒˆ
  • [8] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 2434, October 1998. โญ

10.0 Authors' Addresses ๐ŸŽ€

The squad behind this one, with their contact info, lowkey iconic:

Ken Morneault
Cisco Systems Inc.
13615 Dulles Technology Drive
Herndon, VA. 20171
USA

Phone: +1-703-484-3323
EMail: kmorneau@cisco.com
Malleswar Kalla
Telcordia Technologies
PYA 2J-341
3 Corporate Place
Piscataway, NJ 08854
USA

Phone: +1-732-699-3728
EMail: mkalla@telcordia.com
Selvam Rengasami
Telcordia Technologies
NVC-2Z439
331 Newman Springs Road
Red Bank, NJ 07701
USA

Phone: +1-732-758-5260
EMail: srengasa@telcordia.com
Greg Sidebottom
Nortel Networks
3685 Richmond Road
Nepean, Ontario
Canada  K2H5B7

Phone: +1-613-763-7305
EMail: gregside@nortelnetworks.com

Legal stuff, but it matters, so here it is in full ๐Ÿซถ

Copyright (C) The Internet Society (2001). All Rights Reserved.

This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.

The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Acknowledgement ๐Ÿ’œ

Funding for the RFC Editor function is currently provided by the Internet Society. ๐ŸŒˆโœจ

๐Ÿ“ฆ where this page comes from