OpenSS7 |
© Copyright 1997-2001, OpenSS7, All Rights Reserved. |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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. |
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:
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:
AERM->IAC: Correct_SU
DAEDT->TXC: Transmission_Request
SUERM->LSC: SU_In_Error
SUERM->LSC: Correct_SU
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).
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. |
/***************************************************************************** @(#) $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__
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
OpenSS7 |
© Copyright 1997-2001, OpenSS7, All Rights Reserved. Last modified: $Date: 2014/10/10 10:45:01 $ |