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 *************
*************************************************************************/
control MyVerifyChecksum(in headers hdr, inout metadata meta) {
control MyVerifyChecksum(inout headers hdr, inout metadata meta) {
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:
```bash
./run.sh
make
```
This will:
* 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
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
reduce the link bandwidth in `p4app.json`
reduce the link bandwidth in `topology.json`
#### 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:
```bash
./run.sh
make
```
This will:
* 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
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.
**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:
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.
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
using the BMv2 CLI. In this case, `run.sh` will report these errors
rules in the `sX-commands.txt` files that `make` tries to install
using the BMv2 CLI. In this case, `make` will report these errors
to `stderr`. Use these error messages to fix your `load_balance.p4`
implementation.
@ -129,7 +129,7 @@ detailed and can help pinpoint logic errors in your implementation.
#### 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
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:
```bash
./run.sh
make
```
This will:
* 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
rate iperf traffic from `h11` to `h22`. The link between `s1` and
`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
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
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
`X` corresponds to the switch number.
@ -204,11 +204,11 @@ got a packet
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.
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.
In this case, `run.sh` will report these errors to `stderr`. Use these error
the `sX-commands.txt` files that `make` tries to install using the BMv2 CLI.
In this case, `make` will report these errors to `stderr`. Use these error
messages to fix your `mri.p4` implementation.
3. `mri.p4` compiles, and the control plane rules are installed, but
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.
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
reduce the link bandwidth in `p4app.json`.
reduce the link bandwidth in `topology.json`.
#### 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
these instances:
```bash
mn -c
make stop
```
## 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 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.11/32 => 00:00:00:00:01:0b 2
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 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.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 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.22/32 => 00:00:00:00:02:16 2
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 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.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:
```bash
./run.sh
make
```
This will:
* 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
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
`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
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.
2. `scrambler.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. In this case, `run.sh` will report these errors
rules in the `sX-commands.txt` files that `make` tries to install
using the BMv2 CLI. In this case, `make` will report these errors
to `stderr`. Use these error messages to fix your `scrambler.p4`
implementation.
@ -109,7 +109,7 @@ help pinpoint logic errors in your implementation.
#### 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
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:
```bash
./run.sh
make
```
This will:
* compile `source_routing.p4`, and
* start a Mininet instance with three switches (`s1`, `s2`, `s3`) configured
in a triangle, each connected to one host (`h1`, `h2`, `h3`).
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
(`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:
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.
2. `source_routing.p4` compiles but switches or mininet do not start.
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
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
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
pip install crcmod
git clone https://github.com/p4lang/tutorials
git checkout p4d2_2017_fall
sudo mv tutorials /home/p4
sudo chown -R p4:p4 /home/p4/tutorials