None of this works so far. There's a dependency in OpenBTS on the subscriber registry which causes it to fail if that file is not available. This could potentially be solved by network mounting the file

At Range, we run multi-BTS systems routinely. A 2-BTS network is the standard development configuration for peopple working on mobility and handover. This may be a limitation on the public release. We should discuss.

MultiBTS network

As your network matures, you may want to connect more than one concurrent OpenBTS system. This is easy to do. Basically, each OpenBTS node runs on a separate machine, then connected to centralized sipauthserve, PBX, and smqueue processes (which may or may not be running on the same machine.) Here, we document the configuration required for such a setup.

Initial Requirements

Firstly, the "basic" install does not support secure, networked VoIP communications. Instead, you'll need to install either Asterisk Real-Time or FreeSWITCH.

Secondly, you'll need to move each configuration file (e.g., OpenBTS.db) to the machine that will be running the associated process. Remember that there will now be multiple, different OpenBTS.db files, one for each BTS location. Also remember that ALL processes (except the PBX) expect their configurations in /etc/OpenBTS.

System Diagram


You'll need to change the default configuration databases to point at the new machines running each server. In this example:

  • PBX (Asterisk)-
  • smqueue -
  • sipauthserve - 5064
  • OpenBTS (1st BTS) -
  • OpenBTS (2nd BTS) -



Fortunately, Asterisk does not need to be reconfigured unless it is accessing the subscriber registry over the network.


The FreeSWITCH install needs to know the location of smqueue in order to forward SIP MESSAGEs. To do this, change (FS ROOT)/conf/vars.xml to the network location of smqueue:

<X-PRE-PROCESS cmd="set" data="smqueue_port=5063"/>
<X-PRE-PROCESS cmd="set" data="smqueue_host="/>


/etc/OpenBTS/smqueue.db has numerous variables that need to be set to the new network locations of each service

  • Asterisk.address -> The network location of the PBX
  • SIP.myIP ->
  • SIP.myIP2 -> The external-facing IP address of smqueue
  • SIP.Proxy.Registration -> The location of sipauthserve


Fortunately, sipauthserve is a passive engine that does not need to know where any other services are located.


Running multiple BTS's concurrently is a difficult task. Each BTS must not only be configured to know the location of the network services, but also configured to not interfere with their nearby BTS neighbors.

Network Configuration

Every OpenBTS install must be configured (at /etc/OpenBTS/OpenBTS.db) to the smqueue, sipauthserve, and PBX services. This can be done either with the sqlite3 client or via the OpenBTS [command-line interface].

  • SIP.Local.IP -> (or .2) The external IP of the OpenBTS install.
  • SIP.Proxy.Registration -> The IP/Port of sipauthserve
  • SIP.Proxy.SMS -> The IP/Port of smqueue (or FreeSWITCH)
  • SIP.Proxy.Speech -> The IP/Port of the PBX

BTS Configuration

There are two types of BTS configurations needed to put together a network. First, a number of variables must be THE SAME for all BTSs on a network:

  • GSM.Identity.MCC The mobile country code
  • GSM.Identity.MNC The mobile network code
  • GSM.Identity.BSIC.NCC The network color code, must be unique from all other networks around you.
  • GSM.CellSelection.NCCsPermitted The NCCs permitted by your BTS. Should include the above.

The following have to be DIFFERENT for each BTS.

  • GSM.CellSelection.BSIC.BCC The BTS color code. Each BTS should have a different color code.
  • GSM.Identity.LAC The Location area code. Have to be unique for each BTS
  • GSM.Identity.CID Cell ID, again unique per BTS.


It's pretty easy to get these wrong. For network configuration, use a tool like [ wireshark] to trace the traffic.