blob: ddbbe2f96fc56445cc5081aec1cfe7f9fa07b236 [file] [log] [blame]
alshabibfaa1e362015-04-02 15:01:54 -07001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
alshabibfaa1e362015-04-02 15:01:54 -07003 *
4 * 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
7 *
8 * 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.
15 */
16package org.onosproject.net.flowobjective;
17
Thomas Vachuskaa9d491e2015-05-20 11:17:21 -070018import com.google.common.annotations.Beta;
alshabibfaa1e362015-04-02 15:01:54 -070019import org.onosproject.core.ApplicationId;
20
alshabib2a441c62015-04-13 18:39:38 -070021import java.util.Optional;
22
alshabibfaa1e362015-04-02 15:01:54 -070023/**
Saurav Das8a0732e2015-11-20 15:27:53 -080024 * Base representation of a flow-objective description.
alshabibfaa1e362015-04-02 15:01:54 -070025 */
Thomas Vachuskaa9d491e2015-05-20 11:17:21 -070026@Beta
alshabibfaa1e362015-04-02 15:01:54 -070027public interface Objective {
28
Sho SHIMIZUe2952e42015-09-11 17:11:21 -070029 boolean DEFAULT_PERMANENT = true;
30 int DEFAULT_TIMEOUT = 0;
31 int DEFAULT_PRIORITY = 32768;
Jayasree Ghosh3684dc72016-06-09 18:07:19 +053032 int MIN_PRIORITY = 0;
33 int MAX_PRIORITY = 65535;
alshabibfaa1e362015-04-02 15:01:54 -070034
35 /**
36 * Type of operation.
37 */
38 enum Operation {
39 /**
Saurav Das8a0732e2015-11-20 15:27:53 -080040 * Adds the objective. Can be used for any flow objective. For forwarding
41 * and filtering objectives, existing objectives with identical selector
42 * and priority fields (but different treatments or next) will be replaced.
43 * For next objectives, if modification is desired, ADD will not
44 * do anything - use ADD_TO_EXISTING.
alshabibfaa1e362015-04-02 15:01:54 -070045 */
46 ADD,
47
48 /**
Saurav Das8a0732e2015-11-20 15:27:53 -080049 * Removes the objective. Can be used for any flow objective.
alshabibfaa1e362015-04-02 15:01:54 -070050 */
Saurav Das8a0732e2015-11-20 15:27:53 -080051 REMOVE,
52
53 /**
54 * Add to an existing Next Objective. Should not be used for any other
55 * objective.
56 */
57 ADD_TO_EXISTING,
58
59 /**
60 * Remove from an existing Next Objective. Should not be used for any
61 * other objective.
62 */
63 REMOVE_FROM_EXISTING
alshabibfaa1e362015-04-02 15:01:54 -070064 }
65
66 /**
67 * An identifier for this objective.
68 *
69 * @return an integer
70 */
71 int id();
72
73 /**
74 * The priority for this objective.
75 *
76 * @return an integer
77 */
78 int priority();
79
80 /**
81 * The application which applied this objective.
82 *
83 * @return an application id
84 */
85 ApplicationId appId();
86
87 /**
88 * The timeout for this objective.
89 *
90 * @return an integer
91 */
92 int timeout();
93
94 /**
95 * Whether this objective is permanent.
96 *
97 * @return a boolean
98 */
99 boolean permanent();
100
101 /**
102 * The type of operation for this objective.
103 *
104 * @return an operation
105 */
106 Operation op();
107
108 /**
alshabib2a441c62015-04-13 18:39:38 -0700109 * Obtains an optional context.
110 *
111 * @return optional; which will be empty if there is no context.
112 * Otherwise it will return the context.
113 */
114 Optional<ObjectiveContext> context();
115
116 /**
Thomas Vachuska00f48162016-02-29 17:07:23 -0800117 * Returns a new builder set to create a copy of this objective.
118 *
119 * @return new builder
120 */
121 Objective.Builder copy();
122
123 /**
alshabibfaa1e362015-04-02 15:01:54 -0700124 * An objective builder.
125 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700126 interface Builder {
alshabibfaa1e362015-04-02 15:01:54 -0700127 /**
128 * Makes the filtering objective temporary.
129 *
130 * @param timeout a timeout
131 * @return an objective builder
132 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700133 Builder makeTemporary(int timeout);
alshabibfaa1e362015-04-02 15:01:54 -0700134
135 /**
136 * Makes the filtering objective permanent.
137 *
138 * @return an objective builder
139 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700140 Builder makePermanent();
alshabibfaa1e362015-04-02 15:01:54 -0700141
142 /**
143 * Specifies the application which applied the filter.
144 *
145 * @param appId an application id
146 * @return an objective builder
147 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700148 Builder fromApp(ApplicationId appId);
alshabibfaa1e362015-04-02 15:01:54 -0700149
150 /**
151 * Sets the priority for this objective.
152 *
153 * @param priority an integer
154 * @return an objective builder
155 */
Sho SHIMIZU3310a342015-05-13 12:14:05 -0700156 Builder withPriority(int priority);
Saurav Das8a0732e2015-11-20 15:27:53 -0800157
Thomas Vachuska00f48162016-02-29 17:07:23 -0800158 /**
159 * Builds the objective that will be added.
160 *
161 * @return an objective
162 */
163 Objective add();
alshabibfaa1e362015-04-02 15:01:54 -0700164
Thomas Vachuska00f48162016-02-29 17:07:23 -0800165 /**
166 * Builds the objective that will be removed.
167 *
168 * @return an objective.
169 */
170 Objective remove();
171
172 /**
173 * Builds the objective that will be added.
174 * The context will be used to notify the calling application.
175 *
176 * @param context an objective context
177 * @return an objective
178 */
179 Objective add(ObjectiveContext context);
180
181 /**
182 * Builds the objective that will be removed.
183 * The context will be used to notify the calling application.
184 *
185 * @param context an objective context
186 * @return an objective
187 */
188 Objective remove(ObjectiveContext context);
189 }
alshabibfaa1e362015-04-02 15:01:54 -0700190}