Configuration
1xBTS uses a per-node config directory plus an optional radio-config override:
cargo run --release -p cdma-nib -- --config-dir config --radio-config config/radio_bladerf_micro2.json
The default config directory contains bts.json, bsc.json, msc.json, pcf.json, pdsn.json, hlr.json, smsc.json, and management.json.
Node Configuration
| File | Role |
|---|---|
bts.json | pilot/overhead parameters, downlink/uplink channel config, MCC/IMSI_11_12 digit-string defaults, BTS Abis signaling listener, local bearer address |
bsc.json | traffic assignment, paging retry, traffic retry, BSC Abis signaling target, BSC bearer peer config |
msc.json | A1 listen address, MSC management endpoint, voice policy, voice gateway endpoint, welcome SMS policy |
pcf.json | packet-control client endpoint for the packet service |
pdsn.json | packet gRPC listener plus packet transport mode (tun, fou, or fou_tcp) and tunnel endpoints |
hlr.json | HLR gRPC listener and PostgreSQL DSN for subscriber and registration-binding data |
smsc.json | SMSC gRPC listener and PostgreSQL DSN for SMS submissions and delivery attempts |
management.json | management facade listener, tokio-console flag, IQ capture directory |
1xbts-web uses MANAGEMENT_GRPC_ADDRESS for the facade endpoint and falls back to BSC_GRPC_ADDRESS for older local setups. MSC-owned call actions and SMS submission are served by the MSC management endpoint from msc.json; SMS coordination flows from MSC to BSC over A1 ADDS messages.
BTS Runtime
{
"runtime": {
"spreading_rate": "sr1",
"chip_rate_hz": 1228800,
"tx_sample_rate_hz": 4915200,
"tx_center_frequency_hz": 881520000,
"tx_digital_backoff": 0.5
}
}
Downlink Channels
| Channel | Walsh | Config |
|---|---|---|
| Pilot | W0 | Gain |
| Sync | W32 | 1200 bps, interleaver params |
| Paging | W1 | 9600 bps, overhead messages (SPM, APM, ESPM, CCLM, NLM) |
Extended System Parameters in bts.json carry the advertised MCC and IMSI_11_12 defaults as decimal digit strings, for example "mcc": "310" and "imsi_11_12": "55". The BTS encodes those strings into the C.S0005-E bit fields, and the BSC uses the same overhead values to reconstruct a complete class-0 registration IMSI when the mobile only sends the short IMSI fields on the access channel.
BSC / MSC / Packet Parameters
| Section | Controls |
|---|---|
bsc.traffic_assignment | supported forward/reverse RCs, preferred RC pairs, idle timeout |
bsc.paging_retry | paging ACK timeout and retry count |
bts.abis / bsc.abis | Abis TCP signaling bind/remote addresses; defaults wire the integrated runtime over localhost 127.0.0.1:5604 |
bts.bearer / bsc.bearer | Abis UDP bearer bind/remote addresses; defaults wire BTS 127.0.0.1:17014 to BSC 127.0.0.1:17022 |
msc.voice | supported SOs, answer/release timers, A2p bearer behavior, WAV fallback, MSC-owned voice gateway endpoint |
msc.welcome_sms | first-registration/inactivity welcome SMS text, originating number, and threshold |
pcf.packet_grpc_endpoint | BSC/PCF client endpoint for packet service RPCs; default http://127.0.0.1:17021 |
pdsn.packet_grpc_listen_addr | packet service gRPC listen address; default 127.0.0.1:17021 |
pdsn.packet | packet transport mode and FOU/FOU-TCP endpoints |
hlr.grpc_listen_addr / smsc.grpc_listen_addr | HLR/SMSC service gRPC listen addresses; defaults 127.0.0.1:17019 and 127.0.0.1:17020 |
hlr.postgres_dsn / smsc.postgres_dsn | PostgreSQL connection strings |
Access Channel
| Parameter | Default |
|---|---|
| Channels per paging channel | 1 |
| Access rate | 4800 bps |
| Frame duration | 20 ms |
| ARQ ACK timeout | 400 ms |
Radio Configuration
Hardware-specific SDR parameters.
UHD (USRP B200/B210)
{
"kind": "uhd",
"device": "type=b200,num_recv_frames=1024,num_send_frames=1024",
"channel": 0,
"antenna": "TX/RX",
"tx_gain_db": 65.0,
"rx_antenna": "RX2",
"rx_gain_db": 50.0,
"rx_freq_hz": 836520000,
"rx_sample_rate_hz": 4915200,
"rx_bandwidth_hz": 5000000,
"rx_sample_delay": 50
}
LimeSDR (Native)
{
"kind": "lime",
"device": "",
"channel": 0,
"tx_antenna": "BAND1",
"tx_gain_db": 60,
"rx_antenna": "LNAW",
"rx_gain_db": 20,
"rx_freq_hz": 836520000,
"rx_sample_rate_hz": 4915200,
"rx_bandwidth_hz": 5000000,
"rx_sample_delay": 97
}
rx_sample_delay compensates for LimeSDR-specific timing offsets in the receive path.
bladeRF (Native)
{
"kind": "blade_rf",
"device": "",
"channel": 0,
"fpga_path": null,
"tx_antenna": "TXA",
"rx_antenna": "B_BALANCED",
"tx_gain_db": 50,
"rx_gain_db": 40,
"rx_freq_hz": 836520000,
"rx_sample_rate_hz": 4915200,
"rx_bandwidth_hz": 2500000,
"rx_reference_dbm": null,
"rx_sample_delay": 0,
"rx_batch_pcgs": 2,
"num_buffers": 16,
"buffer_size": 8192,
"num_transfers": 8,
"stream_timeout_ms": 3500
}
fpga_path: null uses libbladeRF’s host auto-load path, typically ~/.config/Nuand/bladeRF/hostedxA4.rbf. Set fpga_path to an explicit .rbf file if you do not want host auto-load. tx_antenna and rx_antenna select bladeRF RF ports; the current Micro 2.0 example uses TXA and B_BALANCED.
Environment Variables
| Variable | Purpose |
|---|---|
CDMA_CONFIG_DIR | Default config directory when --config-dir is omitted |
RUST_LOG | Log level (info, debug, trace) |
Next Steps
- First Registration — Start the BTS and register a handset
- Configuration Reference — Full parameter reference