blob: cd56d0c59566748e7db9de23b61772cffe10b222 [file] [log] [blame]
Thomas Vachuska83e090e2014-10-22 14:25:35 -07001/*
jcc3d4e14a2015-04-21 11:32:05 +08002 * Copyright 2014 Open Networking Laboratory
Thomas Vachuska83e090e2014-10-22 14:25:35 -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 Vachuska83e090e2014-10-22 14:25:35 -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 Vachuska83e090e2014-10-22 14:25:35 -070015 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.net.flow;
tom8bb16062014-09-12 14:47:46 -070017
alshabibdb774072015-04-20 13:13:51 -070018import org.onosproject.core.ApplicationId;
Brian O'Connorabafb502014-12-02 22:26:20 -080019import org.onosproject.core.GroupId;
20import org.onosproject.net.DeviceId;
tom8bb16062014-09-12 14:47:46 -070021
tom8bb16062014-09-12 14:47:46 -070022/**
jcc3d4e14a2015-04-21 11:32:05 +080023 * Represents a generalized match & action pair to be applied to an
24 * infrastructure device.
tom8bb16062014-09-12 14:47:46 -070025 */
Sho SHIMIZU5e5d4aa2015-01-26 16:12:11 -080026public interface FlowRule {
tom8bb16062014-09-12 14:47:46 -070027
alshabibba5ac482014-10-02 17:15:20 -070028 static final int MAX_TIMEOUT = 60;
alshabiba0e04982014-10-03 13:03:19 -070029 static final int MIN_PRIORITY = 0;
alshabiba7f7ca82014-09-22 11:41:23 -070030
sangho11c30ac2015-01-22 14:30:55 -080031 /**
jcc3d4e14a2015-04-21 11:32:05 +080032 * The FlowRule type is used to determine in which table the flow rule needs
33 * to be put for multi-table support switch. For single table switch,
34 * Default is used.
sangho11c30ac2015-01-22 14:30:55 -080035 */
alshabibdb774072015-04-20 13:13:51 -070036 @Deprecated
Sho SHIMIZU3310a342015-05-13 12:14:05 -070037 static enum Type {
jcc3d4e14a2015-04-21 11:32:05 +080038 /*
39 * Default type - used in flow rule for single table switch NOTE: this
40 * setting should not be used as Table 0 in a multi-table pipeline
41 */
sangho11c30ac2015-01-22 14:30:55 -080042 DEFAULT,
43 /* Used in flow entry for IP table */
44 IP,
45 /* Used in flow entry for MPLS table */
46 MPLS,
47 /* Used in flow entry for ACL table */
alshabib9af70072015-02-09 14:34:16 -080048 ACL,
49
50 /* VLAN-to-MPLS table */
51 VLAN_MPLS,
52
53 /* VLAN table */
54 VLAN,
55
Saurav Dascbe6de32015-03-01 18:30:46 -080056 /* Ethtype table */
alshabib9af70072015-02-09 14:34:16 -080057 ETHER,
58
59 /* Class of Service table */
60 COS,
Saurav Dascbe6de32015-03-01 18:30:46 -080061
62 /* Table 0 in a multi-table pipeline */
63 FIRST,
sangho11c30ac2015-01-22 14:30:55 -080064 }
65
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070066 /**
67 * Returns the ID of this flow.
68 *
69 * @return the flow ID
70 */
71 FlowId id();
alshabib369d2942014-09-12 17:59:35 -070072
tom8bb16062014-09-12 14:47:46 -070073 /**
alshabiba68eb962014-09-24 20:34:13 -070074 * Returns the application id of this flow.
75 *
76 * @return an applicationId
77 */
alshabib92c65ad2014-10-08 21:56:05 -070078 short appId();
alshabiba68eb962014-09-24 20:34:13 -070079
80 /**
alshabib28204e52014-11-12 18:29:45 -080081 * Returns the group id of this flow.
82 *
83 * @return an groupId
84 */
Sho SHIMIZU75a5bd92014-11-25 11:22:56 -080085 GroupId groupId();
alshabib28204e52014-11-12 18:29:45 -080086
87 /**
tom8bb16062014-09-12 14:47:46 -070088 * Returns the flow rule priority given in natural order; higher numbers
89 * mean higher priorities.
90 *
91 * @return flow rule priority
92 */
93 int priority();
94
95 /**
96 * Returns the identity of the device where this rule applies.
97 *
98 * @return device identifier
99 */
100 DeviceId deviceId();
101
102 /**
jcc3d4e14a2015-04-21 11:32:05 +0800103 * Returns the traffic selector that identifies what traffic this rule
104 * should apply to.
tom8bb16062014-09-12 14:47:46 -0700105 *
106 * @return traffic selector
107 */
108 TrafficSelector selector();
109
110 /**
111 * Returns the traffic treatment that applies to selected traffic.
112 *
113 * @return traffic treatment
114 */
alshabib369d2942014-09-12 17:59:35 -0700115 TrafficTreatment treatment();
tom8bb16062014-09-12 14:47:46 -0700116
Ayaka Koshibed4e53e12014-09-18 14:24:55 -0700117 /**
alshabibba5ac482014-10-02 17:15:20 -0700118 * Returns the timeout for this flow requested by an application.
Jonathan Hartbc4a7932014-10-21 11:46:00 -0700119 *
alshabibba5ac482014-10-02 17:15:20 -0700120 * @return integer value of the timeout
alshabib6eb438a2014-10-01 16:39:37 -0700121 */
alshabibba5ac482014-10-02 17:15:20 -0700122 int timeout();
alshabib6eb438a2014-10-01 16:39:37 -0700123
Jonathan Hartbc4a7932014-10-21 11:46:00 -0700124 /**
125 * Returns whether the flow is permanent i.e. does not time out.
126 *
127 * @return true if the flow is permanent, otherwise false
128 */
129 boolean isPermanent();
130
sangho11c30ac2015-01-22 14:30:55 -0800131 /**
alshabibdb774072015-04-20 13:13:51 -0700132 * Returns the table id for this rule.
133 *
134 * @return an integer.
135 */
136 int tableId();
137
138 /**
Jonathan Hart3d459e12015-08-04 09:58:46 -0700139 * {@inheritDoc}
140 *
141 * Equality for flow rules only considers 'match equality'. This means that
142 * two flow rules with the same match conditions will be equal, regardless
143 * of the treatment or other characteristics of the flow.
144 *
145 * @param obj the reference object with which to compare.
146 * @return {@code true} if this object is the same as the obj
147 * argument; {@code false} otherwise.
148 */
149 boolean equals(Object obj);
150
151 /**
152 * Returns whether this flow rule is an exact match to the flow rule given
153 * in the argument.
154 * <p>
155 * Exact match means that deviceId, priority, selector,
156 * tableId, flowId and treatment are equal. Note that this differs from
157 * the notion of object equality for flow rules, which does not consider the
158 * flowId or treatment when testing equality.
159 * </p>
160 *
161 * @param rule other rule to match against
162 * @return true if the rules are an exact match, otherwise false
163 */
164 boolean exactMatch(FlowRule rule);
165
166 /**
alshabibdb774072015-04-20 13:13:51 -0700167 * A flowrule builder.
168 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700169 interface Builder {
alshabibdb774072015-04-20 13:13:51 -0700170
171 /**
172 * Assigns a cookie value to this flowrule. Mutually exclusive with the
173 * fromApp method. This method is intended to take a cookie value from
174 * the dataplane and not from the application.
175 *
176 * @param cookie a long value
177 * @return this
178 */
179 Builder withCookie(long cookie);
180
181 /**
182 * Assigns the application that built this flow rule to this object.
183 * The short value of the appId will be used as a basis for the
184 * cookie value computation. It is expected that application use this
185 * call to set their application id.
186 *
187 * @param appId an application id
188 * @return this
189 */
190 Builder fromApp(ApplicationId appId);
191
192 /**
193 * Sets the priority for this flow rule.
194 *
195 * @param priority an integer
196 * @return this
197 */
198 Builder withPriority(int priority);
199
200 /**
201 * Sets the deviceId for this flow rule.
202 *
203 * @param deviceId a device id
204 * @return this
205 */
206 Builder forDevice(DeviceId deviceId);
207
208 /**
209 * Sets the table id for this flow rule. Default value is 0.
210 *
211 * @param tableId an integer
212 * @return this
213 */
214 Builder forTable(int tableId);
215
216 /**
217 * Sets the selector (or match field) for this flow rule.
218 *
219 * @param selector a traffic selector
220 * @return this
221 */
222 Builder withSelector(TrafficSelector selector);
223
224 /**
225 * Sets the traffic treatment for this flow rule.
226 *
227 * @param treatment a traffic treatment
228 * @return this
229 */
230 Builder withTreatment(TrafficTreatment treatment);
231
232 /**
233 * Makes this rule permanent on the dataplane.
234 *
235 * @return this
236 */
237 Builder makePermanent();
238
239 /**
240 * Makes this rule temporary and timeout after the specified amount
241 * of time.
242 *
243 * @param timeout an integer
244 * @return this
245 */
246 Builder makeTemporary(int timeout);
247
248 /**
249 * Builds a flow rule object.
250 *
251 * @return a flow rule.
252 */
253 FlowRule build();
254
255 }
256
jcc3d4e14a2015-04-21 11:32:05 +0800257 /**
258 * Returns the third party original flow rule.
259 *
260 * @return FlowRuleExtPayLoad
261 */
262 FlowRuleExtPayLoad payLoad();
tom8bb16062014-09-12 14:47:46 -0700263}