blob: e924f6a788d7466515e0c4ad6dedae638d4ba3d5 [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 Hart3d7730a2013-02-22 11:51:17 -08004import java.util.List;
Jonathan Hartd82f20d2013-02-21 18:04:24 -08005import java.util.Map;
Jonathan Hartedd6a442013-02-20 15:22:06 -08006
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -08007import net.floodlightcontroller.core.module.IFloodlightService;
8
Jonathan Hartd82f20d2013-02-21 18:04:24 -08009public interface IControllerRegistryService extends IFloodlightService {
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080010
Jonathan Hartbd181b62013-02-17 16:05:38 -080011 // Callback for all mastership changes.
12 // Change callback is called when mastership is acquired or released
Jonathan Hartd82f20d2013-02-21 18:04:24 -080013 public interface ControlChangeCallback {
14 public void controlChanged(long dpid, boolean hasControl);
Jonathan Hartbd181b62013-02-17 16:05:38 -080015 }
16
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080017 // Acquire mastership for a switch.
Jonathan Hart3d7730a2013-02-22 11:51:17 -080018 public void requestControl(long dpid, ControlChangeCallback cb) throws RegistryException;
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080019
20 // Release mastership for a switch
Jonathan Hartd82f20d2013-02-21 18:04:24 -080021 public void releaseControl(long dpid);
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080022
23 // 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 -080024 public boolean hasControl(long dpid);
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080025
26 // Set/Get mastership identifier.
27 // This is typically a unique identifier of the controller that does not change across restarts
28 public void setMastershipId (String id);
29 public String getMastershipId ();
30
Jonathan Hartedd6a442013-02-20 15:22:06 -080031 /**
32 * Register a controller to the ONOS cluster
Jonathan Hartd82f20d2013-02-21 18:04:24 -080033 * @param controller A string identifying the controller
Jonathan Hartedd6a442013-02-20 15:22:06 -080034 */
Jonathan Hart57080fb2013-02-21 10:55:46 -080035 public void registerController(String controllerId) throws RegistryException;
Jonathan Hartedd6a442013-02-20 15:22:06 -080036
37 /**
38 * Get all controllers in the cluster
39 * @return
40 */
Jonathan Hart57080fb2013-02-21 10:55:46 -080041 public Collection<String> getAllControllers() throws RegistryException;
Jonathan Hartedd6a442013-02-20 15:22:06 -080042
43
Jonathan Hart57080fb2013-02-21 10:55:46 -080044 public String getControllerForSwitch(long dpid) throws RegistryException;
Jonathan Hartedd6a442013-02-20 15:22:06 -080045
Jonathan Hart3d7730a2013-02-22 11:51:17 -080046 public Map<String, List<ControllerRegistryEntry>> getAllSwitches();
Jonathan Hartd82f20d2013-02-21 18:04:24 -080047
Jonathan Hartedd6a442013-02-20 15:22:06 -080048 public Collection<Long> getSwitchesControlledByController(String controllerId);
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080049}