Protocol Independent Forwarding

Protocol Independent Forwarding


OpenFlow® was originally designed to find a balance between the relatively-fixed functionality of the fastest switching ASICs and the need to encourage ASIC vendors to produce more flexible chips that software can program. The OpenFlow® 1.3 specification (with TTPs) provides a good abstraction for more fixed-function devices.

This whitepaper came about because several of the authors were independently trying to answer the same question: Can we define a common and vendor agnostic way for developers to describe how packets should be processed by a flexible switch, in a manner that is consistent with OpenFlow? We were aware of several approaches, and came to learn that we were thinking about it independently in different groups (POF and P4). We came together to see if we could identify common goals, principles, and ideas; and we were pleasantly surprised to discover that the approaches we had been pursuing independently were very complementary. POF provides guidance on what the underlying primitive instruction set should be, and P4 provides guidance on how packet processing programs can be written and compiled, using the POF instruction set. The complementary nature of the two approaches, and our desire to answer the question above, led us to come together and propose the OFPI approach.


Figure 1: The OpenFlow® protocols (to date) do not address datapath configuration




Figure 2: OFPI has two stages, Configuration and Runtime

Next Steps

This is a living document and will continue to evolve as we develop a better understanding of the requirements for a “Protocol Independent” layer (OFPI) capable of expressing both existing and new datapath protocols. Currently, OFPI comprises a protocol neutral instruction set, called POF-FIS, and the P4 language, for expressing how a forwarding plane should process packets. A P4 program describes the legal packet headers and how packets are to be processed by a switch. We encourage readers to send feedback and let us know how we can improve our approach to protocol independent forwarding, with the objective to support “top-down” programmability of a variety of devices (e.g. based on CPUs, NPUs, FPGAs and flexible pipelines), using high-level programming languages.

The following people have contributed to this white paper:

  • Ben Mackcrane (editor)
  • Ben Pfaff
  • Curt Beckmann
  • Dan Talayco
  • Haoyu Song
  • Jennifer Rexford
  • Justin Dustzadeh
  • Nick McKeown
  • Yatish Kumar


For more info, please contact