- Carmelo Cascone / ONF (email@example.com) (brigade lead)
- Andrea Campanella / ONF (firstname.lastname@example.org)
- Yi Tseng / ONF (email@example.com)
- Jonghwan Hyun / ONF (firstname.lastname@example.org)
- Wu Shaoyong / ZTE (email@example.com)
Jian Tian / ZTE (firstname.lastname@example.org)
Ke Zhiyong / ZTE (email@example.com)
- Frank Wang / Inspur (firstname.lastname@example.org)
- Minh Pham / UTS (email@example.com)
- Tom Tofigh / AT&T (firstname.lastname@example.org)
- Uyen Chau / ONF (email@example.com)
- Brian O'Connor / ONF (firstname.lastname@example.org)
- Esin Karaman / Netsia (email@example.com)
Kevin Chuang / NCTU (firstname.lastname@example.org)
Nate Tang / NCTU (email@example.com)
Iver Liu / NCTU (firstname.lastname@example.org)
- Jianwei Mao / FNLab @ BUPT (email@example.com)
Brigade Mailing List
Active. Find here the JIRA tasks we are currently working on:
Every Tuesday at alternate times: 9:00 AM PST and 10:00 PM US Pacific time.
Find here the next meeting time and agenda.
For any information or to join the brigade please contact Carmelo Cascone (firstname.lastname@example.org)
P4 is a domain-specific language (DSL) designed to allow the programming of packet forwarding devices. P4 can be used to program different targets such as software switches, FPGA-based NICs or switches based on reconfigurable ASICs. P4 enables protocol-independent programmability at different levels, for example:
Parsing and modification (actions) of new, non-standard headers.
Configure table properties such as size, type of match (exact, ternary, longest-prefix), counters, etc.
Stateful processing, i.e. per-packet custom actions that can access and manipulate state maintained by the switch.
P4 allows programming of many devices in a target-independent manner, using high-level constructs. In principle, P4 programs should be portable. The same program, when compiled for different targets, should produce the same forwarding behavior. Finally, P4 allows for reconfigurability in the field. In other words, once deployed, devices can be reconfigured with a new P4 program to provide support for new forwarding capabilities.
Why should ONOS care about a data plane programming language?
In ONOS we are ultimately interested in the capabilities of networking devices and ways to ease the configuration and control of such capabilities. P4 is becoming the common language spoken by switch vendors and operators to agree on what the data plane can or should do. Indeed, P4 is meant as both a specification language, e.g. to formally specify how a fixed-function switch ASIC works, and a programming language. In its mission to ease the life of operators, and to promote faster innovation in the network, ONOS should be able to understand and potentially speak P4. Understand, to be aware of the capabilities of a given device and to expose higher-level APIs to control them. Speak, to deploy new capabilities, e.g. generating or modifying existing P4 programs, that can be later controlled to satisfy application needs.
Runtime control of P4 devices
P4 is not a protocol or device API for runtime control or configuration, i.e. once a P4 program is deployed to a device, P4 doesn’t tell us how that device can be controlled, for example, to add or remove entries in match+action tables, or to read the value of a counter. How can ONOS control a P4-enabled device? P4Runtime is an effort in the P4 community to create a standard control-plane API portable across targets, they propose a gRPC-based APIs (p4runtime.proto). The brigade will focus on P4Runtime as a southbound control protocol, however, different devices supporting P4 might expose different APIs. Similarly to how ONOS today deals with different flavors of OpenFlow, heterogeneity of control protocol/APIs is abstracted from applications.
Southbound support for P4 RuntimeDONE - Available starting from ONOS 1.11 Enable support for existing applications with any P4 program (via manual ONOS-to-P4 mapping)DONE - Available starting from ONOS 1.11 Extend northbound APIs to support protocol-independence (e.g non-standard match/actions in flow rules)DONE - Available starting from ONOS 1.11
New use cases:
Fabric.p4 (CORD fabric with P4 switches)DONE - Available starting from ONOS 1.14 Support for In-band Network Telemetry (INT)DONE - Available starting from ONOS 1.14
CORD VNFs offloading to HW P4 switches
Mobile Serving and Packet Gateway (spgw.p4)DONE - Integrated with fabric.p4 Residential BNG with PPPoE terminationDONE - Integrated with fabric.p4
- Rethink northbound APIs to capture enhanced capabilities of programmable data planes
- Services to support incremental reprogramming, i.e. deploy a new P4 program to devices while traffic is flowing.
Optimize existing P4 programs or auto-generate new ones based on application needs and traffic workload.
Here are some pointers to learn more about the work of this brigade and current support for P4 in ONOS:
- Next-Gen SDN Tutorial (with hands-on exercises):
- Learn about the building blocks of the NG-SDN architecture, such as data plane programming and control via P4 and P4Runtime; configuration via YANG, OpenConfig, and gNMI; Stratum, and ONOS.
- Organized around a sequence of hands-on exercises that show how to build an IPv6-based leaf-spine data center fabric using P4, Stratum, and ONOS.
- Updated September 2019
- Advanced ONOS+P4 Tutorial: Building an SRv6-enabled fabric with P4 and ONOS
- Requires intermediate knowledge of the P4 language
- Updated April 2019
- P4 support in ONOS deep dive (presented at ONF Connect 2018 - video)
- Developer VM and walkthrough of P4Runtime support in ONOS via BMv2
- P4-based Trellis (CORD fabric), AKA fabric.p4 (with instructions to test on BMv2)
- Trellis+P4 tutorial (with hands-on exercises) (presented at ONF Connect 2018)
- Disaggregating the BNG in SEBA with P4:
- Offloading S/PGW VNF to programmable switches using P4 (talk at ONS North America 2018)
- Disaggregating the BNG in SEBA with P4:
- P4Runtime demo with Google's tor.p4 (presented at L123 SDN NFV World Congress 2017 - video here)
- ONOS-P4 Brigade Work Days 2017 (past event)
- [OUTDATED] ONOS+P4 tutorial for beginners (with hands-on exercises)
- Includes an introduction to P4Runtime, ONOS, and use cases (fabric.p4 and spgw.p4)
- Updated December 2018
ONOS support for P4 targets
- Using ONOS to control Stratum-enabled Intel/Barefoot Tofino-based switches
- Controlling P4Runtime-enabled Mellanox Spectrum switch with ONOS
To learn more about P4Runtime
- Announcing P4Runtime – A contribution by the P4 API Working Group (Blog post)
- Other P4Runtime resources
How to get involved
Support for P4 will affect the whole ONOS platform, from the southbound to the northbound. The P4 brigade is looking for members willing to contribute! Subscribe to the P4 mailing list and introduce yourself or contact Carmelo Cascone (email@example.com) if you are interested.