Skip to main content
. 2022 Jul 25;22(15):5551. doi: 10.3390/s22155551

Table 6.

Summary of SDN Programming Languages.

Studies Programming Paradigm Description Strengths Weaknesses
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