diff --git a/README.md b/README.md index e04954f..a3a35b8 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,43 @@ -## P4CE: P4 Continuous Evolution +## 🏎️ GP4: Generalized P4 -_P4CE_[^pronounce] is a P4 parser and runtime written in Swift that supports an _evolved_ version of P4. +"P4 is a high-level language for programming protocol-independent packet processors"[^1] and it is awesome. The language is robust and includes many features that make writing -[^pronounce]: The acronym is pronounced "p force". +- _packet_ parsing pipelines easy to write, +- _packet_ transformation pipelines easy to write, +- _packet_ routing pipelines easy to write. -### Evolved How? +The adjacent ecosystem is great, too: There are now myriad tools available that make it possible to write applications to configure the _packet_ parsing, transformation and routing pipelines written in P4. -Coming soon. +For example, a developer could use P4 to write code that parses raw bytes received from the network into a structured representation of headers/payloads used to transmit those bytes. A developer could use P4 to write a tool that designates the fields of the parsed packet that a network administrator could name when definining configuration for modifying (or not) a parsed packet and defining configuration about how (even _if_) to route the packet. In such a scenario, the system administrator might use a CLI and write + +```console +PI CLI> table_add ipv4_lpm 10.0.0.1/24 => set_nhop 10.0.0.1 1 +``` + +which the system running the P4 code written by the developer could read when making a routing decision. Later, if the system administrator wanted to change the way packets were routed, they could use the CLI and write + + +```console +PI CLI> table_add ipv4_lpm 10.0.0.1/24 => set_nhop 10.0.0.2 1 +``` + +and the system running the P4 code written by the developer would immediately start to route _packets_ differently. + +So, why is _packet_ highlighted? + + +Because we believe that thinking about P4 in exactly the way described above -- after dropping the word _packet_ -- makes it a perfect system for building general-purpose parsing, transformation and routing pipelines. Although there are many ways such tools could be used, we believe that a generalized P4 system would be a perfect candidate for writing online, streaming ETL pipelines (c.f., [Apache Kafka](https://kafka.apache.org/)) or log filter/classification pipelines (c.f., [Sigma](https://sigmahq.io/)). + +Our goal is to build generalized P4 (GP4): The best of P4 and a little more. + +Please join us! + +[^1]: Pat Bosshart, Dan Daly, Glen Gibb, Martin Izzard, Nick McKeown, Jennifer Rexford, Cole Schlesinger, Dan Talayco, Amin Vahdat, George Varghese, and David Walker. 2014. P4: programming protocol-independent packet processors. SIGCOMM Comput. Commun. Rev. 44, 3 (July 2014), 87–95. https://doi.org/10.1145/2656877.2656890 + +### Benefits + +1. Reuse the extensive existing work from the P4 community. +2. ... more coming soon. ### Status