OpenSS7

OpenSS7,

© Copyright 1997-2001, OpenSS7, All Rights Reserved.


Home Index Prev Next More Download Info FAQ Mail

STREAMS Design

Signalling Data Terminal (SDT) Driver

The Signalling Data Terminal (SDT) Driver design is explained in the following sections:

Overview

- A brief overview of the Signalling Data Terminal driver.

Model

- The model of a Signalling Data Terminal.

Services

- Services provided by the Signalling Data Terminal provider.

Primitives

- Primitives described at the Signalling Data Terminal Interface.

Sequences

- Allowed sequences of primitives and interface state transitions

Implementation

- Considerations for implementation of drivers using the Signalling Data Terminal Interface.

Header File

- A header file which provides definitions for the Signalling Data Terminal Interface.

Overview

The SS7 specifications refer to the device which terminates to the physical signalling data link (SDL) as a signalling data terminal (SDT).

The Signalling Data Terminal Driver uses the Communications Device Interface (CDI) specified in file <sys/cdi.h>. This is a specification for a general purpose OSI communications device for STREAMS and, because SS7 signalling data terminals are HDLC terminals, the model is reusable for signalling data links. The application of the CDI specification to the SS7 Signalling Data Terminal is detailed in the section on Signalling Data Terminals.

There are two kinds of signalling data terminal (SDT) driver: a style 1 driver (single channel) which has its PPA implicitly identified on open and which does not need ST_ATTACH_REQ to assign PPA, and a style 2 driver (multiple channel) which must have it's PPA identified with a ST_ATTACH_REQ with a PPA address of the appropriate type.

Examples of Signalling Data Terminals and styles are illustrated in the diagram.

Illustrated at (A) in the diagram is an example of signalling data terminals (interface cards) which have a single signalling data link (channel) associated with the device. In this example, a major and minor device number is associated with each instance of an interface card. By opening a specific major/minor device, the PPA (physical appearance) and signalling data link is uniquely identified. This is an example of a Style 1 signalling data terminal. This approach would typically be used for a hard configured (e.g. DIP switch) ISA device whose hard configuration can be used to uniquely identify the signalling data link (channel) concerned.

Illustrated at (B) in the diagram is an example of signalling data terminals (interface cards) which have a multiple (2) signalling data links (channels) associated with the device. In this example, a major and minor device number is associated with each instance of an interface card and with each channel on the card. By opening a specific major/minor device, the PPA (physical appearance) and specific signalling data link is uniquely identified. This is another example of a Style 1 signalling data terminal. This approach, again, would typically be used for a hard configured (e.g. DIP switch) ISA device whose hard configuration can be used to uniquely identify the signalling data link (channel) concerned.

Normally Style 1 devices would be opened by the SS7 configuration daemon using an entry under /dev for each device.

Illustrated at (C) in the diagram is an example of signalling data terminals which have multiple (2) signalling data links per card. In this example, it is not possible (or it is not necessary) for the driver to determine a priori which device is associated with a major/minor device number. This may be because the card's system configuration (ioports, irq, dma) depends upon the presence, absence or failure of one or more other cards at boot time (e.g. a PCI card which is configured depending on how the kernel walks the PCI bus at boot time). This is an example of a Style 2 signalling data terminal. This approach would typically be used for soft configured (e.g. PCI) devices where some external identifier (e.g. MAC address, serial number, pci slot location) must be used to attach the device.

Illustrated at (D) in the diagram is an example of signalling data terminals which not only have multiple (e.g. 24) channels per card, but there is a switching matrix between the card channel and the actual signalling data link which must also be configured. In this example, it is not possible for the driver to determine a priori which signalling data link is associated with a major/minor device number. This is because the cross-connect matrix has not yet been configured and any signalling data terminal could possibly be associated with any signalling data link. This is another example of a Style 2 signalling data terminal.

Normally Style 2 devices would be opened by the SS7 configuration daemon using a clone entry under /dev for the device major number and a ST_ATTACH_REQ would be issued with the desired PPA on the open file descriptor to associate the descriptor (and possibly the signalling data terminal through cross-connect matrix commands) with the required signalling data link appearance.

