CNC Command Line Arguments
The cnc_cli utility provides two primary subcommands: get for retrieving operational network state, and set-schedule for applying new configurations.
Data Retrieval: get
The get command allows administrators to fetch various operational parameters and states from the TSN network.
Syntax:
cnc_cli get <category> [target-options] [format-options]
Categories (<category>):
schedule: Retrieves the currently active Gate Control Lists (GCLs).lldp: Retrieves Link Layer Discovery Protocol topology data.gptp: Retrieves Generalized Precision Time Protocol synchronization state.topology: Retrieves the complete network topology layout. (Note: Only supports the--allflag).graph: Retrieves the raw topology graph data. (Note: Only supports the--allflag).
Target Options (Mutually Exclusive): You must specify whether to fetch data for the entire network or for specific targets.
-a,--all: Fetches information from all configured devices and interfaces.-t,--targets <target1> <target2> ...: Fetches information exclusively for the specified nodes or interfaces (e.g.,vstsn01.enp0f2s0).
Format Options:
-f,--format <format>: Defines the output structure. Options areindented(default, human-readable) orjson(ideal for programmatic parsing).
Examples:
# Get the full network topology
cnc_cli get topology --all
# Get LLDP data for specific interfaces formatted as JSON
cnc_cli get lldp --format json --targets vstsn01.enp0f2s0 vstsn02.enp0f2s2
Configuration: set-schedule
The set-schedule command is used to push and deploy new Gate Control Lists (GCLs) to the network nodes.
Syntax:
cnc_cli set-schedule <input> [options]
Input (<input>):
<filepath>: The absolute or relative path to a JSON file containing the schedule definitions (e.g.,~/schedule.json).-: Instructs the CLI to read the JSON schedule data directly from standard input (stdin), enabling data piping from other scripts.
Json Structure
Options:
-g,--gap <mode>: Defines how the CNC should handle “gaps” or incomplete schedules (i.e., GCLs that exist on the switch but are not explicitly mentioned in your new JSON file).deny(Default): Rejects the incomplete schedule deployment entirely.hold: Deploys the new changes but leaves any unmentioned GCLs exactly as they currently are.zero: Deploys the new changes and forcefully clears/zeroes all unmentioned GCLs.
Examples:
# Push a schedule from a file, leaving unmodified GCLs untouched
cnc_cli set-schedule ~/schedule.json --gap hold
# Pipe a schedule dynamically from a Python generator into the CLI
python3 super-scheduler.py | cnc_cli set-schedule -
Schedule JSON Structure (Payload Format)
When pushing new configurations using the set-schedule command, the input JSON file must strictly adhere to the expected Gate Control List (GCL) schema.
The payload is structured hierarchically per target node (host_name), followed by a list of physical interfaces, and finally the gate parameters.
Example Payload:
{
"host_name": "vstsn01",
"interfaces": [
{
"name": "veth-red-host",
"bridge_port": {
"gate_parameter_table": {
"admin_data_set": true,
"gate_enabled": true,
"config_change": true,
"admin_gate_states": 255,
"admin_cycle_time_extension_ns": 500,
"admin_cycle_time": {
"numerator": 1000000,
"denominator": 1000000000
},
"admin_base_time": {
"seconds": "0",
"nanoseconds": 0
},
"admin_control_list": [
{
"index": 0,
"operation_name": "sched:set-gate-states",
"gate_states_value": 255,
"time_interval_value": 300000
},
{
"index": 1,
"operation_name": "sched:set-gate-states",
"gate_states_value": 255,
"time_interval_value": 700000
}
]
}
}
}
]
}
Key Parameter Breakdown:
host_name: The exact identifier of the target node (e.g.,vstsn01).interfaces.name: The specific physical interface to configure (e.g.,veth-red-host).admin_cycle_time: Defines the total duration of one repeating schedule cycle as a fraction of a second (numerator/denominator). For example,1000000 / 1000000000equates to a 1-millisecond cycle.admin_base_time: The precise gPTP network timestamp (in seconds and nanoseconds) defining when the schedule should start executing. Setting this to"0"initiates the schedule as soon as the configuration is processed.admin_control_list: The sequential list of gate operations that make up the cycle.gate_states_value: An 8-bit integer mask (0-255) defining which of the 8 traffic queues are open (1) or closed (0). For example,255(binary11111111) opens all queues, while0closes all queues.time_interval_value: The duration for which this specific gate state is held, defined in nanoseconds. The sum of all intervals in the list should logically match the totaladmin_cycle_time.