aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/protocols/openflow/api/src/main/java/org/onosproject/openflow/controller/OpenFlowController.java
blob: 2c68fa0ba6924d515c62e04c5f1edeb775cb62dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * Copyright 2014 Open Networking Laboratory
 *
 * 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 org.onosproject.openflow.controller;

import org.projectfloodlight.openflow.protocol.OFMessage;

/**
 * Abstraction of an OpenFlow controller. Serves as a one stop
 * shop for obtaining OpenFlow devices and (un)register listeners
 * on OpenFlow events
 */
public interface OpenFlowController {

    /**
     * Returns all switches known to this OF controller.
     * @return Iterable of dpid elements
     */
    Iterable<OpenFlowSwitch> getSwitches();

    /**
     * Returns all master switches known to this OF controller.
     * @return Iterable of dpid elements
     */
    Iterable<OpenFlowSwitch> getMasterSwitches();

    /**
     * Returns all equal switches known to this OF controller.
     * @return Iterable of dpid elements
     */
    Iterable<OpenFlowSwitch> getEqualSwitches();


    /**
     * Returns the actual switch for the given Dpid.
     * @param dpid the switch to fetch
     * @return the interface to this switch
     */
    OpenFlowSwitch getSwitch(Dpid dpid);

    /**
     * Returns the actual master switch for the given Dpid, if one exists.
     * @param dpid the switch to fetch
     * @return the interface to this switch
     */
    OpenFlowSwitch getMasterSwitch(Dpid dpid);

    /**
     * Returns the actual equal switch for the given Dpid, if one exists.
     * @param dpid the switch to fetch
     * @return the interface to this switch
     */
    OpenFlowSwitch getEqualSwitch(Dpid dpid);

    /**
     * Register a listener for meta events that occur to OF
     * devices.
     * @param listener the listener to notify
     */
    void addListener(OpenFlowSwitchListener listener);

    /**
     * Unregister a listener.
     *
     * @param listener the listener to unregister
     */
    void removeListener(OpenFlowSwitchListener listener);

    /**
     * Register a listener for packet events.
     * @param priority the importance of this listener, lower values are more important
     * @param listener the listener to notify
     */
    void addPacketListener(int priority, PacketListener listener);

    /**
     * Unregister a listener.
     *
     * @param listener the listener to unregister
     */
    void removePacketListener(PacketListener listener);

    /**
     * Register a listener for OF msg events.
     *
     * @param listener the listener to notify
     */
    void addEventListener(OpenFlowEventListener listener);

    /**
     * Unregister a listener.
     *
     * @param listener the listener to unregister
     */
    void removeEventListener(OpenFlowEventListener listener);

    /**
     * Send a message to a particular switch.
     * @param dpid the switch to send to.
     * @param msg the message to send
     */
    void write(Dpid dpid, OFMessage msg);

    /**
     * Process a message and notify the appropriate listeners.
     *
     * @param dpid the dpid the message arrived on
     * @param msg the message to process.
     */
    void processPacket(Dpid dpid, OFMessage msg);

    /**
     * Sets the role for a given switch.
     * @param role the desired role
     * @param dpid the switch to set the role for.
     */
    void setRole(Dpid dpid, RoleState role);
}