Frenetic: a network programming language

Modern networks provide a variety of interrelated services including routing, traffic monitoring, load balancing, and access control. Unfortunately, the languages used to program today's networks lack modern features - they are usually defined at the low level of abstraction supplied by the underlying hardware and they fail to provide even rudimentary support for modular programming. As a result, network programs tend to be complicated, error-prone, and difficult to maintain. This paper presents Frenetic, a high-level language for programming distributed collections of network switches. Frenetic provides a declarative query language for classifying and aggregating network traffic as well as a functional reactive combinator library for describing high-level packet-forwarding policies. Unlike prior work in this domain, these constructs are - by design - fully compositional, which facilitates modular reasoning and enables code reuse. This important property is enabled by Frenetic's novel run-time system which manages all of the details related to installing, uninstalling, and querying low-level packet-processing rules on physical switches. Overall, this paper makes three main contributions: (1) We analyze the state-of-the art in languages for programming networks and identify the key limitations; (2) We present a language design that addresses these limitations, using a series of examples to motivate and validate our choices; (3) We describe an implementation of the language and evaluate its performance on several benchmarks.

[1]  Martín Casado,et al.  Onix: A Distributed Control Platform for Large-scale Production Networks , 2010, OSDI.

[2]  Richard Wang,et al.  OpenFlow-Based Server Load Balancing Gone Wild , 2011, Hot-ICE.

[3]  Nick McKeown,et al.  OpenFlow: enabling innovation in campus networks , 2008, CCRV.

[4]  Katerina J. Argyraki,et al.  RouteBricks: exploiting parallelism to scale software routers , 2009, SOSP '09.

[5]  Martín Casado,et al.  NOX: towards an operating system for networks , 2008, CCRV.

[6]  Albert G. Greenberg,et al.  VL2: a scalable and flexible data center network , 2009, SIGCOMM '09.

[7]  Gérard Berry,et al.  The Esterel Synchronous Programming Language: Design, Semantics, Implementation , 1992, Sci. Comput. Program..

[8]  Guy E. Blelloch,et al.  Adaptive functional programming , 2002, POPL '02.

[9]  Paul Hudak,et al.  Functional reactive animation , 1997, ICFP '97.

[10]  Eddie Kohler,et al.  The Click modular router , 1999, SOSP.

[11]  Rob Sherwood,et al.  Carving research slices out of your production networks with OpenFlow , 2010, CCRV.

[12]  William Thies,et al.  StreamIt: A Language for Streaming Applications , 2002, CC.

[13]  Nick McKeown,et al.  A network in a laptop: rapid prototyping for software-defined networks , 2010, Hotnets-IX.

[14]  Alan L. Cox,et al.  Maestro: A System for Scalable OpenFlow Control , 2010 .

[15]  Paul Hudak,et al.  Nettle: Functional Reactive Programming for OpenFlow Networks , 2010 .

[16]  David Walker,et al.  Frenetic: a high-level language for OpenFlow networks , 2010, PRESTO '10.

[17]  Michael K. Chen,et al.  Shangri-La: achieving high performance from compiled network applications while enabling ease of programming , 2005, PLDI '05.

[18]  Theodore Johnson,et al.  Gigascope: a stream database for network applications , 2003, SIGMOD '03.

[19]  Martín Casado,et al.  Practical declarative network management , 2009, WREN '09.

[20]  Matt Welsh,et al.  Flask: staged functional programming for sensor networks , 2008, ICFP.

[21]  Russell J. Clark,et al.  Resonance: dynamic access control for enterprise networks , 2009, WREN '09.

[22]  Sujata Banerjee,et al.  ElasticTree: Saving Energy in Data Center Networks , 2010, NSDI.

[23]  Vern Paxson,et al.  Bro: a system for detecting network intruders in real-time , 1998, Comput. Networks.

[24]  Ed F. Deprettere,et al.  FPL-3E: Towards Language Support for Reconfigurable Packet Processing , 2005, SAMOS.

[25]  Henrik Nilsson,et al.  Functional reactive programming, continued , 2002, Haskell '02.

[26]  S. Shenker,et al.  Rethinking Enterprise Network Control , 2009, IEEE/ACM Transactions on Networking.

[27]  S. Egorov SNORTRAN : An Optimizing Compiler for Snort Rules , 2002 .

[28]  Ion Stoica,et al.  Declarative routing: extensible routing with declarative queries , 2005, SIGCOMM '05.

[29]  Shriram Krishnamurthi,et al.  Embedding Dynamic Dataflow in a Call-by-Value Language , 2006, ESOP.

[30]  Ion Stoica,et al.  Implementing declarative overlays , 2005, SOSP '05.

[31]  Henrik Nilsson,et al.  The Yampa arcade , 2003, Haskell '03.

[32]  Paul Hudak,et al.  Lambda in Motion: Controlling Robots with Haskell , 1999, PADL.

[33]  Jennifer Widom,et al.  The CQL continuous query language: semantic foundations and query execution , 2006, The VLDB Journal.

[34]  Shriram Krishnamurthi,et al.  Flapjax: a programming language for Ajax applications , 2009, OOPSLA '09.

[35]  Robert Grimm,et al.  A Universal Calculus for Stream Processing Languages , 2010, ESOP.