The SS7 configuration daemon must have a way of mapping a unique signalling data link address (local point code, adjacent point code, signalling link code) with a /dev entry (major/minor device number) or PPA for the specific device. This is performed by the system administrator in the SS7 configuration daemon's configuration file.

PPAs for Style 2 devices are device specific, yet are specified in the SS7 configuration daemon's config file.

When the SS7 configuration deamon is setting up Style 1 devices, it may still call the device's clone as long as the device is willing to identify itself (by PPA) when issued a ST_INFO_REQ primitive. Style 1 cards should return an <interface number, channel number> which is derived from the device's hard configuration data (e.g. ioport, PCI slot number, etc.) which can be traced to the physical attachment point of the signalling data link in a ST_INFO_ACK primitive when issued a ST_INFO_REQ primitive. This will allow the SS7 configuration daemon to push a Signalling Link module and link the stream to a Signalling Link Set multiplexor and link the Signalling Link Set multiplexor to a Message Transfer Part multiplexor.

Model

The diagram (to the right) illustrates the Signalling Data Terminal interface with reference to the SS7 protocol stack and state machine modules. The Signalling Data Terminal interface is a low level interface which performs the functions of the DAEDR/DAEDT and AERM/SUERM within the Q.703 state machine specifications.

The TXC (Transmission Control), IAC (Initial Alignment Control) and LSC (Link State Control) state machines within the SDT user are modified from the Q.703 SDL specifications as follows:

TXC (Transmission Control)
The TXC is modified slightly from the Q.703 SDL specification to not require the DAEDT Transmission_Request signal to invoke a transmission. This function is performed by STREAMS in that the SDT driver is set with a high water mark of 1, permitting the SDT user's put service procedure to be invoked when the DAEDT in the SDT is requesting another frame for transmission. Also, if the TXC has already requested transmission of a FISU or and LSSU (other than SIB) the SDT user must ignore transmission requests until such time as it has a unique FISU, LSSU or MSU to transmit as a result of some other action.
IAC (Intial Alignment Control)
The IAC is modified from the Q.703 SDL specifications to not require an AERM_Correct_SU signal for each correctly received SU during initial alignment.
IAC (Intial Alignment Control)
The LSC is modified from the Q.703 SDL specifications to not require an IAC_Correct_SU signal for each correctly received SU during initial alignment.

All of the service primitives defined for communication between the DAEDR/DAEDT and AERM/SUERM and the TXC/RC/IAC/LSC/CC in the SDT user as provided for in Q.703 have been defined and provided for in the SDT Interface with the exception of:

Note: It is probably not necessary to have an interface specificed at this low a level. Most (if not all) drivers could be written directly to the Signalling Link Interface (SLI).

ZZZZZZZZ UNDER CONSTRUCTION ZZZZZZZZ

Services


Primitives

The Signalling Data Terminal Interface (SDTI) is modeled after the internal signals which are provided in the specification of the SS7 Level 2 state machines from ITU-T Recommendation Q.703. This interface divides the time-critical functions of the Q.703 state machines from the less critical functions and places an interface between them as illustrated in the figure.

