Nate Foster
Nick McKeown
Guru Parulkar
Jennifer Rexford
Amin Vahdat

P4 (named for “Programming Protocol-independent Packet Processors”) is a language for expressing how packets are processed by the data plane of a forwarding element such as a hardware or software switch, network interface card, router, or network appliance.

Many targets (in particular targets following an SDN architecture) implement a separate control plane and a data plane. P4 is designed to specify only the data plane functionality of the target. P4 programs do not specify the behavior of the control plane.

Separately, P4 programs can also be used along with P4Runtime to partially define the interface by which the control plane and the data-plane communicate. In this scenario, P4 is first used to describe the forwarding behavior and this in turn is converted by a P4 compiler into the metadata needed for the control plane and data plane to communicate. The data plane need not be programmable for P4 and P4Runtime to be of value in unambiguously defining the capabilities of the data plane and how the control plane can control these capabilities.

P4 Diagram

Project Resources