blob: 397149b716afd702b094c6da58521205d0e9abf8 [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.
Sho SHIMIZUbe63b232015-06-30 10:57:58 -070035 *
36 * @deprecated in Cardinal Release
sangho11c30ac2015-01-22 14:30:55 -080037 */
alshabibdb774072015-04-20 13:13:51 -070038 @Deprecated
Sho SHIMIZU3310a342015-05-13 12:14:05 -070039 static enum Type {
jcc3d4e14a2015-04-21 11:32:05 +080040 /*
41 * Default type - used in flow rule for single table switch NOTE: this
42 * setting should not be used as Table 0 in a multi-table pipeline
43 */
sangho11c30ac2015-01-22 14:30:55 -080044 DEFAULT,
45 /* Used in flow entry for IP table */
46 IP,
47 /* Used in flow entry for MPLS table */
48 MPLS,
49 /* Used in flow entry for ACL table */
alshabib9af70072015-02-09 14:34:16 -080050 ACL,
51
52 /* VLAN-to-MPLS table */
53 VLAN_MPLS,
54
55 /* VLAN table */
56 VLAN,
57
Saurav Dascbe6de32015-03-01 18:30:46 -080058 /* Ethtype table */
alshabib9af70072015-02-09 14:34:16 -080059 ETHER,
60
61 /* Class of Service table */
62 COS,
Saurav Dascbe6de32015-03-01 18:30:46 -080063
64 /* Table 0 in a multi-table pipeline */
65 FIRST,
sangho11c30ac2015-01-22 14:30:55 -080066 }
67
Ayaka Koshibed4e53e12014-09-18 14:24:55 -070068 /**
69 * Returns the ID of this flow.
70 *
71 * @return the flow ID
72 */
73 FlowId id();
alshabib369d2942014-09-12 17:59:35 -070074
tom8bb16062014-09-12 14:47:46 -070075 /**
alshabiba68eb962014-09-24 20:34:13 -070076 * Returns the application id of this flow.
77 *
78 * @return an applicationId
79 */
alshabib92c65ad2014-10-08 21:56:05 -070080 short appId();
alshabiba68eb962014-09-24 20:34:13 -070081
82 /**
alshabib28204e52014-11-12 18:29:45 -080083 * Returns the group id of this flow.
84 *
85 * @return an groupId
86 */
Sho SHIMIZU75a5bd92014-11-25 11:22:56 -080087 GroupId groupId();
alshabib28204e52014-11-12 18:29:45 -080088
89 /**
tom8bb16062014-09-12 14:47:46 -070090 * Returns the flow rule priority given in natural order; higher numbers
91 * mean higher priorities.
92 *
93 * @return flow rule priority
94 */
95 int priority();
96
97 /**
98 * Returns the identity of the device where this rule applies.
99 *
100 * @return device identifier
101 */
102 DeviceId deviceId();
103
104 /**
jcc3d4e14a2015-04-21 11:32:05 +0800105 * Returns the traffic selector that identifies what traffic this rule
106 * should apply to.
tom8bb16062014-09-12 14:47:46 -0700107 *
108 * @return traffic selector
109 */
110 TrafficSelector selector();
111
112 /**
113 * Returns the traffic treatment that applies to selected traffic.
114 *
115 * @return traffic treatment
116 */
alshabib369d2942014-09-12 17:59:35 -0700117 TrafficTreatment treatment();
tom8bb16062014-09-12 14:47:46 -0700118
Ayaka Koshibed4e53e12014-09-18 14:24:55 -0700119 /**
alshabibba5ac482014-10-02 17:15:20 -0700120 * Returns the timeout for this flow requested by an application.
Jonathan Hartbc4a7932014-10-21 11:46:00 -0700121 *
alshabibba5ac482014-10-02 17:15:20 -0700122 * @return integer value of the timeout
alshabib6eb438a2014-10-01 16:39:37 -0700123 */
alshabibba5ac482014-10-02 17:15:20 -0700124 int timeout();
alshabib6eb438a2014-10-01 16:39:37 -0700125
Jonathan Hartbc4a7932014-10-21 11:46:00 -0700126 /**
127 * Returns whether the flow is permanent i.e. does not time out.
128 *
129 * @return true if the flow is permanent, otherwise false
130 */
131 boolean isPermanent();
132
sangho11c30ac2015-01-22 14:30:55 -0800133 /**
alshabibdb774072015-04-20 13:13:51 -0700134 * Returns the table id for this rule.
135 *
136 * @return an integer.
137 */
138 int tableId();
139
140 /**
141 * A flowrule builder.
142 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700143 interface Builder {
alshabibdb774072015-04-20 13:13:51 -0700144
145 /**
146 * Assigns a cookie value to this flowrule. Mutually exclusive with the
147 * fromApp method. This method is intended to take a cookie value from
148 * the dataplane and not from the application.
149 *
150 * @param cookie a long value
151 * @return this
152 */
153 Builder withCookie(long cookie);
154
155 /**
156 * Assigns the application that built this flow rule to this object.
157 * The short value of the appId will be used as a basis for the
158 * cookie value computation. It is expected that application use this
159 * call to set their application id.
160 *
161 * @param appId an application id
162 * @return this
163 */
164 Builder fromApp(ApplicationId appId);
165
166 /**
167 * Sets the priority for this flow rule.
168 *
169 * @param priority an integer
170 * @return this
171 */
172 Builder withPriority(int priority);
173
174 /**
175 * Sets the deviceId for this flow rule.
176 *
177 * @param deviceId a device id
178 * @return this
179 */
180 Builder forDevice(DeviceId deviceId);
181
182 /**
183 * Sets the table id for this flow rule. Default value is 0.
184 *
185 * @param tableId an integer
186 * @return this
187 */
188 Builder forTable(int tableId);
189
190 /**
191 * Sets the selector (or match field) for this flow rule.
192 *
193 * @param selector a traffic selector
194 * @return this
195 */
196 Builder withSelector(TrafficSelector selector);
197
198 /**
199 * Sets the traffic treatment for this flow rule.
200 *
201 * @param treatment a traffic treatment
202 * @return this
203 */
204 Builder withTreatment(TrafficTreatment treatment);
205
206 /**
207 * Makes this rule permanent on the dataplane.
208 *
209 * @return this
210 */
211 Builder makePermanent();
212
213 /**
214 * Makes this rule temporary and timeout after the specified amount
215 * of time.
216 *
217 * @param timeout an integer
218 * @return this
219 */
220 Builder makeTemporary(int timeout);
221
222 /**
223 * Builds a flow rule object.
224 *
225 * @return a flow rule.
226 */
227 FlowRule build();
228
229 }
230
jcc3d4e14a2015-04-21 11:32:05 +0800231 /**
232 * Returns the third party original flow rule.
233 *
234 * @return FlowRuleExtPayLoad
235 */
236 FlowRuleExtPayLoad payLoad();
tom8bb16062014-09-12 14:47:46 -0700237}