Local Management Primitives
ST_INFO_REQ A request from the SDT user for information pertaining to the SDT service provided by the SDT provider.
ST_INFO_ACK An acknowledgement of an ST_INFO_REQ containing the requested information.
ST_ATTACH_REQ A request from the SDT user for the SDT provider to attach to a specific physical point of appearance (PPA).
ST_DETACH_REQ A request form the SDT user for the SDT provider to detach from a specific physical point of appearance (PPA).
ST_ENABLE_REQ A request from the SDT user to prepare the device for operation.
ST_DISABLE_REQ A request from the SDT user to disable the device.
ST_OK_ACK Success acknowledgement from the SDT provider.
ST_ERROR_ACK Error acknowledgement from the SDT provider indicating the error of the previous operation.
ST_ENABLE_CON Confirmation from the SDT provider that an ST_ENABLE_REQ has successfully completed.
ST_DISABLE_CON Confirmation from the SDT provider that a ST_DISABLE_REQ has successfully compelted.
ST_ERROR_IND An indication from the SDT provider to the SDT user that an error condition has occured within the SDT service.
Data Transfer Primitives
ST_SIGNAL_UNIT_REQ A message signal unit is ready for transmission and is provided as the M_DATA for this primitive.
ST_SIGNAL_UNIT_IND A message signal unit has arrived and is provided as the M_DATA for this primitive.
Protocol Control Primitives
ST_AERM_START_REQ A request to start the Alignment Error Rate Monitor.
ST_AERM_STOP_REQ A request to stop the Alignment Error Rate Monitor.
ST_AERM_SET_TIE_REQ A request to set the Ti value for the Alignment Error Rate Monitor to emergency levels (Tie).
ST_AERM_SET_TIN_REQ A request to set the Ti value for the Alignment Error Rate Monitor to normal levels (Tin).
ST_AERM_ABORT_PROV_IND An indication to the SDT user that proving has been aborted due to excessive errors detected by the Alignment Error Rate Montitor.
ST_SUERM_START_REQ A request to start the Signal Unit Error Rate Monitor.
ST_SUERM_STOP_REQ A request to stop the Signal Unit Error Rate Monitor.
ST_SUERM_LINK_FAIL_IND An indication to the SDT user that the signalling link has failed due to excessive errors detected by the Signal Unit Error Rate Monitor.
ST_DAEDR_START_REQ A request to start the Delimitation, Alignment and Error Detection (Receive); i.e. start the receivers.
ST_LINK_CONG_IND Indicates that implementation congestion detection has indicated that a congestion situation has begun; i.e. the link is congested.
ST_LINK_NO_CONG_IND Indicates that implementation congestion detection has indicated that a congestion situation has ceased; i.e. the link is no longer congested.

Sequences

Implementation

Header File

/*****************************************************************************

 @(#) $Id: streams02.html,v 0.7.2.7 2001/01/09 10:37:14 brian Exp $

 -----------------------------------------------------------------------------

   Copyright (C) 1997-2001  Brian Bidulock.  All Rights Reserved.


                                PUBLIC LICENSE

   This license is provided without fee, provided that the above copy-
   right notice and this public license must be retained on all copies,
   extracts, compilations and derivative works.  Use or distribution of
   this work in a manner that restricts its use except as provided here
   will render this license void.

   The author(s) hereby waive any and all other restrictions in respect
   of their copyright in this software and its associated documentation.
   The authors(s) of this software place in the public domain any novel
   methods or processes which are embodied in this software.

   The author(s) undertook to write it for the sake of the advancement
   of the Arts and Sciences, but it is provided as is, and the author(s)
   will not take any responsibility in it.

 -----------------------------------------------------------------------------

 Last modified: $Date: 2001/01/09 10:37:14 $ by $Author: brian $

 *****************************************************************************/

#ident "@(#) $Id: streams02.html,v 0.7.2.7 2001/01/09 10:37:14 brian Exp $"

#ifndef __SS7_SDTI_H__
#define __SS7_SDTI_H__

 /*
  * The purpose of the SDT interface is to provide a separation between
  * the SL (Signalling Link) interface which provides SS7 Level 2 (LINK)
  * state machine services and the underlying driver which provides
  * essentially HDLC capablities.  In SS7 the entity providing HDLC
  * services is called the Signalling Data Terminal (SDT).  An SDTI
  * implements the AERM/SUERM/EIM and DAEDR/DAEDT capabilities and
  * communicates upstream to the Signalling Link using the primitives
  * provided here.
  *
  * The SDT interface also recognizes Local Management Interface (LMI)
  * primitives defined elsewhere .
  */

typedef lmi_long   sdt_long;
typedef lmi_ulong  sdt_ulong;
typedef lmi_ushort sdt_ushort;
typedef lmi_uchar  sdt_uchar;

#define SDT_PROTO_BASE                  32L

