SDL_UDP(8)

NAME
sdl_udp - SDL emulation using User Datagram Protocol (UDP)

SYNOPSIS
#include <sys/streams.h>
#include <ss7/sdli.h>
#include <ss7/sdli_ioctl.h>

fd = open("/dev/ss7-sdludp0", flags);
ret = ioctl(fd, cmd, ... /* arg */ );

DESCRIPTION

SDL_UDP emulates a Signalling Data Link using a Linux kernel UDP socket to emulate the physical communications channel. Because a UDP communications channel does not exhibit the lower level characteristics of a real communications data link, and because certain line conditions (such as loss of sychronization with flags) are not applicable to the emulation, the emulation is not complete.

The purpose of the SDL_UDP is to provide sufficient simulation of a real signalling link to permit testing and experimentation with the OpenSS7 protocol stack. SDL_UDP permits quick and easy configuration of simulated signalling links between multiple hosts and permits the formation of complicated networks over an Ethernet LAN.

In every other respect, SDL_UDP is equivalent to a real Signalling Data Link device driver and can be configured and used in conjunction with the other modules and protocol layers within the OpenSS7 stack just as any other SDLI driver.

  STREAMS Interfaces

The STREAMS interface provided by the SDL_UDP driver conforms to the Signalling Data Link Interface (SDLI) as detailed in sdli(7), the Local Management Interface (LMI) as detailed in lmi(7) and the Device Control Interface (DEVI) as detail in devi(7).

  Module

SDL_UDP is provided by the streams-sdludp kernel module. This module and modules upon which it depends is automatically loaded when the /dev/ss7-sdludp0 device is opened in a properly configured system. There should be an entry in the /etc/conf.modules or /etc/modules.conf file such as:

    alias char-major-252 streams-sdludp # driver ss7 sdl udp

Where 252 is the character device major number of the /dev/ss7-sdludp0 device special file.

The streams-sdludp module is compatible with OpenSS7 upper layer modules and can push the streams-sdt and streams-sl modules.

  Operation

SDL_UDP is a Signalling Data Link Interface sdli(7) compliant driver which emulates an SS7 signalling link using Linux UDP sockets. It includes traffic shaping algorithms which limit the effective ABR to a user-specified rate. Because the driver is unable to detect frame errors, signal unit and framing errors will never be reported to the SUERM/AERM or EIM. Recommended traffic shaping rates are 56 kbps, 64 kbps, 1.544 Mbps and 2.0 Mbps. The driver uses FISU/LSSU compression schemes on both sides of the connection to avoid sending duplicate FISU/LSSUs except in two cases: LSSU SIB are always sent when requested, and the first two LSSU SINs or SIEs are sent to trigger movement of the L2 state machines from proving to alignment.

PROTOCOL INTERFACE

SDL_UDP supports the Signalling Data Link Interface (SDLI) as detailed in sdli(7). SDL_UDP supports both M_PROTO and M_PCPROTO requests and indications using the putmsg(2) and getmsg(2) system calls.

  Configuration

SDL_UDP supports all protocol variants and options. Line based errors case will not be reported (because they are not reported to the UDP socket unless it represents socket failure). Level 2 state machines are left repsonsible to determine whether packets have been mis-sequenced or lost.

Because SDL_UDP does not perform line synchronization, the setting of N (the number of octets per SU during octet-counting mode) has no effect on state machine operation. The setting of m (the maximum SIF size) is respected as long as it is less than the MTU of the UDP socket.

  State

As it does not monitor line sychnronization, SDL_UDP will never enter octet-counting mode.

  Statistics

Because SDL_UDP only emulates the line, some statistics with respect to line synchronization and errors will not be pegged.

  Primitives

SDL_UDP supports the complete set of Protocol Service Primitives which are described in detail in sdli(7).

LOCAL MANAGEMENT INTERFACE

SDL_UDP supports the Local Management Interface (LMI) as detailed in lmi(7). SDL_UDP supports both M_PROTO and M_PCPROTO requests and indications using the putmsg(2) and getmsg(2) system calls.

  PPA Addressing

