2 * Copyright 2014 Open Networking Laboratory
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.onosproject.openflow.controller.driver;
18 import org.onosproject.openflow.controller.Dpid;
19 import org.onosproject.openflow.controller.OpenFlowSwitch;
20 import org.onosproject.openflow.controller.RoleState;
21 import org.projectfloodlight.openflow.protocol.OFMessage;
24 * Responsible for keeping track of the current set of switches
25 * connected to the system. As well as whether they are in Master
29 public interface OpenFlowAgent {
32 * Add a switch that has just connected to the system.
33 * @param dpid the dpid to add
34 * @param sw the actual switch object.
35 * @return true if added, false otherwise.
37 boolean addConnectedSwitch(Dpid dpid, OpenFlowSwitch sw);
40 * Checks if the activation for this switch is valid.
41 * @param dpid the dpid to check
42 * @return true if valid, false otherwise
44 boolean validActivation(Dpid dpid);
47 * Called when a switch is activated, with this controller's role as MASTER.
48 * @param dpid the dpid to add.
49 * @param sw the actual switch
50 * @return true if added, false otherwise.
52 boolean addActivatedMasterSwitch(Dpid dpid, OpenFlowSwitch sw);
55 * Called when a switch is activated, with this controller's role as EQUAL.
56 * @param dpid the dpid to add.
57 * @param sw the actual switch
58 * @return true if added, false otherwise.
60 boolean addActivatedEqualSwitch(Dpid dpid, OpenFlowSwitch sw);
63 * Called when this controller's role for a switch transitions from equal
64 * to master. For 1.0 switches, we internally refer to the role 'slave' as
65 * 'equal' - so this transition is equivalent to 'addActivatedMasterSwitch'.
66 * @param dpid the dpid to transistion.
68 void transitionToMasterSwitch(Dpid dpid);
71 * Called when this controller's role for a switch transitions to equal.
72 * For 1.0 switches, we internally refer to the role 'slave' as
74 * @param dpid the dpid to transistion.
76 void transitionToEqualSwitch(Dpid dpid);
79 * Clear all state in controller switch maps for a switch that has
80 * disconnected from the local controller. Also release control for
81 * that switch from the global repository. Notify switch listeners.
82 * @param dpid the dpid to remove.
84 void removeConnectedSwitch(Dpid dpid);
87 * Process a message coming from a switch.
89 * @param dpid the dpid the message came on.
90 * @param m the message to process
92 void processMessage(Dpid dpid, OFMessage m);
95 * Notifies the controller that role assertion has failed.
97 * @param dpid the switch that failed role assertion
98 * @param requested the role controller requested
99 * @param response role reply from the switch
101 void returnRoleReply(Dpid dpid, RoleState requested, RoleState response);