blob: 37c43f327a649711d41f8253c050002eb85f81be [file] [log] [blame]
Thomas Vachuska781d18b2014-10-27 10:31:25 -07001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2015-present Open Networking Foundation
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
Jian Lia78cdb22016-04-21 13:03:58 -070023import java.util.List;
24
tom7ef8ff92014-09-17 13:08:06 -070025/**
26 * Responsible for keeping track of the current set of switches
27 * connected to the system. As well as whether they are in Master
28 * role or not.
29 *
30 */
31public interface OpenFlowAgent {
32
33 /**
34 * Add a switch that has just connected to the system.
35 * @param dpid the dpid to add
36 * @param sw the actual switch object.
37 * @return true if added, false otherwise.
38 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070039 boolean addConnectedSwitch(Dpid dpid, OpenFlowSwitch sw);
tom7ef8ff92014-09-17 13:08:06 -070040
41 /**
42 * Checks if the activation for this switch is valid.
43 * @param dpid the dpid to check
44 * @return true if valid, false otherwise
45 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070046 boolean validActivation(Dpid dpid);
tom7ef8ff92014-09-17 13:08:06 -070047
48 /**
49 * Called when a switch is activated, with this controller's role as MASTER.
50 * @param dpid the dpid to add.
51 * @param sw the actual switch
52 * @return true if added, false otherwise.
53 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070054 boolean addActivatedMasterSwitch(Dpid dpid, OpenFlowSwitch sw);
tom7ef8ff92014-09-17 13:08:06 -070055
56 /**
57 * Called when a switch is activated, with this controller's role as EQUAL.
58 * @param dpid the dpid to add.
59 * @param sw the actual switch
60 * @return true if added, false otherwise.
61 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070062 boolean addActivatedEqualSwitch(Dpid dpid, OpenFlowSwitch sw);
tom7ef8ff92014-09-17 13:08:06 -070063
64 /**
65 * Called when this controller's role for a switch transitions from equal
66 * to master. For 1.0 switches, we internally refer to the role 'slave' as
67 * 'equal' - so this transition is equivalent to 'addActivatedMasterSwitch'.
Frank Wangd8ab0962017-08-11 11:09:30 +080068 * @param dpid the dpid to transition.
tom7ef8ff92014-09-17 13:08:06 -070069 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070070 void transitionToMasterSwitch(Dpid dpid);
tom7ef8ff92014-09-17 13:08:06 -070071
72 /**
73 * Called when this controller's role for a switch transitions to equal.
74 * For 1.0 switches, we internally refer to the role 'slave' as
75 * 'equal'.
Frank Wangd8ab0962017-08-11 11:09:30 +080076 * @param dpid the dpid to transition.
tom7ef8ff92014-09-17 13:08:06 -070077 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070078 void transitionToEqualSwitch(Dpid dpid);
tom7ef8ff92014-09-17 13:08:06 -070079
80 /**
81 * Clear all state in controller switch maps for a switch that has
82 * disconnected from the local controller. Also release control for
83 * that switch from the global repository. Notify switch listeners.
84 * @param dpid the dpid to remove.
85 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -070086 void removeConnectedSwitch(Dpid dpid);
tom7ef8ff92014-09-17 13:08:06 -070087
88 /**
Jian Lia78cdb22016-04-21 13:03:58 -070089 * Notify OpenFlow message listeners on all outgoing message event.
90 *
91 * @param dpid the dpid the message sent to
92 * @param m the collection of messages to sent out
93 */
94 void processDownstreamMessage(Dpid dpid, List<OFMessage> m);
95
96 /**
tom7ef8ff92014-09-17 13:08:06 -070097 * Process a message coming from a switch.
98 *
99 * @param dpid the dpid the message came on.
100 * @param m the message to process
101 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700102 void processMessage(Dpid dpid, OFMessage m);
Ayaka Koshibeab91cc42014-09-25 10:20:52 -0700103
104 /**
105 * Notifies the controller that role assertion has failed.
106 *
107 * @param dpid the switch that failed role assertion
Yuta HIGUCHI5c947272014-11-03 21:39:21 -0800108 * @param requested the role controller requested
109 * @param response role reply from the switch
Ayaka Koshibeab91cc42014-09-25 10:20:52 -0700110 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700111 void returnRoleReply(Dpid dpid, RoleState requested, RoleState response);
tom7ef8ff92014-09-17 13:08:06 -0700112}