Changes from P4-OVS
This document provides an overview of the changes made between P4-OVS and the P4 Control Plane.
Background
The initial implementation of P4-OVS was both physically and logically monolithic.
Two foreign components (Stratum and the Kernel Monitor) were added to a fork of the Open vSwitch repository.
OvS was modified to build these components and include them in
ovs-vswitchd
.Stratum initialization was adapted to allow OvS to start the P4 Runtime and gNMI services.
Extensive changes were made to Stratum to support P4-enabled IPDK hardware and software switches.
Transition to P4 Control Plane
The P4 Control Plane (formerly known as the Split Architecture) modularizes P4-OVS, making the code easier to maintain and more suitable for upstreaming.
Removed foreign components from the OvS repository, together with most of the changes to OvS itself.
Reengineered the Stratum modifications to be non-breaking and suitable for upstreaming to the parent project. Made
tdi
a distinct platform type, withtofino
anddpdk
variants (targets).Extracted the Kernel Monitor and make it a separate component. Removed OvS dependencies, and refactored for modularity and to support unit testing.
Created a new component (
infrap4d
) that combines Stratum, the Kernel Monitor, TDI, and a P4 target driver into a separate process (daemon).Created a superproject (
networking-recipe
) to integrate the components and orchestrate the overall build.Updated OvS to a more recent version.
Integrated the Kernel Monitor into
infrap4d
. Merged changes that were made in P4-OVS after the original split was done.Created a component (
ovs-p4rt
) that can be linked withovs-vswitchd
to allow OvS to communicate withinfrap4d
.Implemented a CMake-based build system in place of Autotools.
Physical Differences
The
external
,p4runtime
,stratum
, andunit_test
directories have been removed from theovs
repository.The
p4proto
directory has been removed. Locally-modified Stratum files were merged back into Stratum or discarded. Target-specific changes were made part of thedpdk
andtofino
variants of thetdi
platform.The
barefoot
Stratum code has been restored to its original state.
Operational Differences
OvS no longer manages Stratum or the Kernel Monitor. It also no longer makes direct calls to the Kernel Monitor or switch driver. All communication with Stratum is by means of calls to the OvS client API (
ovs-p4rt
), which sends gRPC requests toinfrap4d
.
Repositories
Implementation is done incrementally through ipdk-io repositories.
OvS development currently takes place on the
ipdk-latest
branch of theipdk-io/ovs
repository.Stratum development takes place on the
split-arch
branch of theipdk-io/stratum-dev
repository.Kernel Monitor development takes place on the
main
branch of theipdk-io/krnlmon
repository.End-to-end test development takes place in the
ipdk-io/ptf-tests
repository.Superproject development takes place on the
main
branch of theipdk-io/networking-recipe
repository.