Updated basic* README files (#80)
* Adding initial implementation of basic_encap example * Updated basic_encap example to count the number of valid packets * Updated basic_encap example to put encapsulation layer after Ethernet header. * Added solution file for basic_encap example * Changed the name of the basic_encap example to basic_tunnel and called the new header myTunnel. Also changed the myTunnel field names slightly. * Updated the README file for the basic_tunnel exercise. Also added topo.pdf image to serve as a reference during implementation. * Updated basic/README.md to point to basic_tunnel as the next exercise. * Updated the README for basic to point to basic_tunnel. Updated the starter code for basic_tunnel to look like basic solution with todo comments. Updated send.py and receive.py to be able to send both plain IP packets and tunneled IP packets. Updated basic_tunnel.p4 to have same control flow as p4runtime exercise. * Updated the basic and basic_tunnel README files to remove references to the old run.sh script. Updated TODO list in basic_tunnel README
This commit is contained in:
parent
65a4334734
commit
ce7c3c372b
@ -39,7 +39,7 @@ up a switch in Mininet to test its behavior.
|
|||||||
* start a Mininet instance with three switches (`s1`, `s2`, `s3`)
|
* start a Mininet instance with three switches (`s1`, `s2`, `s3`)
|
||||||
configured in a triangle, each connected to one host (`h1`, `h2`,
|
configured in a triangle, each connected to one host (`h1`, `h2`,
|
||||||
and `h3`).
|
and `h3`).
|
||||||
* The hosts are assigned IPs of `10.0.1.1`, `10.0.2.2`, etc.
|
* The hosts are assigned IPs of `10.0.1.1`, `10.0.2.2`, and `10.0.3.3`.
|
||||||
|
|
||||||
2. You should now see a Mininet command prompt. Open two terminals
|
2. You should now see a Mininet command prompt. Open two terminals
|
||||||
for `h1` and `h2`, respectively:
|
for `h1` and `h2`, respectively:
|
||||||
@ -79,7 +79,7 @@ the control plane as part of the rule.
|
|||||||
|
|
||||||
In this exercise, we have already implemented the the control plane
|
In this exercise, we have already implemented the the control plane
|
||||||
logic for you. As part of bringing up the Mininet instance, the
|
logic for you. As part of bringing up the Mininet instance, the
|
||||||
`run.sh` script will install packet-processing rules in the tables of
|
`make run` command will install packet-processing rules in the tables of
|
||||||
each switch. These are defined in the `sX-commands.txt` files, where
|
each switch. These are defined in the `sX-commands.txt` files, where
|
||||||
`X` corresponds to the switch number.
|
`X` corresponds to the switch number.
|
||||||
|
|
||||||
@ -140,12 +140,12 @@ Other questions to consider:
|
|||||||
|
|
||||||
There are several problems that might manifest as you develop your program:
|
There are several problems that might manifest as you develop your program:
|
||||||
|
|
||||||
1. `basic.p4` might fail to compile. In this case, `run.sh` will
|
1. `basic.p4` might fail to compile. In this case, `make run` will
|
||||||
report the error emitted from the compiler and halt.
|
report the error emitted from the compiler and halt.
|
||||||
|
|
||||||
2. `basic.p4` might compile but fail to support the control plane
|
2. `basic.p4` might compile but fail to support the control plane
|
||||||
rules in the `s1-commands.txt` through `s3-command.txt` files that
|
rules in the `s1-commands.txt` through `s3-command.txt` files that
|
||||||
`run.sh` tries to install using the Bmv2 CLI. In this case, `run.sh`
|
`make run` tries to install using the Bmv2 CLI. In this case, `make run`
|
||||||
will report these errors to `stderr`. Use these error messages to fix
|
will report these errors to `stderr`. Use these error messages to fix
|
||||||
your `basic.p4` implementation.
|
your `basic.p4` implementation.
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ detailed and can help pinpoint logic errors in your implementation.
|
|||||||
|
|
||||||
#### Cleaning up Mininet
|
#### Cleaning up Mininet
|
||||||
|
|
||||||
In the latter two cases above, `run.sh` may leave a Mininet instance
|
In the latter two cases above, `make run` may leave a Mininet instance
|
||||||
running in the background. Use the following command to clean up
|
running in the background. Use the following command to clean up
|
||||||
these instances:
|
these instances:
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ to ensure that the IP routing is working as expected.
|
|||||||
|
|
||||||
1. In your shell, run:
|
1. In your shell, run:
|
||||||
```bash
|
```bash
|
||||||
./run.sh
|
make run
|
||||||
```
|
```
|
||||||
This will:
|
This will:
|
||||||
* compile `basic_tunnel.p4`, and
|
* compile `basic_tunnel.p4`, and
|
||||||
@ -66,11 +66,11 @@ within each table are inserted by the control plane. When a rule
|
|||||||
matches a packet, its action is invoked with parameters supplied by
|
matches a packet, its action is invoked with parameters supplied by
|
||||||
the control plane as part of the rule.
|
the control plane as part of the rule.
|
||||||
|
|
||||||
In this exercise, you will need to add a couple of static control plane
|
For this exercise, we have already added the necessary static control
|
||||||
rules for the tunneling protocol. As part of bringing up the Mininet
|
plane entries. As part of bringing up the Mininet instance, the
|
||||||
instance, the `run.sh` script will install packet-processing rules in
|
`make run` command will install packet-processing rules in the tables
|
||||||
the tables of each switch. These are defined in the `sX-commands.txt`
|
of each switch. These are defined in the `sX-commands.txt` files,
|
||||||
files, where `X` corresponds to the switch number.
|
where `X` corresponds to the switch number.
|
||||||
|
|
||||||
**Important:** A P4 program also defines the interface between the
|
**Important:** A P4 program also defines the interface between the
|
||||||
switch pipeline and control plane. The commands in the files
|
switch pipeline and control plane. The commands in the files
|
||||||
@ -89,8 +89,8 @@ does not exist in the packet.
|
|||||||
|
|
||||||
Your job will be to do the following:
|
Your job will be to do the following:
|
||||||
|
|
||||||
1. **TODO:** Add a new header type called `myTunnel_t` that contains two 16-bit fields: `proto_id` and `dst_id`.
|
1. **NOTE:** A new header type has been added called `myTunnel_t` that contains two 16-bit fields: `proto_id` and `dst_id`.
|
||||||
2. **TODO:** Add a `myTunnel_t` header to the `headers` struct.
|
2. **NOTE:** The `myTunnel_t` header has been added to the `headers` struct.
|
||||||
2. **TODO:** Update the parser to extract either the `myTunnel` header or `ipv4` header based on the `etherType` field in the Ethernet header. The parser should also extract the `ipv4` header after the `myTunnel` header if `proto_id` == `TYPE_IPV4` (i.e. 0x0800).
|
2. **TODO:** Update the parser to extract either the `myTunnel` header or `ipv4` header based on the `etherType` field in the Ethernet header. The parser should also extract the `ipv4` header after the `myTunnel` header if `proto_id` == `TYPE_IPV4` (i.e. 0x0800).
|
||||||
3. **TODO:** Define a new action called `myTunnel_forward` that simply sets the egress port (i.e. `egress_spec` field of the `standard_metadata` bus) to the port number provided by the control plane.
|
3. **TODO:** Define a new action called `myTunnel_forward` that simply sets the egress port (i.e. `egress_spec` field of the `standard_metadata` bus) to the port number provided by the control plane.
|
||||||
4. **TODO:** Define a new table called `myTunnel_exact` that perfoms an exact match on the `dst_id` field of the `myTunnel` header. This table should invoke either the `myTunnel_forward` action if the there is a match in the table and it should invoke the `drop` action otherwise.
|
4. **TODO:** Define a new table called `myTunnel_exact` that perfoms an exact match on the `dst_id` field of the `myTunnel` header. This table should invoke either the `myTunnel_forward` action if the there is a match in the table and it should invoke the `drop` action otherwise.
|
||||||
@ -134,12 +134,12 @@ Hints:
|
|||||||
|
|
||||||
There are several problems that might manifest as you develop your program:
|
There are several problems that might manifest as you develop your program:
|
||||||
|
|
||||||
1. `basic_tunnel.p4` might fail to compile. In this case, `run.sh` will
|
1. `basic_tunnel.p4` might fail to compile. In this case, `make run` will
|
||||||
report the error emitted from the compiler and halt.
|
report the error emitted from the compiler and halt.
|
||||||
|
|
||||||
2. `basic_tunnel.p4` might compile but fail to support the control plane
|
2. `basic_tunnel.p4` might compile but fail to support the control plane
|
||||||
rules in the `s1-commands.txt` through `s3-command.txt` files that
|
rules in the `s1-commands.txt` through `s3-command.txt` files that
|
||||||
`run.sh` tries to install using the Bmv2 CLI. In this case, `run.sh`
|
`make run` tries to install using the Bmv2 CLI. In this case, `make run`
|
||||||
will report these errors to `stderr`. Use these error messages to fix
|
will report these errors to `stderr`. Use these error messages to fix
|
||||||
your `basic_tunnel.p4` implementation or forwarding rules.
|
your `basic_tunnel.p4` implementation or forwarding rules.
|
||||||
|
|
||||||
@ -151,12 +151,12 @@ detailed and can help pinpoint logic errors in your implementation.
|
|||||||
|
|
||||||
#### Cleaning up Mininet
|
#### Cleaning up Mininet
|
||||||
|
|
||||||
In the latter two cases above, `run.sh` may leave a Mininet instance
|
In the latter two cases above, `make` may leave a Mininet instance
|
||||||
running in the background. Use the following command to clean up
|
running in the background. Use the following command to clean up
|
||||||
these instances:
|
these instances:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mn -c
|
make stop
|
||||||
```
|
```
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
|
Loading…
x
Reference in New Issue
Block a user