1xBTS 1xBTS

Building from Source

Prerequisites

DependencyInstall
Rust 1.85+rustup install stable && rustup default stable
C compilergcc or clang (for EVRC voice codec)
Dockerdocker.com — for PostgreSQL, dashboard, and FOU-NAT
protocbrew install protobuf or apt install protobuf-compiler

SDR backend (at least one):

LibraryDevicesInstall
UHDUSRP B200/B210brew install uhd or apt install libuhd-dev uhd-host
LimeSuiteLimeSDRbrew install limesuite or apt install liblimesuite-dev
libbladeRFbladeRFbrew install libbladerf or apt install libbladerf-dev bladerf-firmware-fx3 bladerf-fpga-hostedxa4

Clone & Build

git clone https://github.com/chrismoos/1xbts.git
cd 1xbts

Build with your radio backend:

cargo build --release -p cdma-nib --no-default-features --features bladerf-backend  # bladeRF
cargo build --release -p cdma-nib --no-default-features --features uhd-backend      # USRP B200/B210
cargo build --release -p cdma-nib --no-default-features --features lime-backend     # LimeSDR
cargo build --release -p cdma-nib                                                    # all backends (default)

Docker Services

PostgreSQL, the web dashboard, and the FOU-NAT tunnel all run via Docker Compose:

docker compose up -d

This starts:

ServicePurposePort
postgresHLR + SMSC database45432
1xbts-webWeb dashboard3000
fou-natFOU tunnel NAT for packet data17012

The PostgreSQL database (1xbts) and schema are created automatically on first start.

Run

Start the cellular network with your radio config:

cargo run --release -p cdma-nib -- \
    --config-dir config \
    --radio-config config/radio_bladerf_micro2.json

Substitute radio_uhd_b210_native.json or radio_limesdr_mini2_native.json for other hardware.

Tests

cargo test --workspace

Covers physical layer, protocol stack, RLP, PPP — including regression tests against real over-the-air recordings.

Next Steps