| /** |
| * Copyright 2011, Big Switch Networks, Inc. |
| * Originally created by David Erickson, Stanford University |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may |
| * not use this file except in compliance with the License. You may obtain |
| * a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations |
| * under the License. |
| **/ |
| |
| package net.floodlightcontroller.core; |
| |
| import net.floodlightcontroller.core.IOFSwitch.PortChangeType; |
| |
| import org.projectfloodlight.openflow.protocol.OFPortDesc; |
| |
| /** |
| * |
| * Switch lifecycle notifications. |
| * |
| * These updates /happen-after/ the corresponding changes have been |
| * committed. I.e., the changes are visible when |
| * {@link IFloodlightProviderService#getSwitch(long)} |
| * {@link IFloodlightProviderService#getAllSwitchDpids()} |
| * {@link IFloodlightProviderService#getAllSwitchMap()} |
| * or any method on the IOFSwitch returned by these methods are |
| * called from the notification method or after it. |
| * |
| * Note however, that additional changes could have been committed before |
| * the notification for which the notification is still pending. E.g., |
| * {@link IFloodlightProviderService#getSwitch(long)} might return null after |
| * a switchAdded() (which happens if the switch has been added and then |
| * removed and the remove hasn't been dispatched yet). |
| * |
| * These lifecycle notification methods are called by a single thread and they |
| * will always be called by the same thread. |
| * The calls are always in order. |
| * |
| */ |
| public interface IOFSwitchListener { |
| |
| /** |
| * The name assigned to this listener |
| */ |
| public String getName(); |
| |
| /** |
| * Fired when switch becomes active on the controller cluster and this |
| * controller instance has acquired MASTER role for this switch |
| * @param switchId the datapath Id of the new switch |
| */ |
| public void switchActivatedMaster(long swId); |
| |
| /** |
| * Fired when switch becomes active on the controller cluster and this |
| * controller instance has acquired EQUAL role for this switch |
| * @param switchId the datapath Id of the new switch |
| */ |
| public void switchActivatedEqual(long swId); |
| |
| /** |
| * Fired when the role of this controller for this switch, transitions |
| * from MASTER role to EQUAL role |
| * @param switchId the datapath Id of the new switch |
| */ |
| public void switchMasterToEqual(long swId); |
| |
| /** |
| * Fired when the role of this controller for this switch, transitions |
| * from EQUAL role to MASTER role |
| * @param switchId the datapath Id of the new switch |
| */ |
| public void switchEqualToMaster(long swId); |
| |
| /** |
| * Fired when this switch has disconnected at this controller. It does NOT |
| * imply that the switch has died, or it has disconnected from any or every |
| * other controller it was connected to. |
| * @param swId |
| */ |
| public void switchDisconnected(long swId); |
| |
| /** |
| * Fired when a port on a known switch changes. |
| * |
| * A user of this notification needs to take care if the port and type |
| * information is used directly and if the collection of ports has been |
| * queried as well. This notification will only be dispatched after the |
| * the port changes have been committed to the IOFSwitch instance. However, |
| * if a user has previously called {@link IOFSwitch#getPorts()} or related |
| * method a subsequent update might already be present in the information |
| * returned by getPorts. |
| * @param switchId |
| * @param port |
| * @param type |
| */ |
| public void switchPortChanged(long swId, OFPortDesc port, |
| PortChangeType changeType); |
| |
| /** |
| * Fired when any non-port related information (e.g., attributes, |
| * features) change after a switchAdded XXX S needs more specific methods |
| * TODO: currently unused |
| * @param switchId |
| */ |
| //public void switchChanged(long swId); |
| } |