SDL_UDP is a Style 2 driver which must be attached to a communications channel before it is enabled. The format of the Point of Physical Appearance (PPA) address is a pair of IP addresses and port numbers which form a local and a remote UDP address in a structure such as follows:

    typedef struct ppa {
        struct sockaddr_in loc;
        struct sockaddr_in rem;
    } ppa_t;

Local and remote addresses are established by using this PPA address in the LMI_ATTACH_REQ for a Style 2 driver as documented in lmi(7). This PPA address will also be returned in response to a LMI_INFO_REQ request.

The local address and port and the remote address and port must be agreed upon by both sides of the connection through some other mechanism (i.e, static configuration, management system). The local side of the connection will be prepared to both transmit and recieve packets starting after the LMI_ENABLE_REQ has been confirmed.

  Errors

The only Local Management Interface errors which are reported by SDL_UDP are as follows:

LMI_BADPPA

LMI_INITFAILED

DEVICE CONTROL INTERFACE

SDL_UDP supports the Device Control Interface (DEVI) as detail in devi(7). SDL_UDP only supports I_STR IOCTLs as described in streamio(2) and does not support transparent IOCTLs.

  IOCTLS

The following DEVI IOCTLs are applicable to SDL_UDP:

DEV_IOCGIFTYPE, DEV_IOCSIFTYPE
    Gets or sets the interface type. Only the DEV_TYPE_PACKET interface type is valid for SDL_UDP.

DEV_IOCGGRPTYPE, DEV_IOCSGRPTYPE
    Gets or sets the interface group type. Only the DEV_GTYPE_UDP interface group type is valid for SDL_UDP.

DEV_IOCGIFMODE, DEV_IOCSIFMODE
    Gets or sets the interface mode. Only the DEV_GTYPE_PEER interface mode is valid for SDL_UDP.

DEV_IOCGIFRATE, DEV_IOCSIFRATE
    Gets or sets the interface rate. SDL_UDP accepts bit rates in the range from 800 bps to 10 Mbps. The default rate is 1.544 Mbps. Changing the interface rate changes traffic shaper parameters to effect the new shaped effective bit rate.

DEV_IOCGIFCLOCK, DEV_IOCSIFCLOCK
    Gets or sets the interface clocking. Only the DEV_CLOCK_SHAPER interface clocking is valid for SDL_UDP.

DEV_IOCGIFCODING, DEV_IOCSIFCODING
    Gets or sets the interface bit coding. Only the DEV_CODING_NONE interface bit coding is valid for SDL_UDP.

DEV_IOCGIFLEADS, DEV_IOCSIFLEADS, DEV_IOCCIFLEADS
    Gets or sets the interface leads. These controls have no effect on SDL_UDP.

DEV_IOCCDISCTX, DEV_IOCCCONNTX
    Disconnects or connects the transmit path. For SDL_UDP this merely suppresses and reestablishes the delivery of packets and does not perform a shutdown on the write side of the Linux UDP socket.

DEV_PRIVATE
    There are no device private IOCTLs for SDL_UDP.

CAVEATS

SDL_UDP was never intended to be used as, or in conjunction with, a real SS7 signalling network. It is intended for laboratory use and experimentation only. SDL_UDP makes no attempt to perform all of the Level 2 functions of SS7. It is mostly intended as a simple way of providing a large number of L2 links for testing upper level protocol modules (such as MTP).

SEE ALSO

devi(7), getmsg(2), ioctl(2), lmi(7), mtpi(7), putmsg(2), read(2), sdti(7), sl(8), sl(8), sli(7), slsi(7), ss7d(8), streamio(2), write(2)

BUGS

No known bugs.

AUTHOR

Brian F. G. Bidulock, <bidulock@openss7.org>

HISTORY

This STREAMS interface for SS7 is an original part of the OpenSS7 package.

REFERENCES

[Q702] | ITU-T Rec. Q.702 Signalling Data Link
[Q703] | ITU-T Rec. Q.703 Signalling Link
[Q704] | ITU-T Rec. Q.704 Message Transfer Part

COPYRIGHT NOTICE

Copyright © 1997-2001 Brian Bidulock. All Rights Reserved.

PERMISSION NOTICE

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copyring, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damage resulting from the use of the information contained herein. The author(s) may not have taken the same level of care in the production of this manual, which is licensed free of charge, as they might when working professionally.

Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work.