| + | Modern computer networks perform a bewildering array of tasks, from routing and traffic monitoring, to access control and server load balancing. Yet, managing these networks is unnecessarily complicated and error-prone, due to a heterogeneous mix of devices (e.g., routers, switches, firewalls, and network-address translators) with closed and proprietary configuration interfaces. The emergence of Software Defined Networking (SDN) is poised to change all this by offering a clean and open interface between networking devices and the software that controls them. In particular, many commercial switches support the OpenFlow protocol, and a number of campus, data-center, and backbone networks have deployed the new technology. Many example SDN applications (e.g., server load balancing, seamless virtual machine migration, traffic engineering, and energy-efficient networking) illustrate SDN's potential to transform future networks. Yet, while SDN makes it possible to program the network, it does not make it easy. Today's OpenFlow controllers offer very low-level APIs that mimic the underlying switch hardware. To reach SDN's full potential, we need to identify the right higher-level abstractions for creating (and composing) powerful applications. In the Frenetic project (www.frenetic-lang.org) at Princeton and Cornell, we are designing simple and intuitive abstractions for programming SDNs, including ways to query network state, compose application modules, update a set of switches, collect measurement data from servers, and virtualize the network topology. These abstractions substantially lower the barrier for innovating inside the network. |