|
|
## Controlling the switch
|
|
|
|
|
|
The [BMv2 repository](https://github.com/p4lang/behavioral-model) implements two different versions of the *Simple Switch* that have different control plane interfaces.
|
|
|
|
|
|
| Target | Control Plane |
|
|
|
|:--------------------------------------------------------------------------------------------------------|:----------------------|
|
|
|
| [`simple_switch`](https://github.com/p4lang/behavioral-model/tree/main/targets/simple_switch) | `Thrift` |
|
|
|
| [`simple_switch_grpc`](https://github.com/p4lang/behavioral-model/tree/main/targets/simple_switch_grpc) | `P4Runtime`, `Thrift` |
|
|
|
|
|
|
The following table shows different methods to configure the *Simple Switch* that will be covered in more detail in the subsequent paragraphs. Notice that the APIs (i.e. `SimpleSwitchThriftAPI` and `SimpleSwitchP4RuntimeAPI`) are provided by [*P4-Utils*](https://github.com/nsg-ethz/p4-utils), whereas the client (i.e. `simple_switch_CLI`) it is directly implemented by BMv2.
|
|
|
|
|
|
| Control Plane | Methods |
|
|
|
|:--------------|:--------------------------------------------|
|
|
|
| `Thrift` | [`SimpleSwitchThriftAPI`](#thrift-api), [`simple_switch_CLI`](#simple-switch-client)|
|
|
|
| `P4Runtime` | [`SimpleSwitchP4RuntimeAPI`](https://github.com/nsg-ethz/p4-utils/blob/junota/p4utils/utils/sswitch_p4runtime_API.py)|
|
|
|
|
|
|
|
|
|
## *Simple Switch* Client
|
|
|
|
|
|
We can use the `simple_switch_CLI` to configure the switch and populate match-action tables.
|
|
|
|
|
|
|
|
|
### Running the client
|
|
|
|
|
|
To get the switch client simply run:
|
... | ... | @@ -12,6 +30,7 @@ simple_switch_CLI --thrift-port <port> |
|
|
|
|
|
The client connect to the *Thrift* server running in each switch process. `9090` is the default port number but of course if you are running several devices on your machine, you will need to provide a different port for each. One client instance can only connect to one switch device.
|
|
|
|
|
|
|
|
|
### Filling tables
|
|
|
|
|
|
The most used commands to modify table contents are the following.
|
... | ... | @@ -42,7 +61,6 @@ table table_name { |
|
|
}
|
|
|
```
|
|
|
|
|
|
|
|
|
```
|
|
|
table_set_default table_name drop
|
|
|
table_add table_name action_name 1 => 5
|
... | ... | @@ -75,6 +93,12 @@ To set default client configuration files you need to define your switches like: |
|
|
You can find all the documentation about `p4app.json` in the [*P4-Utils* documentation](https://github.com/nsg-ethz/p4-utils#topology-description).
|
|
|
|
|
|
|
|
|
## *P4-Utils* Control Plane APIs
|
|
|
## *Thrift* API
|
|
|
|
|
|
You can find a wrapper of the *Simple Switch* Client as one of the features of *P4-Utils*. It is called [`SimpleSwitchThriftAPI`](https://github.com/nsg-ethz/p4-utils/blob/junota/p4utils/utils/sswitch_thrift_API.py) and basically allows the user to perform the same opertations but, instead of using text sent to the client, one can use the power of a scripting language such as Python. You can read more about this API [here](https://github.com/nsg-ethz/p4-utils#control-plane-api).
|
|
|
|
|
|
## *P4Runtime* API
|
|
|
|
|
|
The P4 language consortium has recently defined [*P4Runtime*](https://p4.org/p4-spec/p4runtime/v1.3.0/P4Runtime-Spec.html), a control plane specification for controlling the data plane elements of a device defined or described by a P4 program. This new protocol aims at being the standard for P4 devices so that even control plane programs can be target-independent.
|
|
|
|
|
|
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](https://github.com/nsg-ethz/p4-utils#control-plane-api). |
|
|
\ No newline at end of file |
|
|
In response to this need, in the last update of *P4-Utils* a P4Runtime API was introduced. It is called [`SimpleSwitchP4RuntimeAPI`](https://github.com/nsg-ethz/p4-utils/blob/junota/p4utils/utils/sswitch_p4runtime_API.py) and was designed to provide methods similar, in functioning and naming, to those of `SimpleSwitchThriftAPI` so that migrating from one to another is easier. Indeed, the only difference among the APIs is the protocol and it is as transparent as possible for the user. |