#define SDT_DSTR_FIRST                 ( 1L + SDT_PROTO_BASE)
#define SDT_DAEDT_TRANSMISSION_REQ     ( 1L + SDT_PROTO_BASE)
#define SDT_DAEDT_START_REQ            ( 2L + SDT_PROTO_BASE)
#define SDT_DAEDR_START_REQ            ( 3L + SDT_PROTO_BASE)
#define SDT_AERM_START_REQ             ( 4L + SDT_PROTO_BASE)
#define SDT_AERM_STOP_REQ              ( 5L + SDT_PROTO_BASE)
#define SDT_AERM_SET_TI_TO_TIN_REQ     ( 6L + SDT_PROTO_BASE)
#define SDT_AERM_SET_TI_TO_TIE_REQ     ( 7L + SDT_PROTO_BASE)
#define SDT_SUERM_START_REQ            ( 8L + SDT_PROTO_BASE)
#define SDT_SUERM_STOP_REQ             ( 9L + SDT_PROTO_BASE)
#define SDT_DSTR_LAST                  ( 9L + SDT_PROTO_BASE)

#define SDT_USTR_LAST                  (-1L - SDT_PROTO_BASE)
#define SDT_RC_SIGNAL_UNIT_IND         (-1L - SDT_PROTO_BASE)
#define SDT_RC_CONGESTION_ACCEPT_IND   (-2L - SDT_PROTO_BASE)
#define SDT_RC_CONGESTION_DISCARD_IND  (-3L - SDT_PROTO_BASE)
#define SDT_RC_NO_CONGESTION_IND       (-4L - SDT_PROTO_BASE)
#define SDT_IAC_CORRECT_SU_IND         (-5L - SDT_PROTO_BASE)
#define SDT_IAC_ABORT_PROVING_IND      (-6L - SDT_PROTO_BASE)
#define SDT_LSC_LINK_FAILURE_IND       (-7L - SDT_PROTO_BASE)
#define SDT_USTR_FIRST                 (-7L - SDT_PROTO_BASE)

/*
 *  SDT_RC_SIGNAL_UNIT_IND, M_DATA or M_PROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_RC_SIGNAL_UNIT_IND */
} sdt_rc_signal_unit_ind_t;

/*
 *  SDT_DAEDT_TRANSMISSION_REQ, M_DATA or M_PROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_DAEDT_TRANSMISSION_REQ */
} sdt_daedt_transmission_req_t;

/*
 *  SDT_DAEDT_START_REQ, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_DAEDT_START_REQ */
} sdt_daedt_start_req_t;

/*
 *  SDT_DAEDR_START_REQ, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_DAEDR_START_REQ */
} sdt_daedr_start_req_t;

/*
 *  SDT_IAC_CORRECT_SU_IND, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_IAC_CORRECT_SU_IND */
} sdt_iac_correct_su_ind_t;

/*
 *  SDT_AERM_START_REQ, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_AERM_START_REQ */
} sdt_aerm_start_req_t;

/*
 *  SDT_AERM_STOP_REQ, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_AERM_STOP_REQ */
} sdt_aerm_stop_req_t;

/*
 *  SDT_AERM_SET_TI_TO_TIN_REQ, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_AERM_SET_TI_TO_TIN_REQ */
} sdt_aerm_set_ti_to_tin_req_t;

/*
 *  SDT_AERM_SET_TI_TO_TIE_REQ, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_AERM_SET_TI_TO_TIE_REQ */
} sdt_aerm_set_ti_to_tie_req_t;

/*
 *  SDT_IAC_ABORT_PROVING_IND, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_IAC_ABORT_PROVING_IND */
} sdt_iac_abort_proving_ind_t;

/*
 *  SDT_SUERM_START_REQ, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_SUERM_START_REQ */
} sdt_suerm_start_req_t;

/*
 *  SDT_SUERM_STOP_REQ, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_SUERM_STOP_REQ */
} sdt_suerm_stop_req_t;

/*
 *  SDT_LSC_LINK_FAILURE_IND, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_LSC_LINK_FAILURE_IND */
} sdt_lsc_link_failure_ind_t;

/*
 *  SDT_RC_CONGESTION_ACCEPT_IND, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_RC_CONGESTION_ACCEPT_IND */
} sdt_rc_congestion_accept_ind_t;

