The reusable roles a description composes. A role step names one and passes variables; the role owns everything else.
This page is generated from the collection, so the variables and defaults below are what the installed version actually has rather than what someone remembered to write down. The prose is not generated.
The roles that produce results. Each one owns a complete measurement - staging the DSP, running the sweep, writing the CSV and the SigMF recording - so a description supplies the choices and nothing else.
cosmos_lab.orchestration.fr3_ofdm_berOFDM BER across the sb1 FR3 chain: two USRP-2974s and the two Pi-Radio upconverters they feed. Four devices, all of which must agree about the frequency plan before a single bit moves.
| Variable | Default | Notes |
|---|---|---|
cosmos_fr3_usrp_freq_hz |
1000000000 |
what both USRPs tune to |
cosmos_fr3_low_lo_hz |
700000000 |
front-end low-side LO |
cosmos_fr3_high_lo_hz |
10000000000 |
front-end high-side LO |
cosmos_fr3_rf_hz |
(computed) |
|
cosmos_fr3_min_if_offset_hz |
100000000 |
|
cosmos_fr3_use_upconverters |
true |
|
cosmos_fr3_tx_host |
(unset) |
|
cosmos_fr3_rx_host |
(unset) |
|
cosmos_fr3_tx_upconverter |
(unset) |
|
cosmos_fr3_rx_upconverter |
(unset) |
|
cosmos_fr3_channel |
0 |
|
cosmos_fr3_tx_gain_db |
30 |
|
cosmos_fr3_rx_gain_db |
30 |
|
cosmos_fr3_allow_transmit |
false |
|
cosmos_fr3_restore_on_teardown |
true |
|
cosmos_fr3_sub |
bpsk |
|
cosmos_fr3_tx_flowgraph |
"fr3_ofdm_tx_{{ cosmos_fr3_sub }}" |
|
cosmos_fr3_rx_flowgraph |
"fr3_ofdm_rx_{{ cosmos_fr3_sub }}" |
|
cosmos_fr3_samp_rate |
1000000 |
|
cosmos_fr3_amplitude |
0.02 |
|
cosmos_fr3_seed |
42 |
|
cosmos_fr3_skip |
200000 |
samples dropped while the link settles |
cosmos_fr3_usrp_tx_gain |
15 |
|
cosmos_fr3_usrp_rx_gain |
30 |
|
cosmos_fr3_tx_antenna |
"TX/RX" |
|
cosmos_fr3_rx_antenna |
"RX2" |
|
cosmos_fr3_device_args |
"resource=RIO0" |
|
cosmos_fr3_subdev |
"A:0" |
|
cosmos_fr3_expect_product |
X310 |
|
cosmos_fr3_sweep_mode |
noise |
|
cosmos_fr3_matrix_port_tx |
3 |
|
cosmos_fr3_matrix_port_rx |
6 |
|
cosmos_fr3_matrix_sdr_position |
2 |
|
cosmos_fr3_matrix_atten_db |
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, ... |
|
cosmos_am_url |
http://am-rt1.cosmos-lab.org:5054 |
|
cosmos_rfmatrix_username |
(unset) |
|
cosmos_rfmatrix_password |
(unset) |
|
cosmos_fr3_ctl_port |
8080 |
|
cosmos_fr3_tx_channel |
0 |
|
cosmos_fr3_rx_channel |
0 |
|
cosmos_fr3_gain_settle_seconds |
3 |
|
cosmos_fr3_tx_gains |
[30, 40, 50, 55, 60, 65, 70, 75, 80, 85, 89] |
|
cosmos_fr3_amplitudes |
[0.03, 0.04, 0.06, 0.08, 0.10, 0.15, 0.20, ... |
|
cosmos_fr3_probe_errors |
100 |
|
cosmos_fr3_probe_seconds |
60 |
|
cosmos_fr3_probe_clean_bits |
2000000 |
|
cosmos_fr3_csv_header |
"snr_db,noise_scale,bytes,packets,errors,bi... |
|
cosmos_fr3_snr_db |
"4:24:1" |
|
cosmos_fr3_noise_scales |
"" |
|
cosmos_fr3_dwell_seconds |
10 |
|
cosmos_fr3_target_errors |
500 |
|
cosmos_fr3_max_seconds_per_point |
300 |
stops the tail running forever |
cosmos_fr3_clean_bits |
10000000 |
|
cosmos_fr3_stop_on_clean |
true |
|
cosmos_fr3_min_snr_margin_db |
3.0 |
|
cosmos_fr3_refine_step_db |
0.25 |
|
cosmos_fr3_refine_span_db |
1.0 |
|
cosmos_fr3_settle_seconds |
"{{ 15 if cosmos_fr3_use_upconverters \| boo... |
|
cosmos_fr3_noise_method |
file |
|
cosmos_fr3_noise_file |
(unset) |
|
cosmos_fr3_noise_file_on_node |
(unset) |
|
cosmos_fr3_noise_kind |
awgn |
awgn | coloured | impulsive, for the stock ones |
cosmos_fr3_noise_count |
1048576 |
samples in a generated recording |
cosmos_fr3_noise_seed |
1234 |
|
cosmos_fr3_noise_stride |
65536 |
|
cosmos_fr3_dir |
/root/fr3-ofdm |
|
cosmos_fr3_capture_seconds |
2.0 |
|
cosmos_fr3_capture_frames |
300 |
|
cosmos_fr3_clock_source |
internal |
|
cosmos_fr3_time_source |
internal |
|
cosmos_fr3_data_link_addr |
"" |
|
cosmos_fr3_data_link_peer |
"192.168.40.2" |
|
cosmos_fr3_data_link_mtu |
9000 |
|
cosmos_fr3_tx_device_args |
"{{ cosmos_fr3_device_args }}" |
|
cosmos_fr3_rx_device_args |
"{{ cosmos_fr3_device_args }}" |
|
cosmos_fr3_results_dir |
/run/cosmos/fr3-ofdm |
|
cosmos_fr3_tx_unit |
cosmos-fr3-ofdm-tx |
|
cosmos_fr3_capture_iq |
false |
|
cosmos_fr3_matrix_prepare |
false |
|
cosmos_fr3_matrix_fixed_atten_db |
22 |
|
cosmos_fr3_stop_below_ber |
0 |
|
cosmos_fr3_ported_tx_mods |
[16qam, 64qam] |
|
cosmos_fr3_txpower_source |
usrp |
cosmos_lab.orchestration.gnuradio_berTwo-node digital-modulation BER measurement on stock GNU Radio 3.10.
| Variable | Default |
|---|---|
cosmos_ber_mods |
[bpsk, qpsk] |
cosmos_ber_ebn0 |
"0:13:0.25" |
cosmos_ber_nsyms |
2000000 |
cosmos_ber_freq_hz |
2400000000 |
cosmos_ber_samp_rate |
1000000 |
cosmos_ber_sps |
4 |
cosmos_ber_rolloff |
0.35 |
cosmos_ber_period |
1023 |
cosmos_ber_seed |
0 |
cosmos_ber_skip |
40000 |
cosmos_ber_equalizer |
none |
cosmos_ber_tx_antenna |
"TX/RX" |
cosmos_ber_rx_antenna |
"RX2" |
cosmos_ber_tx_gain |
65 |
cosmos_ber_rx_gain |
40 |
cosmos_ber_amplitude |
0.6 |
cosmos_ber_fll_bw |
(unset) |
cosmos_ber_costas_bw |
(unset) |
cosmos_ber_sync_bw |
(unset) |
cosmos_ber_eq_taps |
(unset) |
cosmos_ber_eq_mu |
(unset) |
cosmos_ber_eq_sps |
(unset) |
cosmos_ber_clock_source |
internal |
cosmos_ber_time_source |
internal |
cosmos_ber_sigmf |
true |
cosmos_ber_capture_iq |
false |
cosmos_ber_method |
auto |
cosmos_ber_subdomain_profiles |
(computed) |
cosmos_ber_method_default |
inject |
cosmos_ber_tx_gain_sweep |
[89, 84, 80, 76, 72, 68, 64, 60, 56] |
cosmos_ber_matrix_atten_db |
[0, 6, 12, 18, 24, 30, 36] |
cosmos_ber_matrix_port_tx |
(unset) |
cosmos_ber_matrix_port_rx |
(unset) |
cosmos_ber_min_link_ebn0 |
5 |
cosmos_ber_repo |
https://gitlab.orbit-lab.org/tutorials/ber.git |
cosmos_ber_version |
main |
cosmos_ber_dir |
/root/ber |
cosmos_ber_require_gnuradio |
true |
cosmos_ber_results_dir |
/run/cosmos/ber |
cosmos_ber_tx_unit |
cosmos-ber-tx |
cosmos_lab.orchestration.readsbBuild wiedehopf/readsb from source and decode ADS-B off a USRP.
| Variable | Default |
|---|---|
cosmos_readsb_freq_hz |
1090000000 |
cosmos_readsb_gain |
50 |
cosmos_readsb_duration |
60 |
cosmos_readsb_soapy_device |
"driver=uhd,type=b200" |
cosmos_readsb_repo |
https://github.com/wiedehopf/readsb |
cosmos_readsb_version |
dev |
cosmos_readsb_dir |
/root/readsb |
cosmos_readsb_jobs |
4 |
cosmos_readsb_build_packages |
(computed) |
cosmos_readsb_json_dir |
/run/readsb |
cosmos_readsb_results_dir |
/run/cosmos/adsb |
cosmos_readsb_force_build |
false |
cosmos_readsb_require_position |
false |
cosmos_readsb_min_aircraft |
0 |
cosmos_lab.orchestration.usrp_iq_calUHD IQ-imbalance and TX DC-offset calibration, made to survive re-imaging.
| Variable | Default |
|---|---|
cosmos_control_host |
localhost |
cosmos_usrp_cal_state |
restore |
cosmos_usrp_cal_store |
"{{ lookup('env', 'HOME') }}/.cosmos/uhd-cal" |
cosmos_usrp_cal_node_dir |
/root/.local/share/uhd/cal |
cosmos_usrp_cal_device_args |
"" |
cosmos_usrp_cal_utilities |
(computed) |
cosmos_usrp_cal_allow_transmit |
false |
cosmos_usrp_cal_timeout |
1800 |
cosmos_usrp_cal_warmup_seconds |
300 |
cosmos_usrp_cal_overwrite |
false |
cosmos_usrp_cal_strict |
false |
Run before any measurement, usually without being asked for. node_ready is the one that images a node when the description requests an image, so it is also the one that can destroy what was there.
cosmos_lab.orchestration.node_readyCapability-first node readiness. See docs/design.md section 4.5.
| Variable | Default |
|---|---|
cosmos_control_host |
localhost |
cosmos_requires |
{} |
cosmos_image_policy |
if-needed |
cosmos_image |
baseline.ndz |
cosmos_image_resize |
"0" |
cosmos_allow_destructive |
false |
cosmos_boot_timeout |
300 |
cosmos_image_timeout |
800 |
cosmos_write_image_stamp |
true |
cosmos_node_user |
root |
cosmos_lab.orchestration.softwareStage an experiment's software onto a node. See docs/design.md section 5.4.
| Variable | Default |
|---|---|
cosmos_software |
{} |
cosmos_software_cache_valid_time |
3600 |
cosmos_software_venv |
/opt/cosmos/venv |
cosmos_software_use_venv |
true |
cosmos_software_break_system_packages |
false |
cosmos_software_remove_forbidden |
false |
cosmos_software_replace_unmanaged |
false |
cosmos_lab.orchestration.sdr_commonEstablish that a node's SDR stack is usable, by probing it.
| Variable | Default |
|---|---|
cosmos_sdr_device_args |
"type=b200" |
cosmos_sdr_expect_product |
B210 |
cosmos_sdr_require_soapy |
true |
cosmos_sdr_soapy_driver |
uhd |
cosmos_sdr_forbidden_packages |
(computed) |
cosmos_sdr_forbidden_fatal |
true |
cosmos_sdr_uhd_images_dir |
"" |
cosmos_sdr_download_uhd_images |
false |
Attenuator matrices, positioners, upconverters and front ends - equipment reached over HTTP rather than by logging into a node, and shared with everyone else on the testbed. Every one of these restores what it found, even when the experiment fails.
cosmos_lab.orchestration.service_rfmatrixDrive the conducted-RF attenuation matrix. See docs/design.md section 5.3.
| Variable | Default |
|---|---|
cosmos_control_host |
localhost |
cosmos_am_url |
http://am-rt1.cosmos-lab.org:5054 |
cosmos_rfmatrix_username |
(unset) |
cosmos_rfmatrix_password |
(unset) |
cosmos_rfmatrix_state |
queried |
cosmos_rfmatrix_port_a |
(unset) |
cosmos_rfmatrix_port_b |
(unset) |
cosmos_rfmatrix_attenuation |
(unset) |
cosmos_rfmatrix_values |
[] |
cosmos_rfmatrix_switch |
(unset) |
cosmos_rfmatrix_port |
(unset) |
cosmos_rfmatrix_reset_on_teardown |
false |
cosmos_lab.orchestration.service_xy_tablePosition the sandbox XY tables. See docs/design.md section 5.3.
| Variable | Default |
|---|---|
cosmos_control_host |
localhost |
cosmos_am_url |
http://am-rt1.cosmos-lab.org:5054 |
cosmos_xy_tables |
[] |
cosmos_xy_x |
(unset) |
cosmos_xy_y |
(unset) |
cosmos_xy_angle |
(unset) |
cosmos_xy_state |
positioned |
cosmos_xy_tolerance |
2.0 |
cosmos_xy_angle_tolerance |
1.0 |
cosmos_xy_wait |
true |
cosmos_xy_timeout |
180 |
cosmos_xy_poll_interval |
5 |
cosmos_xy_terminal_states |
[Idle] |
cosmos_xy_terminal_rotator_states |
[Holding, Idle] |
cosmos_lab.orchestration.service_piradioConfigure PI Radio FR3 upconverters. See docs/design.md section 5.3.
| Variable | Default |
|---|---|
cosmos_control_host |
localhost |
cosmos_piradio_hosts |
[] |
cosmos_piradio_port |
5111 |
cosmos_piradio_state |
queried |
cosmos_piradio_low_lo |
(unset) |
cosmos_piradio_high_lo |
(unset) |
cosmos_piradio_chain |
(unset) |
cosmos_piradio_channel |
(unset) |
cosmos_piradio_value |
(unset) |
cosmos_piradio_iq |
(unset) |
cosmos_piradio_allow_transmit |
false |
cosmos_piradio_restore_on_teardown |
false |
cosmos_lab.orchestration.service_rf_controlConfigure per-node RF front ends. See docs/design.md section 5.3.
| Variable | Default |
|---|---|
cosmos_control_host |
localhost |
cosmos_am_url |
http://am-rt1.cosmos-lab.org:5054 |
cosmos_rf_nodes |
[] |
cosmos_rf_state |
configured |
cosmos_rf_ports |
[0] |
cosmos_rf_power_amp |
"off" |
cosmos_rf_f_center |
(unset) |
cosmos_rf_f_bandwidth |
(unset) |
cosmos_rf_f_lower |
(unset) |
cosmos_rf_f_upper |
(unset) |
cosmos_rf_allow_transmit |
false |
An access point, a station, and the verification that they actually associated - a worked example of composing small roles rather than writing one large one.
cosmos_lab.orchestration.wifi_apBring up an 802.11 access point with hostapd.
| Variable | Default |
|---|---|
cosmos_wifi_ssid |
cosmos-wifi |
cosmos_wifi_channel |
1 |
cosmos_wifi_hw_mode |
g |
cosmos_wifi_ap_ip |
192.168.100.1/24 |
cosmos_wifi_iperf_server |
true |
cosmos_wifi_ap_unit |
cosmos-hostapd |
cosmos_wifi_iperf_unit |
cosmos-iperf3 |
cosmos_lab.orchestration.wifi_staJoin an 802.11 network with wpa_supplicant.
| Variable | Default |
|---|---|
cosmos_wifi_ssid |
cosmos-wifi |
cosmos_wifi_sta_ip |
192.168.100.2/24 |
cosmos_wifi_assoc_timeout |
60 |
cosmos_wifi_sta_unit |
cosmos-wpa-supplicant |
cosmos_lab.orchestration.wifi_commonPrepare a node's 802.11 radio. Shared by wifi_ap and wifi_sta.
| Variable | Default |
|---|---|
cosmos_wifi_reg_domain |
US |
cosmos_wifi_packages |
(computed) |
cosmos_wifi_drivers_preferred |
(computed) |
cosmos_wifi_driver |
ath10k_pci |
cosmos_wifi_skip_install |
false |
cosmos_wifi_iface_retries |
12 |
cosmos_wifi_iface_delay |
5 |
cosmos_lab.orchestration.wifi_verifyVerify the link end to end: association, reachability, throughput.
| Variable | Default |
|---|---|
cosmos_wifi_peer_ip |
192.168.100.1 |
cosmos_wifi_ping_count |
5 |
cosmos_wifi_max_loss_pct |
0 |
cosmos_wifi_iperf_seconds |
5 |
cosmos_wifi_min_mbps |
0 |
cosmos_wifi_results_dir |
/run/cosmos/wifi |
Called by the framework rather than by a description. Listed for completeness and for anyone reading the source.
cosmos_lab.orchestration.experiment_stepInterpret one step. See docs/design.md section 5.6 for the step kinds.
| Variable | Default |
|---|---|
cosmos_step |
{} |
cosmos_step_index |
0 |
cosmos_step_teardown |
false |
cosmos_artifacts_dir |
"{{ lookup('env', 'HOME') }}/cosmos-artifacts" |
cosmos_external_dir |
"{{ lookup('env', 'HOME') }}/.cosmos/external" |
cosmos_lab.orchestration.run_manifestWrite run.json, the reproducibility record (F7, docs/design.md section 5.8).
| Variable | Default |
|---|---|
cosmos_artifacts_dir |
"{{ lookup('env', 'HOME') }}/cosmos-artifacts" |
cosmos_run_id |
"manual" |
cosmos_manifest_experiment |
{} |
cosmos_manifest_assignment |
{} |
cosmos_manifest_parameters |
{} |
cosmos_manifest_description_path |
"" |
cosmos_manifest_subdomain |
"" |
cosmos_manifest_include_inventory |
true |
Generated from the collection source.