A Service Abstraction Layer (SAL) provides network level abstraction enabling applications to interface via multiple software-defined networking (SDN) protocols with network devices in a heterogeneous network (devices in the network support a variety of SDN protocols) and in an opaque fashion in order to fulfill desired services by one or more of the protocols. Abstraction is not limited or mapped to any particular protocol. Protocols can change and applications can vary. Support for new protocols can be added later as plug-ins.