# A Comprehensive Survey of In-Band Control in SDN: Challenges and Opportunities
## 4 A Survey of In-Band SDN Control in SDN
### Distributed Control  
Finally, this section compiles surveyed works related to the use of distributed controllers (regardless of whether they provide automatic routing, failure recovery, or network bootstrapping). All articles are summarised in Table 5 and, later on, explained in detail in the rest of the section. \begin{table}
\begin{tabular}{l c c c c} \hline \hline
**Article** & **Year** & **Key Features** & **Evaluation \& Tools** & **Available** & **Overall** \\ \hline
**Schiff** & & & & **Code? ** & **contribution** \\ \hline
**Schiff** & & & & **Simulation: Java/Fat-tree network** & — \\
**Schiff** & & & & **Distributed control plane that supports** \\
**e.g. ** & & & & **discovery topology and controller-to-controller connectivity** \\
**Schiff** & & & & **Simulation: Java** & **–** \\
**e.g. ** & & & & **Simulation:** & **–** \\
**e.g. ** & & & & **Python Wrapper** \\
**e.  
**[PERSON] et al. ** [94] present Medieval, which allows the switches in the network to set up an in-band connection to a single controller and also to establish routes to support connectivity among controllers. Medieval sets up the in-band control plane by creating and maintaining two spanning trees for each controller: (1) A \"per-region\" spanning tree spans over the region owned by a controller. The region owned by a controller is a connected graph containing the controller and the switches it controls. (2) A \"network-wide\" spanning tree spans over the whole network to allow controller-to-controller connectivity. However, they do not detail how the controller-to-controller connectivity is achieved. The switches need a pre-configured controller IP and a set of a priori rules for the system to work. They provide a preliminary evaluation based on a Java emulator prototype. **[PERSON] et al. ** [95] propose a plug and play distributed control plane which supports automatic topology discovery and management, as well as flexible controller membership: controllers can be added and removed dynamically. This is achieved by managing two STP trees, one for membership and is a switch with controller, and the other, which provides connectivity between controllers. The implementation relies on OpenFlow and pre-configured rules at startup, so that the network is autonomously self-stabilising. Network resilience is achieved by applying timeout policies and low-priority rules that will only take effect in the event that a switch runs out of an associated controller. Additionally, it uses ARP for topology discovery. **[PERSON] et al. ** [96] propose an in-band synchronization framework for a distributed control plane based on atomic transactions. The synchronisation primitives and atomic operations have been designed so that they can be implemented exclusively with OpenFlow. The distributed control framework could be deployed without modifying any of the code of current software switches. It makes use of OF tables to generate a shared memory system to manage the distributed control plane of the network. In order to avoid inconsistencies, a series of synchronisation mechanisms have been proposed in addition to atomic operations. The validation has been carried out using Mininet and OVS switches to test the atomic operations described above. All three previous works seem to follow a progressive evolution of their preliminary idea for distributed SDN control. **[PERSON] et al. ** [97] propose a dynamic control plane architecture for SDN networks that can adapt to changes in high controller load and new flow demands. The proposed architecture allows the activation and deactivation of controllers on-the-fly based on automatic measurement of network control traffic and changing service requirements. The authors describe a series of base scenarios and operations that can be performed with this dynamic data plane management architecture. The proposed architecture was evaluated using Mininet, OVS switches, and Floodlight as the controller.