1xBTS 1xBTS

Remote Radio

cdma-radiod runs next to an SDR and serves it over the network. On another machine, a radio config of kind network points at it. The mobile station and the BTS both treat that config like a directly attached radio.

Use it when the radio is attached to a different machine from the software: a laptop at the antenna and a build host elsewhere, a radio on a Mac with the mobile in a Linux VM, or one host feeding several test setups in turn.

Run the server

cdma-radiod builds with all four SDR backends by default:

Terminal window
cargo build --release -p cdma-radiod
cdma-radiod --radio config/radio_uhd_b210_native.json

--radio takes any standard radio config. Device, antenna, gain and stream settings all stay on the server. Listener settings come from config/radiod_network.json:

{
"listen": "0.0.0.0:50710",
"data_listen": "0.0.0.0:50711",
"tx_sample_rate_hz": 4915200
}
KeyDefaultDescription
listen0.0.0.0:50710Control connection (gRPC)
data_listen0.0.0.0:50711Sample stream
tx_sample_rate_hz4915200Transmit sample rate. The default suits the mobile station and a single-carrier 1x BTS

Trusted networks only. cdma-radiod does not authenticate clients. Anyone who can reach it can retune the radio and transmit. Run it on a private network, or set listen and data_listen to 127.0.0.1 in config/radiod_network.local.json when the client runs on the same machine.

If the client disappears (it crashes, or the network drops), radiod stops transmitting by itself once samples stop arriving.

Point a client at it

config/radio_network.json:

{
"kind": "network",
"addr": "radio-host:50710",
"data_host": "radio-host",
"samples_per_packet": 2200,
"tx_transport": "tcp",
"rx_enabled": true
}
KeyDefaultDescription
addrrequiredradiod’s control address
data_hosthost of addrradiod’s host for the sample stream
samples_per_packet350Samples per network packet. The default fits a standard 1500-byte MTU. Up to 2200 (the shipped example) cuts the packet rate on networks with jumbo frames
tx_transportudpudp has the least overhead, and a lost packet becomes a short silent gap on air. tcp never loses transmit samples
rx_enabledtrueStream received samples back to the client
rx_gain_db, rx_antennaradiod’s configOverride receive settings from the client
tx_sample_delayradiod’s radio configTransmit timing compensation for the mobile station. The client uses the server’s value unless this overrides it

Then use it like any other radio:

Terminal window
# Mobile station
cdma-ms console --radio config/radio_network.json --prl my-network.prl
# BTS, built without any local SDR drivers
cargo run --release -p cdma-nib --no-default-features --features network-backend -- \
--config-dir config \
--radio-config config/radio_network.json

Network requirements

  • Bandwidth. Receive runs at about 160 Mbps and transmit at up to the same, so use wired gigabit Ethernet. Wi-Fi is not enough.
  • Reachability. radiod sends received samples back to the address the client’s sample stream comes from. A NAT between client and server can break this, so keep both on the same network.
  • One client at a time. A new client takes over the radio from the previous one. Sample rates, antenna and bandwidth are fixed once a client connects, so restart radiod to change them.
Esc