Implementing network data planes entirely in software is a widely recognised possibility, e.g., Linux Foundation’s Open vSwitch, Facebook’s Katran load balancer. Traditional approaches to design and develop those solutions are based on static compilation: the compiler receives as input a description of the forwarding plane semantics and outputs a binary code that is agnostic to both its configuration, i.e., entries in the match/action tables, and input traffic patterns.
In this work, we propose a dynamic approach to the data plane compilation where not only the static information but also the runtime data are used to generate a software data-plane. Our dynamic compiler, Kecleon, uses control plane information (e.g., the type of rules installed in a firewall NFs) as input in the compilation stage to generate a custom version of the original program that is specialized (and optimized) based on the actual behavior of the NF. In addition to configuration data, Kecleon instruments the original NF data path code to retrieve the runtime packet processing behavior and statics (e.g., specific traffic patterns) that are used to optimize its output further.