Frenetic: A Network Programming Language (MSE thesis)
Network administrators must configure network devices to simultaneously provide several interrelated
services such as routing, load balancing, traffic monitoring, and access control. Unfortunately,
most interfaces for programming networks are defined at the low level of abstraction
supported by the underlying hardware, leading to complicated programs with subtle bugs. We
present Frenetic, a high-level language for OpenFlow networks that enables writing programs in
a declarative and compositional style, with a simple “program like you see every packet” abstraction.
Building on ideas from functional programming, Frenetic offers a rich pattern algebra for
classifying packets into traffic streams and a suite of operators for transforming streams. The runtime
system efficiently manages the low-level details of (un)installing packet-processing rules in
the switches. We describe the design of Frenetic, an implementation on top of OpenFlow, and
experiments and example programs that validate our design choices.