Overview

The languages used to program networks today lack modern features. Programming them is a complicated and error-prone task, and outages and infiltrations are frequent. We believe it is time to develop network programming languages with the following essential features:

High-level abstractions that give programmers direct control over the network, allowing them to specify what they want the network to do without worrying about how to implement it.

that give programmers over the network, allowing them to specify what they want the network to without worrying about to implement it. Modular constructs that facilitate compositional reasoning about programs.

that facilitate about programs. Portability , allowing programs written for one platform to be reused with different devices.

, allowing programs written for one platform to be reused with different devices. Rigorous semantic foundations that precisely document the meaning of the language and provide a solid platform for mechanical program analysis tools.

The Frenetic Family of Languages

Addresses these challenges in the context of Software Defined Networks. Languages within the Frenetic family provide a domain specific sub-language for specifying dataplane packet processing in terms of packet functions and combinators inside of a general purpose programming language - thereby realizing many of the features listed above.

Two languages in the Frenetic family are currently under active development

Frenetic-OCaml : embedded and implemented in OCaml

: embedded and implemented in OCaml Pyretic: embedded and implemented in Python

Additional Projects

whose development are centered at Cornell and Princeton respectively. Both handle many low-level packet-processing details and keep traffic in the "fast path" (i.e., dataplane) whenever possible.

Developed to support or extend Frenetic include: