All Projects → nsg-ethz → P4 Learning

nsg-ethz / P4 Learning

Licence: gpl-3.0
Compilation of P4 exercises, examples, documentation, slides for learning or teaching

Projects that are alternatives of or similar to P4 Learning

Smol
A small and fast async runtime for Rust
Stars: ✭ 2,206 (+1061.05%)
Mutual labels:  networking
Inlets Pro
Secure TCP and HTTP tunnels that work anywhere
Stars: ✭ 179 (-5.79%)
Mutual labels:  networking
Kuma
🐻 The Universal Service Mesh. CNCF Sandbox Project.
Stars: ✭ 2,516 (+1224.21%)
Mutual labels:  networking
Quic.net
A .NET C# Implementation of QUIC protocol - Google's experimental transport layer.
Stars: ✭ 173 (-8.95%)
Mutual labels:  networking
Sam
System Architecture Mapper
Stars: ✭ 176 (-7.37%)
Mutual labels:  networking
Txeh
Go library and CLI utilty for /etc/hosts management.
Stars: ✭ 181 (-4.74%)
Mutual labels:  networking
Swifthub
GitHub iOS client in RxSwift and MVVM-C clean architecture
Stars: ✭ 2,330 (+1126.32%)
Mutual labels:  networking
Moya
Network abstraction layer written in Swift.
Stars: ✭ 13,607 (+7061.58%)
Mutual labels:  networking
Dpitunnel
DPITunnel is an android app made for censorship bypass
Stars: ✭ 179 (-5.79%)
Mutual labels:  networking
Tiny Networking
Tiny Networking Library
Stars: ✭ 183 (-3.68%)
Mutual labels:  networking
Dnxfirewall
dnxfirewall (dad's next-gen firewall), a pure Python next generation firewall built on top of Linux kernel/netfilter.
Stars: ✭ 174 (-8.42%)
Mutual labels:  networking
Tracepkt
Trace a ping packet journey across network interfaces and namespace on recent Linux. Supports IPv4 and IPv6.
Stars: ✭ 176 (-7.37%)
Mutual labels:  networking
Dlib
Allocators, I/O streams, math, geometry, image and audio processing for D
Stars: ✭ 182 (-4.21%)
Mutual labels:  networking
Netjson
NetJSON is a data interchange format for encoding the basic building blocks of networks.
Stars: ✭ 171 (-10%)
Mutual labels:  networking
Siesta
The civilized way to write REST API clients for iOS / macOS
Stars: ✭ 2,142 (+1027.37%)
Mutual labels:  networking
Medium
Independent telecommunication environment
Stars: ✭ 171 (-10%)
Mutual labels:  networking
Cidlib
The CIDLib general purpose C++ development environment
Stars: ✭ 179 (-5.79%)
Mutual labels:  networking
Vpp
Kubernetes CNI plugin based on FD.io VPP
Stars: ✭ 187 (-1.58%)
Mutual labels:  networking
Scaproust
Implementation of the nanomsg "Scalability Protocols" in rust.
Stars: ✭ 183 (-3.68%)
Mutual labels:  networking
Zenoh
zenoh unifies data in motion, data in-use, data at rest and computations. It carefully blends traditional pub/sub with geo-distributed storages, queries and computations, while retaining a level of time and space efficiency that is well beyond any of the mainstream stacks.
Stars: ✭ 182 (-4.21%)
Mutual labels:  networking

P4 Learning

This repository contains a compilation of useful resources for data plane programming, specially for the ones wanting to learn how to write P4-16 programs and test them in a virtual environment.

A big part of the materials come from the Advanced Topics in Communication Networks lecture taught at ETH Zurich. For more information visit our website.

What will you find here ?

You will find software installation guides, lecture slides, specific development documentation, exercises, a collection of examples and much more. Specifically:

  • Slides: deck of slides that go from the story of SDN and introduction to data plane programming to advanced (research level) applications.
  • Documentation: list of links and documents with very useful information for P4 development.
  • Examples: a collection of examples showing how to use almost all the simple switch features.
  • Demos: a collection of demos with running examples.
  • Exercises:A set of P4 exercises with a long description and solutions.
  • Environment Installation: a guide and scripts to install the required software to start developing P4 applications in your own machine

How to start?

Clone this repository into your machine

If you want to solve the exercises, run the examples or simply download the content get a local copy of this repository in your machine:

git clone https://github.com/nsg-ethz/p4-learning.git

We will periodically add new content to this repository (specially documentation and new examples), so make sure to check it regularly or git pull it from your machine.

Required Software

In order to be able to compile P4 code, run it in a software switch (bmv2) and create virtual topologies with hosts, several dependencies and open source tools need to be installed first.

Since the installation process can be a bit tedious and cumbersome we provide you with a Vagrant script that automatically builds a virtual machine with all required software already installed. You can find the VM setup instructions in the P4 Virtual Machine Installation document.

Important: Some exercises or examples will only work (due to bug fixes) if you use the same version of bmv2 and p4c that we provide. See the following installation script and use the same commits.

Installing P4-utils

To run the exercises and examples we use P4 utils. P4-utils is an extension to Mininet to support P4 devices. It was strongly inspired by the original p4app from the p4lang repository. See the P4-utils repository for more information.

If you build the VM from the vagrant script we provide or directly download the OVA package you will have p4-utils already installed, however if you already have the required software and use your own machine/VM you can manally install it:

git clone https://github.com/nsg-ethz/p4-utils.git
cd p4-utils
sudo ./install.sh

To update you just simply:

cd /home/p4/p4-tools/p4-utils
git pull

Note: at the moment p4-utils does not support the P4Runtime, thus all the exercises and examples use the thrift RuntimeAPI (either through the CLI or with p4-utils API).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].