Project

General

Profile

LCR

Linux Call Router

die aktuell verwendete Version ist:

911f737f2b92dd922a9dc9e0710207f9a0ae9130
Datum: 2010-07-19 Uhrzeit: 11:31:25

OpenBSC kann Gespräche nur intern vermitteln. Es bietet keine zugänglichen Schnittstellen nach außen. Um ein vollständiges Telefonnetzwerk zu realisieren ist eine Anbindung an Asterisk aber das Mittel der Wahl. Um zwischen den GSM Netzwerk und einem Asteriskserver zu vermitteln, ist das Programm LCR nötig. Es wurde als eigenständige Telefonanlage entwickelt. Das Programm bietet aber die Möglichkeit, den OpenBSC Code einzubinden und die Gespräche aus OpenBSC weiterzuleiten. Hierfür besitzt LCR ein Asteriskmodul. Hierdurch kann ein Gespräch von der GSM-Seite von Asterisk aus genutzt werden.
Voraussetzung für LCR ist ein funktionierender mISDN Aufbau.

Start von LCR

LCR startet man durch Eingabe von

/opt/lcr/sbin/lcr start

Gesprächsverbindungen können durch
/opt/lcr/bin/lcradmin state

Beobachtet werden.

Konfigurieren von LCR

LCR benötigt mehrere Konfigurationsdateien. Beim Start von LCR wird auch OpenBSC gestartet. Es ist also einfacher, wenn man die OpenBSC-Config und die hlr.sqlite3 in das LCR Verzeichnis kopiert. In den einzelnen Abschnitten stehen die von uns eingetragenen Werte

gsm.conf

Diese Datei beeinhaltet Einstellungen zum OpenBSC_Teil.

interface-bsc mISDN_l1loop.1 #Name des ISDN-Loops zu OpenBSC (Standardwert)
interface-lcr mISDN_l1loop.2 #Name des ISDN-Loops zu LCR (Standardwert)
debug DRLL:DCC:DMM:DRR:DRSL:DNM:DSMS:DMNCC:DMNSMS:DPAG:DMUX #Debuglevel einstellen (erscheint direkt in der Konsole)
config /usr/local/lcr/openbsc.cfg.nanobts #Ort, an dem sich die Konfiguration von OpenBSC befindet (wurde hier her kopiert).
hlr /usr/local/lcr/hlr.sqlite3 #Ort, an dem sich die Benutzerdatenbank von OpenBSC befindet (wurde hier her kopiert).
#keep-l2 #Bleibt auskommentiert
#pcapfile pcap #Datenverkehr der BTS in Datei _pcap_ mitscheinden

interface.conf

Hier stehen Einstellungen zu Betriebsart von LCR. Das erste GSM-Beispiel muss einkommentiert werden:

[GSM]
gsm-bs # GSM Base Station aktivieren
nt
layer1hold no
layer2hold no
tones yes
earlyb no
channel-in free
channel-out any
nodtmf
extern #Diese Zeile stand in unserer Version nicht da, musste aber hinzugefügt werden

[Ext]
extern
portnum 0

[Int]
extension
msn 200,201,202,203
portnum 1
nt

Options.conf

Beschreibt Optionen zu LCR selbst. Die meisten Zeilen bleiben für den Betrieb mit OpenBSC auskommentiert. Wichtig sind aber die Zeilen für den Asteriskbenutzer und die Lock-Datei. Waren diese nicht richtig gesetzt, kamen die Gespräche vom LCR nicht in den Asterisk.

debug 0xffff
#log /usr/local/lcr/log

#alaw

schedule 90
#tones_dir tones_american
fetch_tones tones_german,tones_american

#national 0
#international 00
#keypad
#dummyid 0
#email lcr@your.domain

lock /var/tmp

socketuser asterisk
socketgroup asterisk

gsm

#polling

routing.conf

Beschreibt den Dialplan von LCR. Da wir den Asteriskserver als zentralen Knoten nutzen, muss nur eine Regel eingetragen werden.

[main]
interface=GSM  remote=asterisk          : remote application=asterisk context=btsctrl #Alle Gespräche über die GSM-Schnitstelle sollen in dem Asteriskcontext btsctrl erscheinen 
extern                                  : goto ruleset=extern #externe Gespräche, die nicht von GSM stammen (disconnect)
intern                                  : goto ruleset=intern #interne Gespräche, die nicht von GSM stammen (disconnect)
                                        : disconnect cause=31

[extern]
default                                 : disconnect cause=1 

[intern]
default                                 : disconnect cause=1 display="Invalid Code" 

LCRadmin

lcradmin ist ein kleines Tool, das die aktiven Gespräche, die von LCR gerade vermittelt, anzeigt. Zusätzlich werden Meldungen über LCR selbst und das Asteriskmodul ausgegeben. Durch diese Ausgaben wird die Fehlersuche stark vereinfacht. Da jeder belegte Kanal angezeigt wird, lässt sich abschätzen, wie stark der GSM-Teil ausgelastet ist und welche Rufnummer wohin telefoniert.


Diese Bild zeigt die offene LCR-Konsole. Zur Anschauen wurde von einem Privathandy aus eine Nummer innerhalb des RZ-GSM Netzes angerufen. Man sieht das aktives Gespräch von der Rufnummer 01726005007 zu dem RZ-GSM Handy mit der Nummer 206. Die vom privaten Handy aus gewählte Nummer war 0761-203-4661-206. Der Lehrstuhl-Asterisk empfing das Gespräch über seine ISDN-Leitung, leitete es über IAX an den OpenBSC-Asterisk weiter und gelang von dort aus in den LCR. Daher sieht man innerhalb von LCR nur noch die Nummer "206". Das Gespräch belegt einen GSM-Kanal.

Was und Probleme bereitete

Die Benutzerdatenbank (HLR) von OpenBSC wird mit der Zeit erstaunlich groß. Selbst nach kurzer Nutzungsdauer, mit nur wenigen Benutzern steigt sie schnell auf über 20 MB. Jedes mal, wenn OpenBSC Änderungen innerhalb der Datenbank macht, wird diese zuerst komplett kopiert und neu geschrieben. Innerhalb der Zeit, in der die Festplatte die Datenbank schreibt, kann LCR keine Aufgaben ausführen. LCR schreibt die Nachricht LCR was stalling vor x seconds in die Konsole. Dadurch verzögern sich Gespräche, bis die Latenz zu groß wird, um miteinander sprechen zu können. Konrad fand einen Befehl, der das unerwünschte Verhalten der Datenbank abschaltete. Dadurch wird die Datenbank nicht mehr kopiert, wenn eine Änderung gemacht wird. Seit dem kommt es zu keinem stalling mehr.

lcradmin.png (40.2 KB) Richard Zahoransky, 10/14/2010 01:48 PM