Node Configuration Protocols
Migrated from Original Docs/Node/Node-ConfigurationProtocols.md
Node Configuration Protocols
1. Configuration Sources and Priority
Antenna node configuration comes from multiple sources in priority order:
- HTTP POST (highest priority) , real-time commands from central server
- Startup configuration file ,
/etc/node/config.yamlor environment variables - Defaults , compile-time or hardcoded sensible defaults
- Cache , locally cached mission plan (fallback during central outage)
2. Startup Configuration File
Location: /etc/node/config.yaml
Key sections:
node_id: unique identifierlocation: latitude, longitude, altitudehardware: antenna type, RF device, sample rate, frequency, gainapi: host, port, TLS, API keyipc: control and telemetry bus addressesstreams: telemetry, IQ, metrics output configurationgnss: receiver device, baud rate, update ratelogging: level, file, max size
Example:
node_id: node-001
hardware:
antenna_type: phased_array
sample_rate_sps: 40000000
frequency_hz: 5400000000
api:
port: 8080
tls_enabled: false
antenna:
slew_rate_deg_per_sec: 5.03. Runtime Configuration via HTTP
Once running, all configuration is via REST POST. Central server sends commands like:
curl -X POST http://node-001:8080/radio/config \
-H "Content-Type: application/json" \
-d '{
"frequency_hz": 5400000000,
"gain_db": 32
}'Validation steps:
- Schema validation: does the request match expected field types?
- Hardware capability check: is this frequency/sample rate supported?
- Resource availability: are there enough CPU/FPGA resources?
- Current state compatibility: is a reconfiguration safe right now?
Response on success: HTTP 200 with status: "accepted" and command_id.
Response on failure: HTTP 400 or 409 with error detail and legal value ranges.
4. Command Acknowledgment and Ordering
- Client sends
POST /radio/configwithcommand_id: "cmd-001" - FastAPI publishes
{command_id: "cmd-001", ...}to control IPC bus - Each affected subsystem reads, validates, and applies
- Worker publishes
{command_id: "cmd-001", status: "done"}to status bus - FastAPI aggregates and emits in GET
/status
Central server can check: GET /status → look for last_command_id: "cmd-001" and last_command_status: "done".
5. Frequency Hold and Doppler Compensation
Dedicated RF feature separate from tracking modes. Can be toggled independently at runtime.
Start request:
POST /frequency-hold/start
{
"enabled": true,
"center_frequency_hz": 5400000000,
"search_window_hz": 50000,
"max_track_rate_hz_per_s": 8000,
"loop_bandwidth_hz": 40,
"doppler_feedforward": {
"enabled": true,
"source": "trajectory",
"radial_velocity_mps": 1200
}
}Status response:
{
"state": "locked",
"carrier_offset_hz": -18250,
"afc_correction_hz": -18100,
"estimated_track_rate_hz_per_s": 4200
}Recommended operational thresholds:
search_window_hz: 10-200 kHzloop_bandwidth_hz: 10-80 Hzmax_track_rate_hz_per_s: from worst-case radial acceleration model
Related: See System-APIs-Contracts for complete endpoint specifications.