I. Introduction
Software Defined Networking (SDN) decouples the control plane and the forwarding plane of network devices. Controllers at the network edge are responsible for the complex control plane functionality while the network switches are responsible for the forwarding plane functionality[2]. Figure 1 shows the data and control planes for traditional network and Figure 2 shows data and control planes for SDN networks. In this paper, SDNs use OpenFlow protocol [2] [15] [16] which is a communication protocol that enables a controller to interact with OpenFlow switches [1]. Initial SDN designs assumed a single controller design [1]. Single controller designs suffer from single point of failure problem. Multi-controller designs improve the SDN networks scalability and reliability[3]. In the multi-controller SDN designs, switches are assigned to multiple controllers to avoid overloading of the controller. While multi-controller designsprevent single point of failures, failing of one of the controllers might lead to subsequent failures of the other surrounding available controllers. That is, when a controller fails, switches associated with that controller get re-assigned to the available controllers. This problem is referred to as cascading controller failure problem.