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:
cargo build --release -p cdma-radiodcdma-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}| Key | Default | Description |
|---|---|---|
listen | 0.0.0.0:50710 | Control connection (gRPC) |
data_listen | 0.0.0.0:50711 | Sample stream |
tx_sample_rate_hz | 4915200 | Transmit sample rate. The default suits the mobile station and a single-carrier 1x BTS |
Trusted networks only.
cdma-radioddoes not authenticate clients. Anyone who can reach it can retune the radio and transmit. Run it on a private network, or setlistenanddata_listento127.0.0.1inconfig/radiod_network.local.jsonwhen 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}| Key | Default | Description |
|---|---|---|
addr | required | radiod’s control address |
data_host | host of addr | radiod’s host for the sample stream |
samples_per_packet | 350 | Samples 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_transport | udp | udp has the least overhead, and a lost packet becomes a short silent gap on air. tcp never loses transmit samples |
rx_enabled | true | Stream received samples back to the client |
rx_gain_db, rx_antenna | radiod’s config | Override receive settings from the client |
tx_sample_delay | radiod’s radio config | Transmit timing compensation for the mobile station. The client uses the server’s value unless this overrides it |
Then use it like any other radio:
# Mobile stationcdma-ms console --radio config/radio_network.json --prl my-network.prl
# BTS, built without any local SDR driverscargo run --release -p cdma-nib --no-default-features --features network-backend -- \ --config-dir config \ --radio-config config/radio_network.jsonNetwork 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.