Building from Source
Prerequisites
| Dependency | Install |
|---|---|
| Rust 1.85+ | rustup install stable && rustup default stable |
| C compiler | gcc or clang (for EVRC voice codec) |
| Docker | docker.com — for PostgreSQL, dashboard, and FOU-NAT |
| protoc | brew install protobuf or apt install protobuf-compiler |
SDR backend (at least one):
| Library | Devices | Install |
|---|---|---|
| UHD | USRP B200/B210 | brew install uhd or apt install libuhd-dev uhd-host |
| LimeSuite | LimeSDR | brew install limesuite or apt install liblimesuite-dev |
| libbladeRF | bladeRF | brew 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:
| Service | Purpose | Port |
|---|---|---|
postgres | HLR + SMSC database | 45432 |
1xbts-web | Web dashboard | 3000 |
fou-nat | FOU tunnel NAT for packet data | 17012 |
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
- Configuration — BTS and radio config files
- First Registration — Get a handset on the air