ATM Signaling Project ARL Washington University Dakang Wu - - PDF document

atm signaling project
SMART_READER_LITE
LIVE PREVIEW

ATM Signaling Project ARL Washington University Dakang Wu - - PDF document

ATM Signaling Project ARL Washington University Dakang Wu dakang@arl.wustl.edu Hui Shen shen@arl.wustl.edu Jeyashankher Ramamirtham jai@arl.wustl.edu Outline ATM signaling project overview Project current status Demo setting


slide-1
SLIDE 1

1

ATM Signaling Project

ARL Washington University Dakang Wu dakang@arl.wustl.edu Hui Shen shen@arl.wustl.edu Jeyashankher Ramamirtham jai@arl.wustl.edu

Outline

  • ATM signaling project overview
  • Project current status
  • Demo setting
  • How to use signaling on Linux (Hui)
  • How to use signaling with SEAN (Jai)
  • Future work
slide-2
SLIDE 2

2

Project Overview

  • Started August 1999
  • Team members

– Dakang Wu – Hui Shen – Jeyashankher Ramamirtham – Jon Turner and John DeHart

  • Use existing software as much as possible

– Current UNI/NNI is built on NRL’s SEAN/PROUST signaling software simulation package – Linux-ATM

Project Overview

UNI UNI UNI NNI NNI NNI

AAL5 SSCOP PNNI kernel App w\ API UNI Sigd API lib APP kernel

slide-3
SLIDE 3

3

Signaling Software and GBNSC

ATM Driver

GSMP Control connection Signaling Channels (0, 5) (0, 18) (0, 5) (0, 18) Jammer socket NCMO socket

a c d w sd eer sd 23 34 qw 23 12

MP VXT GBNSC PRoust

Daarder Mux LoMux VPVC Mux sigl PNNel Inel ATriver Daarder a c d w sd eer sd 23 34 qw 23 12

We will soon release:

  • PNNI v.01

– It can talk to either Linux ATM or SEAN – P-to-p only – Simple admission control

  • GBNSC with GSMP support
  • SEAN (NRL version of UNI)
  • Linux 2.4.x

Project Status

☺ Of course, it’s not our mission

slide-4
SLIDE 4

4

Demo Setting

3 3 GBNSC PNNI GBNSC PNNI 1 1 WUGS1 WUGS2 UNI UNI UNI Deak (NetBSD) Zev (Linux w\ ENI) Demand5 (BSD) Demand3 (BSD) Demand1 (Linux, APIC) 6 4 2

Future Work

  • Work on p-to-mp
  • More sophisticated admission control
  • Support more QOS modules
  • Ilmi, Arp support
  • More application examples
  • Integrated with Multi-Service Router
slide-5
SLIDE 5

5

ATM on Linux

Features

  • Support UNI 3.0 and 3.1 unicast signaling,

Partially support UNI 4.0

  • Limited support for point-to-multipoint

Only works as a single leaf of a p2mp tree

  • Support various ATM NICs

Check http://icawww1.epfl.ch/linux-atm/info.html

  • Support IP over ATM, LANE, ANS, etc.
  • Now included in Linux 2.4.x

ATM Subsystem Information in Linux

Check status in /proc/net/atm

  • devices: lists all active ATM devices

Interface# Type MAC Address Statistics

  • File for individual ATM device

Named as: <type>:<number> (e.g. eni:0)

  • pvc & svc

List all PVC and SVC sockets and their information

slide-6
SLIDE 6

6

Yes Yes Yes Opt Yes Yes Yes Yes Client close(s) read/write(s, &buf, bufsize) connect(s, &addr, addrlen) accept(s, &addr, &addrlen) listen(s, backlog) bind(s, &addr, addrlen) txt2atm(buf, &addr, size, flag) setsockopt(s, level, opt, &optval, optlen) getsockopt(s, level, opt, &optval, optlen) socket(domain, type, prot) API Name Yes Yes Yes Yes Yes Yes Yes Yes Yes Server

