Abstract. In contrast to languages with different abstractions for each program tier — the control plane, data-plane, and controller-state — Flowlog provides a unified abstraction for all three tires.
NetCore, for instance, can describe a forwarding policy, but lacks the ability to reference (let alone change) state on the controller.
It also provides abstractions for interaction with external code, via either asyn- chronous events or synchronous remote tables.
Flowlog provides interfaces and abstractions for interacting with external programs. Programmers are free to invoke existing, full-featured libraries as needed, depending on their analysis goals. This is in contrast to most policy languages: in Flowlog, the restricted language itself forms the primary program, calling the external code rather than being called by it. This has been successful with SQL, where database queries are in the “limited” language and user-defined functions are in “full” languages.
a multi-tier program: a wrapper in a general-purpose language … most SDN analyses focus on trace properties: statements about the end-to-end behavior of packets in the network
An equivalent NetCore policy for each clause is created using the Tpred (extract predicate) and Tact (extract action) functions defined in Figure 5.
The current Flowlog implementation uses OpenFlow 1.0 [20] and Frenetic [5] for packet-handling, Thrift RPC (
) for orchestrating events and remote state, and the XSB [28] Prolog engine for evaluation. Flowlog is implemented in OCaml.
FML [9] provides a
stateful, rule-based idiom for forwarding policies.
NDLog [17] and OverLog [18] are declarative, distributed programming languages. In these languages, each tuple in the relational state resides on a particular switch.