Frenetic [183,184] |
Declarative (functional) |
Useful for the categorization and accretion of network traffic |
Facilitates modular reasoning |
Lack in flow matching and monitoring services |
NetCore [187] |
Declarative (functional) |
It is the successor of Frenetic and carries an enhanced policy management library |
Effective handling of controller and switch interaction |
Does not support flow matching and monitoring services |
Nettle [188] |
Declarative (functional, reactive) |
Low-level programming language that deals with streams and not with events |
Supports dynamic policies, traffic engineering, and load balancing |
Does not consider event-driven approach |
Procera [189] |
Declarative (functional, reactive) |
Helps in portraying reactive and temporal behaviors |
Good for reactive applications and protocols |
Does not support basic flow matching and monitoring |
FML [191] |
Declarative (data flow, reactive) |
High-level language based on non-recursive Datalog [151] |
Provides efficient and flexible policies |
Limited QoS and monitoring services |
Flog [193] |
Declarative (logic), event-driven |
Event-driven programming that adopted ideas from FML and Frenetic |
Supports basic flow matching and monitoring capabilities |
Limited security and traffic engineering capabilities |
Frenetic OCaml [194] |
Declarative (functional) |
Utilizes proactive flow rule installation and handles the low-level details of the switch to controller |
Effective flow rule installation for efficient communication |
Does not support flow matching and monitoring services |
Pyretic [195] |
Imperative |
Helps in specifying static and dynamic forwarding policies to assist in developing network applications |
Provides flexible policy making and deployment |
Limited flow matching, virtualization, and monitoring capabilities |
FlowLog [209,210] |
Declarative (functional) |
Offers programming for SDN network applications and supports model checking |
Provides basic flow matching and monitoring facilities |
Does not support traffic engineering and virtualization |
FatTire [211] |
Declarative (functional) |
Used for writing fault-tolerant network applications |
Supports basic flow matching and traffic engineering functionalities |
Does not provide network monitoring |
NetKat [199,202] |
Declarative (functional) |
Uses Kleene algebra with tests (KAT) [162], based on equational theory, for network programming |
Provides sequential and parallel composition capabilities |
Does not support external interface monitoring and QoS |
Merlin [197,204] |
Declarative (logic) |
Based on declarative language and useful for distributing and coordinating policy implementation |
Supports more secure data processing, flow matching, and monitoring |
Does not support link failure and query language |
Ponder Flow [198] |
Policy specification language |
PonderFlow provides mechanisms for implementing access control and network abstractions |
Supports dynamic policy language and basic flow matching |
Limited monitoring and virtualization capabilities |
NOF [207] |
Declarative |
Enables network application to design the network according to the application requirements |
Supports basic flow matching, topology slicing and external interface for monitoring |
Limited security and traffic engineering functionalities |
Kinetic [208] |
Domain-specific language |
Helps network operators to control the dynamic state of their network |
Inherits runtime features of Pyretic and best flow matching |
Limited traffic engineering and monitoring capabilities |