Modern network software is implemented across two tiers: the data plane, which contains packet-processing rules implemented efficiently on switching hardware, and the control plane, which implements fundamental algorithms, policies, and business rules that determine what the data plane should do. Thus, programming the network is akin to programming a two-tier, massively distributed system, where each node has heterogeneous processing capabilities. In addition, the persistent store on the controller represents a third tier.
We are designing a language, Flowlog, that exploits software-defined networking (SDN) to provide a ``tierless'' Datalog-like programming language that unifies descriptions of control, data, and external state, making it easier to express and verify invariants that cross-cut tiers. Flowlog has intentionally limited expressiveness, to enable the construction of powerful tools such as proactive compilers, change-impact analyzers, and more. Flowlog also provides a formal mechanism of callouts to general-purpose code (akin to database stored procedures), to reconcile the needs of programmers with the limitations of Flowlog's expressive power.
(Joint work with Tim Nelson (Brown), Andrew Ferguson (Brown), Michael Scheer (Brown), Dan Dougherty (WPI), and Arjun Guha (UMass Amherst).