Linux ATM API – Functions

Server Side Client Side

0,5 0,5

connect bind/ listen socket socket

Linux ATM API – Connection setup

ATM cloud accept UNI ATM Connection

slide-7
SLIDE 7

7

  • Connection preparation

socket creation (socket) set QOS parameter settings with setsockopt set SAP parameter settings with setsockopt

ATM API – Connection control summary

  • Server side

Set local address Binding of local side (bind) SAP registration (listen) Connection acceptance (accept)

  • Client side

Optional: Address & binding local side (bind) Set remote address Connection setup (connect) ATM API – Connection control summary (cont’d)

slide-8
SLIDE 8

8

  • Data exchange

Sending and receiving (read, write,…)

  • Connection teardown

Closing (close) ATM API – Connection control summary (cont’d) Linux ATM API – Code example

Common Part: (Server & Client) /*create socket*/ s=socket(PF_ATMSVC,SOCK_DGRAM,ATM_AAL5) /*set QoS */ qos.txtp.traffic_class=ATM_CBR; qos.txtp.min_pcr=MIN_PCR; qos.txtp.max_pcr=MAX_PCR; qos.txtp.max_sdu=SDU; qos.txtp.max_cdv=CDV; qos.aal=ATM_AAL5; qos.rxtp.traffic_class=ATM_NONE; (same as qos.txtp) setsocketopt(s,SOL_ATM,SO_ATMQOS,&qos,sizeof(qos)) /*set SAP*/ sap.blli[0].l2_proto = ATM_L2_ISO8802; sap.blli[0].l3_proto = ATM_L3_NONE; setsockopt(s, SOL_ATM, SO_ATMSAP,&sap,sizeof(sap));

slide-9
SLIDE 9

9

to_addr.sas_family=AF_ATMSVC ; addr.sas_addr.prv[19]=10; connect(s,&to_addr, sizeof(to_addr)); write(s, buf, amt);

Linux ATM API – Code example

Different Parts

bind(s,&addr, sizeof(addr)); listen(s, 3); m=accept(s,&conn,&connlen); rc=read(m, buf, 256);

Note: You may also need to bind address in sender side.

/*set address */ text2atm(txt, &addr, sizeof(addr),T2A_SVC|T2A_NAME); addr.sas_family=AF_ATMSVC; addr.sas_addr.prv[19]=10;

Server Side Client Side

Name service

  • Use local configure file: /etc/hosts.atm

– Format: numeric_address host name – Numeric address:

Now we use

13-byte net addr 6-byte MAC addr 0x00

– Manage address Use command atmaddr

2)

Use ilmid, automatic name configuration, ANS needed

ATM Address Management

slide-10
SLIDE 10

10

Documentation Some very useful websites:

  • ARL signaling group homepage

http://www.arl.wustl.edu/arl/projects/sig/

  • ATM on Linux homepage:

http://icawww1.epfl.ch/linux-atm

  • Linux ATM API doc

ftp://icaftp.epfl.ch/pub/linux/atm/api/

  • ATM on Linux mailing list

majordome@lrc.di.epfl.ch

SEAN (Signaling Entity for ATM Networks )

  • Developed by Navy Research Laboratory (NRL)
  • Originally, developed for FORE systems and simulation
  • UNI 4.0 implementation
  • User space implementation
  • Extensible environment (C++)
  • Compiles and runs on SunOS 5.x (Solaris), SunOS 4.x, Linux 2.x and

NetBSD 1.3.x

  • We have tested on NetBSD 1.4.1 and Linux 2.4.0
slide-11
SLIDE 11

11

Features

  • Features that work

– Point-to-point calls – Signaling of QoS parameters

  • Features that SEAN claims to support

– Point to multipoint calls – Leaf initiated join – ATM anycast – ABR signaling for point to point calls

SEAN architecture

  • Live signaling daemon (SD)
  • Application programming interface (API)
  • Driver
  • Address registration daemon (ILMID)
  • Simulated signaling daemon (SIM)
slide-12
SLIDE 12

