Technická zpráva projektu 519/2014
Pilotní projekt využití infrastruktury sdružení CESNET pro akademickou experimentální mobilní síť
Datum: Autor: Kontakt:
září 2015 Ing. Martin Mikulec
[email protected]
Obsah Úvod ........................................................................................................................................... 2 OpenBTS projekt........................................................................................................................ 2 OpenBTS mobilní síť ................................................................................................................. 3 Instalace OpenBTS mobilní sítě ................................................................................................. 6 Měření kvality hovoru v budově N na katedře telekomunikační techniky v Ostravě ................ 6 Měření kvality hovoru v otevřeném prostoru ............................................................................. 9 Mobilní měřicí stanice .......................................................................................................... 10 Výsledky měření .................................................................................................................. 10 Konvergence mezi OpenBTS a OpenIMS projekty ................................................................. 12 Výsledky laboratorního měření ............................................................................................ 13 Vytvoření experimentální mobilní sítě mezi VŠB-TU Ostrava a ČVUT Praha ...................... 16 Výsledky měření kvalitativních parametrů sítě NREN mezi laboratoří IP telefonie v Ostravě a ČVUT Praha. ..................................................................................................... 16 Doplňkové aktivity projektu..................................................................................................... 18 Doplňková aktivita I. – Vliv transkódovaní na kvalitu hovoru ............................................ 18 Doplňková aktivita II. – Zprovoznění LTE technologie na USRP B210............................. 20 Příloha - Instalace OpenBTS stanice ........................................................................................ 22 Příloha - Instalace OpenIMS .................................................................................................... 27 Skript pro vkládání uživatelů do systému OpenBTS ............................................................... 32
1
Úvod Svět mobilních sítí a jejich infrastruktury je v dnešní době reprezentován de facto uzavřenými, komplexními systémy, které spolu komunikují prostřednictvím protokolů navrženými před příchodem Internetu. Architektura těchto systémů prošla téměř 40 letým vývojem a je zaměřena na konkrétní specifickou práci. Avšak dny uzavřených, proprietárních řešení postavených na specifickém hardware jsou již nekompromisně sečteny a otevírá se prostor pro nové inovace v oblasti mobilních sítí a infrastruktury. Tato změna je možná díky nástupu otevřených protokolů a Internetu obecně. Mostem mezi oběma světy je projekt OpenBTS, který vznikl mimo jiné díky uvolnění zdrojových kódů kodeku GSM používaného v mobilních sítích. OpenBTS přináší konverzi z bezdrátového radiového rozhraní do IP protokolů, umožňuje tak komukoliv s IP konektivitou realizovat mobilní síť. Kombinace OpenBTS a softwarově řízeného rádia mění způsob, jakým můžeme nahlížet na mobilní sítě. Tato technologie umožňuje konstrukci komplexních rádiových sítí čistě na software. Testovaná GSM infrastruktura byla vybudována na Universal Software Radio Peripheral (USRP N210) hardware od Ettus Research ™ v kombinaci s Daughterboard WBX. Po zprovoznění celé platformy byly provedeny kvalitativní testy jak v prostředí uvnitř budovy, tak v otevřeném prostoru. Dalším logickým krokem bylo propojení naši BTS stanice s okolním světem. Jakožto potenciálního VoIP poskytovatele jsme si zvolili projekt OpenIMS, který jsme s BTS stanicí propojili pomocí SIPové trunk linky. Tuto linku jsme v laboratorních podmínkách testovali a zjišťovali, jaké síťové parametry jsou nutné k zabezpečení dostatečně kvalitního provozu mezi OpenBTS a OpenIMS platformami. Jakmile jsme tyto parametry určili, nasadili jsme tyto projekty jak v laboratoři v Ostravě tak v laboratoři v Praze a navzájem je propojili prostřednictvím sítě NREN. Měřením byla prokázána dostatečná kapacita a vhodné kvalitativní parametry sítě NREN pro zajištění kvalitní hlasové služby mezi GSM telefony a SIPovými terminály v Ostravě a Praze.
OpenBTS projekt Samotný OpenBTS projekt je tvořen několika aplikacemi, které dohromady zajišťují plnou funkcionalitu BTS stanice. Jedná se o následující aplikace s popisem jejich účelu: OpenBTS – samotná OpenBTS aplikace, která obsahuje implementaci GSM stacku fungujícím nad radiomodemem. Transceiver – software radiomodemu a rozhraní pro kontrolu hardware SMQueue – RFC-3428 server pro příjem a posílání textových SMS zpráv Asterisk – softwarově definovaná pobočková ústředna SIPAuthServe – aplikace obsahující databázi registrovaných uživatelů OpenBTS je program napsaný v C++, který implementuje GSM stack. Jakoukoliv další funkci je tedy možné doplněním software přidat. Odstraňuje tak problém s přístupem do uzavřených řešení s každou novou změnou. OpenBTS aplikace obsahuje: L1 TDM funkce (GSM 05.02) L1 FEC funkce (GSM 05.03) L1 kontrolu napájení uzavřených smyček a časování (GSM 05.08 a GSM 05.10) 2
L2 LAPDm (GSM 04.06) L3 řízení rádiových zdrojů (GSM 04.08) L3 GSM – SIP bránu pro řízení mobility L3 GSM – SIP bránu pro řízení hovorů L4 GSM – SIP bránu pro textovou komunikaci
Transceiver aplikace poskytuje funkce radiomodemu a řídí USB rozhraní pro propojení s USRP. SMQueue aplikace poskytuje posílání krátkých zpráv (SMS) mezi koncovými zařízeními. Asterisk zprostředkovává řízení hovorů, které by bylo normálně realizované prostřednictvím MSC (Mobile Switching Center) v konvenčních mobilních sítích. Hovory je možné směrovat také do jiných připojených IP sítí. SIPAuthServe je aplikace implementující Subscriber Registry, databázi informací o uživatelích. Tato databáze nahrazuje jak registrace v Asterisku, tak GSM Home Location Register (HLR) v konvenčních mobilních sítích. Aplikace mezi sebou komunikují prostřednictvím IP sítě a otevřených protokolů dle schématu níže.
Obrázek 1 - Schéma OpenBTS projektu
OpenBTS mobilní síť Tradiční mobilní síť, jak byla v průběhu vývoje mnoha let vyvíjena, se skládá z mnoha komponent a rozhraní, které zajišťují kompletní funkcionalitu mobilní sítě. Jak ukazuje Obrázek 2, koncové zařízení (Handset nebo Modem) jsou pomoci Um rozhraní připojena k BTS stanici. Jednotlivé BTS stanice jsou řízeny pomocí BSC (Base Station Controller) a dále MSC (Mobile Switching Center). Informace o uživatelích jsou uchovávány buď v Home Location Database nebo Visitor Location Database a kromě toho v síti nalezneme různé brány pro připojení do veřejné telefonní sítě nebo do Internetu. 3
Obrázek 2 - Schéma tradiční mobilní sítě
Na rozdíl od tradičního GSM schématu je schéma OpenBTS mobilní sítě značně zjednodušeno. Z radiové části zůstává Um rozhraní mezi koncovým zařízením a rádiovým vysílačem, zbytek sítě už je postaven na IP protokolu a dalších aplikačních protokolech SIP (Session Initiation Protocol) pro signalizaci nebo RTP (Real Time Protocol) pro přenos multimédií (hlasu).
Obrázek 3 - Schéma OpenBTS mobilní sítě
4
K vytvoření vlastní sítě je kromě OpenBTS projektu potřeba hardware, na kterém je celá stanice postavena. Naši BTS stanici jsme realizovali na následujícím hardware PC s operačním systémem Linux (Ubuntu Server 12.04 LTS) – aplikace jsou psány především pro x86 architekturu s 32-bitovým procesorem, kde dosahují nejlepších výsledků. Obecně se (pro 7 současných hovorů) doporučuje minimálně Intel i5 procesor nebo jiný podobného výkonu a 2 GB RAM paměti. Dále musí obsahovat buďto 1 Gbps síťové rozhraní nebo USB 3.0 rozhraní k propojení s USRP. USRP N210 – softwarově definované rádio je klíčovou komponentou k vytvoření BTS stanice z hardwarového pohledu. Výrobcem zařízení byl Ettus Research ™ , který byl v nedávné době koupen firmou National Instruments. USRP je postaveno na FPGA modulu Xilinx Spartan 3A-DSP 3400 a jeho aktuální cena i s příslušenstvím se na trhu pohybuje okolo 60 tis. Kč
Obrázek 4 - USRP N210
Daughterboard WBX – modul do USRP pro řízení kanálů rádia s následujícími parametry o Provozní rozsah 50 – 2200 MHz Rx/Tx o Až 100 mW vysílací výkon o Vhodný pro pozemní a námořní komunikaci, BTS stanice (800 MHz, 900 MHz, 1800 MHz, 1900 MHz), vysílání v amaterském pásmu popř. televizním pásmu Antény v příslušenství Mobilní telefony nebo modemy – standardní koncová zařízení fungujících v GSM pásmech 800 MHz, 900 MHz, 1800 MHz, 1900 MHz SIM karty – běžné SIM karty popř. speciální nebrandované SIM karty Software o Linux o Gnu Radio o OpenBTS 5
Na obrázku 5 je zobrazeno schéma mobilní sítě z pohledu použitého hardware. Signál z koncového zařízení UE (User Equipment) je zachycen přijímací anténou USRP. Signál je poté demodulován a kódován do digitální podoby. FPGA modul poté zajistí časování a vzorkování samotného hlasu a ten je prostřednictvím USB rozhraní poslán do PC, kde jej zpracuje ústředna Asterisk a ta se postará o následné směrování hovoru do cíle. Opačnou cestou putuje hlas z Asterisku do koncového zařízení.
Obrázek 5 - USRP schéma
Instalace OpenBTS mobilní sítě Instalaci OpenBTS stanice je věnována samostatná kapitola v příloze technické zprávy, a to z důvodu velkého rozsahu stran, které samotná instalace zahrnuje. Obecně lze instalaci popsat v následujících krocích, které jsou podrobně rozepsány v příloze: 1. Instalace náležitých knihoven do systému Linux 2. Stažení zdrojových souborů OpenBTS projektu 3. Instalace aplikací zajišťující chod OpenBTS platformy 4. Propojení jednotlivých aplikací zajišťující chod OpenBTS platformy 5. Konfigurace parametrů OpenBTS stanice 6. Přidání uživatelů pro koncová zařízení 7. Spuštění OpenBTS stanice a otestování spojení mezi koncovými zařízeními
Měření kvality hovoru v budově N na katedře telekomunikační techniky v Ostravě Po úspěšné realizaci hovoru mezi dvěma připojenými mobilními telefony včetně posílání SMS zpráv jsme zkoumali, jaká je vzdálenost od vysílače, odkud lze ještě hovor realizovat. Určili jsme 5 míst v budově, odkud proběhlo měření síly signálu (RSSI) a poté byl realizován hovor 6
mezi dvěma telefony. Hovor byl po skončení nejprve ohodnocen subjektivně pomocí DTMF volby a poté byl původní i degradovaný hlasový záznam podroben hodnocení kvality hovoru pomocí metody PESQ. Cihlové stěny, dveře a ostatní komponenty budovy N brání v šíření signálu GSM sítě. Každé z měřících stanovišť (MP1-5) je zakresleno v půdorysu budovy N na obrázku 6.
Obrázek 6 - Půdorys rozestavených měřících stanovišť budovy N
Síla GSM signálu, který se šířil v přízemí budovy N je znázorněn na obrázku 7. Dle obrázku 7 je čitelné značné rušení GSM signálu zdmi v okolí vysílače a jeho omezený rozsah pokrytí.
Obrázek 7 - Síla GSM signálu v přízemí budovy N
7
Obrázek 8 - Měření síly signálu pomocí měřících zařízení TEMS pocket
Výsledky měření prokázaly značně omezenou použitelnost systému v budově, reálná použitelnost byla pouze v laboratoři a blízkém okolí, což je však pozitivní výsledek z toho důvodu, že našim signálem tolik nerušíme okolní mobilní sítě a jejich uživatele. Kvalitu hovoru ve stupnici MOS prezentuje obrázek 9 a 10. Rozdíl mezi nimi je v metodice měření. Obrázek 9 ukazuje výsledky měření pomocí metody PESQ – čili matematického modelu srovnávání originálního a degradovaného signálu.
Obrázek 9 - Měření kvality hovoru pomocí metody PESQ
8
Obrázek 10 ukazuje výsledky měření pomocí subjektivního hodnocení hovoru také ve stupnici MOS po skončení hovoru.
Obrázek 10 - Měření kvality hovoru subjektivní metodou
Měření kvality hovoru v otevřeném prostoru K měření kvality hovoru v otevřeném prostoru bylo využito jak měřicích zařízení TEMS, tak vlastního měřicího zařízení dlouhodobě vyvíjeného v laboratoři IP telefonie. Zatímco TEMS je komerční produkt instalovaný jako aplikace do mobilního telefonu, naše měřicí zařízení je postaveno na opensource nástrojích. Mobilní BTS stanici jsme tedy instalovali do otevřeného prostoru v areálu VŠB v Ostravě, napojili ji na elektrocentrálu a spustili. Do automobilu jsme umístili měřicí stanici, která nám generovala testovací hovory skrze naši síť a zaznamenávala výsledky do tabulky, kterou jsme následně po skončení měření vyhodnocovali. Měření probíhalo ve zvětšující se vzdálenosti od vysílače a bylo opakováno pro různý počet současných hovorů.
Obrázek 11 - Měření kvality BTS stanice v otevřeném prostoru
9
Mobilní měřicí stanice Měřicí stanice byla implementována na energeticky nízko náročném embedded zařízení, což nám zaručilo možnost kompletního napájení zařízení přímo z automobilu a tím maximální mobilitu měřicí stanice. Měřící stanice se skládá z embedded zařízení, na kterém je nainstalován operační systém Linux v distribuci OpenWRT s instalovanou pobočkovou ústřednou Asterisk. K Asterisku jsou připojené 2 ks Huawei K3765 modemů, které slouží jako koncová zařízení pro odesílání a příjem testovacích hovorů skrze naši mobilní BTS síť. O automatické generování hovorů, vyhodnocování výsledků a analýzu dat se stará sada skriptů vytvořených specificky pro účely tohoto měření.
Obrázek 12 - Schéma měřicího zařízení
Výsledky měření Výsledky měření prokázali použitelnost naši mobilní stanice v otevřeném prostoru do vzdálenosti 50 m od vysílače s maximálním zatížením třech současných hovorů. Obrázek 14 ukazuje klesající sílu GSM signálu se vzrůstající vzdáleností od vysílače. Kontrolní měření probíhalo také pomocí TEMS měřicích zařízení – Obrázek 13.
10
Obrázek 13- Měření síly signálu pomocí TEMS měřicích přístrojů
Obrázek 14 - Síla signálu v závislosti na vzdálenosti
Dle teoretických předpokladů kvalita hovoru se vzrůstající vzdáleností od vysílače klesala až do chvíle, kdy byl signál ztracen a hovor nebyl navázán. Měření bylo pro každou vzdálenost opakováno třikrát a naměřené hodnoty byly poté podrobeny regresní analýze, která ukázala trend snižování kvality hovoru v závislosti na zvyšování vzdálenosti od vysílače. Obrázek 16 také ukazuje, že při třech současných hovorech se naše BTS stanice dostává ke svým limitům a není schopna zajistit kvalitní hovory pro více než dva současné hovory se vzrůstající vzdáleností od vysílače.
Obrázek 15 - Měření kvality hovoru pomocí TEMS
Obrázek 16 - Kvalita hovoru se vzrůstající vzdáleností
11
Konvergence mezi OpenBTS a OpenIMS projekty Jakmile jsme OpenBTS stanici otestovali jak uvnitř, tak vně budovy a určili limitní parametry provozu, dalším logickým krokem bylo rozšířit naši mobilní síť o další sítě, které by mezi sebou mohly realizovat hovory. Nejprve však bylo nutné určit požadavky na linku, kterou budou sítě propojeny a to z hlediska parametrů sítě jako šířka pásma, zpoždění signálu a ztrátovost. Zároveň nás zajímalo, jak se na kvalitě služby projeví zabezpečení linky v podobě šifrovaného spojení. V laboratorním prostředí jsme tedy provedli instalaci OpenIMS systému, který jsme propojili s OpenBTS stanicí pomocí SIPového trunku. (Obrázek 17)
OpenBTS Asterisk
Obrázek 17 - Propojení OpenBTS a OpenIMS systémů
Jakmile jsme OpenIMS systém nainstalovali (viz samostatná kapitola Příloha - Instalace OpenIMS), vložili jsme do systému klienta
[email protected], připojili k němu SIP klienta Monster a otestovali hovor na mobilní telefon připojený k OpenBTS stanici pod interním číslem 3000. Stejně tak jsme z mobilního telefonu vytočili číslo 2000, které nás díky nastavení volacího plánu Asterisku spojilo s klientem
[email protected].
Obrázek 18 - Konvergence OpenBTS a OpenIMS systémů
12
Dalším krokem bylo stanovení minimálních požadavků na SIPový trunk propojující obě platformy. Do ideální 100 Mbit/s linky mezi systémy jsme umístili síťový emulátor SIMENA NE 1000, se kterým jsme emulovali degradaci síťových parametrů mezi oběma systémy. SIMENA nám umožnila degradovat šířku přenosového pásma a generovat ztrátovost paketů mezi oběma systémy. Schéma měření znázorňuje Obrázek 19.
Obrázek 19 - Schéma měření SIP trunku
K měření kvality spojení jsme využili stejnou metodu PESQ, jako v přechozích měřeních. Prvním koncovým zařízením připojeným k OpenBTS stanici byl GSM modem ovládaný ústřednou Asterisk. Koncové zařízení (vlevo) po převzetí hovoru přehrálo originální záznam. Tento záznam prošel sítí (USRP N210, OpenBTS systém, SIMENA NE1000, OpenIMS) až k druhému koncovému zařízení (vpravo), kde se degradovaný signál hovoru nahrál. Výsledky laboratorního měření Prvním parametrem, který nás zajímal, byl vliv ztrátovosti paketů na kvalitě hovoru. Bylo realizováno měření kvality hovoru se zvyšující se ztrátovostí paketů, kterou zajišťoval síťový emulátor SIMENA NE1000. Obrázek 20 ukazuje výsledky tohoto měření po lineární regresi a to pro případ, kdy je v SIP trunku nastaven kodek G711 u-law, G711 u-law šifrovaný pomocí symetrického šifrování AES256, kodek GSM a kodek GSM šifrovaný pomocí AES 256.
Obrázek 20 - Vliv ztrátovosti na kvalitě hovoru
13
Výsledky napovídají, že u G711 u-law kodeku se při ztrátovosti větší než 10% kvalita hovoru stává neuspokojivou (< 2.0 MOS). Šifrované spojení je o něco málo náchylnější z důvodu většího overhead paketů. U GSM kodeku můžeme hovořit o neuspokojivé kvalitě přibližně kolem 7% ztrátovosti paketů. Šifrované spojení je o něco málo náchylnější stejně jako u kodeku G711 A-law. Je nutno podotknout, že ztrátovost není většinou jediným faktorem ovlivňujícím výslednou kvalitu hovoru, proto je nutné tyto výsledky brát jako orientační. Druhým parametrem, který nás zajímal, byla náročnost hovoru na šířku pásma uvnitř SIP trunku. Vzhledem k tomu, že propojení mezi OpenBTS a OpenIMS bylo možné pouze pomocí G711 A-law kodeků, zaznamenali jsme podobné nároky na šířku pásma pro oba kodeky. Je to tím, že GSM kodek je na rozhraní OpenBTS transkódován do G711 A-law kodeku. Měření tedy opět proběhlo jak pro samotný G711 A-law kodek, tak pro jeho šifrovanou variantu pomocí AES256, tak pro transkódovaný GSM kodek a jeho šifrovanou variantu pomocí AES256.
Obrázek 21 - Závislost kvality hovoru na šířce pásma - 1 hovor
14
Měření jsme zopakovali také pro 2 současné hovory k potvrzení předpokladů.
Obrázek 22- Závislost kvality hovorů na šířce pásma - 2 hovory
Výsledky ukazují, že jeden hovor vyžaduje přibližně 90 kbit/s pro každý kanál. Šifrované spojení je více náročné na šířku pásma z důvodu většího overhead paketů. Dalším síťovým parametrem, který nám ovlivňuje kvalitu služby, je zpoždění. Vzhledem k tomu, že zpoždění způsobuje pouze časový rozdíl mezi nahrávkami, který metoda PESQ v prvním kroku eliminuje, nebyli jsme schopni touto metodou určit zhoršení kvality. Z tohoto důvodu jsme použili subjektivní metodu měření kvality, která potvrdila doporučení ITU-T G.114, že end-to-end zpoždění do 150 ms je přijatelné pro uspokojivou kvalitu hovoru. Výsledkem našeho měření je tedy následující doporučení na síťové parametry SIP trunku mezi OpenBTS a OpenIMS systémy: Paramter
Value
Note
Šířka pásma – G711 A-law
90 kbit/s pro 1 kanál
Ztrátovost paketů
0 – 10 % G711 A-law
0 – 7 % GSM
Zpoždění
< 150 ms
End-to-end zpoždění
Tabulka 1 - Doporučené parametry sítě
15
90 kbit/s pro odchozí kanál + 90 kbit/s pro příchozí kanál
Vytvoření experimentální mobilní sítě mezi VŠB-TU Ostrava a ČVUT Praha Jakmile byla platforma otestována v laboratoři, přistoupilo se k instalaci řešení také v prostředí ČVUT Praha. Na předpřipravený virtuální stroj byla přenesena instalace OpenIMS systému, bylo vybudováno zabezpečené propojení s OpenBTS systémem v laboratoři v Ostravě prostřednictvím NREN datové sítě a zopakováno kvalitativní měření sítě mezi oběma lokalitami. Vzhledem k používání vlastního DNS serveru bylo možné zachovat stávající interní doménová jména, pouze změnit IP adresy obou serverů. IP adresy jsou záměrně v technické zprávě modifikovány z bezpečnostních důvodů, o přístupové údaje do systému si můžete požádat prostřednictvím emailu
[email protected].
Výsledky měření kvalitativních parametrů sítě NREN mezi laboratoří IP telefonie v Ostravě a ČVUT Praha. Měření bylo realizováno 60 jednotlivými hovory mezi oběma lokalitami. Hovory byly inicializovány šedesátkrát v rozmezí jedné hodiny. Výsledná kvalita hovoru mezi oběma lokalitami se v průměru pohybuje okolo hodnoty 3.0 MOS (2.9995 MOS), maximální hodnota zpoždění hovoru se pohybuje kolem 34 ms (34.347 ms). Obě hodnoty jsou dostačující pro kvalitní provoz této sítě, čili můžeme konstatovat, že síť NREN svými síťovými parametry vyhovuje dané platformě.
16
Kvalita hovoru MOS
MOS
3,5 3 2,5 2 1,5 1 0,5 0 0
10
20
30
40
50
60
Obrázek 23 - Měření kvality hovoru sítě NREN mezi lokalitami Ostrava a Praha
Max Delta
Max. zpoždění (ms) 140 120 100 80 60 40 20 0 0
10
20
30
40
50
60
Obrázek 24 - Měření maxinální hodnoty zpoždění sítě NREN mezi lokalitami Ostrava a Praha
17
Doplňkové aktivity projektu V průběhu řešení projektu jsme se mimo jiné věnovali určitým otázkám, které postupně vyplynuly na povrch a stály za hlubší analýzu. Prvním zastavením byla otázka snižující se kvality hovoru v důsledku transkódování a druhá otázka byla možnost realizace modernějších sítí než GSM na stávající platformě. Následující kapitoly se podrobně těmto aktivitám věnují. Doplňková aktivita I. – Vliv transkódovaní na kvalitu hovoru Přenos hlasu v mobilních sítích je zajišťován prostřednictvím GSM FR kodeku. Ten nabízí dobrý poměr mezi nároky na šířku pásma, která činí 13 kbit/s pro jeden hovor při průměrné teoretické hodnotě kvality hovoru 3.704 MOS. Na rozdíl od mobilní sítě, VoIP sítě nejsou tak náchylné na omezenou šířku pásma a je v nich nutné zajistit dobrou kompatibilitu se staršími TDM systémy, které jsou postaveny na kodeku G.711. Tento kodek G.711 A-law nebo G.711 u-law mají nároky na šířku pásma 64 kbit/s při průměrné teoretické hodnotě kvality hovoru 4.482 MOS. Pokud realizujeme hovor mezi koncovými zařízeními připojenými pouze k OpenBTS stanici, po celé trase spojení je hovor kódován do GSM kodeku. Pokud však OpenBTS systém připojíme k VoIP poskytovateli, je nutné transkódování do G.711, popř. jiného kodeku standardně použivaném ve VoIP světě (G.729 apod.) Nás tedy zajímal čistě vliv transkódování na výslednou kvalitu hovoru a z tohoto důvodu vnikl systém pro měření transkódování, který jsme vyvinuli v laboratoři VoIP telefonie v Ostravě. Systém je schopen vygenerovat hovor a postupně jej transkódovat do požadovaných kodeků. Po ukončení hovoru provede hodnocení kvality hovoru pomocí metody PESQ. Výsledky ukládá do databáze pro budoucí zpracování. Schéma systému pro měření transkódování je znázorněno na Obrázku 25. Systém realizuje VoIP hovor mezi dvěma uzly – přehrávačem a nahrávačem. Hovor se skládá z 10 sekundového zvukového záznamu, který je přenesen přes transkódovací kaskádní systém s předkonfigurovaným sledem kodeků, mezi kterými je hovor transkódován. Degradovaný signál hovoru je nahrán a po skončení hovoru kvalitativně vyhodnocen pomocí PESQ metody. Asterisk PBX1 exten => 101,Playback(sample) exten => XXX,Dial(SIP/Asterisk_2)
Speech Samples Player
Transcoding Cescade System
5061
SIP
5062
CODEC RTP A
11001 12001
Asterisk PBX2 exten => 201,Playback(sample) exten => XXX,Dial(SIP/Asterisk_3) 5062
SIP
5063
CODEC B
RTP
13001
Asterisk PBX3 exten => 301,Playback(sample) exten => XXX,Dial(SIP/Asterisk_N) . . 5063
Speech Quality Evaluation System
Speech Samples Recorder
SIP
. .
CODEC N
. .
506N Asterisk PBX_N exten => N01,Playback(sample) exten => XXX,Dial(SIP/Asterisk_N+1)
Obrázek 25- Schéma systému pro měření transkódování
18
12002
13002 RTP 1N001
Nahrávač (Speech Samples Recorder) je reprezentován pobočkovou ústřednou Asterisk PBX, která vytáčí příslušné číslo pobočky přehrávače (Speech Samples Player) a nahrává degradovaný signál, který projde od přehrávače přes transkódovací kaskádní systém. Nahrané vzorky jsou poté zaslány do systému pro hodnocení kvality řeči (Speech Quality Evaluation System). Přehrávač (Speech Samples Player) je reprezentován pobočkovou ústřednou Asterisk PBX. Originální zvukový vzorek je k dispozici k přehrávání pod patřičným číslem pobočky, které může být voláno z nahrávače (Speech Samples Recorder). Transkódovací kaskádní systém (Transcoding Cascade System) se skládá z N pobočkových ústředen Asterisk, které jsou spuštěny v různých instancích na stejném serveru. Každá instance má svůj rezervovaný port pro signalizaci a přenos médií. Navzájem jsou PBX Asterisk propojeny pomocí SIP trunků tak, aby tvořili unikátní cestu pro hovor. Hovor je přepojován od vstupu do cíle na localhost rozhraní, z tohoto důvodu hovor neovlivňují síťové parametry jako zpoždění na směrovačích nebo ztrátovost paketů. Systém tak zajišťuje degradaci signálu pouze z pohledu transkódování kodeků mezi sebou.
MOS
Měření transkódování probíhalo mezi G.711 A-law, GSM a G.729 kodeky navzájem. Každý kodek byl třiadvacetkrát transkódován do druhého kodeku a zpět a měřili jsme vliv tohoto transkódování na kvalitu hovoru. Výsledky měření jsou zobrazeny na Obrázku 26 – 28. 4,5 4 3,5 3 2,5 2 1,5
A-law GSM 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Transcoding number
MOS
Obrázek 26 - Vliv kvality hovoru na transkódování - A-law/GSM kodeky
4,5 4 3,5 3 2,5 2 1,5
A-law G729 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Transcoding number Obrázek 27 - Vliv kvality hovoru na transkódování - A-law/G.729 kodeky
19
MOS
4,5 4 3,5 3 2,5 2 1,5
G729 GSM 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Transcoding number Obrázek 28 - Vliv kvality hovoru na transkódování - G.729/GSM kodeky
% of the original speech quality
Jak je z obrázků patrné, při každém transkódování dochází k mírnému zhoršení kvality hovoru. Obrázek 29 je z pohledu administrátora VoIP systému přehlednější, obsahuje informce o tom, kolik procent z původní kvality je ztraceno po každém transkódování mezi jednotlivými kodeky. 60 50 A-law to GSM
40
A-law to G729
30
G729 to GSM
20
GSM to G729
10
G729 to A-law
0
GSM to A-law 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Transcoding number Obrázek 29 - Vliv kvality hovoru na transkódování - procentuální vyjádření
Transkódování, a to především v první iteraci, má za následek znatelné snížení kvality hovoru na úroveň kodeku s nižší kvalitou hovoru. Následné transkódování je z pohledu zhoršující se kvality hovoru více či méně lineární. Výsledky této práce byly prezentovány na konferenci KTTO 2015 a budou publikovány ve speciálním vydání časopisu AEEE věnovanému právě této konferenci. Doplňková aktivita II. – Zprovoznění LTE technologie na USRP B210 Po zprovoznění BTS stanice pro mobilní technologii GSM jsme si zpracovali rešerši, jak je to podporou LTE sítí u USRP zařízení. Pro LTE technologii jsme našli projekt OpenLTE, který se snaží o implementaci LTE eNodeB na USRP, podobně jako OpenBTS projekt. Projekt OpenLTE je datován od začátku roku 2012, my jsme se na projekt zaměřili na počátku roku 2015, kdy byla zveřejněna podpora paketově orientované komunikace od verze 00.18.00. Jediným podporovaným typem USRP byl zařízení USRP B210, které jsme pro tyto účely použili. Pro testovací účely jsme museli naprogramovat několik speciálních SIM karet, které obsahovaly patřičné autorizační kódy pro LTE síť. LTE síť jsme po několikadenním laborování zprovoznili na frekvenci 847 MHz v následujícím zapojení (Obrázek 30). 20
INTERNET
192.168.1.1 192.168.1.110
192.168.1.112
192.168.1.111
USRP B210 Samsung Galaxy Core LTE Obrázek 30 - Schéma realizace LTE eNodeB
Po úspěšné registraci jsme si odchytili probíhající provoz na tun_openlte rozhraní 192.168.1.111 a zjistili jsme, že projekt momentálně podporuje pouze omezenou komunikaci prostřednictvím UDP paketů a ICMP paketů. Potvrdilo se tedy, že projekt OpenLTE je stále v alpha verzi dost nestabilní a nabízí pouze omezenou komunikaci prostřednictvím IP sítě a UDP protokolu. Jeho využití v dnešní době je tak možné pouze omezeně ve formě studování LTE signalizace mezi koncovými zařízeními a OpenLTE zařízením. Reálné nasazení této technologie na testované platformě je tedy stále nemožné.
21
Příloha - Instalace OpenBTS stanice Předpokládáme čistou instalaci operačního systému Ubuntu 12.04 LTS. Tato distribuce se osvědčila vzhledem k dobré dostupnosti instalačních balíčků potřebných k instalaci systému. OpenBTS komunikuje s USRP pomocí ovladače UHD (USRP Hardware Driver). Nejprve nainstalujeme potřebné závislosti a pak samotný ovladač. apt-get install autoconf libtool libosip2-dev libortp-dev libusb1.0-0-dev g++ sqlite3 libsqlite3-dev erlang build-essential subversion python libboost-all-dev libusb-1.0-0-dev python-cheetah doxygen python-docutils cmake unixodbc-dev ncurses-dev libsqliteodbc libxml2-dev bash -c 'echo "deb http://files.ettus.com/binaries/uhd_stable/repo/uhd/ubuntu/\ `lsb_release -cs` `lsb_release -cs` main" > \ /etc/apt/sources.list.d/ettus.list' apt-get update apt-get install -t `lsb_release -cs` uhd
OpenBTS si nainstalujeme do adresáře /opt/OpenBTS. Proto nejdříve vytvoříme tento adresář a následně stáhneme aktuální zdrojový kód. mkdir /opt/OpenBTS cd /opt/OpenBTS svn co http://wush.net/svn/range/software/public .
Zařízení USRP N210 vyžaduje podporu převzorkování, proto provedeme kompilaci následovně. cd /opt/OpenBTS/openbts/trunk ./autogen.sh autoreconf –i ./configure --with-uhd --with-resamp make make install
Dále je potřeba vytvořit symbolický odkaz vysílače pro náš hardware cd /opt/OpenBTS/openbts/trunk/apps ln -s ../Transceiver52M/transceiver .
Samotná konfigurace je uložena v databázi SQLite v adresáři /etc/OpenBTS. mkdir /etc/OpenBTS cd /opt/OpenBTS/openbts/trunk sqlite3 -init ./apps/OpenBTS.example.sql /etc/OpenBTS/OpenBTS.db ".quit"
22
Databázi můžeme editovat například nástrojem sqlitebrowser. sqlitebrowser /etc/OpenBTS/OpenBTS.db
V databázi musíme upravit následující hodnoty GSM.Radio.Band GSM.Radio.C0 Control.LUR.OpenRegistration GSM.MNC GSM.MCC
900 1 .* 001 01
Instalace smqueue - Smqueue je služba pro uložení a odesílání krátkých textových zpráv (SMS). Její instalaci provedeme následovně cd /opt/OpenBTS/smqueue/trunk ./autogen.sh autoreconf –i ./configure make
Dále vytvoříme databází v adresáři /etc/OpenBTS cd /opt/OpenBTS/smqueue/trunk/smqueue sudo sqlite3 -init smqueue.example.sql /etc/OpenBTS/smqueue.db ".quit"
Instalace sipauthserver a Subscriber registry - nastavení databáze Subscriber registry. sudo mkdir -p /var/lib/asterisk/sqlite3dir cd /opt/OpenBTS/subscriberRegistry/trunk/configFiles/ sudo sqlite3 -init subscriberRegistryInit.sql \ /var/lib/asterisk/sqlite3dir/sqlite3.db ".quit" sudo mkdir /var/run/OpenBTS
Sipauthserve je démon, který poskytuje SIP autentizační služby. Nejprve jej sestavíme a vytvoříme databázi v/etc/OpenBTS. cd /opt/OpenBTS/subscriberRegistry/trunk make sqlite3 -init sipauthserve.example.sql /etc/OpenBTS/sipauthserve.db ".quit"
Instalace a konfigurace Asterisku - jak bylo zmíněno, OpenBTS využívá pro směrování hovorů PBX Asterisk. Proto je potřeba Asterisk PBX nainstalovat. Pro instalaci Asterisku ze zdrojových kódů je potřeba mít nainstalované hlavičkové soubory jádra, což si ověříme příkazem apt-get install linux-headers-`uname -r`
23
Nejprve nainstalujeme závislosti apt-get install build-essential libxml2-dev libncurses5-dev libreadline-dev libreadline6-dev libiksemel-dev libvorbis-dev libssl-dev libspeex-dev libspeexdsp-dev sox openssl wget subversion openssh-server
Následně stáhneme a zkompilujeme a Asterisk wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk -1.8.10.1.tar.gz
tar -zxvf asterisk-1.8.10.1.tar.gz cd asterisk-1.8.10.1/ ./contrib/scripts/get_mp3_source.sh ./configure
Pomocí následujícího nástroje si ověříme, že jsou zahrnuty následující součásti: Application app_db. Dialplan modules - func_odbc a func_realtime. Resources Modules - res_config_odbc, res_odbc, res_realtime. make menuconfig
Pokud není ODBC podporováno, nainstalujeme apt-get install unixODBC unixODBC-dev libmyodbc
A dokončíme instalaci make make install make samples make config
Následně vytvoříme uživatele asterisk a přidáme ho do skupiny www-data adduser asterisk --disabled-password --gecos "asterisk PBX" adduser www-data asterisk
Dále změníme uživatele a skupinu, pod kterým poběží Apache sed -i "s/\\(^User *\\)\\(.*\\)/\\1asterisk/" /etc/apache2/apache2.conf sed -i "s/\\(^Group *\\)\\(.*\\)/\\1asterisk/" /etc/apache2/apache2.conf
Po instalaci je potřeba provést konfiguraci v souboru /etc/odbcinst.ini přidáme sekci [SQLite3] Description=SQLite3 ODBC Driver Driver=/usr/lib/odbc/libsqlite3odbc.so Setup=/usr/lib/odbc/libsqlite3odbc.so Threading=2
24
V souboru /etc/odbc.ini upravíme sekci asterisk [asterisk] Description=SQLite3 database Driver=SQLite3 Database=/var/lib/asterisk/sqlite3dir/sqlite3.db # optional lock timeout in milliseconds Timeout=2000
Dále musíme vytvořit symbolické odkazy. cd ln cd ln
/usr/local/etc; -s /etc/odbc.ini; ln -s /etc/odbcinst.ini /root; -s /etc/odbc.ini .odbc.ini; ln -s /etc/odbcinst.ini .odbcinst.ini
V souboru /etc/asterisk/modules.conf musíme povolit automatické nahrávání modulů autoload=yes ; noload => res_config_odbc.so
V souboru /etc/asterisk/extconfig.conf nastavíme, aby Asterisk používal v real time módu databázi odbc [settings] sipusers => odbc,asterisk,sip_buddies sippeers => odbc,asterisk,sip_buddies
V souboru /etc/asterisk/res_odbc.conf provedeme standardní konfiguraci odbc [asterisk] enabled => yes dsn => asterisk pre-connect => yes
V souboru /etc/asterisk/func_odbc.conf povolíme použití příkazů SQL v dialplánu [SQL] dsn=asterisk readsql=${ARG1}
Cesta k databázi konfigurace pro asterisk je /var/lib/asterisk/sqlite3dir/sqlite3.db. Tento soubor je nastaven v souboru odbc.ini. K tomuto souboru musí mít práva čtení i zápisu asterisk, smqueue a sipauthserver a navíc musí mít práva zápisu do tohoto adresáře. Dále je potřeba nakopírovat konfigurační soubory z adresáře /opt/OpenBTS/openbts/trunk/AsteriskConfig doadresáře/etc/asterisk. 25
cp /opt/OpenBTS/openbts/trunk/AsteriskConfig/*.conf /etc/asterisk
V souboru /etc/asterisk/extensions.conf je konfigurace kontextu phones.Všechny GSM telefony musí být v tomto kontextu. Kontext využívá databázi sqlite3.db definovanou v souboru /etc/odbc.ini. [phones] exten => _N.,1,Set(Name=${ODBC_SQL(select dial from dialdata_table where exten = \"${EXTEN}\")}) exten => _N.,n,GotoIf($["${Name}" = ""] ?outbound-trunk,${EXTEN},1) exten => _N.,n,Set(IPAddr=${ODBC_SQL(select ipaddr from sip_buddies where name = \"${Name}\")}) exten => _N.,n,GotoIf($["${IPAddr}" = ""] ?outbound-trunk,${EXTEN},1) exten => _N.,n,Dial(SIP/${Name}@${IPAddr}:5062)
V databázi OpenBTS.db je nastaveno, že se mohou registrovat všechny telefony. Po registraci je na telefon poslána uvítací zpráva s jeho IMSI. Toto IMSI lze vyčíst také z nástroje OpenBTSCLI (dostupného z/opt/OpenBTS/openbts/trunk/apps/OpenBTSCLI) po zadání příkazu tmsi. Toto IMSI je potřeba vložit do databázesqlite3.db. K tomuto lze použít skript s následující syntaxí. ./openbtsext.py insert <exten>
Např ./openbtsext.py insert 2001 IMSI001011234567890
Nastavení logu - OpenBTS loguje do souboru syslog. Pro nastavení logu do vlastního souboru OpenBTS.log souboru vytvoříme soubor/etc/rsyslog.d/OpenBTS.conf s obsahem local7.*
/var/log/OpenBTS.conf
Spuštění - Pro spuštění je potřeba paralélně spustit smqueue, sipauthserve, OpenBTS a asterisk. smqueue cd /opt/OpenBTS/smqueue/trunk/smqueue ./smqueue
sipauthserve cd /opt/OpenBTS/subscriberRegistry/trunk ./sipauthserve
OpenBTS cd /opt/OpenBTS/openbts/trunk/apps ./OpenBTS
Asterisk asterisk –vvvvv
Test - Nejprve ověříme dostupnost USRP N210 pingem. USRP má standardně IP adresu 192.168.10.2. Dále ověříme dostupnost příkazy uhd_find_device a uhd_usrp_probe. Na mobilním telefonu přes nastavení vybereme naší GSM síť, která před první registrací bude mít název 00101. Po registraci vložíme její IMSI do databáze sqlite3.db. Stejné provedeme s druhým telefonem. Po registraci bude možné sestavit hovor.
26
Příloha - Instalace OpenIMS Pro provoz OpenIMS je potřeba nainstalovat a nakonfigurovat následující služby
Apache Bind OpenIMS
Instalace webového serveru Apache Webový server Apache, PHP a MySQL nainstalujeme následujícími příkazy apt-get apt-get apt-get gd curl apt-get apt-get
install apache2 install php5 libapache2-mod-php5 install php5-curl php5-cli php5-mysql php-pear php-db php5install mysql-server install phpmyadmin
Nastavení uživatele a skupiny, pod kterým poběží Apache. Do souboru /etc/apache/envvars vložíme následující dva řádky export APACHE_RUN_USER=asterisk export APACHE_RUN_GROUP=asterisk
Instalace jmenného serveru BIND9 Jmenný soubor slouží pro překlad doménových jmén open-ims.test a open-bts.test. Instalaci provedeme klasicky sudo apt-get install bind9 Do souboru /etc/bind/named.conf přidáme zónové soubory
zone "open-ims.test" { type master; file "/etc/bind/db.open-ims.test"; }; zone "open-bts.test" { type master; file "/etc/bind/db.open-bts.test"; }; zone "0.2.10.in-addr.arpa" { type master; file "/etc/bind/db.10.2.0"; }; Zónový soubor /etc/bind/db.open-ims.test $ORIGIN open-ims.test. $TTL 1W
27
@
ns
1D IN SOA
localhost. root.localhost. ( 2015021002 ; serial 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum
1D IN NS 1D IN A
ns 10.2.0.21
pcscf _sip.pcscf _sip._udp.pcscf _sip._tcp.pcscf
1D 1D 1D 1D
IN A 10.2.0.21 SRV 0 0 4060 pcscf SRV 0 0 4060 pcscf SRV 0 0 4060 pcscf
icscf _sip _sip._udp _sip._tcp
1D 1D 1D 1D
IN A 10.2.0.21 SRV 0 0 5060 icscf SRV 0 0 5060 icscf SRV 0 0 5060 icscf
open-ims.test. open-ims.test. "" _sip._udp open-ims.test. "" _sip._tcp
1D IN A 10.2.0.21 1D IN NAPTR 10 50 "s" "SIP+D2U"
scscf _sip.scscf _sip._udp.scscf _sip._tcp.scscf
1D 1D 1D 1D
IN A 10.2.0.21 SRV 0 0 6060 scscf SRV 0 0 6060 scscf SRV 0 0 6060 scscf
trcf _sip.trcf _sip._udp.trcf _sip._tcp.trcf
1D 1D 1D 1D
IN A 10.2.0.21 SRV 0 0 3060 trcf SRV 0 0 3060 trcf SRV 0 0 3060 trcf
bgcf _sip.bgcf _sip._udp.bgcf _sip._tcp.bgcf
1D 1D 1D 1D
IN A 10.2.0.21 SRV 0 0 7060 bgcf SRV 0 0 7060 bgcf SRV 0 0 7060 bgcf
mgcf _sip.mgcf _sip._udp.mgcf _sip._tcp.mgcf
1D 1D 1D 1D
IN A 10.2.0.21 SRV 0 0 8060 mgcf SRV 0 0 8060 mgcf SRV 0 0 8060 mgcf
hss ue presence pcrf clf
1D 1D 1D 1D 1D
IN IN IN IN IN
1D IN NAPTR 20 50 "s" "SIP+D2T"
A A A A A
10.2.0.21 10.2.0.21 10.2.0.21 10.2.0.21 10.2.0.21
28
Zónový soubor db.open-bts.test $ORIGIN open-bts.test. $TTL 1W @
1D IN SOA
localhost. root.localhost. ( 2015021203 ; serial 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum
1D IN A 1D IN NS 1D IN A
ns
10.2.0.20 ns 10.2.0.21
Reverzní zónový soubor db.10.2.0 $TTL 604800 @ IN SOA
; @ 20 21
IN IN IN
ns.localhost. root.localhost. ( 2013012801 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL
NS PTR PTR
ns.open-ims.test. open-bts.test. open-ims.test.
V souboru /etc/host.conf určíme, že má předně používat bind order bind,hosts V souboru /etc/resolv.conf nastavíme, že pro doménu open-ims.test má používat náš DNS nameserver 10.2.0.21 domain open-ims.test V souboru /etc/bind/named.conf přidáme do direktivy options IP adresy jmenných serverů, které jsou poskytovány providerem. Např. forwarders { 213.46.172.36; 10.2.0.21; };
Instalace OpenIMS Pro úspěšnou instalaci a kompilaci OpenIMS je potřeba nainstalovat následující balíky apt-get apt-get apt-get apt-get apt-get
install install install install install
openjdk-7-jdk subversion bison ant libxml-java
29
apt-get apt-get apt-get apt-get
install install install install
libxml2 libxml2-dev libcurl4-openssl-dev libmysqlclient-dev
Aktuální zdrojové kódy jsou k dispozici na stránkách http://www.openimscore.org. Je potřeba mít nainstalovaný balík Subversion. Stažením jádra IMS získáme funkce CSCF prvků (ser_ims/TRUNK) a HSS (FHoSS/trunk). Nedříve vytvoříme adresář /opt/OpenIMS mkdir /opt/OpenIMSCore cd /opt/OpenIMSCore Dále vytvoříme adresář ser_ims a provedeme checkout CSCF
mkdir ser_ims svn checkout https://svn.code.sf.net/p/openimscore/code/ser_ims/trunk ser_ims Následně vytvoříme adresář FHoSS a provedeme checkout HSS mkdir FHoSS svn checkout https://svn.code.sf.net/p/openimscore/code/FHoSS/trunk FHoSS
Kompilace ser_ims cd ser_ims make install-libs all cd ..
Kompilace FHoSS Podmínkou je mít JDK novější nebo alespoň ve verzi 1.5. Verzi javy lze zkontrolovat příkazem java –version. Kompilace se provede pomocí nástroje ant následovně cd FHoSS ant compile ant deploy cd ..
Konfigurace prostředí MySQL cd /opt/OpenIMSCore mysql -u root -p -h localhost < ser_ims/cfg/icscf.sql mysql -u root -p -h localhost < FHoSS/scripts/hss_db.sql mysql -u root -p -h localhost < FHoSS/scripts/userdata.sql mysql -u root -p -h localhost < FHoSS/scripts/hss_db_migrate_as_register.sql
30
Konfigurace IMS jádra CSCF Konfigurační soubory překopírujte do adresáře /opt/OpenIMSCore cd cp cp cp
/opt/OpenIMSCore ser_ims/cfg/*.cfg . ser_ims/cfg/*.xml . ser_ims/cfg/*.sh .
Pro změnu IP adresy na které poslouchají jednotlivé entity OpenIMS lze použít skript configurator.sh, který spustíme z umístění /opt/OpenIMSCore a nastavíme novou IP a doménové jméno. Změny se zapíší do všech konfiguračních souborů. ./configurator.sh FHoSS Konfigurační soubory jsou umístěny v /opt/OpenIMSCore/FHoSS/deploy.
Spuštění OpenIMS Pro spuštění OpenIMS je potřeba paralélně spustit následující démony. cd /opt/OpenIMSCore ./pcscf.sh ./icscf.sh ./scscf.sh Před spuštěním FHoSS je nutné nastavit proměnnou JAVA_HOME export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/ cd /opt/OpenIMSCore/FHoSS/deploy ./startup
31
Skript pro vkládání uživatelů do systému OpenBTS #!/usr/bin/python """ Skript slouzi pro vkladani, mazani a zobrazovani dat z databaze SQlite /var/lib/asterisk/sqlite3dir/sqlite3.db, ktera obsahuje mapovani VoIP extensions na volajici identifikator
Marcel Fajkus 9.4.2013, v0.1
""" import sys import sqlite3, getopt
def insert(conn, c, exten, dial): """ Zaznam se pridava do tabulek: dialdata_table, sip_buddies """ c.execute("SELECT exten FROM dialdata_table WHERE exten='%s' or dial='%s'" %(exten, dial)) result = c.fetchone()
if result: print("Zaznam s exten=<%s> nebo dial=<%s> v databazi existuje" %(exten, dial)) else: c.execute("""INSERT INTO dialdata_table (exten, dial) VALUES('%s', '%s')""" %(exten, dial))
32
id = getID(conn, c, exten) c.execute("""INSERT INTO sip_buddies VALUES(%s,'%s','phones', 'allowed_not_screened',NULL,NULL,NULL,NULL,NULL,NULL,'dynamic', 'no','friend',NULL,NULL,NULL,'%s','0.0.0.0','info',NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'all','gsm',NULL, '127.0.0.1',5062,'%s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL, NULL,'yes','yes','yes','no',NULL,'no',NULL,'yes','accept',1800,90, 'uas',NULL,NULL,NULL,'yes',500,NULL,120,NULL,NULL,0,NULL,0,NULL, 'yes','no',NULL,NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL,0,1,0, NULL,0,NULL)""" %(id, dial, exten, dial))
print("Zaznam s exten=<%s> a dial=<%s> byl pridan"%(exten, dial))
def delete(conn, c, exten): """ Zaznam se maze z tabulek: dialdata_table, sip_buddies """ c.execute("SELECT exten FROM dialdata_table WHERE exten='%s'"%(exten)) result = c.fetchone()
if result: id = getID(conn, c, exten) c.execute("DELETE FROM dialdata_table WHERE exten='%s'"%(exten)) c.execute("DELETE FROM sip_buddies WHERE id='%s'"%(id)) print("Zaznam s exten=<%s> byl smazan"%(exten)) else: print("Zaznam s exten=<%s> v databazi neexistuje."%(exten))
def show(conn, c, args):
33
""" Zobrazeni zaznamu z tabulek: dialdata_table, sip_buddies """ if(args[1] == "all"): """Vypis vsech zaznamu v databazi""" c.execute("""SELECT D.id, D.exten, D.dial, S.context FROM dialdata_table D, sip_buddies S WHERE D.id=S.id""") for item in c.fetchall(): print("ID(%s) exten=<%s> dial=%s context=<%s>" %(item[0], item[1], item[2], item[3])) else: """Vypis konkretniho zaznamu v databazi""" c.execute("""SELECT D.id, D.exten, D.dial, S.context FROM dialdata_table D, sip_buddies S WHERE D.id=S.id and D.exten='%s'""" %(args[1])) item = c.fetchone() print("ID(%s) exten=<%s> dial=%s context=<%s>" %(item[0], item[1], item[2], item[3]))
def getID(conn, c, exten): """ Ziskani ID z tabulky : dialdata_table """ c.execute("SELECT id FROM dialdata_table WHERE exten='%s'"%(exten)) return c.fetchone()[0]
def help(): """ Vypis navodu k pouziti skriptu """
34
print("\nPopis:") print("
Skript slouzi ke sprave databaze, kterou vyuziva OpenBTS")
print("
pro mapovani VoIP extension na dial")
print("
Umisteni databaze /var/lib/asterisk/sqlite3dir/sqlite3.db")
print("\nPouziti:") print(" konkretni")
Vypis zaznamu z databze. Vsechny zaznamy nebo jeden
print("
openbtsext.py show all")
print("
openbtsext.py show <exten>\n")
print(" print(" print(" print("
Vkladani zaznamu") openbtsext.py insert <exten> \n") Smazani zaznamu") openbtsext.py delete <exten>\n")
print("Vice informaci na webu:") print("
http://docs.imatte.cz/temata/konvergence-openims-openbts\n")
def main(): # Cesta k databazi (/var/lib/asterisk/sqlite3dir/sqlite3.db) db_path = "sqlite3.db" conn = sqlite3.connect(db_path) c = conn.cursor()
options, args = getopt.getopt(sys.argv[1:], "")
if(len(args) == 0): help() elif(args[0] == "help"): help() elif(args[0] == "insert" and len(args) == 3): number = args[1] imsi = args[2] insert(conn, c, number, imsi)
35
elif(args[0] == "delete" and len(args) == 2): number = args[1] delete(conn, c, number) elif(args[0] == "show" and len(args) == 2): show(conn, c, args) else: help()
conn.commit() conn.close()
if __name__ == "__main__": main()
36