OpenSS7 SS7 for the Common Man | © Copyright 1997-2007 OpenSS7 Corporation All Rights Reserved. Last modified: Sat, 01 Nov 2008 14:12:37 GMT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| SDTI Technical SpecificationDescription: OpenSS7 Resources Library.A PDF version of this document is available here. Signalling Data Terminal Interface (SDTI)Signalling Data Terminal InterfacePrefaceSecurity WarningPermission to use, copy and distribute this documentation without modification, for any purpose and without fee or royalty is hereby granted, provided that both the above copyright notice and this permission notice appears in all copies and that the name of OpenSS7 Corporation not be used in advertising or publicity pertaining to distribution of this documentation or its contents without specific, written prior permission. OpenSS7 Corporation makes no representation about the suitability of this documentation for any purpose. It is provided “as is” without express or implied warranty. OpenSS7 Corporation disclaims all warranties with regard to this documentation including all implied warranties of merchantability, fitness for a particular purpose, non-infringement, or title; that the contents of the document are suitable for any purpose, or that the implementation of such contents will not infringe on any third party patents, copyrights, trademarks or other rights. In no event shall OpenSS7 Corporation be liable for any direct, indirect, special or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with any use of this document or the performance or implementation of the contents thereof. OpenSS7 Corporation is making this documentation available as a reference point for the industry. While OpenSS7 Corporation believes that these interfaces are well defined in this release of the document, minor changes may be made prior to products conforming to the interfaces being made available. AbstractThis document is a Specification containing technical details concerning the implementation of the Signalling Data Terminal Interface (SDTI) for OpenSS7. It contains recommendations on software architecture as well as platform and system applicability of the Signalling Data Terminal Interface (SDTI). This document specifies a Signalling Data Terminal Interface (SDTI) Specification in support of the OpenSS7 Signalling Data Terminal (SDT) protocol stacks. It provides abstraction of the signalling data terminal interface to these components as well as providing a basis for signalling data terminal control for other data terminal control protocols. PurposeThe purpose of this document is to provide technical documentation of the Signalling Data Terminal Interface (SDTI). This document is intended to be included with the OpenSS7 STREAMS software package released by OpenSS7 Corporation. It is intended to assist software developers, maintainers and users of the Signalling Data Terminal Interface (SDTI) with understanding the software architecture and technical interfaces that are made available in the software package. IntentIt is the intent of this document that it act as the primary source of information concerning the Signalling Data Terminal Interface (SDTI). This document is intended to provide information for writers of OpenSS7 Signalling Data Terminal Interface (SDTI) applications as well as writers of OpenSS7 Signalling Data Terminal Interface (SDTI) Users. AudienceThe audience for this document is software developers, maintainers and users and integrators of the Signalling Data Terminal Interface (SDTI). The target audience is developers and users of the OpenSS7 SS7 stack. DisclaimerAlthough the author has attempted to ensure that the information in this document is complete and correct, neither the Author nor OpenSS7 Corporation will take any responsibility in it. Revision HistoryTake care that you are working with a current version of this documentation: you will not be notified of updates. To ensure that you are working with a current version, check the OpenSS7 Project website for a current version. Only the texinfo or roff source is controlled. A printed (or postscript) version of this document is an UNCONTROLLED VERSION. sdti.texi,v Revision 0.9.2.9 2008-09-20 11:04:30 brian - added package patchlevel Revision 0.9.2.8 2008-08-03 06:03:32 brian - protected agains texinfo commands in log entries Revision 0.9.2.7 2008-08-03 05:05:16 brian - conditional @syncodeindex frags out automake, fails distcheck Revision 0.9.2.6 2008-07-11 09:36:12 brian - updated documentation Revision 0.9.2.5 2008-04-29 07:10:39 brian - updating headers for release Revision 0.9.2.4 2007/08/14 12:17:02 brian - GPLv3 header updates Revision 0.9.2.3 2007/07/14 01:33:50 brian - make license explicit, add documentation Revision 0.9.2.2 2007/07/09 09:12:59 brian - working up SDTI specification Revision 0.9.2.1 2007/07/04 08:24:57 brian - added new files 1 IntroductionThis document specifies a STREAMS-based kernel-level instantiation of the ITU-T Signalling Data Terminal Interface (SDTI) definition. The Signalling Data Terminal Interface (SDTI) enables the user of a a signalling data terminal service to access and use any of a variety of conforming signalling data terminal providers without specific knowledge of the provider's protocol. The service interface is designed to support any network signalling data terminal protocol and user signalling data terminal protocol. This interface only specifies access to signalling data terminal service providers, and does not address issues concerning signalling data terminal management, protocol performance, and performance analysis tools. This specification assumes that the reader is familiar with ITU-T state machines and signalling data terminal interfaces (e.g. Q.703, Q.2210), and STREAMS. 1.1 Related Documentation
1.1.1 RoleThis document specifies an interface that supports the services provided by the Signalling System No. 7 (SS7) for ITU-T, ANSI and ETSI applications as described in ITU-T Recommendation Q.703, ITU-T Recommendation Q.2210, ANSI T1.111.3, ETSI ETS 300 008-1. These specifications are targeted for use by developers and testers of protocol modules that require signalling data terminal service. 1.2 Definitions, Acronyms, Abbreviations
2 The Signalling Data Terminal LayerThe Signalling Data Terminal Layer provides the means to manage the association of SDT-Users into connections. It is responsible for the routing and management of data to and from signalling data terminal connections between SDT-user entities. 2.1 Model of the SDTIThe SDTI defines the services provided by the signalling data terminal layer to the signalling data terminal user at the boundary between the signalling data terminal provider and the signalling data terminal user entity. The interface consists of a set of primitives defined as STREAMS messages that provide access to the signalling data terminal layer services, and are transferred between the SDTS user entity and the SDTS provider. These primitives are of two types; ones that originate from the SDTS user, and other that originate from the SDTS provider. The primitives that originate from the SDTS user make requests to the SDTS provider, or respond to an indication of an event of the SDTS provider. The primitives that originate from the SDTS provider are either confirmations of a request or are indications to the CCS user that an event has occurred. Figure 1 shows the model of the SDTI. Figure 1. Model of the SDTI
The SDTI allows the SDTS provider to be configured with any signalling data terminal layer user (such as a signalling link application) that also conforms to the SDTI. A signalling data terminal layer user can also be a user program that conforms to the SDTI and accesses the SDTS provider via putmsg(2s) and getmsg(2s) system calls. The typical configuration, however, is to place a signalling link module above the signalling data terminal layer. 2.2 SDTI ServicesThe features of the SDTI are defined in terms of the services provided by the SDTS provider, and the individual primitives that may flow between the SDTS user and the SDTS provider. The SDTI Services are broken into two groups: local management services and protocol services. Local management services are responsible for the local management of streams, assignment of streams to physical points of attachment, enabling and disabling of streams, management of options associated with a stream, and general acknowledgement and event reporting for the stream. Protocol services consist of connecting a stream to a medium, exchanging data with the medium, and disconnecting the stream from the medium. 2.2.1 Local ManagementLocal management services are listed in Table 1. Table 1. Local Management Services
The local management services interface is described in Local Management Services, and the primitives are detailed in Local Management Service Primitives. The local management services interface is defined by the ss7/lmi.h header file (see LMI Header File Listing). 2.2.2 ProtocolProtocol services are listed in Table 2. Table 2. Protocol Services
The protocol services interface is described in Protocol Services, and the primitives are detailed in Protocol Service Primitives. The protocol services interface is defined by the ss7/sdti.h header file (see SDTI Header File Listing). 2.3 Purpose of the SDTIThe SDTI is typically implemented as a device driver controlling a MPCC (Multi-Protocol Controller Chip) device that provides access to channels. The purpose behind exposing this low level interface is that almost all communications channel devices can be placed into a SS7 HDLC mode, where a data stream can be exchanged between the driver and the medium. The SDTI provides and inteface that, once implemented as a driver for a new device, can provide complete and verified SS7 signalling link capabilities by pushing generic SL (Signalling Link) modules over an open device stream. This allows SL modules to be verified independently for correct operation and then simply used for all manner of new device drivers that can implement the SDTI interface. 3 SDTI Services Definition3.1 Local Management Services3.1.1 Acknowledgement ServiceThe acknowledgement service provides the LMS user with the ability to receive positive and negative acknowledgements regarding the successful or unsuccessful completion of services.
A successful invocation of the acknowledgement service is illustrated in Figure 15. Figure 15. Message Flow: Successful Acknowledgement Service
As illustrated in Figure 15, the
service primitives for which a positive acknowledgement may be returned are the
An unsuccessful invocation of the acknowledgement service is illustrated in Figure 16. Figure 16. Message Flow: Unsuccessful Acknowledgement Service
As illustrated in Figure 16, the service primitives for which a negative acknowledgement may be
returned are the 3.1.2 Information Reporting ServiceThe information reporting service provides the LMS user with the ability to elicit information from the LMS provider.
A successful invocation of the information reporting service is illustrated in Figure 2. Figure 2. Message Flow: Successful Information Reporting Service
3.1.3 Physical Point of Attachment ServiceThe local management interface provides the LMS user with the ability to associate a stream to a physical point of appearance (PPA) or to disassociate a stream from a PPA. The local management interface provides for two styles of LMS provider: Style 1 LMS ProviderA Style 1 LMS provider is a provider that associates a stream with a PPA at the time of the
first Physical points of attachment (PPA) are assigned to major and minor device number combinations. When the major and minor device number combination is opened, the opened stream is automatically associated with the PPA for the major and minor device number combination. The last close of the device disassociates the PPA from the stream. Freshly opened Style 1 LMS provider streams start life in the This approach is suitable for LMS providers implemented as real or pseudo-device drivers and is applicable when the number of minor devices is small and static. Style 2 LMS ProviderA Style 2 LMS provider is a provider that associates a stream with a PPA at the time that the
LMS user issues the Freshly opened Style 2 LMS provider streams start life in the This approach is suitable for LMS providers implemented as clone real or pseudo-device drivers and is applicable when the number of minor devices is large or dynamic. 3.1.3.1 PPA Attachment ServiceThe PPA attachment service provides the LMS user with the ability to attach a Style 2 LMS provider stream to a physical point of appearance (PPA).
A successful invocation of the attachment service is illustrated in Figure 3. Figure 3. Message Flow: Successful Attachment Service
3.1.3.2 PPA Detachment ServiceThe PPA detachment service provides the LMS user with the ability to detach a Style 2 LMS provider stream from a physical point of attachment (PPA).
A successful invocation of the detachment service is illustrated in Figure 4. Figure 4. Message Flow: Successful Detachment Service
3.1.4 Initialization ServiceThe initialization service provides the LMS user with the abilty to enable and disable the stream for the associated PPA. 3.1.4.1 Interface Enable ServiceThe interface enable service provides the LMS user with the ability to enable an LMS provider stream that is associated with a PPA. Enabling the interface permits the LMS user to exchange protocol service interface messages with the LMS provider.
A successful invocation of the enable service is illustrated in Figure 5. Figure 5. Message Flow: Successful Enable Service
3.1.4.2 Interface Disable ServiceThe interface disable service provides the LMS user with the ability to disable an LMS provider stream that is associated with a PPA. Disabling the interface withdraws the LMS user's ability to exchange protocol service interface messages with the LMS provider.
A successful invocation of the disable service is illustrated in Figure 6. Figure 6. Message Flow: Successful Disable Service
3.1.5 Options Management ServiceThe options management service provides the LMS user with the ability to control and affect various generic and provider-specific options associated with the LMS provider.
A successful invocation of the options management service is illustrated in Figure 7. Figure 7. Message Flow: Successful Options Management Service
3.1.6 Error Reporting ServiceThe error reporting service provides the LMS provider with the ability to indicate asynchronous errors to the LMS user.
A successful invocation of the error reporting service is illustrated in Figure 8. Figure 8. Message Flow: Successful Error Reporting Service
3.1.7 Statistics Reporting Service
A successful invocation of the statistics reporting service is illustrated in Figure 9. Figure 9. Message Flow: Successful Statistics Reporting Service
3.1.8 Event Reporting ServiceThe event reporting service provides the LMS provider with the ability to indicate specific asynchronous management events to the LMS user.
A successful invocation of the event reporting service is illustrated in Figure 10. Figure 10. Message Flow: Successful Event Reporting Service
3.2 Protocol ServicesProtocol services are specific to the Signalling Data Terminal interface. These services consist of connection services that permit the transmit and receive directions to be connected to or disconnected from the medium, and data transfer services that permit the exchange of data between SDTS users. The service primitives that implement the protocol services are described in detail in Protocol Service Primitives. 3.2.1 Power On ServiceThe power on service provides the SDTS user with the ability to power up the receive and trasmitters associated with the medium. Transmitters and receivers can be powered up independently. Data trasnfer cannot occur until the transmitters or receivers have been powered up.
3.2.2 Data Transfer ServiceThe data transfer service provides the SDTS user with the ability to exchange signal units with the SDTS provider. Signal units may be sent to the SDTS provider for transmission and received signal units are delivered to the SDTS user by the SDTS provider. Timing queues can also be indicated by the SDTS provider.
3.2.3 Initial Alignment ServiceThe initial alignment service provides for all of the mechanisms associated with the Alignment Error Rate Monitor (AERM). This includes the ability for the SDTS user to start and stop the AERM, set the proving period to either normal proving or emergency proving, to receive correct signal unit indications and indications of when the error rate exceeds the configured threshold.
3.2.4 Error Rate Monitoring ServiceThe error rate monitoring service provides all of the mechanisms associated with the Signal Unit Error Rate Monitor (SUERM) or Errored Interval Monitor (EIM). This includes the ability for the SDTS user to start and stop the SUERM/EIM, and be notified when the error rate exceeds the configured threshold.
3.2.5 Receive Congestion ServiceThe receive congestion service providers mechanisms to implement provider-specific receive congestion indications to the SDTS user.
4 SDTI Primitives4.1 Local Management Service PrimitivesThese service primitives implement the local management services (see Local Management Services). 4.1.1 Acknowledgement Service PrimitivesThese service primitives implement the acknowledgement service (see Acknowledgement Service). 4.1.1.1 LMI_OK_ACKDescriptionThis primitive is used to acknowledge receipt and successful service completion for primitives requiring acknowledgement that have no confirmation primitive. Format
This primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_long lmi_correct_primitive; lmi_ulong lmi_state; } lmi_ok_ack_t; ParametersThe service primitive contains the following parameters:
StateThis primitive is issued by the LMS provider in the New StateThe new state is 4.1.1.2 LMI_ERROR_ACKDescriptionThe error acknowledgement primitive is used to acknowledge receipt and unsuccessful service completion for primitives requiring acknowledgement. Format
The error acknowledgement primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_ulong lmi_errno; lmi_ulong lmi_reason; lmi_long lmi_error_primitive; lmi_ulong lmi_state; } lmi_error_ack_t; ParametersThe error acknowledgement primitive contains the following parameters:
StateThis primitive can be issued in any state for which a local acknowledgement is not pending. The LMS provider state at the time that the primitive was issued is indicated in the primitive. New StateThe new state remains unchanged. 4.1.2 Information Reporting Service PrimitivesThese service primitives implement the information reporting service (see Information Reporting Service). 4.1.2.1 LMI_INFO_REQDescriptionThis LMS user originated primitive is issued by the LMS user to request that the LMS provider return information concerning the capabilities and state of the LMS provider. Format
The primitive consists of one typedef struct { lmi_ulong lmi_primitive; } lmi_info_req_t; ParametersThis primitive contains the following parameters:
StateThis primitive may be issued in any state but only when a local acknowledgement is not pending. New StateThe new state remains unchanged. ResponseThis primitive requires the LMS provider to acknowledge receipt of the primitive as follows:
Reasons for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.1.2.2 LMI_INFO_ACKDescriptionThis LMS provider originated primitive acknowledges receipt and successful processing of the
Format
This message is formatted a one typedef struct { lmi_long lmi_primitive; lmi_ulong lmi_version; lmi_ulong lmi_state; lmi_ulong lmi_max_sdu; lmi_ulong lmi_min_sdu; lmi_ulong lmi_header_len; lmi_ulong lmi_ppa_style; lmi_uchar lmi_ppa_addr[0]; } lmi_info_ack_t; ParametersThe information acknowledgement service primitive has the following parameters:
StateThis primitive can be issued in any state where a local acknowledgement is not pending. New StateThe new state remains unchanged. 4.1.3 Physical Point of Attachment Service PrimitivesThese service primitives implement the physical point of attachment service (see Physical Point of Attachment Service). 4.1.3.1 LMI_ATTACH_REQDescriptionThis LMS user originated primitive requests that the stream upon which the primitive is issued by
associated with the specified Physical Point of Attachment (PPA). This primitive is only applicable
to Style 2 LMS provider streams, that is, streams that return Format
This primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_uchar lmi_ppa[0]; } lmi_attach_req_t; ParametersThe attach request primitive contains the following parameters:
StateThis primitive is only valid in state New StateUpon success, the new state is ResponseThe attach request service primitive requires that the LMS provider respond as follows:
Reasons for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.1.3.2 LMI_DETACH_REQDescriptionThis LMS user originated primitive request that the stream upon which the primitive is issued be
disassociated from the Physical Point of Appearance (PPA) to which it is currently attached. This
primitive is only applicable to Style 2 LMS provider streams, that is, streams that return
Format
The detach request service primitive consists of one typedef struct { lmi_long lmi_primitive; } lmi_detach_req_t; ParametersThe detach request service primitive contains the following parameters:
StateThis primitive is valid in the New StateUpon success, the new state is ResponseThe detach request service primitive requires that the LMS provider respond as follows:
Reasons for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.1.4 Initialization Service PrimitivesInitialization service primitives allow the LMS user to enable or disable the protocol service interface. Enabling the protocol service interface may require that some action be taken to prepare the protocol service interface for use or to remove it from use. For example, where the PPA corresponds to a signalling data link identifier as defined in Q.704, it may be necessary to perform switching to connect or disconnect the circuit identification code associated with the signalling data link identifier. These service primitives implement the initialization service (see Initialization Service). 4.1.4.1 LMI_ENABLE_REQDescriptionThis LMS user originated primitive request that the LMS provider perform the actions necessary to enable the protocol service interface and confirm that it is enabled. This primitive is applicable to both styles of PPA. Format
The enable request service primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_uchar lmi_rem[0]; } lmi_enable_req_t; ParametersThe enable request service primitive contains the following parameters:
StateThis primitive is valid in the New StateUpon success the new state is ResponseThe enable request service primitive requires that the LMS provider acknowledge receipt of the primitive as follows:
Reasons for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.1.4.2 LMI_ENABLE_CONDescriptionThis LMS provider originated primitive is issued by the LMS provider to confirm the successful completion of the enable service. Format
The enable confirmation service primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_ulong lmi_state; } lmi_enable_con_t; ParametersThe enable confirmation service primitive contains the following parameters:
StateThis primitive is issued by the LMS provider in the New StateThe new state is 4.1.4.3 LMI_DISABLE_REQDescriptionThis LMS user originated primitive requests that the LMS provider perform the actions necessary to disable the protocol service interface and confirm that it is disabled. The primitive is applicable to both styles of PPA. Format
The disable request service primitive consists of one typedef struct { lmi_long lmi_primitive; } lmi_disable_req_t; ParametersThe disable request service primitive contains the following parameters:
StateThe disable request service primitive is valid in the New StateUpon success, the new state is ResponseThe disable request service primitive requires the LMS provider to acknowledge receipt of the primitive as follows:
Reasons for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.1.4.4 LMI_DISABLE_CONDescriptionThis LMS provider originated primitive is issued by the LMS provider to confirm the successful completion of the disable service. Format
The disable confirmation service primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_ulong lmi_state; } lmi_disable_con_t; ParametersThe disable confirmation service primitive contains the following parameters:
StateThis primitive is issued by the LMS provider in the New StateThe new state is 4.1.5 Options Management Service PrimitivesThe options management service primitives allow the LMS user to negotiate options with the LMS provider, retrieve the current and default values of options, and check that values specified for options are correct. The options management service primitive implement the options management service (see Options Management Service). 4.1.5.1 LMI_OPTMGMT_REQDescriptionThis LMS user originated primitive requests that LMS provider options be managed. Format
The option management request service primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_ulong lmi_opt_length; lmi_ulong lmi_opt_offset; lmi_ulong lmi_mgmt_flags; } lmi_optmgmt_req_t; ParametersThe option management request service primitive contains the following parameters:
StateThis primitive is valid in any state where a local acknowledgement is not pending. New StateThe new state remains unchanged. ResponseThe option management request service primitive requires the LMS provider to acknowledge receipt of the primitive as follows:
Reasons for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.1.5.2 LMI_OPTMGMT_ACKDescriptionThis LMS provider originated primitive is issued by the LMS provider upon successful completion of
the options management service. It indicates the outcome of the options management operation
requested by the LMS user in a Format
The option management acknowledgement service primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_ulong lmi_opt_length; lmi_ulong lmi_opt_offset; lmi_ulong lmi_mgmt_flags; } lmi_optmgmt_ack_t; ParametersThe option management acknowledgement service primitive contains the following parameters:
StateThis primitive is issued by the LMS provider in direct response to an New StateThe new state remains unchanged. RulesThe LMS provider follows the following rules when processing option management service requests:
4.1.6 Event Reporting Service PrimitivesThe event reporting service primitives allow the LMS provider to indicate asynchronous errors, events and statistics collection to the LMS user. These service primitives implement the event reporting service (see Event Reporting Service). 4.1.6.1 LMI_ERROR_INDDescriptionThis LMS provider originated service primitive is issued by the LMS provider when it detects and asynchronous error event. The service primitive is applicable to all styles of PPA. Format
The error indication service primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_ulong lmi_errno; lmi_ulong lmi_reason; lmi_ulong lmi_state; } lmi_error_ind_t; ParametersThe error indication service primitive contains the following parameters:
StateThis primitive can be issued in any state for which a local acknowledgement is not pending. The LMS provider state at the time that the primitive was issued is indicated in the primitive. New StateThe new state remains unchanged. 4.1.6.2 LMI_STATS_INDDescriptionThis LMS provider originated primitive is issued by the LMS provider to indicate a periodic statistics collection event. The service primitive is applicable to all styles of PPA. Format
The statistics indication service primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_ulong lmi_interval; lmi_ulong lmi_timestamp; } lmi_stats_ind_t; Following this structure within the ParametersThe statistics indication service primitive contains the following parameters:
StateThis service primitive may be issued by the LMS provider in any state in which a local acknowledgement is not pending. New StateThe new state remains unchanged. 4.1.6.3 LMI_EVENT_INDDescriptionThis LMS provider originated primitive is issued by the LMS provider to indicate an asynchronous event. The service primitive is applicable to all styles of PPA. Format
The event indication service primitive consists of one typedef struct { lmi_long lmi_primitive; lmi_ulong lmi_objectid; lmi_ulong lmi_timestamp; lmi_ulong lmi_severity; } lmi_event_ind_t; Following this structure within the ParametersTHe event indication service primitive contains the following parameters:
StateThis service primitive can be issued by the LMS provider in any state where a local
acknowledgement is not pending. Normally the LMS provider must be in the New StateThe new state remains unchanged. 4.2 Protocol Service PrimitivesThe protocol service primitives implement the services of the DAEDT, DAEDR, AERM, SUERM/EIM and a provider specific receive congestion function, including power on, initial alignment support, error rate monitoring, receive cnogestion detection, and data transfer. These service primitives implement the protocol services (see Protocol Services). 4.2.1 Power On Service PrimitivesThe power on service primitives provide the ability for the SDTS user to power on the DAEDR and DAEDT functions within the SDTS provider. These service primitives implement the power on service (see Power On Service). 4.2.1.1 SDT_DAEDT_START_REQDescriptionThe DAEDT start request service primitive is originated by the SDTS user when it wishes to start the transmitters as part of a power-on sequence. Once started, the transmitters cannot be stopped under protocol control. Format
The DAEDT start request service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_daedt_start_req_t; ParametersThe DAEDT start request service primitive contains the following parameters:
StateThis primitive is only valid in the New StateThe new DAEDT state is the ResponseThis primitive does not require receipt acknowledgement.
When the terminal is in the Reason for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.2.1.2 SDT_DAEDR_START_REQDescriptionThe DAEDR start request service primitive is originated by the SDTS user when it wishes to start the receivers as part of a power-on sequence. Once started, the receivers cannot be stopped under protocol control. This primitive is a request from the Reception Control (RC) function in the SDTS user to the DAEDR function in the SDTS provider. Format
The DAEDR start request service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_daedr_start_req_t; ParametersThe DAEDR start request service primitive contains the following parameters:
StateThis primitive is only valid in the New StateThe new DAEDR state is the ResponseThis primitive does not require receipt acknowledgement.
When the terminal is in the Reason for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.2.2 Data Transfer Service PrimitivesThe data transfer service primitives provide the means for transfering data between SDTS users across a signalling data link. Data is sent and received in signal units. Signal units are the data contained in frames that occur between flags on the line excluding the checksum octets. These are packets of data that contain an integer number of octets (a multiple of 8 bits). When performing data transfer, signal units that are correctly received on the signalling data link are delivered to the SDTS user as they arrive. Signal units for transmission are delivered to the SDTS provider on demand, however, during quiescent periods it is sometimes advantageous from the point of view of synchronous driver design to request trasnmission of additional signal units in a pull arrangement rather than a push arrangement. Therefore there is a primitive to allow the SDTS provider to request additional data for trasnsmission. These service primitives implement the data transfer service (see Data Transfer Service). 4.2.2.1 SDT_DAEDT_TRANSMISSION_REQDescriptionThe DAEDT transmission request service primitive is originated by the SDTS user to request that the SDTS provider trasnmit a signal unit on the medium. A signal unit is a self-contained packet of data containing an integer number of octets of information. This primitive is a request from the Transmission Control (TXC) function in the SDTS user to the DAEDT function in the SDTS provider. Format
The DAEDT transmission request service primitive consists of zero or one typedef struct { sdt_long sdt_primitive; } sdt_daedt_transmission_req_t; ParametersThe DAEDT transmission request service primitive contains the following parameters:
StateThis primitive is only valid in the New StateThe new state is unchanged. RulesThe SDTS user must observe the following rules when issuing the DAEDT transmission request service primitive:
ResponseThis primitive does not require receipt acknowledgement.
When the terminal is in the Reason for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.2.2.2 SDT_RC_SIGNAL_UNIT_INDDescriptionThe RC signal unit indication service primitive is issued by the SDTS provider when a signal unit arrives on the signalling data link and passes error detection. The primitive is named the ‘RC’ signal unit indication because this signal is normally sent to reception control (RC) within the SS7 Level 2 state machine. This primitive is an indication from the DAEDR function in the SDTS provider to the Reception Control (RC) function in the SDTS user. Format
The RC signal unit indication service primtive consists of one optional typedef struct { sdt_long sdt_primitive; sdt_ulong sdt_count; } sdt_rc_signal_unit_ind_t; ParametersThe RC signal unit indication service primtive contains the following parameters:
StateThis primitive is only issued from the New StateThe state remains unchanged. RulesThe SDTS provider observes the following rules when generating the RC signal unit indication primitive:
ResponseThis primitive does not require a response from the SDTS user. 4.2.2.3 SDT_TXC_TRANSMISSION_REQUEST_INDDescriptionThe TXC transmission request indication service primitive is originated by the SDTS provider to indicate that if a signal unit is not available for transmission that the signalling terminal will idle the signalling data link. Depending on the specific SDTS provider, idling the signalling data link may consist of idling continuous flags, FISUs or LSSUs. This indication provides timing ques to the SDTS user. This primitive is an indication from the DAEDT function in the SDTS provider to the Transmission Control (TXC) function in the SDTS user. Format
The TXC transmission request indication service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_txc_transmission_request_ind_t; ParametersThe TXC transmission request indication service primitive contains the following parameters:
StateThis primitive is only issued from the New StateThe new state is unchanged. RulesThe SDTS provider observes the following rules when issuing the TXC transmission request indication service primitive:
ResponseThis primitive does not require a specific response from the SDTS user. Upon receiving this
primitive, if the SDTS user does not wish the signalling data link to idle flags, FISUs or LSSUs, it
should generate another trasnmission request using the 4.2.3 Initial Alignment Service PrimitivesThe initial alignment service primitives peform the functions of the Alignment Error Rate Monitor (AERM). They provide the SDTS user with the ability to start and stop the AERM, set normal or emergency proving periods, and receive correct signal unit indications and indications that the error rate has exceeded the threshold. Not all SDTS providers implement nor require an AERM function. For example, broadband signalling links can be configured to not perform proving, in which case the AERM function is not necessary. Regardless of whether the AERM function is necessary or not, each SDTS provider should be prepared to handle requests and generate appropriate indications as though an AERM function existed, and without generating non-fatal errors. Note that some designs do no permit the AERM function and the SUERM or EIM function to be active simultaneously. These service primitives implement the initial alignment service (see Initial Alignment Service). 4.2.3.1 SDT_AERM_START_REQDescriptionThe AERM start request service primitive is originated by the SDTS use to request that the Alignment Error Rate Monitor be started. This primitive is a request from the Initial Alignment Control (IAC) function in the SDTS user to the AERM function in the SDTS provider. Format
The AERM start request service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_aerm_start_req_t; ParametersThe AERM start request service primitive containst the following parameters:
StateThis primitive is only valid in the New StateThe new state of the AERM function is the ResponseThis primitive does not require receipt acknowledgement.
When the signalling terminal is in the Reason for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.2.3.2 SDT_AERM_SET_TI_TO_TIN_REQDescriptionThe AERM set Ti to Tin request service primitive is originated by the SDTS user to request that the normal proving period be used for the current or next initial alignment error rate monitoring. This primitive is a request from the Initial Alignment Control (IAC) function in the SDTS user to the AERM function in the SDTS provider. Format
The AERM set Ti to Tin request service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_aerm_set_ti_to_tin_req_t; ParametersThe AERM set Ti to Tin request service primitive contains the following parameters:
StateThis primitive is only valid in the New StateThe new state remains unchanged and normal proving is asserted. ResponseThis primitive does not require receipt acknowledgement.
Reason for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.2.3.3 SDT_AERM_SET_TI_TO_TIE_REQDescriptionThe AERM set Ti to Tie request service primitive is originated by the SDTS user to request that the emergency proving period be used for the current or next initial alignment error rate monitoring. This primitive is a request from the Initial Alignment Control (IAC) function in the SDTS user to the AERM function in the SDTS provider. Format
The AERM set Ti to Tie request service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_aerm_set_ti_to_tie_req_t; ParametersThe AERM set Ti to Tie request service primitive contains the following parameters:
StateThis primitive is only valid in the New StateThe new state is unchanged and emergency proving is asserted. ResponseThis primitive does not require receipt acknowledgement.
Reason for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.2.3.4 SDT_IAC_CORRECT_SU_INDDescriptionThe IAC correct SU indication service primitive is issued by the SDTS provider during the intial
alignment phase to indicate that a correct signal unit has been received. Some STDS user state
machines require this primitive; others can use the Format
The IAC correct SU indication service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_iac_correct_su_ind_t; ParametersThe IAC correct SU indication service primitive contains the following parameters:
StateThis primitive is only issued from the New StateThe new state remains unchanged. RulesThe SDTS provider observes the following rules when issuing the IAC correct SU indication service primitive:
ResponseThis primitive does not require a specific response from the SDTS user. 4.2.3.5 SDT_IAC_ABORT_PROVING_INDDescriptionThe IAC abort proving indication service primitive is issued by the SDTS provider to indicate that the error rate experience on the signalling data link has exceeded the operating threshold. This primitive is an indication from the AERM function in the SDTS provider to the Initial Alignment Control (IAC) function in the SDTS user. Format
The IAC abort proving indication service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_iac_abort_proving_ind_t; ParametersThe IAC abort proving indication service primitive contains the following parameters:
StateThis primitive is only issued from the New StateThe new AERM state is RulesThe SDTS provider observes the following rules when issuing the IAC abort proving indication service primitive:
ResponseThis primitive does not require a response from the SDTS user. 4.2.3.6 SDT_AERM_STOP_REQDescriptionThe AERM stop request service primitive is originated by the SDTS user to request that the AERM
function be stopped (moved to the Format
The AERM stop request service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_aerm_stop_req_t; ParametersThe AERM stop request service primitive contains the following parameters:
StateThis primitive is only valid in the New StateThe new state of the AERM function is the ResponseThis primitive does not require receipt acknowledgement.
When the signalling terminal is in the Reason for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.2.4 Error Rate Monitoring Service PrimitivesThe error rate monitoring service primitives perform the functions of the Signal Unit Error Rate Monitor (SUERM) or Errored Interval Monitor (EIM). They provide the SDTS user with the ability to start and stop the SUERM/EIM, and receive indications that the error rate has exceeded the operating threshold. Not all SDTS providers implement nor require a SUERM/EIM function. Regardless of whether the SUERM/EIM function is necessary or not, each SDTS provider should be prepared to handle requests and generate appropriate indications as though a SUERM or EIM function existed, and without generating non-fatal errors. Note that some designs do no permit the AERM function and the SUERM or EIM function to be active simultaneously. These service primitives implement the error rate monitoring service (see Error Rate Monitoring Service). 4.2.4.1 SDT_SUERM_START_REQDescriptionThis SDTS user originated primitive is used to start the Signal Unit Error Rate Monitor (SUERM) or Errorred Interval Monitor (EIM) service. This primitive is a request from the Link State Control (LSC) function in the SDTS user to the SUERM/EIM function in the SDTS provider. Format
The SUERM start service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_suerm_start_req_t; ParametersThe SUERM start service primitive contains the following parameters:
StateThis primitive is only valid in the New StateThe new management state remains unchanged. The state of the SUERM is moved to ResponseThis service primitive is not acknowledged, but can cause a non-fatal error as follows:
When the signalling terminal is in the Reason for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.2.4.2 SDT_LSC_LINK_FAILURE_INDDescriptionThis SDTS provider originated primitive is issued by the SDTS provider while the SUERM/EIM service is active to indicate that the error rate monitor has detected errors that exceed the configured threshold and that the link should be failed for execessive errors. This primitive is an indication from the SUERM/EIM function in the SDTS provider to the Link State Control (LSC) function in the SDTS user. Format
The link failure indication service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_lsc_link_failure_ind_t; ParametersThe link failure service primitive contains the following parameters:
StateThis primitive will only be issued when the signalling terminal is in the New StateThe new state for the SUERM is the RulesThe following rules apply to the link failure indication service primitive:
ResponseThis primitive does not require a response from the SDTS user. 4.2.4.3 SDT_SUERM_STOP_REQDescriptionThis SDTS user originated primitive is used to stop the Signal Unit Error Rate Monitor (SUERM) or Errorred Interval Monitor (EIM) service. This primitive is a request from the Link State Control (LSC) function in the SDTS user to the SUERM/EIM function in the SDTS provider. Format
The SUERM stop service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_suerm_stop_req_t; ParametersThe SUERM stop service primitive contains the following parameters:
StateThis primitive is only valid in the New StateThe state of the SUERM/EIM is moved to ResponseThis service primitive is not acknowledged, but can cause a non-fatal error as follows:
When the signalling terminal is in the Reason for FailureNon-Fatal Errors: applicable non-fatal errors are as follows:
4.2.5 Receive Congestion Service PrimitivesThe receive congestion service primitives provide the SDTS user with the ability to be informed by the SDTS provider when it detects receive congestion conditions and can determine a receive congestion policy. Receive congestion is a provider-specific matter. The SDTS user is also capable of detecting receive congestion without the assistance of these primitives. They are used to indicate receive congestion to the SDTS user that can only be detected within the SDTS provider. These service primitives implement the receive congestion service (see Receive Congestion Service). 4.2.5.1 SDT_RC_CONGESTION_ACCEPT_INDDescriptionThe RC convestion accept indication service primitive is indicated by the SDTS provider when it is experiencing receive congestion but signal units continue to be delivered by the SDTS provider. This primitive is an indication from a provider-specific function in the SDTS provider to the Reception Control (RC) function in the SDTS user. Format
The RC congestion accept indication service primtive consists of one typedef struct { sdt_long sdt_primitive; } sdt_rc_congestion_accept_ind_t; ParametersThe RC congestion accept indication service primtive contains the following parameters:
StateThis primitive is only issued when the signalling terminal is in the New StateThe receive congestion state is moved to RulesThe SDTS provider observes the following rules when issuing the RC congestion accept service primitive:
ResponseThis primitive does not require a response from the SDTS user. 4.2.5.2 SDT_RC_CONGESTION_DISCARD_INDDescriptionThe RC convestion discard indication service primitive is indicated by the SDTS provider when it is experiencing receive congestion and signal units are being discarded by the SDTS provider. This primitive is an indication from a provider-specific function in the SDTS provider to the Reception Control (RC) function in the SDTS user. Format
The RC congestion discard indication service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_rc_congestion_discard_ind_t; ParametersThe RC congestion discard indication service primitive contains the following parameters:
StateThis primitive is only issued from the New StateThe receive congestion state is moved to RulesThe SDTS provider observes the following rules when issuing the RC congestion discard service primitive:
ResponseThis primitive does not require a response from the SDTS user. 4.2.5.3 SDT_RC_NO_CONGESTION_INDDescriptionThis SDTS provider originated primitive This primitive is an indication from a provider-specific function in the SDTS provider to the Reception Control (RC) function in the SDTS user. Format
The RC no congestion indication service primitive consists of one typedef struct { sdt_long sdt_primitive; } sdt_rc_no_congestion_ind_t; ParametersThe RC no congestion indication service primitive contains the following parameters:
StateThis primitive is only issued from the New StateThe receive congestion state is moved to RulesThe SDTS provider observes the following rules when issuing the RC no congestion service primitive:
ResponseThis primitive does not require a response from the SDTS user. 5 Diagnostics RequirementsTwo error handling facilities should be provided to the SDTS user: one to handle non-fatal errors, and the other to handle fatal errors. 5.1 Non-Fatal Error Handling FacilityThese are errors that do not change the state of the SDTS interface as seen by the SDTS user and
provide the user with the option of reissuing the SDT primitive with the corrected options
specification. The non-fatal error handling is provided only to those primitives that require
acknowledgements, and uses the 5.2 Fatal Error Handling FacilityThese errors are issued by the SDT provider when it detects errors that are not correctable by the
SDT user, or if it is unable to report a correctible error to the SDTS user. Fatal errors are
indicated via the STREAMS message type Appendix A LMI Header File Listing
#define LMI_PROTO_BASE 16L #define LMI_DSTR_FIRST ( 1L + LMI_PROTO_BASE ) #define LMI_INFO_REQ ( 1L + LMI_PROTO_BASE ) #define LMI_ATTACH_REQ ( 2L + LMI_PROTO_BASE ) #define LMI_DETACH_REQ ( 3L + LMI_PROTO_BASE ) #define LMI_ENABLE_REQ ( 4L + LMI_PROTO_BASE ) #define LMI_DISABLE_REQ ( 5L + LMI_PROTO_BASE ) #define LMI_OPTMGMT_REQ ( 6L + LMI_PROTO_BASE ) #define LMI_DSTR_LAST ( 6L + LMI_PROTO_BASE ) #define LMI_USTR_LAST (-1L - LMI_PROTO_BASE ) #define LMI_INFO_ACK (-1L - LMI_PROTO_BASE ) #define LMI_OK_ACK (-2L - LMI_PROTO_BASE ) #define LMI_ERROR_ACK (-3L - LMI_PROTO_BASE ) #define LMI_ENABLE_CON (-4L - LMI_PROTO_BASE ) #define LMI_DISABLE_CON (-5L - LMI_PROTO_BASE ) #define LMI_OPTMGMT_ACK (-6L - LMI_PROTO_BASE ) #define LMI_ERROR_IND (-7L - LMI_PROTO_BASE ) #define LMI_STATS_IND (-8L - LMI_PROTO_BASE ) #define LMI_EVENT_IND (-9L - LMI_PROTO_BASE ) #define LMI_USTR_FIRST (-9L - LMI_PROTO_BASE ) #define LMI_UNATTACHED 1L /* No PPA attached, awating LMI_ATTACH_REQ */ #define LMI_ATTACH_PENDING 2L /* Waiting for attach */ #define LMI_UNUSABLE 3L /* Device cannot be used, STREAM in hung state */ #define LMI_DISABLED 4L /* PPA attached, awaiting LMI_ENABLE_REQ */ #define LMI_ENABLE_PENDING 5L /* Waiting to send LMI_ENABLE_CON */ #define LMI_ENABLED 6L /* Ready for use, awaiting primtiive exchange */ #define LMI_DISABLE_PENDING 7L /* Waiting to send LMI_DISABLE_CON */ #define LMI_DETACH_PENDING 8L /* Waiting for detach */ /* * LMI_ERROR_ACK and LMI_ERROR_IND reason codes */ #define LMI_UNSPEC 0x00000000 /* Unknown or unspecified */ #define LMI_BADADDRESS 0x00010000 /* Address was invalid */ #define LMI_BADADDRTYPE 0x00020000 /* Invalid address type */ #define LMI_BADDIAL 0x00030000 /* (not used) */ #define LMI_BADDIALTYPE 0x00040000 /* (not used) */ #define LMI_BADDISPOSAL 0x00050000 /* Invalid disposal parameter */ #define LMI_BADFRAME 0x00060000 /* Defective SDU received */ #define LMI_BADPPA 0x00070000 /* Invalid PPA identifier */ #define LMI_BADPRIM 0x00080000 /* Unregognized primitive */ #define LMI_DISC 0x00090000 /* Disconnected */ #define LMI_EVENT 0x000a0000 /* Protocol-specific event ocurred */ #define LMI_FATALERR 0x000b0000 /* Device has become unusable */ #define LMI_INITFAILED 0x000c0000 /* Link initialization failed */ #define LMI_NOTSUPP 0x000d0000 /* Primitive not supported by this device */ #define LMI_OUTSTATE 0x000e0000 /* Primitive was issued from invalid state */ #define LMI_PROTOSHORT 0x000f0000 /* M_PROTO block too short */ #define LMI_SYSERR 0x00100000 /* UNIX system error */ #define LMI_WRITEFAIL 0x00110000 /* Unitdata request failed */ #define LMI_CRCERR 0x00120000 /* CRC or FCS error */ #define LMI_DLE_EOT 0x00130000 /* DLE EOT detected */ #define LMI_FORMAT 0x00140000 /* Format error detected */ #define LMI_HDLC_ABORT 0x00150000 /* Aborted frame detected */ #define LMI_OVERRUN 0x00160000 /* Input overrun */ #define LMI_TOOSHORT 0x00170000 /* Frame too short */ #define LMI_INCOMPLETE 0x00180000 /* Partial frame received */ #define LMI_BUSY 0x00190000 /* Telephone was busy */ #define LMI_NOANSWER 0x001a0000 /* Connection went unanswered */ #define LMI_CALLREJECT 0x001b0000 /* Connection rejected */ #define LMI_HDLC_IDLE 0x001c0000 /* HDLC line went idle */ #define LMI_HDLC_NOTIDLE 0x001d0000 /* HDLC link no longer idle */ #define LMI_QUIESCENT 0x001e0000 /* Line being reassigned */ #define LMI_RESUMED 0x001f0000 /* Line has been reassigned */ #define LMI_DSRTIMEOUT 0x00200000 /* Did not see DSR in time */ #define LMI_LAN_COLLISIONS 0x00210000 /* LAN excessive collisions */ #define LMI_LAN_REFUSED 0x00220000 /* LAN message refused */ #define LMI_LAN_NOSTATION 0x00230000 /* LAN no such station */ #define LMI_LOSTCTS 0x00240000 /* Lost Clear to Send signal */ #define LMI_DEVERR 0x00250000 /* Start of device-specific error codes */ typedef signed int lmi_long; typedef unsigned int lmi_ulong; typedef unsigned short lmi_ushort; typedef unsigned char lmi_uchar; /* * LOCAL MANAGEMENT PRIMITIVES */ /* LMI_INFO_REQ, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_INFO_REQ */ } lmi_info_req_t; /* LMI_INFO_ACK, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_INFO_ACK */ lmi_ulong lmi_version; lmi_ulong lmi_state; lmi_ulong lmi_max_sdu; lmi_ulong lmi_min_sdu; lmi_ulong lmi_header_len; lmi_ulong lmi_ppa_style; lmi_ulong lmi_ppa_length; lmi_ulong lmi_ppa_offset; lmi_ulong lmi_prov_flags; /* provider specific flags */ lmi_ulong lmi_prov_state; /* provider specific state */ lmi_uchar lmi_ppa_addr[0]; } lmi_info_ack_t; #define LMI_VERSION_1 1 #define LMI_VERSION_2 2 #define LMI_CURRENT_VERSION LMI_VERSION_2 /* * LMI provider style. * * The LMI provider style which determines whether a provider requires an * LMI_ATTACH_REQ to inform the provider which PPA user messages should be * sent/received on. */ #define LMI_STYLE1 0x00 /* PPA is implicitly bound by open(2) */ #define LMI_STYLE2 0x01 /* PPA must be explicitly bound via STD_ATTACH_REQ */ /* LMI_ATTACH_REQ, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_ATTACH_REQ */ lmi_ulong lmi_ppa_length; lmi_ulong lmi_ppa_offset; lmi_uchar lmi_ppa[0]; } lmi_attach_req_t; /* LMI_DETACH_REQ, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_DETACH_REQ */ } lmi_detach_req_t; /* LMI_ENABLE_REQ, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_ENABLE_REQ */ lmi_ulong lmi_rem_length; lmi_ulong lmi_rem_offset; lmi_uchar lmi_rem[0]; } lmi_enable_req_t; /* LMI_DISABLE_REQ, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_DISABLE_REQ */ } lmi_disable_req_t; /* LMI_OK_ACK, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_OK_ACK */ lmi_long lmi_correct_primitive; lmi_ulong lmi_state; } lmi_ok_ack_t; /* LMI_ERROR_ACK, M_CTL */ typedef struct { lmi_long lmi_primitive; /* LMI_ERROR_ACK */ lmi_ulong lmi_errno; lmi_ulong lmi_reason; lmi_long lmi_error_primitive; lmi_ulong lmi_state; } lmi_error_ack_t; /* LMI_ENABLE_CON, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_ENABLE_CON */ lmi_ulong lmi_state; } lmi_enable_con_t; /* LMI_DISABLE_CON, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_DISABLE_CON */ lmi_ulong lmi_state; } lmi_disable_con_t; /* LMI_OPTMGMT_REQ, M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_OPTMGMT_REQ */ lmi_ulong lmi_opt_length; lmi_ulong lmi_opt_offset; lmi_ulong lmi_mgmt_flags; } lmi_optmgmt_req_t; /* LMI_OPTMGMT_ACK, M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_OPMGMT_ACK */ lmi_ulong lmi_opt_length; lmi_ulong lmi_opt_offset; lmi_ulong lmi_mgmt_flags; } lmi_optmgmt_ack_t; #undef LMI_DEFAULT #define LMI_NEGOTIATE 0x0004 #define LMI_CHECK 0x0008 #define LMI_DEFAULT 0x0010 #define LMI_SUCCESS 0x0020 #define LMI_FAILURE 0x0040 #define LMI_CURRENT 0x0080 #define LMI_PARTSUCCESS 0x0100 #define LMI_READONLY 0x0200 #define LMI_NOTSUPPORT 0x0400 /* LMI_ERROR_IND, M_PROTO or M_PCPROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_ERROR_IND */ lmi_ulong lmi_errno; lmi_ulong lmi_reason; lmi_ulong lmi_state; } lmi_error_ind_t; /* LMI_STATS_IND, M_PROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_STATS_IND */ lmi_ulong lmi_interval; lmi_ulong lmi_timestamp; } lmi_stats_ind_t; /* LMI_EVENT_IND, M_PROTO */ typedef struct { lmi_long lmi_primitive; /* LMI_EVENT_IND */ lmi_ulong lmi_objectid; lmi_ulong lmi_timestamp; lmi_ulong lmi_severity; } lmi_event_ind_t; union LMI_primitive { lmi_long lmi_primitive; lmi_ok_ack_t ok_ack; lmi_error_ack_t error_ack; lmi_error_ind_t error_ind; lmi_stats_ind_t stats_ind; lmi_event_ind_t event_ind; }; union LMI_primitives { lmi_long lmi_primitive; lmi_info_req_t info_req; lmi_info_ack_t info_ack; lmi_attach_req_t attach_req; lmi_detach_req_t detach_req; lmi_enable_req_t enable_req; lmi_disable_req_t disable_req; lmi_ok_ack_t ok_ack; lmi_error_ack_t error_ack; lmi_enable_con_t enable_con; lmi_disable_con_t disable_con; lmi_error_ind_t error_ind; lmi_stats_ind_t stats_ind; lmi_event_ind_t event_ind; }; #define LMI_INFO_REQ_SIZE sizeof(lmi_info_req_t) #define LMI_INFO_ACK_SIZE sizeof(lmi_info_ack_t) #define LMI_ATTACH_REQ_SIZE sizeof(lmi_attach_req_t) #define LMI_DETACH_REQ_SIZE sizeof(lmi_detach_req_t) #define LMI_ENABLE_REQ_SIZE sizeof(lmi_enable_req_t) #define LMI_DISABLE_REQ_SIZE sizeof(lmi_disable_req_t) #define LMI_OK_ACK_SIZE sizeof(lmi_ok_ack_t) #define LMI_ERROR_ACK_SIZE sizeof(lmi_error_ack_t) #define LMI_ENABLE_CON_SIZE sizeof(lmi_enable_con_t) #define LMI_DISABLE_CON_SIZE sizeof(lmi_disable_con_t) #define LMI_ERROR_IND_SIZE sizeof(lmi_error_ind_t) #define LMI_STATS_IND_SIZE sizeof(lmi_stats_ind_t) #define LMI_EVENT_IND_SIZE sizeof(lmi_event_ind_t) typedef struct lmi_opthdr { lmi_ulong level; lmi_ulong name; lmi_ulong length; lmi_ulong status; lmi_uchar value[0]; /* followed by option value */ } lmi_opthdr_t; #define LMI_LEVEL_COMMON '\0' #define LMI_LEVEL_SDL 'd' #define LMI_LEVEL_SDT 't' #define LMI_LEVEL_SL 'l' #define LMI_LEVEL_SLS 's' #define LMI_LEVEL_MTP 'M' #define LMI_LEVEL_SCCP 'S' #define LMI_LEVEL_ISUP 'I' #define LMI_LEVEL_TCAP 'T' #define LMI_OPT_PROTOCOL 1 /* use struct lmi_option */ #define LMI_OPT_STATISTICS 2 /* use struct lmi_sta */ Appendix B SDTI Header File Listing
/* * 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 <sys/ss7/lmi.h>. */ typedef lmi_long sdt_long; typedef lmi_ulong sdt_ulong; typedef lmi_ushort sdt_ushort; typedef lmi_uchar sdt_uchar; #define SDT_PROTO_BASE 48L #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_TXC_TRANSMISSION_REQUEST_IND (-8L - SDT_PROTO_BASE) #define SDT_USTR_FIRST (-8L - SDT_PROTO_BASE) /* * STATE */ #define SDTS_POWER_OFF 0 #define SDTS_IDLE 1 #define SDTS_ABORTED_PROVING 2 #define SDTS_NORMAL_PROVING 3 #define SDTS_EMERGENCY_PROVING 4 #define SDTS_MONITORING_ERRORS 5 #define SDTS_MONITORING 6 /* * FLAGS */ #define SDTF_DAEDT_ACTIVE (1<<0) #define SDTF_DAEDR_ACTIVE (1<<1) #define SDTF_AERM_ACTIVE (1<<2) #define SDTF_SUERM_ACTIVE (1<<3) /* * SDT_RC_SIGNAL_UNIT_IND, M_DATA or M_PROTO */ typedef struct { sdt_long sdt_primitive; /* SDT_RC_SIGNAL_UNIT_IND */ sdt_ulong sdt_count; } 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; /* * SDT_TXC_TRANSMISSION_REQUEST_IND, M_PROTO or M_PCPROTO */ typedef struct { sdt_long sdt_primitive; /* SDT_TXC_TRANSMISSION_REQUEST_IND */ } sdt_txc_transmission_request_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; sdt_txc_transmission_request_ind_t txc_transmission_request_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) #define SDT_TXC_TRANSMISSION_REQUEST_IND_SIZE sizeof(sdt_txc_transmission_request_ind_t) LicenseGNU Free Documentation LicenseGNU FREE DOCUMENTATION LICENSE
Version 1.1, March 2000
Copyright © 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. PreambleThe purpose of this License is to make a manual, textbook, or other written document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
END OF TERMS AND CONDITIONS
How to use this License for your documentsTo use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) year your name. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being list their titles, with the Front-Cover Texts being list, and with the Back-Cover Texts being list. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have no Invariant Sections, write “with no Invariant Sections” instead of saying which ones are invariant. If you have no Front-Cover Texts, write “no Front-Cover Texts” instead of “Front-Cover Texts being list”; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. Glossary
Acronyms
References
Index
Short ContentsTable of Contents
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Last modified: Sat, 01 Nov 2008 14:12:37 GMT © Copyright 1997-2007 OpenSS7 Corporation All Rights Reserved. |