12

SEAN architecture (contd.)

ATM cloud

Signaling daemon Driver Driver Signaling daemon Application Application Application Application API API API API Signaling path Data path

The live signaling daemon (SD)

Implemented as a 6 layer stack

  • driver interface
  • QSAAL layer (SSCOP and SSCF)

– reliable transport for signaling messages

  • signaling layer (Q.2931, Q.2971 and UNI-4.0)
  • service registration layer

– application specification of call profiles to be matched with incoming calls

  • call control layer
  • API interface layer

– IPC for signaling sessions between SD and applications

slide-13
SLIDE 13

13

Application Programming Interface (API)

  • Based on a Call-back model, i.e. call-back functions are used to report

network events to the application

  • Call-back functions are atomic operations
  • Five kinds of API objects:

– ATM_Interface – ATM_Service – ATM_Call – Controller – ATM_Leaf

  • ATM_Service and ATM_Call objects have ATM_Attributes

corresponding to UNI Information Elements that can be set by the application.

Controller Call-backs

  • The various call-backs

– Service_Active(ATM_Service) – Service_Inactive(ATM_Service) – Call_Active(ATM_Call) – Call_Inactive(ATM_Call) – Incoming_Call(ATM_Service) – Incoming_Data(ATM_Call) – PeriodicCallback() – Incoming_LIJ(ATM_Call) – Incoming_Call_From_Root(Leaf_Initiated_ATM_Call)

slide-14
SLIDE 14

14

API (contd.)

Application Controller

ATM_Service ATM_Service Incoming_ ATM_Call Incoming_ ATM_Call ATM_Interface

Controller

ATM_Interface Outgoing_ ATM_Call

Client/Server example Connection Establishment

Server application Signaling daemon Signaling daemon Client application

ATM_Service.Register() S e r v i c e _ A c t i v e ( ) Outgoing_ATM_Call.Establish() UNI: Setup Incoming_Call() Incoming_ATM _Call.Accept() UNI:Connect Call_Active() U N I : C

  • n

n e c t _ A c k C a l l _ A c t i v e ( )

Network

slide-15
SLIDE 15

15

Client/Server example Data transfer & Tear down

Server application Signaling daemon Signaling daemon Client application

ATM_Call.SendData() Data Call_Inactive() Incoming_Data() + ATM_Call.RecvData() ATM_Call.Teardown() UNI: Release UNI: Release comp Call_Inactive() ATM_Service.Deregister() Service_Inactive()

Network

Skeleton code

Service registration ServerController::Boot() { ATM_Service *service; … // Set service attributes service->Set_aal_5(…); service->Set_called_party_num(..); … // Register service service->Register(); … } ServerController::Service_Active() { // The service has been registered } Server side Client side

slide-16
SLIDE 16

16

Skeleton code

Connection Establishment ServerController::Incoming_Call() { // An incoming call Incoming_ATM_Call *call; call = service- >Get_Incoming_Call(); // Accept this call call->Accept(); } ServerController::Call_Active() { // Connection Established } ClientController::Boot() { Outgoing_ATM_Call *call; // Set attributes call->Set_aal_5(); … // Establish connection call->Establish(); } ClientController::Call_Active() { // Connection has been established } Server side Client side

Skeleton code

Data Sending/Receiving

ServerController::….() { u_char *buf; u_long lengthOfData; … // Send data to the peer call->SendData(buf, lengthOfData); } ClientController::IncomingData() { u_char *buf; u_long lengthOfData; … // Send data to the peer call->RecvData(buf, lengthOfData); } Server side Client side

slide-17
SLIDE 17

17

Skeleton code

Connection Tear-down and deregistration

ServerController::Call_Inactive() { // Connection closed by the peer host } ServerController::……() { // Deregister the service service->Deregister(); } ServerController::Service_Inactive() { // Indicates successful deregistration } Server side Client side ClientController::….() { // Teardown the call call->Teardown(); } ClientController::Call_Inactive() { // Indicates successful tear down }