OsmoNITB LCR » History » Revision 9

Revision 8 (zecke, 02/19/2016 10:47 PM) → Revision 9/23 (luca, 02/19/2016 10:47 PM)

== Howto OpenBSC with Asterisk and LCR == 
 This is a short walk-through to setup OpenBSC and LCR with Asterisk. 

 In the end we'll have a working setup to route calls from our BTS to 
 the PTSN via VoIP. 

 === Prerequisites === 
  * OpenBSC equipment (BTS, E1 Card) 
   * We're using a Siemens BS11 microBTS and a Cologne Chips E1 PCI card 
  * The latest snapshot from the !LibOmsocore repository 
    * git clone git:// 
  * The latest snapshot from the OpenBSC repository 
    * git clone git:// 
  * LCR from git repository 
    * git-clone git:// 
  * A working kernel for your linux system 
    * Support for your E1 card 
    * mISDN's l1loop module (mISDN_l1loop.ko) 
    * mISDN's DSP module (mISDN_dsp.ko) 
    * You can obtain a working package for Debian at 
      * Supports cards from Cologne Chips and Junghanns 
  * libgsm + header files (libgsm / libgsm-dev on Debian) 
  * A working Asterisk setup 
  * Original howto from 

 === Installation === 

 First of all we assume the following: 
  * Layout of your working directory: 
    * libosmocore/ - checkout from !LibOmsocore rep 
    * openbsc/    - checkout from OpenBSC repo 
    * lcr/        - checkout from LCR repo 
  * Installation directories: 
    * /opt/openbsc for OpenBSC 
    * /opt/lcr for LCR 

 We need to compile and install !LibOsmocore and OpenBSC first: 
 $ cd libosmocore/ openbsc/ 
 $ autoreconf -i 
 $ ./configure 
 $ make 
 $ sudo make install 
 $ cd ../openbsc/openbsc/ 
 $ autoreconf --install --force 
 $ ./configure --prefix=/opt/openbsc 
 $ make 
 $ sudo make install 

 After that we're going for LCR: LCR. But we had to patch 2 files to make it work: 
 $ cd ../../lcr ../lcr 

 First of all, we have to link the source directory of OpenBSC Edit and !LibOsmocore in the lcr-Directory: change 
 $ ln -s ../libosmocore/ . GSM_LIB = /usr/local/lib/libgsm.a /usr/local/lib/libbsc.a /usr/local/lib/libvty.a -ldbi -lcrypt 
 $ ln -s ../openbsc/openbsc/ . }}} 
 GSM_LIB = /usr/lib/libgsm.a /usr/local/lib/libbsc.a /usr/local/lib/libvty.a -ldbi -lcrypt 

 And patch gsm_audio.c on line 13 from 
 #include "/usr/local/include/gsm.h" 
 #include "/usr/include/gsm.h" 

 Now we can go on with compiling LCR. Unfortunately, due to changes in OpenBSC, we have to install a patch LCR: 
 for LCR, until the programmer of LCR will include this patch in the current version. 
 The patch is attached to this document. 
 $ sh 
 $ git-apply --verbose lcrOpenBSC.patch 
 $ ./configure --prefix=/opt/lcr --with-asterisk --with-gsm-bs --with-gsm 
 $ make 
 $ sudo make install 

 and now we can copy the module into the modules' directory of Asterisk: 
 $ sudo cp /usr/lib/asterisk/modules/ 


 === LCR configuration === 
 '''1. gsm in options.conf'''[[BR]] 
 The gsm option in /usr/local/lcr/options.conf needs to be activated. This can be 
 simply done by adding 'gsm' as a single line to the file.[[BR]] 
 Because it is a good idea to start Asterisk without root's privileges, we want to add these lines, too: 
 socketuser asterisk 
 socketgroup asterisk 
 }}} file. 

 '''2. GSM interface in interface.conf'''[[BR]] 
 /usr/local/lcr/interface.conf holds an example for a GSM interface. Remove the comments 
 and use the example as is. 

 '''3. gsm.conf'''[[BR]] 
 Enable the debugging option in /usr/local/lcr/gsm.conf. We also need 2 mISDN loopback interfaces. 
 Create them with 
   $ sudo modprobe mISDN_l1loop pri=1 nchannel=30 
 You can check for the interfaces names with the misdn_info tool. All the default settings 
 should work in a BS11 setup. 
 You have just to give a value for 'config' and 'hlr', with the full path of your OpenBSC configuration 
 file and HLR-!DataBase. 

 '''4. Routing'''[[BR]] 
 We route all our calls to to asterisk at the moment, as we only have outgoing connectivity via IAX/SIP in our setup. 
 interface=GSM                             : remote application=asterisk context=btsctrl 

 Calls will go to the context btsctrl in Asterisk. 

 === Asterisk configuration === 
 Our setup connects to an external Asterisk via SIP - as we don't have a second ISDN interface. 

 chan_lcr for Asterisk comes with LCR (compiled with --with-asterisk). You only need to load the 
 channel driver and maybe check the permissions of the LCR socket (/var/tmp/lcr.socket) - Asterisk 
 on Debian uses a Set UID wrapper. 

 To load chan_lcr automagically on startup add the following to your modules.conf: 
 load => 

 We've created an exclusive context in extensions.conf for OpenBSC/LCR: 
 exten => _X.,1,Dial(LCR/GSM/${EXTEN},120) _X.,1,Set,CALLERID(num)=5552342 
 exten => _X.,n,dial(SIP/${EXTEN}@btsctrl,120) 

 === Running OpenBSC/LCR and Asterisk === 
 Now we're ready to start with our GSM network. 
 Boot up the BS11 and start LCR with 
 $ sudo /opt/lcr/sbin/lcr start 

 You can also use 'fork' instead of 'start' to run LCR in daemon mode, 
 but I'd rather go with fork AFTER you made you first successful call. (; 

 Now start Asterisk. It should connect to LCR right after startup. You 
 can check this by running 
 $ sudo /opt/lcr/bin/lcradmin state 

 The UI should show 
 Remote: asterisk 
 in the upper left part. 

 Connect your phone and make your call(s). 

 === Troubleshooting === 
 ==== Phones unable to connect ==== 
 On the first run I had some problems with connecting my phones as 
 the registration just timed out. I fixed this by starting over with a fresh HLR. 

 ==== The call routing fails (somewhere) ==== 
 Most problems occured within Asterisk for me as neither IAX2 or SIP was working. 
 This was just some kind of problem within the configuration. 

 I can provide a working dialplan and SIP configuration if you need it. 

 ==== Can't see the network ==== 
 This was either related to the phone (a restart fixed it) or the BS11. After the 
 first start I sometimes had to hardreset (as in reboot) the BS11.
Add picture from clipboard (Maximum size: 48.8 MB)