blob: ad6dede1c54183814fec7ac9089afc29206c2f2a [file] [log] [blame]
Thomas Vachuska781d18b2014-10-27 10:31:25 -07001/*
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07002 * Copyright 2014 Open Networking Laboratory
Thomas Vachuska781d18b2014-10-27 10:31:25 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * 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
Thomas Vachuska781d18b2014-10-27 10:31:25 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
Thomas Vachuska781d18b2014-10-27 10:31:25 -070015 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.openflow.controller.driver;
tom7ef8ff92014-09-17 13:08:06 -070017
Brian O'Connorabafb502014-12-02 22:26:20 -080018import org.onosproject.openflow.controller.Dpid;
19import org.onosproject.openflow.controller.OpenFlowSwitch;
20import org.onosproject.openflow.controller.RoleState;
tom7ef8ff92014-09-17 13:08:06 -070021import org.projectfloodlight.openflow.protocol.OFMessage;
22
23/**
24 * Responsible for keeping track of the current set of switches
25 * connected to the system. As well as whether they are in Master
26 * role or not.
27 *
28 */
29public interface OpenFlowAgent {
30
31 /**
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.
36 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070037 boolean addConnectedSwitch(Dpid dpid, OpenFlowSwitch sw);
tom7ef8ff92014-09-17 13:08:06 -070038
39 /**
40 * Checks if the activation for this switch is valid.
41 * @param dpid the dpid to check
42 * @return true if valid, false otherwise
43 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070044 boolean validActivation(Dpid dpid);
tom7ef8ff92014-09-17 13:08:06 -070045
46 /**
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.
51 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070052 boolean addActivatedMasterSwitch(Dpid dpid, OpenFlowSwitch sw);
tom7ef8ff92014-09-17 13:08:06 -070053
54 /**
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.
59 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070060 boolean addActivatedEqualSwitch(Dpid dpid, OpenFlowSwitch sw);
tom7ef8ff92014-09-17 13:08:06 -070061
62 /**
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.
67 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070068 void transitionToMasterSwitch(Dpid dpid);
tom7ef8ff92014-09-17 13:08:06 -070069
70 /**
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
73 * 'equal'.
74 * @param dpid the dpid to transistion.
75 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070076 void transitionToEqualSwitch(Dpid dpid);
tom7ef8ff92014-09-17 13:08:06 -070077
78 /**
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.
83 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070084 void removeConnectedSwitch(Dpid dpid);
tom7ef8ff92014-09-17 13:08:06 -070085
86 /**
87 * Process a message coming from a switch.
88 *
89 * @param dpid the dpid the message came on.
90 * @param m the message to process
91 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070092 void processMessage(Dpid dpid, OFMessage m);
Ayaka Koshibeab91cc42014-09-25 10:20:52 -070093
94 /**
95 * Notifies the controller that role assertion has failed.
96 *
97 * @param dpid the switch that failed role assertion
Yuta HIGUCHI5c947272014-11-03 21:39:21 -080098 * @param requested the role controller requested
99 * @param response role reply from the switch
Ayaka Koshibeab91cc42014-09-25 10:20:52 -0700100 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700101 void returnRoleReply(Dpid dpid, RoleState requested, RoleState response);
tom7ef8ff92014-09-17 13:08:06 -0700102}