Tierless Programming and Reasoning for Software-Defined Networks
Shriram Krishnamurthi, Brown University
Software Composition seminar, 2015-09-22
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 have designed a language, Flowlog, for programming software-defined networks. Flowlog provides a ``tierless\'' abstraction that unifies descriptions of control, data, and external state, simplifying programs and making it easier to express invariants that cross-cut tiers. Flowlog is implemented by a compiler with an optimality result. The language's tierless nature enables us to tackle several problems: topology-independent verification, differential analysis to aid program evolution, transitioning existing networks by compilation, and more.