blob: f2794cc5d963b7fd794de84551a8266eac218b49 [file] [log] [blame]
Jonathan Hartd82f20d2013-02-21 18:04:24 -08001package net.onrc.onos.registry.controller;
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -08002
Jonathan Hartedd6a442013-02-20 15:22:06 -08003import java.util.Collection;
Jonathan Hartd82f20d2013-02-21 18:04:24 -08004import java.util.Map;
Jonathan Hartedd6a442013-02-20 15:22:06 -08005
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -08006import net.floodlightcontroller.core.module.IFloodlightService;
7
Jonathan Hartd82f20d2013-02-21 18:04:24 -08008public interface IControllerRegistryService extends IFloodlightService {
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -08009
Jonathan Hartbd181b62013-02-17 16:05:38 -080010 // Callback for all mastership changes.
11 // Change callback is called when mastership is acquired or released
Jonathan Hartd82f20d2013-02-21 18:04:24 -080012 public interface ControlChangeCallback {
13 public void controlChanged(long dpid, boolean hasControl);
Jonathan Hartbd181b62013-02-17 16:05:38 -080014 }
15
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080016 // Acquire mastership for a switch.
Jonathan Hartd82f20d2013-02-21 18:04:24 -080017 public void requestControl(long dpid, ControlChangeCallback cb) throws Exception;
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080018
19 // Release mastership for a switch
Jonathan Hartd82f20d2013-02-21 18:04:24 -080020 public void releaseControl(long dpid);
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080021
22 // Check if I am the master of a switch. This is a nonblocking call that checks if the caller is a
Jonathan Hartd82f20d2013-02-21 18:04:24 -080023 public boolean hasControl(long dpid);
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080024
25 // Set/Get mastership identifier.
26 // This is typically a unique identifier of the controller that does not change across restarts
27 public void setMastershipId (String id);
28 public String getMastershipId ();
29
Jonathan Hartedd6a442013-02-20 15:22:06 -080030 /**
31 * Register a controller to the ONOS cluster
Jonathan Hartd82f20d2013-02-21 18:04:24 -080032 * @param controller A string identifying the controller
Jonathan Hartedd6a442013-02-20 15:22:06 -080033 */
Jonathan Hart57080fb2013-02-21 10:55:46 -080034 public void registerController(String controllerId) throws RegistryException;
Jonathan Hartedd6a442013-02-20 15:22:06 -080035
36 /**
37 * Get all controllers in the cluster
38 * @return
39 */
Jonathan Hart57080fb2013-02-21 10:55:46 -080040 public Collection<String> getAllControllers() throws RegistryException;
Jonathan Hartedd6a442013-02-20 15:22:06 -080041
42
Jonathan Hart57080fb2013-02-21 10:55:46 -080043 public String getControllerForSwitch(long dpid) throws RegistryException;
Jonathan Hartedd6a442013-02-20 15:22:06 -080044
Jonathan Hartd82f20d2013-02-21 18:04:24 -080045 public Collection<Map<String, String>> getAllSwitches();
46
Jonathan Hartedd6a442013-02-20 15:22:06 -080047 public Collection<Long> getSwitchesControlledByController(String controllerId);
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080048}