Modern computer networks perform a bewildering array of tasks, from
routing and traffic monitoring, to access control and server load
balancing. Moreover, historically, managing these networks has been
hideously complicated and error-prone, due to a heterogeneous mix of
devices (e.g., routers, switches, firewalls, and middleboxes) and
their ad hoc, closed and proprietary configuration interfaces.
Software-Defined Networking (SDN) is poised to change this state of
affairs by offering a clean, simple and open interface between network
devices and the software that controls them. In particular, many
commercial switches now support the OpenFlow protocol, and a number of
campus, data-center, and backbone networks have deployed the new
technology.
However, while SDN makes it possible to program the network, it does
not make it easy: The first generation of SDN controllers offered
application developers the "assembly language" of network programming
platforms. To reach SDN’s full potential, research in programming
languages and compilers is desperately needed. In this talk, I
discuss our work to date in this area, which revolves around the
design of a language, compiler and run-time system for SDN
programming. The language, called Frenetic, allows programmers to
work declaratively, specifying the behavior of a network at a high
level of abstraction. The compiler and run-time system take care of
the tedious details of compiling and implementing these high-level
policies using the OpenFlow protocol.
A key strength of the Frenetic design is its support for modular
programming: Complex network applications can be decomposed in to
logical subcomponents --- an access control policy, a load balancer, a
traffic monitor --- and coded independently. Frenetic's rich
combinator library makes it possible to stitch such components back
together to form a fully functioning whole. Frenetic also contains
carefully designed operators that help users transition from one
global, high-level network policy to the next while preserving key
network invariants. Overall, Frenetic's abstractions make it
dramatically easier for programmers to write and reason about SDN
applications.