-
Notifications
You must be signed in to change notification settings - Fork 188
Control Plane
We can use the Simple Switch CLI to configure the switch and populate match-action tables.
To get the switch CLI simply run:
simple_switch_CLI --thrift-port <port>
The CLI connect to the Thrift server running in each switch process. 9090
is the default value but of course if you are running several devices on your machine, you will need to provide a different port for each. One CLI instance can only connect to one switch device.
The most used commands to modify table contents are the following.
-
table_set_default <table_name> <action_name> <action_parameters>
is used to set the default action (i.e. the action executed when no match is found) of a table. -
table_add <table_name> <action_name> <match_fields> => <action_parameters>
is used to set the action related to a specific match in a table.
For example if we have the following table:
action drop(){
// drops packet
mark_to_drop(standard_metadata);
}
table table_name {
action action_name(bit<8> action_parameter){
...
}
key = {
standard_metadata.ingress_port: exact;
}
actions = {
drop;
action_name;
}
table_set_default table_name drop
table_add table_name action_name 1 => 5
The first command would set the default action, and action parameters (none in this case) for table table_name
. Thus, when
using the table_name
table if there is no match, the drop action will be called.
In the second example command adds an entry that matches if the standard_metadata.ingress_port
is equal to 1 and executes the
action action_name
with action_parameter
set to 5
.
You can also populate the table writing the commands directly in a text file and then feeding the CLI:
simple_switch_CLI --thrift-port <port> < command_file.txt
Alternatively, you can use the P4-Utils configuration file (i.e p4app.json
) to set a cli
configuration
file for each switch. When creating the topology, or rebooting switches, P4-Utils will automatically use
the file to populate and configure switches.
To set default cli
configuration files you need to define your switches like:
"switches": {
"s1": {
"cli_input": "<path_to_cli_commands_file>"
}
}
You can find all the documentation about p4app.json
in the P4-Utils documentation.
You can find a wrapper of the Control Plane CLI as one of the features of p4-utils. It basically allows you to do the same but instead of using text sent to the CLI you can use the power of a scripting language such as python. You can read more about this API here.