/*
 *  SDT_RC_CONGESTION_DISCARD_IND, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_RC_CONGESTION_DISCARD_IND */
} sdt_rc_congestion_discard_ind_t;

/*
 *  SDT_RC_NO_CONGESTION_IND, M_PROTO or M_PCPROTO
 */
typedef struct {
    sdt_long    sdt_primitive;  /* SDT_RC_NO_CONGESTION_IND */
} sdt_rc_no_congestion_ind_t;


union SDT_primitives {
    sdt_long                            sdt_primitive;
    sdt_daedt_transmission_req_t        daedt_transmission_req;
    sdt_daedt_start_req_t               daedt_start_req;
    sdt_daedr_start_req_t               daedr_start_req;
    sdt_aerm_start_req_t                aerm_start_req;
    sdt_aerm_stop_req_t                 aerm_stop_req;
    sdt_aerm_set_ti_to_tin_req_t        aerm_set_ti_to_tin_req;
    sdt_aerm_set_ti_to_tie_req_t        aerm_set_ti_to_tie_req;
    sdt_suerm_start_req_t               suerm_start_req;
    sdt_suerm_stop_req_t                suerm_stop_req;
    sdt_rc_signal_unit_ind_t            rc_signal_unit_ind;       
    sdt_rc_congestion_accept_ind_t      rc_congestion_accept_ind;
    sdt_rc_congestion_discard_ind_t     rc_congestion_discard_ind;
    sdt_rc_no_congestion_ind_t          rc_no_congestion_ind;
    sdt_iac_correct_su_ind_t            iac_correct_su_ind;
    sdt_iac_abort_proving_ind_t         iac_abort_proving_ind;
    sdt_lsc_link_failure_ind_t          lsc_link_failure_ind;
};

#define SDT_DAEDT_TRANSMISSION_REQ_SIZE     sizeof(sdt_daedt_transmission_req_t)
#define SDT_DAEDR_START_REQ_SIZE            sizeof(sdt_daedr_start_req_t)
#define SDT_DAEDT_START_REQ_SIZE            sizeof(sdt_daedt_start_req_t)
#define SDT_AERM_START_REQ_SIZE             sizeof(sdt_aerm_start_req_t)
#define SDT_AERM_STOP_REQ_SIZE              sizeof(sdt_aerm_stop_req_t)
#define SDT_AERM_SET_TI_TO_TIN_REQ_SIZE     sizeof(sdt_aerm_set_ti_to_tin_req_t)
#define SDT_AERM_SET_TI_TO_TIE_REQ_SIZE     sizeof(sdt_aerm_set_ti_to_tie_req_t)
#define SDT_SUERM_START_REQ_SIZE            sizeof(sdt_suerm_start_req_t)
#define SDT_SUERM_STOP_REQ_SIZE             sizeof(sdt_suerm_stop_req_t)
#define SDT_RC_SIGNAL_UNIT_IND_SIZE         sizeof(sdt_rc_signal_unit_ind_t)
#define SDT_RC_CONGESTION_ACCEPT_IND_SIZE   sizeof(sdt_rc_congestion_accept_ind_t)
#define SDT_RC_CONGESTION_DISCARD_IND_SIZE  sizeof(sdt_rc_congestion_discard_ind_t)
#define SDT_RC_NO_CONGESTION_IND_SIZE       sizeof(sdt_rc_no_congestion_ind_t)
#define SDT_IAC_CORRECT_SU_IND_SIZE         sizeof(sdt_iac_correct_su_ind_t)
#define SDT_IAC_ABORT_PROVING_IND_SIZE      sizeof(sdt_iac_abort_proving_ind_t)
#define SDT_LSC_LINK_FAILURE_IND_SIZE       sizeof(sdt_lsc_link_failure_ind_t)

#endif  __SS7_SDTI_H__

ZZZZZZZZ Under Construction ZZZZZZZZ

 


Home Index Prev Next More Download Info FAQ Mail

OpenSS7

OpenSS7,

© Copyright 1997-2001, OpenSS7, All Rights Reserved.

Last modified: $Date: 2014/10/10 10:45:01 $