Updates the examples to use the new build scripts (except Hula). (#74)

* Added Makefile and topology.jsons for all examples.

* use branch

* Updated MRI exercise (#73)

* Updated MRI exercise

* Updated basic_tunnel.p4 for changes to p4 lang

* updated other examples
This commit is contained in:
Robert Soule 2017-11-03 12:20:44 -07:00 committed by GitHub
parent aa4298859f
commit 09dba5c63d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 133 additions and 235 deletions

View File

@ -0,0 +1 @@
include ../../utils/Makefile

View File

@ -90,7 +90,7 @@ parser MyParser(packet_in packet,
************ C H E C K S U M V E R I F I C A T I O N ************* ************ C H E C K S U M V E R I F I C A T I O N *************
*************************************************************************/ *************************************************************************/
control MyVerifyChecksum(in headers hdr, inout metadata meta) { control MyVerifyChecksum(inout headers hdr, inout metadata meta) {
apply { } apply { }
} }

View File

@ -1,32 +0,0 @@
{
"program": "basic_tunnel.p4",
"language": "p4-16",
"targets": {
"multiswitch": {
"auto-control-plane": true,
"cli": true,
"pcap_dump": true,
"bmv2_log": true,
"links": [["h1", "s1"], ["s1", "s2"], ["s1", "s3"], ["s3", "s2"], ["s2", "h2"], ["s3", "h3"]],
"hosts": {
"h1": {
},
"h2": {
},
"h3": {
}
},
"switches": {
"s1": {
"entries": "s1-commands.txt"
},
"s2": {
"entries": "s2-commands.txt"
},
"s3": {
"entries": "s3-commands.txt"
}
}
}
}
}

View File

@ -1,5 +0,0 @@
P4APPRUNNER=../../utils/p4apprunner.py
mkdir -p build
tar -czf build/p4app.tgz * --exclude='build'
#cd build
sudo python $P4APPRUNNER p4app.tgz --build-dir ./build

View File

@ -0,0 +1,16 @@
{
"hosts": [
"h1",
"h2",
"h3"
],
"switches": {
"s1": { "cli_input" : "s1-commands.txt" },
"s2": { "cli_input" : "s2-commands.txt" },
"s3": { "cli_input" : "s3-commands.txt" }
},
"links": [
["h1", "s1"], ["s1", "s2"], ["s1", "s3"],
["s3", "s2"], ["s2", "h2"], ["s3", "h3"]
]
}

View File

@ -0,0 +1 @@
include ../../utils/Makefile

View File

@ -19,7 +19,7 @@ switch in Mininet to test its behavior.
1. In your shell, run: 1. In your shell, run:
```bash ```bash
./run.sh make
``` ```
This will: This will:
* compile `calc.p4`, and * compile `calc.p4`, and

View File

@ -1,10 +0,0 @@
{
"program": "calc.p4",
"language": "p4-16",
"targets": {
"mininet": {
"num-hosts": 2,
"switch-config": "calc.config"
}
}
}

View File

@ -1,5 +0,0 @@
P4APPRUNNER=../../utils/p4apprunner.py
mkdir -p build
tar -czf build/p4app.tgz * --exclude='build'
#cd build
sudo python $P4APPRUNNER p4app.tgz --build-dir ./build

View File

@ -0,0 +1,12 @@
{
"hosts": [
"h1",
"h2"
],
"switches": {
"s1": { "cli_input" : "s1-commands.txt" }
},
"links": [
["h1", "s1"], ["h2", "s1"]
]
}

View File

@ -176,7 +176,7 @@ There are several ways that problems might manifest:
4. `ecn.p4` compiles and all rules are installed. Packets go through 4. `ecn.p4` compiles and all rules are installed. Packets go through
and the logs show that the queue length was not high enough to set and the logs show that the queue length was not high enough to set
the ECN bit. Then either lower the threshold in the p4 code or the ECN bit. Then either lower the threshold in the p4 code or
reduce the link bandwidth in `p4app.json` reduce the link bandwidth in `topology.json`
#### Cleaning up Mininet #### Cleaning up Mininet

View File

@ -0,0 +1 @@
include ../../utils/Makefile

View File

@ -24,7 +24,7 @@ up a switch in Mininet to test its behavior.
1. In your shell, run: 1. In your shell, run:
```bash ```bash
./run.sh make
``` ```
This will: This will:
* compile `load_balance.p4`, and * compile `load_balance.p4`, and
@ -64,7 +64,7 @@ with parameters supplied by the control plane as part of the rule.
In this exercise, the control plane logic has already been In this exercise, the control plane logic has already been
implemented. As part of bringing up the Mininet instance, the implemented. As part of bringing up the Mininet instance, the
`run.sh` script will install packet-processing rules in the tables of `make` script will install packet-processing rules in the tables of
each switch. These are defined in the `s1-commands.txt` file. each switch. These are defined in the `s1-commands.txt` file.
**Important:** A P4 program also defines the interface between the **Important:** A P4 program also defines the interface between the
@ -112,12 +112,12 @@ messages, some should be received by each server.
There are several ways that problems might manifest: There are several ways that problems might manifest:
1. `load_balance.p4` fails to compile. In this case, `run.sh` will 1. `load_balance.p4` fails to compile. In this case, `make` will
report the error emitted from the compiler and stop. report the error emitted from the compiler and stop.
2. `load_balance.p4` compiles but does not support the control plane 2. `load_balance.p4` compiles but does not support the control plane
rules in the `sX-commands.txt` files that `run.sh` tries to install rules in the `sX-commands.txt` files that `make` tries to install
using the BMv2 CLI. In this case, `run.sh` will report these errors using the BMv2 CLI. In this case, `make` will report these errors
to `stderr`. Use these error messages to fix your `load_balance.p4` to `stderr`. Use these error messages to fix your `load_balance.p4`
implementation. implementation.
@ -129,7 +129,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` 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:

View File

@ -1,32 +0,0 @@
{
"program": "load_balance.p4",
"language": "p4-16",
"targets": {
"multiswitch": {
"auto-control-plane": true,
"cli": true,
"pcap_dump": true,
"bmv2_log": true,
"links": [["h1", "s1"], ["s1", "s2"], ["s1", "s3"], ["s3", "s2"], ["s2", "h2"], ["s3", "h3"]],
"hosts": {
"h1": {
},
"h2": {
},
"h3": {
}
},
"switches": {
"s1": {
"entries": "s1-commands.txt"
},
"s2": {
"entries": "s2-commands.txt"
},
"s3": {
"entries": "s3-commands.txt"
}
}
}
}
}

View File

@ -1,4 +0,0 @@
P4APPRUNNER=../../utils/p4apprunner.py
mkdir -p build
tar -czf build/p4app.tgz * --exclude='build'
sudo python $P4APPRUNNER p4app.tgz --build-dir ./build

View File

@ -0,0 +1,16 @@
{
"hosts": [
"h1",
"h2",
"h3"
],
"switches": {
"s1": { "cli_input" : "s1-commands.txt" },
"s2": { "cli_input" : "s2-commands.txt" },
"s3": { "cli_input" : "s3-commands.txt" }
},
"links": [
["h1", "s1"], ["s1", "s2"], ["s1", "s3"],
["s3", "s2"], ["s2", "h2"], ["s3", "h3"]
]
}

View File

@ -0,0 +1 @@
include ../../utils/Makefile

View File

@ -31,7 +31,7 @@ switch in Mininet to test its behavior.
1. In your shell, run: 1. In your shell, run:
```bash ```bash
./run.sh make
``` ```
This will: This will:
* compile `mri.p4`, and * compile `mri.p4`, and
@ -46,7 +46,7 @@ switch in Mininet to test its behavior.
2. We want to send a low rate traffic from `h1` to `h2` and a high 2. We want to send a low rate traffic from `h1` to `h2` and a high
rate iperf traffic from `h11` to `h22`. The link between `s1` and rate iperf traffic from `h11` to `h22`. The link between `s1` and
`s2` is common between the flows and is a bottleneck because we `s2` is common between the flows and is a bottleneck because we
reduced its bandwidth to 512kbps in p4app.json. Therefore, if we reduced its bandwidth to 512kbps in topology.json. Therefore, if we
capture packets at `h2`, we should see high queue size for that capture packets at `h2`, we should see high queue size for that
link. link.
@ -90,7 +90,7 @@ with parameters supplied by the control plane as part of the rule.
In this exercise, the control plane logic has already been In this exercise, the control plane logic has already been
implemented. As part of bringing up the Mininet instance, the implemented. As part of bringing up the Mininet instance, the
`run.sh` script will install packet-processing rules in the tables of `make` script 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.
@ -204,11 +204,11 @@ got a packet
There are several ways that problems might manifest: There are several ways that problems might manifest:
1. `mri.p4` fails to compile. In this case, `run.sh` will report the 1. `mri.p4` fails to compile. In this case, `make` will report the
error emitted from the compiler and stop. error emitted from the compiler and stop.
2. `mri.p4` compiles but does not support the control plane rules in 2. `mri.p4` compiles but does not support the control plane rules in
the `sX-commands.txt` files that `run.sh` tries to install using the BMv2 CLI. the `sX-commands.txt` files that `make` tries to install using the BMv2 CLI.
In this case, `run.sh` will report these errors to `stderr`. Use these error In this case, `make` will report these errors to `stderr`. Use these error
messages to fix your `mri.p4` implementation. messages to fix your `mri.p4` implementation.
3. `mri.p4` compiles, and the control plane rules are installed, but 3. `mri.p4` compiles, and the control plane rules are installed, but
the switch does not process packets in the desired way. The the switch does not process packets in the desired way. The
@ -220,16 +220,16 @@ packets on each interface. Use `tcpdump -r <filename> -xxx` to print
the hexdump of the packets. the hexdump of the packets.
4. `mri.p4` compiles and all rules are installed. Packets go through 4. `mri.p4` compiles and all rules are installed. Packets go through
and the logs show that the queue length is always 0. Then either and the logs show that the queue length is always 0. Then either
reduce the link bandwidth in `p4app.json`. reduce the link bandwidth in `topology.json`.
#### 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

View File

@ -1,37 +0,0 @@
{
"program": "mri.p4",
"language": "p4-16",
"targets": {
"multiswitch": {
"auto-control-plane": true,
"cli": true,
"pcap_dump": true,
"bmv2_log": true,
"links": [["h1", "s1"], ["h11", "s1"], ["s1", "s2", "0", 0.5], ["s1", "s3"], ["s3", "s2"], ["s2", "h2"], ["s2", "h22"], ["s3", "h3"]],
"hosts": {
"h1": {
},
"h2": {
},
"h3": {
},
"h11": {
},
"h22": {
}
},
"switches": {
"s1": {
"entries": "s1-commands.txt"
},
"s2": {
"entries": "s2-commands.txt"
},
"s3": {
"entries": "s3-commands.txt"
}
}
}
}
}

View File

@ -1,5 +0,0 @@
P4APPRUNNER=../../utils/p4apprunner.py
mkdir -p build
tar -czf build/p4app.tgz * --exclude='build'
#cd build
sudo python $P4APPRUNNER p4app.tgz --build-dir ./build

View File

@ -1,6 +1,6 @@
table_set_default ipv4_lpm drop table_set_default ipv4_lpm drop
table_set_default swtrace add_swtrace 1 table_set_default swtrace add_swtrace 1
table_add ipv4_lpm ipv4_forward 10.0.1.1/32 => 00:00:00:00:01:01 1 table_add ipv4_lpm ipv4_forward 10.0.1.1/32 => 00:00:00:00:01:01 2
table_add ipv4_lpm ipv4_forward 10.0.1.11/32 => 00:00:00:00:01:0b 2 table_add ipv4_lpm ipv4_forward 10.0.1.11/32 => 00:00:00:00:01:0b 1
table_add ipv4_lpm ipv4_forward 10.0.2.0/24 => 00:00:00:02:03:00 3 table_add ipv4_lpm ipv4_forward 10.0.2.0/24 => 00:00:00:02:03:00 3
table_add ipv4_lpm ipv4_forward 10.0.3.0/24 => 00:00:00:03:02:00 4 table_add ipv4_lpm ipv4_forward 10.0.3.0/24 => 00:00:00:03:02:00 4

View File

@ -1,6 +1,6 @@
table_set_default ipv4_lpm drop table_set_default ipv4_lpm drop
table_set_default swtrace add_swtrace 2 table_set_default swtrace add_swtrace 2
table_add ipv4_lpm ipv4_forward 10.0.2.2/32 => 00:00:00:00:02:02 1 table_add ipv4_lpm ipv4_forward 10.0.2.2/32 => 00:00:00:00:02:02 2
table_add ipv4_lpm ipv4_forward 10.0.2.22/32 => 00:00:00:00:02:16 2 table_add ipv4_lpm ipv4_forward 10.0.2.22/32 => 00:00:00:00:02:16 1
table_add ipv4_lpm ipv4_forward 10.0.1.0/24 => 00:00:00:01:03:00 3 table_add ipv4_lpm ipv4_forward 10.0.1.0/24 => 00:00:00:01:03:00 3
table_add ipv4_lpm ipv4_forward 10.0.3.0/24 => 00:00:00:03:03:00 4 table_add ipv4_lpm ipv4_forward 10.0.3.0/24 => 00:00:00:03:03:00 4

View File

@ -0,0 +1,18 @@
{
"hosts": [
"h1",
"h2",
"h3",
"h11",
"h22"
],
"switches": {
"s1": { "cli_input" : "s1-commands.txt" },
"s2": { "cli_input" : "s2-commands.txt" },
"s3": { "cli_input" : "s3-commands.txt" }
},
"links": [
["h1", "s1"], ["h11", "s1"], ["s1", "s2", "0", 0.5], ["s1", "s3"],
["s3", "s2"], ["s2", "h2"], ["s2", "h22"], ["s3", "h3"]
]
}

View File

@ -0,0 +1 @@
include ../../utils/Makefile

View File

@ -23,7 +23,7 @@ up a switch in Mininet to test its behavior.
1. In your shell, run: 1. In your shell, run:
```bash ```bash
./run.sh make
``` ```
This will: This will:
* compile `scrambler.p4`, and * compile `scrambler.p4`, and
@ -61,7 +61,7 @@ with parameters supplied by the control plane as part of the rule.
In this exercise, the control plane logic has already been In this exercise, the control plane logic has already been
implemented. As part of bringing up the Mininet instance, the implemented. As part of bringing up the Mininet instance, the
`run.sh` script will install packet-processing rules in the tables of `make` script 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.
@ -92,12 +92,12 @@ Follow the instructions from Step 1. This time, your message from
There are several issues that might arise when developing your There are several issues that might arise when developing your
solution: solution:
1. `scrambler.p4` fails to compile. In this case, `run.sh` will 1. `scrambler.p4` fails to compile. In this case, `make` will
report the error emitted from the compiler and stop. report the error emitted from the compiler and stop.
2. `scrambler.p4` compiles but does not support the control plane 2. `scrambler.p4` compiles but does not support the control plane
rules in the `sX-commands.txt` files that `run.sh` tries to install rules in the `sX-commands.txt` files that `make` tries to install
using the BMv2 CLI. In this case, `run.sh` will report these errors using the BMv2 CLI. In this case, `make` will report these errors
to `stderr`. Use these error messages to fix your `scrambler.p4` to `stderr`. Use these error messages to fix your `scrambler.p4`
implementation. implementation.
@ -109,7 +109,7 @@ 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:

View File

@ -1,33 +0,0 @@
{
"program": "scrambler.p4",
"language": "p4-16",
"targets": {
"multiswitch": {
"auto-control-plane": true,
"cli": true,
"pcap_dump": true,
"bmv2_log": true,
"links": [["h1", "s1"], ["s1", "s2"], ["s1", "s3"], ["s3", "s2"], ["s2", "h2"], ["s3", "h3"]],
"hosts": {
"h1": {
},
"h2": {
},
"h3": {
}
},
"switches": {
"s1": {
"entries": "s1-commands.txt"
},
"s2": {
"entries": "s2-commands.txt"
},
"s3": {
"entries": "s3-commands.txt"
}
}
}
}
}

View File

@ -1,5 +0,0 @@
P4APPRUNNER=../../utils/p4apprunner.py
mkdir -p build
tar -czf build/p4app.tgz * --exclude='build'
#cd build
sudo python $P4APPRUNNER p4app.tgz --build-dir ./build

View File

@ -0,0 +1,16 @@
{
"hosts": [
"h1",
"h2",
"h3"
],
"switches": {
"s1": { "cli_input" : "s1-commands.txt" },
"s2": { "cli_input" : "s2-commands.txt" },
"s3": { "cli_input" : "s3-commands.txt" }
},
"links": [
["h1", "s1"], ["s1", "s2"], ["s1", "s3"],
["s3", "s2"], ["s2", "h2"], ["s3", "h3"]
]
}

View File

@ -0,0 +1 @@
include ../../utils/Makefile

View File

@ -31,14 +31,14 @@ bring up a network in Mininet to test its behavior.
1. In your shell, run: 1. In your shell, run:
```bash ```bash
./run.sh make
``` ```
This will: This will:
* compile `source_routing.p4`, and * compile `source_routing.p4`, and
* start a Mininet instance with three switches (`s1`, `s2`, `s3`) configured * start a Mininet instance with three switches (`s1`, `s2`, `s3`) configured
in a triangle, each connected to one host (`h1`, `h2`, `h3`). in a triangle, each connected to one host (`h1`, `h2`, `h3`).
Check the network topology using the `net` command in mininet. Check the network topology using the `net` command in mininet.
You can also change the topology in p4app.json You can also change the topology in topology.json
* 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`, etc
(`10.0.<Switchid>.<hostID>`). (`10.0.<Switchid>.<hostID>`).
@ -117,7 +117,7 @@ path, so that source routing would be transparent to end-hosts?
There are several ways that problems might manifest: There are several ways that problems might manifest:
1. `source_routing.p4` fails to compile. In this case, `run.sh` will 1. `source_routing.p4` fails to compile. In this case, `make` will
report the error emitted from the compiler and stop. report the error emitted from the compiler and stop.
2. `source_routing.p4` compiles but switches or mininet do not start. 2. `source_routing.p4` compiles but switches or mininet do not start.
Do you have another instance of mininet running? Did the previous Do you have another instance of mininet running? Did the previous
@ -133,7 +133,7 @@ There are several ways that problems might manifest:
#### Cleaning up Mininet #### Cleaning up Mininet
In the cases above, `run.sh` may leave a Mininet instance running in In the cases above, `make` may leave a Mininet instance running in
the background. Use the following command to clean up these the background. Use the following command to clean up these
instances: instances:

View File

@ -1,30 +0,0 @@
{
"program": "source_routing.p4",
"language": "p4-16",
"targets": {
"multiswitch": {
"auto-control-plane": true,
"cli": true,
"pcap_dump": true,
"bmv2_log": true,
"links": [["h1", "s1"], ["s1", "s2"], ["s1", "s3"], ["s3", "s2"], ["s2", "h2"], ["s3", "h3"]],
"hosts": {
"h1": {
},
"h2": {
},
"h3": {
}
},
"switches": {
"s1": {
},
"s2": {
},
"s3": {
}
}
}
}
}

View File

@ -1,5 +0,0 @@
P4APPRUNNER=../../utils/p4apprunner.py
mkdir -p build
tar -czf build/p4app.tgz * --exclude='build'
#cd build
sudo python $P4APPRUNNER p4app.tgz --build-dir ./build

View File

@ -0,0 +1,16 @@
{
"hosts": [
"h1",
"h2",
"h3"
],
"switches": {
"s1": { "cli_input" : "s1-commands.txt" },
"s2": { "cli_input" : "s2-commands.txt" },
"s3": { "cli_input" : "s3-commands.txt" }
},
"links": [
["h1", "s1"], ["s1", "s2"], ["s1", "s3"],
["s3", "s2"], ["s2", "h2"], ["s3", "h3"]
]
}

View File

@ -111,6 +111,7 @@ cd ..
# Tutorials # Tutorials
pip install crcmod pip install crcmod
git clone https://github.com/p4lang/tutorials git clone https://github.com/p4lang/tutorials
git checkout p4d2_2017_fall
sudo mv tutorials /home/p4 sudo mv tutorials /home/p4
sudo chown -R p4:p4 /home/p4/tutorials sudo chown -R p4:p4 /home/p4/tutorials