Run the docker image with p4c compiler and nikss-ctl installed:
docker run -it --privileged --rm -v "$(pwd)":/nikss osinstom/nikss
Whole demo runs inside that container, so every later command must be executed in the container, e.g. prepended with docker container exec -it <container_name>
.
Boot up the demo infrastructure:
make start
The above script will create 4 Linux namespaces: switch
, client
, server1
, server2
.
Compile the P4 program (replace path to p4c repository):
make compile
Deploy PSA-eBPF program and insert eBPF programs with forwarding rules (no virtual IP yet):
make deploy
Set up rules for load-balancing and server virtual IP address:
make load-balancer
Run HTTP servers, one in every container. Issue these commands, every in separate terminal:
make http-server-1
make http-server-2
Run client, which makes some requests to the server(s) on virtual IP:
make http-client
This should take about 20 second to execute. When client stops, stop servers with Ctrl-C to see number of processed requests per server.
Disaable load-balancer and remove virtual IP:
make stop-load-balancer
Set up a meter rule:
make rate-limiter
Run iperf server on server no. 1:
make iperf-server
Run iperf client and observe results:
make iperf-client
To remove meter rule:
make stop-rate-limiter
Configure traffic manager (tc qdisc) with QoS classes and treatment.
make configure-traffic-manager
Start ping between client and server1:
make ping
Create congestion on the link between client and server1:
make iperf-server
make iperf-client
Set priority for ICMP traffic:
make set-priority
Clear priority for ICMP traffic:
make clear-priority