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 1
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 App w\ API kernel UNI NNI UNI NNI PNNI UNI APP SSCOP NNI AAL5 API lib Sigd UNI kernel 2
Signaling Software and GBNSC Jammer NCMO socket socket GSMP Daarder a c d Mux w sd eer a c d sd 23 34 Daarder w sd eer LoMux qw 23 12 sd 23 34 VPVC Mux qw 23 12 sigl PNNel Inel VXT ATriver MP PRoust GBNSC Signaling Control connection Channels ATM Driver … (0, 5) (0, 5) (0, 18) (0, 18) Project Status 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 ☺ Of course, it’s not our mission 3
Demo Setting Zev (Linux w\ ENI) Deak (NetBSD) PNNI PNNI GBNSC GBNSC Demand3 (BSD) Demand5 (BSD) 1 1 UNI 4 3 3 2 UNI 6 Demand1 (Linux, APIC) WUGS1 WUGS2 UNI 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 4
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 5
Linux ATM API – Functions API Name Server Client socket(domain, type, prot) Yes Yes getsockopt(s, level, opt, &optval, optlen) Yes Yes setsockopt(s, level, opt, &optval, optlen) Yes Yes txt2atm(buf, &addr, size, flag) Yes Yes bind(s, &addr, addrlen) Yes Opt listen(s, backlog) Yes accept(s, &addr, &addrlen) Yes connect(s, &addr, addrlen) Yes read/write(s, &buf, bufsize) Yes Yes close(s) Yes Yes Linux ATM API – Connection setup Server Side Client Side bind/ connect accept socket socket 0,5 0,5 listen UNI ATM cloud ATM Connection 6
ATM API – Connection control summary • Connection preparation socket creation ( socket ) set QOS parameter settings with setsockopt set SAP parameter settings with setsockopt ATM API – Connection control summary (cont’d) • Server side • Client side Set local address Optional: Address & binding local side Binding of local side ( bind ) ( bind ) Set remote address SAP registration ( listen ) Connection setup Connection acceptance ( connect ) ( accept ) 7
ATM API – Connection control summary (cont’d) • Data exchange Sending and receiving ( read , write ,…) • Connection teardown Closing ( close ) 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)); 8
Linux ATM API – Code example Different Parts /*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 to_addr.sas_family=AF_ATMSVC bind(s,&addr, sizeof(addr)); ; listen(s, 3); addr.sas_addr.prv[19]=10; m=accept(s,&conn,&connlen); connect(s,&to_addr, rc=read(m, buf, 256); sizeof(to_addr)); write(s, buf, amt); Note: You may also need to bind address in sender side. ATM Address Management 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 9
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 10
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 ) 11
SEAN architecture (contd.) Application Application Application Application API API API API Signaling daemon Signaling daemon Driver Driver ATM cloud 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 12
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) 13
API (contd.) Application Controller Controller Incoming_ Incoming_ Outgoing_ ATM_Service ATM_Service ATM_Call ATM_Call ATM_Call ATM_Interface ATM_Interface Client/Server example Connection Establishment ATM_Service.Register() Outgoing_ATM_Call.Establish() UNI: Setup ( ) v e i c t A _ c e v i r e S Incoming_Call() Server application Signaling daemon Signaling daemon Client application Incoming_ATM _Call.Accept() UNI:Connect Call_Active() k A c _ c t n e n o C I : N U ( ) e i v c t A _ a l l C Network 14
Client/Server example Data transfer & Tear down ATM_Call.SendData() Data Server application Incoming_Data() Signaling daemon Signaling daemon Client application + ATM_Call.RecvData() ATM_Call.Teardown() UNI: Release Call_Inactive() UNI: Release comp Call_Inactive() ATM_Service.Deregister() Service_Inactive() Network Skeleton code Service registration Server side Client side 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 } 15
Recommend
More recommend