= Orbit + OpenBTS = All that you will need to create a tiny GSM network using Orbit Hardware is a GSM Phone, any SIM Card and the OpenBTS software. Actually you need a few more pieces of software but they are included in the steps below. The additional software is Asterisk which handles Voice over IP, you need Asterisk because OpenBTS "just" implements the GSM wireless communication between the phone and the base station, but asterisk stitches voice calls together using the TCP/IP stack. Additional software also includes SMQueue to give you Text Messaging and the NMCli.py software makes it easy to add "subscribers" to your tiny GSM network, we will also install SIPAUTHSERVE. The following book was my guide when I was doing this install -> http://openbts.org/site/wp-content/uploads/ebook/Getting_Started_with_OpenBTS_Range_Networks.pdf The first thing you should ask is -> Which SDR's does OpenBTS support for GSM? -> http://openbts.org/w/index.php/RadioIntegration I have had all of my success with the N210, which was available on Orbit Sandbox 3 at the time of writing this article. How did I know the N210 was available on SB3? -> If you can find the "Orbit Online Scheduler" then you should be able to find the "Orbit Status Page", you can ask the "Orbit Status Page", "On which nodes is the N210 installed?" Once you know which box is hosting your target SDR, the next thing you should do is to verify that the SDR is working on your target box. Starting from scratch, let's make sure we start with an Image that already has SDR support: [[br]] {{{ davemsolomon@console.sb3:~$ omf load -t node1-1 -i ubuntu-14-04-64bit-sdr.ndz davemsolomon@console.sb3:~$ omf tell -a on -t node1-1 }}} SSH to the target box with the SDR: [[br]] {{{ davemsolomon@console.sb3:~$ ssh root@node1-1 }}} Before doing anything with OpenBTS, make sure the SDR is happy: {{{ root@node1-1:~# uhd_usrp_probe linux; GNU C++ version 4.8.2; Boost_105400; UHD_003.008.002-86-g566dbc2b -- Opening a USRP2/N-Series device... -- Current recv frame size: 1472 bytes -- Current send frame size: 1472 bytes _____________________________________________________ / | Device: USRP2 / N-Series Device | _____________________________________________________ | / | | Mboard: N210r4 | | hardware: 2577 | | mac-addr: 00:80:2f:0a:cc:db | | ip-addr: 192.168.10.2 | | subnet: 255.255.255.255 | | gateway: 255.255.255.255 | | gpsdo: none | | serial: F297B6 | | FW Version: 12.4 | | FPGA Version: 10.1 ... }}} OK! the SDR looks happy! Let's move on. Install the dependencies {{{ root@node1-1:~# apt-get install software-properties-common python-software-properties root@node1-1:~# add-apt-repository ppa:git-core/ppa root@node1-1:~# apt-get update root@node1-1:~# apt-get install git root@node1-1:~# apt-get install bind9 root@node1-1:~# apt-get -f install }}} Download and prepare to build OpenBTS, Asterisk, SMQueue and Node Manager {{{ root@node1-1:~# git clone https://github.com/RangeNetworks/dev.git root@node1-1:~# cd dev root@node1-1:~/dev# ./clone.sh root@node1-1:~/dev# ./switchto.sh master }}} Build packages for OpenBTS with support for our SDR as well as Asterisk, SMQueue, SIPAUTHSERVE and Node Manager: [[br]] (this will take about 10 minutes, grab a cup of coffee) {{{ root@node1-1:~/dev#./build.sh N210 }}} Now that all of our packages are built, let's install OpenBTS: {{{ root@node1-1:~/dev# cd BUILDS/ root@node1-1:~/dev/BUILDS# cd 2015-10-13--03-22-27/ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# dpkg -i openbts_5.0_amd64.deb }}} Now that we have installed OpenBTS let's verify that OpenBTS is happy with our SDR: {{{ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# cd /OpenBTS/ root@node1-1:/OpenBTS# ./transceiver linux; GNU C++ version 4.8.2; Boost_105400; UHD_003.008.002-86-g566dbc2b Using internal clock reference -- Opening a USRP2/N-Series device... -- Current recv frame size: 1472 bytes -- Current send frame size: 1472 bytes }}} Excellent! Let's start OpenBTS and make sure there aren't any errors in the log: {{{ root@node1-1:/OpenBTS# service openbts start openbts start/running, process 12711 root@node1-1:/OpenBTS# tail /var/log/upstart/openbts.log -- Successfully tuned to 945.200000 MHz -- 1444721928.697975 139804996573056: system ready 1444721928.698023 139804996573056: use the OpenBTSCLI utility to access CLI 1444721928.698218 139804996573056: OpenBTSCLI network socket support for tcp:49300 }}} Perfect! Let's add text message support: {{{ root@node1-1:/OpenBTS# cd ~/dev/BUILDS/2015-10-13--03-22-27/ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# dpkg -i smqueue_5.0_amd64.deb root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service smqueue start smqueue start/running, process 12904 }}} Let's check the SMQueue Logs: {{{ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# tail /var/log/upstart/smqueue.log EMERG 0:12904 2015-10-13T03:45:50.6 ../SR/SubscriberRegistry.cpp:183:init: /var/lib/asterisk/sqlite3dir does not exist ALERT 12904:12904 2015-10-13T03:45:50.7 smqueue.cpp:2798:main: smqueue (re)starting smqueue logs to syslogd facility LOCAL7, so there's not much to see here }}} I think that is healthy. Let's install and start SIPAUTHSERVE {{{ root@node1-1:~# cd ~/dev/BUILDS/2015-10-13--03-22-27/ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# dpkg -i sipauthserve_5.0_amd64.deb root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service sipauthserve start sipauthserve start/running, process 12987 }}} Let's check the SIPAUTHSERVE Logs: {{{ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# tail /var/log/upstart/sipauthserve.log ALERT 12987:12987 2015-10-13T04:06:31.3 sipauthserve.cpp:328:main: /OpenBTS/sipauthserve (re)starting }}} Let's install and start Asterisk {{{ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# dpkg -i range-asterisk_11.7.0.4_amd64.deb root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service asterisk start asterisk start/running, process 13566 }}} Let's check the Asterisk logs: {{{ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# tail /var/log/upstart/asterisk.log No 'modules.conf' found, no modules will be loaded. Unable to load config file 'acl.conf' Unable to open AMI configuration manager.conf, or configuration is invalid. Asterisk management interface (AMI) disabled. Unable to load config file 'udptl.conf' Could not load udptl config; using defaults Can't find indications config file indications.conf. Could not load features.conf Could not find valid ccss.conf file. Using cc_max_requests default Could not find valid ccss.conf file. Using cc_[state]_devstate defaults No 'modules.conf' found, no modules will be loaded. }}} Let's stop everything, install "configuration" packages and then start everything {{{ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service openbts stop openbts stop/waiting root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service sipauthserve stop sipauthserve stop/waiting root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service smqueue stop smqueue stop/waiting root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service asterisk stop asterisk stop/waiting root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# dpkg -i range-configs_5.1-master_all.deb root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# dpkg -i range-asterisk-config_5.0_all.deb ln -s /usr/lib/x86_64-linux-gnu/odbc/libsqlite3odbc.so /usr/lib/odbc/libsqlite3odbc.so root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service openbts start openbts start/running, process 13672 root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service asterisk start asterisk start/running, process 13700 root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service sipauthserve start sipauthserve start/running, process 13852 root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# service smqueue start smqueue start/running, process 13867 }}} Let's add a subscriber to our tiny GSM network. We need the IMEI of the phone you are using, your phone can tell you it's IMEI when you dial a special code. {{{ Dial *#06# }}} If your phone is on and OpenBTS is running then by now your Phone and OpenBTS have most likely seen each other. Since we are using a SIM card we did not create we do not know anything about the encryption keys that were used when the SIM Card was created. Our tiny GSM network won't be encrypted but setting up subscribers will be easy. We can tell OpenBTS to give us a list of every IMEI (International Mobile Equipment Identity) and IMSI (International Mobile Subscriber Identity) it has seen, we will need the IMSI of our Test Phone so that we can tell OpenBTS to authorize the phone to use our GSM network. We will run the tmsis command inside the OpenBTS CLI in order to get a listing of IMEI and IMSI's. {{{ root@node1-1:~/dev/BUILDS/2015-10-13--03-22-27# cd /OpenBTS/ root@node1-1:/OpenBTS# ./OpenBTSCLI OpenBTS Command Line Interface (CLI) utility Copyright 2012, 2013, 2014 Range Networks, Inc. Licensed under GPLv2. Includes libreadline, GPLv2. Connecting to 127.0.0.1:49300... Remote Interface Ready. Type: "help" to see commands, "version" for version information, "notices" for licensing information, "quit" to exit console interface. OpenBTS> tmsis IMSI TMSI IMEI AUTH CREATED ACCESSED TMSI_ASSIGNED 310410762747144 - 357507061173160 1 25m 19s 0 310410629684240 - 013441007348570 0 12m 12m 0 732111141359282 - 013594001284780 0 17m 17m 0 425010300522982 - 357507061982450 0 24m 24m 0 }}} The IMEI is a match even if the last digit doesn't match. Let's say I typed in *#06# on my phone and got back 357507061982456, I could conclude that 357507061982450 is a match, now I would need to grab the IMSI, the IMSI in the table above for my IMEI is 425010300522982. The IMSI is required when configuring subscribers. Let's add our test subscriber phone and assign it the phone number 2165554444: {{{ root@node1-1:/OpenBTS# cd ~/dev/NodeManager/ ./nmcli.py sipauthserve subscribers create "orangesim" IMSI425010300522982 2165554444 root@node1-1:~/dev/NodeManager# ./nmcli.py sipauthserve subscribers create "orangesim" IMSI425010300522982 2165554444 raw request: {"command":"subscribers","action":"create","fields":{"name":"orangesim","imsi":"IMSI425010300522982","msisdn":"2165554444","ki":""}} raw response: { "code" : 200, "data" : "both ok" } }}} Echo SMS {{{ Text to 411 }}} Test Tone {{{ Dial 2602 }}} Echo Call {{{ Dial 2600 }}}