CORNET Unified Config Schema Reference¶
This page is auto-generated from cornet/config/schema.py.
All fields support YAML and JSON input.
Dot-path notation (e.g. network.middleware.rtf) is used in sweep axes.
UnifiedConfig¶
Root configuration model. Every config.yaml must parse as UnifiedConfig.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
network |
NetworkConfig | — | ✓ | Network simulation backend configuration (NS-3, Mininet, or both). |
robot |
RobotConfig | — | ✓ | Robot simulation backend configuration (Gazebo + ROS 2). |
experiment |
ExperimentConfig | — | ✓ | Experiment runtime settings: duration, output, metrics, and optional parameter sweep. |
catalog |
CatalogProvenance | null | null |
NetworkConfig¶
Network simulation backend settings (network: section).
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
plugin |
string | — | ✓ | Network backend plugin identifier: 'ns3', 'mininet', or 'ns3+mininet'. |
type |
string | — | ✓ | Network simulation type. Must match plugin. |
nodes |
list[NodeConfig] | [] |
List of network nodes in the topology. | |
mininet |
MininetConfig | null | null | |
middleware |
MiddlewareConfig | null | null | |
mobility |
MobilityConfig | null | null | |
scenario |
ScenarioConfig | null | null | |
radio_sites |
RadioSitesConfig | null | null | |
population |
list[PopulationEntity] | — | Background population. Walkers are Gazebo actors; devices are NS-3 nodes. | |
blockage |
string | "none" |
Statistical blockage. model_a enables TR 38.901 Model A with 3GPP defaults. | |
non_self_blockers |
string | null | null | |
channel_update_ms |
integer | null | null | |
requires_nr_capability |
list[string] | string | null | null |
timing_log |
boolean | False |
Forward --timingLog and --timingPeriodMs to the NS-3 scratch script even when it is not a bundled CORNET script. Bundled scripts receive the flags automatically. Custom scripts that do not implement the flags must leave this false. |
NodeConfig¶
A single network node in the topology.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
name |
string | — | ✓ | Unique node identifier within the network topology. |
type |
string | "MOBILE" |
Node role. MOBILE/STATIC for Mininet nodes; UE/GNB/EPC for NS-3 5G nodes. | |
container |
ContainerConfig | null | null | |
ip |
string | null | null | |
x |
number | null | null | |
y |
number | null | null | |
z |
number | null | null | |
model_name |
string | null | null |
ContainerConfig¶
Docker container configuration for a network node.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
image |
string | — | ✓ | Docker image name (e.g. 'ros:humble' or a custom image built from the task's Dockerfile). |
environment |
dict[str, string] | {} |
Environment variables injected into the container at start-up. | |
volumes |
list[string] | [] |
Host-to-container volume mounts in 'host:container[:mode]' format. | |
cpu_quota |
number | null | null | |
mem_limit_mb |
integer | null | null |
MininetConfig¶
Mininet-WiFi access point settings.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
wmediumd |
boolean | False |
Enable wmediumd wireless medium daemon for realistic Wi-Fi interference emulation (requires Docker). | |
ssid |
string | "cornet-net" |
SSID for the Mininet-WiFi access point. | |
mode |
string | "g" |
IEEE 802.11 mode ('a', 'b', 'g', 'n', 'ac'). | |
channel |
integer | 1 |
Wi-Fi channel number (1–14 for 2.4 GHz, 36–165 for 5 GHz). |
MiddlewareConfig¶
Co-simulation middleware layer settings.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
enabled |
boolean | False |
Enable the CORNET co-simulation middleware layer (TUN manager, packet dispatcher, AoI tracker, physics clock). | |
ip_list |
list[string] | [] |
IP addresses of simulation nodes that the TUN manager should bridge to the robot network. | |
rtf |
number | 1.0 |
Real-time factor. 1.0 = wall-clock speed. Values < 1 slow simulation; 0 = maximum simulation speed (decoupled from wall clock). | |
deadline_s |
number | 0.5 |
Packet age deadline in seconds. Packets older than this are dropped by the dispatcher before delivery. | |
ber |
number | 0.0 |
Bit-error rate in [0, 1]. 0 = no artificial errors. Applied by the dispatcher before AoI accounting. | |
clock_timeout_s |
number | 5.0 |
Seconds after which the physics clock falls back to wall clock if no NS-3 clock tick is received. | |
clock_socket |
string | "/tmp/cornet_clock.sock" |
UNIX socket path for the physics clock synchronisation channel. | |
positions_socket |
string | "/tmp/cornet_positions.sock" |
UNIX socket path for the PositionBroadcaster live position feed. | |
sensor_port |
integer | 5001 |
UDP port for robot sensor data flow (forwarded to NS-3 scratch script as --sensorPort). Default 5001. | |
control_port |
integer | 5002 |
UDP port for robot control command flow (forwarded to NS-3 scratch script as --controlPort). Default 5002. |
MobilityConfig¶
Live position update settings for PositionBroadcaster.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
enabled |
boolean | False |
Enable the PositionBroadcaster, which pushes Gazebo model poses to NS-3 node positions in real time. | |
source |
string | "socket" |
Position data source: 'socket', 'ros2_topic' (/tf), 'model_states' (Gazebo model states, including actors), or 'none'. | |
update_hz |
number | 10.0 |
Position update rate in Hz when update_mode='periodic'. | |
update_mode |
string | "periodic" |
When to push position updates: 'periodic' (every 1/update_hz s), 'threshold' (when movement exceeds position_threshold_m), 'step_aligned' (on NS-3 simulation step boundaries). | |
position_threshold_m |
number | 0.5 |
Minimum Euclidean movement in metres that triggers a position update when update_mode='threshold'. |
ScenarioConfig¶
5G/6G NS-3 scenario profile selection.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
profile |
string | — | ✓ | NS-3 scenario profile to run. One of: 5g_nr_urllc, 5g_nr_embb, 5g_nr_mmtc, 6g_thz. |
numerology |
integer | null | null | |
bandwidth_mhz |
number | null | null | |
scheduler |
string | null | null | |
experimental |
boolean | False |
Automatically set to True for profiles that are not production-ready (e.g. 6g_thz). Do not set manually. |
RadioSitesConfig¶
3GPP deployment preset (network.radio_sites).
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
deployment |
string | — | ✓ | Deployment preset. ISD and BS height are derived from the preset. |
rings |
integer | 0 |
Hex rings: 0, 1, or 2 sites rings (1, 7, or 19 sites). | |
sectors |
integer | 3 |
Sectors per site. 1 or 3. | |
inf_scenario |
string | null | null | |
inf_hall |
string | "small" |
InF hall. small is 120 x 60 m at 20 m ISD; big is 300 x 150 m at 50 m ISD. | |
rma_isd_m |
integer | null | null | |
robot_anchor |
string | "centre_site" |
Point in the layout that is aligned with the world origin. | |
indoor_building |
boolean | False |
Place the world as a building inside a macro layout, with outdoor-to-indoor loss. | |
wraparound |
boolean | False |
Install hexagonal wrap-around. Requires hex_wraparound. | |
background_ues_per_cell |
integer | 10 |
Background UEs per cell. Reduction is recorded in provenance. | |
custom_sites |
list[SitePosition] | — | Explicit site positions for deployment custom. Each item has x, y, and optional z. | |
blockage |
string | "none" |
TR 38.901 Model A when model_a. Model A does not follow actor positions. | |
non_self_blockers |
string | null | null |
SitePosition¶
One explicit site for a custom deployment.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
name |
string | null | null | |
x |
number | — | ✓ | Site X position in metres. |
y |
number | — | ✓ | Site Y position in metres. |
z |
number | null | null |
PopulationEntity¶
One background-population archetype.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
archetype |
string | — | ✓ | Background entity. Walkers have a Gazebo body; phone users also have an NS-3 UE. |
count |
integer | 1 |
How many entities of this archetype to place. | |
zone |
string | null | null | |
motion |
PopulationMotion | null | null | |
traffic |
PopulationTraffic | null | null | |
channel |
integer | null | null |
PopulationMotion¶
Walker speed range for seeded waypoint times.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
speed_mps |
list[number] | — | Walker speed range in metres per second. Waypoint times use a seed draw from this range. |
PopulationTraffic¶
Traffic profile for a population device.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
profile |
string | — | ✓ | NR and LTE use a 5G-LENA NGMN/3GPP generator. WiFi uses an NS-3 application. |
CatalogProvenance¶
Catalogue compiler provenance (catalog).
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
robot |
string | — | ✓ | Robot pack name. |
world |
string | — | ✓ | World pack name. |
network |
string | — | ✓ | Network pack name. |
versions |
dict[str, string] | — | Pack name to pack version. | |
standard |
boolean | True |
False for a custom deployment or a non-default blockage mapping. | |
controller_placement |
string | "edge_server" |
edge_server is one radio hop. ue places the controller as a second UE. |
RobotConfig¶
Robot simulation backend settings (robot: section).
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
plugin |
string | — | ✓ | Robot simulation backend plugin identifier (e.g. 'gazebo'). |
launch_file |
string | null | null | |
world |
string | null | null | |
robots |
list[RobotEntry] | [] |
List of robots to spawn in the simulation world. | |
model_paths |
list[string] | — | Directories prepended to GAZEBO_MODEL_PATH so world packs can resolve model:// URIs. |
RobotEntry¶
A single robot to spawn in the simulation world.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
name |
string | — | ✓ | Unique robot identifier within the simulation (used as ROS namespace and Gazebo model name). |
model |
ModelConfig | — | ✓ | Robot model file reference (URDF or SDF). |
pose |
PoseConfig | — | Initial spawn pose in the Gazebo world. | |
ros_namespace |
string | null | null |
ModelConfig¶
Robot model file reference.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
type |
string | — | ✓ | Robot model format: 'urdf' (ROS 2) or 'sdf' (Gazebo/SDF). |
path |
string | — | ✓ | Path to the model file, relative to the task directory or absolute. |
PoseConfig¶
Initial spawn pose for a robot.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
x |
number | 0.0 |
X position in metres (world frame). | |
y |
number | 0.0 |
Y position in metres (world frame). | |
z |
number | 0.0 |
Z position in metres (world frame, 0 = ground level). | |
roll |
number | 0.0 |
Roll angle in radians. | |
pitch |
number | 0.0 |
Pitch angle in radians. | |
yaw |
number | 0.0 |
Yaw angle in radians (0 = facing +X axis). |
ExperimentConfig¶
Experiment runtime settings (experiment: section).
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
name |
string | — | ✓ | Human-readable experiment name, used as the leaderboard title. |
duration |
number | — | ✓ | Experiment wall-clock duration in seconds. The orchestrator terminates all plugins after this time. |
seed |
integer | 1 |
Base seed for catalogue placement and NS-3 --rngRun. Sweep repeats use seed, seed+1, seed+2, and so on. | |
output_dir |
string | "results" |
Directory where results, logs, and leaderboard entries are written (relative to task directory or absolute). | |
primary_metric |
string | null | null | |
higher_is_better |
boolean | False |
Leaderboard sort direction for primary_metric. True = higher score ranks first; False = lower score ranks first. | |
sweep |
SweepConfig | null | null | |
timing |
TimingConfig | — | Thresholds for per-run timing telemetry (Gazebo RTF and NS-3 realtime lag). Monitoring only. |
SweepConfig¶
Parameter sweep configuration.
| Field | Type | Default | Required | Description |
|---|---|---|---|---|
axes |
dict[str, list[any]] | — | ✓ | Parameter sweep axes as a mapping of dot-path config keys to lists of values (e.g. {'network.numerology': [1, 2, 3], 'network.bandwidth_mhz': [20, 40]}). The cartesian product of all axes is expanded into one variant per combination. |
parallel |
boolean | False |
Run sweep variants in parallel subprocesses. False = sequential (safer for resource-limited machines). | |
repeats |
integer | 1 |
Number of independent repetitions per variant (for statistical averaging). Must be >= 1. |