From 456fccf6970b25c9a67ab0cf9263888858c17bd6 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 26 Feb 2013 10:54:19 +0100 Subject: doc: Create a documentation on the SCCP/lite implementation we have Describe how we handle/dispatch SCCP messages in the osmo-bsc. --- openbsc/doc/ipa-sccp.txt | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 openbsc/doc/ipa-sccp.txt (limited to 'openbsc/doc/ipa-sccp.txt') diff --git a/openbsc/doc/ipa-sccp.txt b/openbsc/doc/ipa-sccp.txt new file mode 100644 index 000000000..5d6719e98 --- /dev/null +++ b/openbsc/doc/ipa-sccp.txt @@ -0,0 +1,94 @@ + +IPA SCCP message flow in the BSC + +February, 2013 Holger Hans Peter Freyther + +CONTENTS + +1. SCCP inside the IPA header +2. Supported SCCP message types +3. Receiving SCCP messages +4. Sending SCCP messages + + +1. SCCP inside the IPA header + +Many Soft-MSCs implement something that is called SCCP/lite. This means +that SCCP messages are transported inside a small multiplexing protocol +over TCP/IP. This is an alternative to a full SIGTRAN implementation. + +The multiplexing protocol is the same as used with the sysmoBTS and the +ip.access nanoBTS. It is a three byte header with two bytes for the length +in network byte order and one byte for the type. The type to be used for +SCCP is 0xFD. + + struct ipa_header { + uint16_t length_in_network_order; + uint8_t type; + } __attribute__((packed)); + + + +2. Supported SCCP message types + +To implement GSM 08.08 only a subset of SCCP messages need to be implemented. +For transporting paging and reset messages SCCP UDT messages are used. For +the connections with a Mobile Station (MS) a SCCP connection is opened. This +means that the SCCP CR, SCCP CC, SCCP CREF, SCCP RLC, SCCP RLSD, SCCP DT1 +and SCCP IT messages are supported. + + +3. Receiving SCCP UDT messages + +This is an illustration of the flow of messages. The IPA multiplexing protocol +is used for various protocols. This means there is a central place where the +multiplexing stream terminates. The stream is terminated in the osmo_bsc_msc.c +file and the ipaccess_a_fd_cb method. For SCCP messages the SCCP dispatching +sccp_system_incoming method is called. This function is implemented in the +libosmo-sccp library. + +To receive UDT messages osmo_bsc_sccp.c:osmo_bsc_sccp_init is using the +sccp_set_read function to register a callback for UDT messages. The callback +is msc_sccp_read and it is calling bsc_handle_udt that is implemented in the +osmo_bsc_bssap.c. This function will handle the GSM 08.08 BSSAP messages. +Currently only the reset acknowledge and the paging messages are handled. + +The BSC currently does not accept incoming SCCP messages and is only opening +SCCP connections to the MSC. When opening a connection the callbacks for state +changes (connection confirmed, released, release complete) are set and a routine +for handling incoming data. This registration is done in the osmo_bsc_sccp.c +file and the bsc_create_new_connection method. The name of the callback is +msc_outgoing_sccp_data and this will call bsc_handle_dt1 that is implemented +in the osmo_bsc_bssap.c file. This will forward the messages to the right +Mobile Station (MS). + + +4. Sending SCCP messages + +There are three parts to sending that will be explained below. The first part +is to send an entire SCCP frame (which includes the GSM 08.08 data) to the +MSC. This is done by first registering the low level sending. sccp_system_init +is called with the function that is responsible for sending a message. The +msc_sccp_write_ipa will call the msc_queue_write function with the data and +the right MSC connection. Below the msc_queue_write the IPA header will be +prepended to the msg and then send to the MSC. + +The BSC supports multiple different A-link connections, the decision to pick +the right MSC is done in this method. It is either done via the SCCP connection +or the ctx pointer. + +When the BSC is starting a BSS RESET message will be sent to the MSC. The reset +is created in osmo_bsc_msc.c:initialize_if_needed and sccp_write is called with +the GSM 08.08 data and the connection to use. The libosmo-sccp library will +embed it into a SCCP UDT message and call the msc_sccp_write_ipa method. + +When a new SCCP connection is to be created the bsc_create_new_connection +in the osmo_bsc_sccp.c file. The sccp_connection_socket method will create +the context for a SCCP connection. The state and data callback will be used +to be notified about data and changes. Once the connection is configured the +bsc_open_connection will be called that will ask the libosmo-sccp library to +create a SCCP CR message using the sccp_connection_connect method. For active +connections the sccp_connection_write method will be called. + + + -- cgit v1.2.3