blob: 0971f402c771f6d2308e4ec7ec4a3f8b5ef5511c [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 /**
Jonathan Hartd10008d2013-02-23 17:04:08 -080032 * Register a controller to the ONOS cluster.
Jonathan Hartd82f20d2013-02-21 18:04:24 -080033 * @param controller A string identifying the controller
Jonathan Hartd10008d2013-02-23 17:04:08 -080034 * @throws errors connecting to registry service, controllerId already registered
Jonathan Hartedd6a442013-02-20 15:22:06 -080035 */
Jonathan Hart57080fb2013-02-21 10:55:46 -080036 public void registerController(String controllerId) throws RegistryException;
Jonathan Hartedd6a442013-02-20 15:22:06 -080037
38 /**
39 * Get all controllers in the cluster
40 * @return
41 */
Jonathan Hart57080fb2013-02-21 10:55:46 -080042 public Collection<String> getAllControllers() throws RegistryException;
Jonathan Hartedd6a442013-02-20 15:22:06 -080043
44
Jonathan Hart57080fb2013-02-21 10:55:46 -080045 public String getControllerForSwitch(long dpid) throws RegistryException;
Jonathan Hartedd6a442013-02-20 15:22:06 -080046
Jonathan Hart3d7730a2013-02-22 11:51:17 -080047 public Map<String, List<ControllerRegistryEntry>> getAllSwitches();
Jonathan Hartd82f20d2013-02-21 18:04:24 -080048
Jonathan Hartedd6a442013-02-20 15:22:06 -080049 public Collection<Long> getSwitchesControlledByController(String controllerId);
Umesh Krishnaswamyb56bb292013-02-12 20:28:27 -080050}