Thejaswi N K
Committed by Gerrit Code Review

BGP Route policy distribution and flow spec

Change-Id: I8903efd225a24db6ccc85a4a3148a4dd6076e042
Showing 94 changed files with 7416 additions and 4 deletions
1 +BUNDLES = [
2 + '//apps/bgpflowspec/flowapi:onos-apps-bgpflowspec-flowapi',
3 + '//apps/bgpflowspec/flowmgr:onos-apps-bgpflowspec-flowmgr',
4 + '//apps/bgpflowspec/bgpweb:onos-apps-bgpflowspec-web',
5 +]
6 +
7 +onos_app (
8 + title = 'BGP App',
9 + url = 'http://onosproject.org',
10 + included_bundles = BUNDLES,
11 + description = 'ONOS framework applications',
12 +)
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016-present Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<app name="org.onosproject.bgpflow" origin="ON.Lab" version="${project.version}"
18 + category="default" url="http://onosproject.org"
19 + featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
20 + features="${project.artifactId}">
21 + <description>${project.description}</description>
22 + <artifact>mvn:${project.groupId}/onos-app-bgp-flowmgr/${project.version}</artifact>
23 + <artifact>mvn:${project.groupId}/onos-app-bgp-web/${project.version}</artifact>
24 + <artifact>mvn:${project.groupId}/onos-app-bgp-flowapi/${project.version}</artifact>
25 +</app>
1 +<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2 +<!--
3 + ~ Copyright 2016-present Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
18 + <feature name="${project.artifactId}" version="${project.version}"
19 + description="${project.description}">
20 + <feature>onos-api</feature>
21 + <feature>onos-drivers</feature>
22 + <bundle>mvn:${project.groupId}/onos-app-bgp-flowapi/${project.version}</bundle>
23 + <bundle>mvn:${project.groupId}/onos-app-bgp-flowmgr/${project.version}</bundle>
24 + <bundle>mvn:${project.groupId}/onos-app-bgp-web/${project.version}</bundle>
25 + </feature>
26 +</features>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016-present Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
18 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
19 + <modelVersion>4.0.0</modelVersion>
20 +
21 + <parent>
22 + <groupId>org.onosproject</groupId>
23 + <artifactId>onos-app-bgpflow</artifactId>
24 + <version>1.6.0-SNAPSHOT</version>
25 + <relativePath>../pom.xml</relativePath>
26 + </parent>
27 +
28 + <artifactId>onos-app-bgp-flow</artifactId>
29 + <packaging>pom</packaging>
30 +
31 + <description>ONOS framework applications</description>
32 +
33 + <dependencies>
34 + <dependency>
35 + <groupId>org.onosproject</groupId>
36 + <artifactId>onos-app-bgp-flowapi</artifactId>
37 + <version>${project.version}</version>
38 + </dependency>
39 + <dependency>
40 + <groupId>org.onosproject</groupId>
41 + <artifactId>onos-app-bgp-flowmgr</artifactId>
42 + <version>${project.version}</version>
43 + </dependency>
44 + <dependency>
45 + <groupId>org.onosproject</groupId>
46 + <artifactId>onos-app-bgp-web</artifactId>
47 + <version>${project.version}</version>
48 + </dependency>
49 + </dependencies>
50 +
51 +</project>
1 +COMPILE_DEPS = [
2 + '//lib:CORE_DEPS',
3 + '//lib:javax.ws.rs-api',
4 + '//utils/rest:onlab-rest',
5 + '//apps/bgpflowspec/flowapi:onos-apps-bgpflowspec-flowapi',
6 + '//apps/bgpflowspec/flowmgr:onos-apps-bgpflowspec-flowmgr',
7 +]
8 +
9 +osgi_jar_with_tests (
10 + name = 'onos-apps-bgpflowspec-web',
11 + deps = COMPILE_DEPS,
12 +)
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016-present Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<project
18 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
19 + xmlns="http://maven.apache.org/POM/4.0.0"
20 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
21 + <modelVersion>4.0.0</modelVersion>
22 + <parent>
23 + <groupId>org.onosproject</groupId>
24 + <artifactId>onos-app-bgpflow</artifactId>
25 + <version>1.6.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
27 + </parent>
28 +
29 + <artifactId>onos-app-bgp-web</artifactId>
30 + <packaging>bundle</packaging>
31 + <properties>
32 + <web.context>/onos/bgp</web.context>
33 + </properties>
34 +
35 + <dependencies>
36 + <dependency>
37 + <groupId>javax.ws.rs</groupId>
38 + <artifactId>javax.ws.rs-api</artifactId>
39 + <version>2.0.1</version>
40 + </dependency>
41 + <dependency>
42 + <groupId>org.onosproject</groupId>
43 + <artifactId>onos-app-bgp-flowmgr</artifactId>
44 + <version>${project.version}</version>
45 + </dependency>
46 + <dependency>
47 + <groupId>org.onosproject</groupId>
48 + <artifactId>onos-rest</artifactId>
49 + <version>${project.version}</version>
50 + </dependency>
51 + <dependency>
52 + <groupId>com.google.guava</groupId>
53 + <artifactId>guava-testlib</artifactId>
54 + </dependency>
55 + </dependencies>
56 + <build>
57 + <plugins>
58 + <plugin>
59 + <groupId>org.apache.felix</groupId>
60 + <artifactId>maven-bundle-plugin</artifactId>
61 + <extensions>true</extensions>
62 + <configuration>
63 + <instructions>
64 + <_wab>src/main/webapp/</_wab>
65 + <Bundle-SymbolicName>
66 + ${project.groupId}.${project.artifactId}
67 + </Bundle-SymbolicName>
68 + <Import-Package>
69 + *,org.glassfish.jersey.servlet
70 + </Import-Package>
71 + <Web-ContextPath>${web.context}</Web-ContextPath>
72 + </instructions>
73 + </configuration>
74 + </plugin>
75 + </plugins>
76 + </build>
77 +
78 +</project>
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.bgpweb.resources;
17 +
18 +import com.fasterxml.jackson.databind.JsonNode;
19 +import com.fasterxml.jackson.databind.node.ArrayNode;
20 +import com.fasterxml.jackson.databind.node.ObjectNode;
21 +import org.onosproject.flow.manager.BgpFlowService;
22 +import org.onosproject.flowapi.DefaultExtWideCommunityInt;
23 +import org.onosproject.flowapi.ExtFlowContainer;
24 +import org.onosproject.flowapi.ExtFlowTypes;
25 +import org.onosproject.flowapi.ExtTrafficAction;
26 +import org.onosproject.flowapi.ExtWideCommunityInt;
27 +import org.onosproject.rest.AbstractWebResource;
28 +import org.slf4j.Logger;
29 +import org.slf4j.LoggerFactory;
30 +
31 +import javax.ws.rs.Consumes;
32 +import javax.ws.rs.DELETE;
33 +import javax.ws.rs.GET;
34 +import javax.ws.rs.POST;
35 +import javax.ws.rs.Path;
36 +import javax.ws.rs.Produces;
37 +import javax.ws.rs.core.MediaType;
38 +import javax.ws.rs.core.Response;
39 +import java.io.IOException;
40 +import java.io.InputStream;
41 +import java.util.List;
42 +import java.util.ListIterator;
43 +
44 +import static javax.ws.rs.core.Response.Status.NOT_ACCEPTABLE;
45 +import static javax.ws.rs.core.Response.Status.OK;
46 +
47 +/**
48 + * Bgp flow web resource.
49 + */
50 +
51 +@Path("flow")
52 +public class BgpFlowWebResource extends AbstractWebResource {
53 +
54 + private BgpFlowService flowService = get(BgpFlowService.class);
55 + protected static final String BGPFLOW = "bgp_flow";
56 + protected static final String DEVICEID = "deviceId";
57 + protected static final int LOCAL_PERF = 20;
58 + private final Logger log = LoggerFactory.getLogger(BgpFlowWebResource.class);
59 +
60 + /**
61 + * Get the Bgp flow.
62 + *
63 + * @return 200 OK
64 + */
65 + @GET
66 + @Produces(MediaType.APPLICATION_JSON)
67 + public Response getBgpFlow() {
68 + Boolean result = true;
69 + //TODO
70 + return ok(result.toString()).build();
71 + }
72 +
73 + /**
74 + * Push the the Bgp flow spec.
75 + *
76 + * @param stream bgp flow spec in JSON
77 + * @return status of the request - CREATED if the JSON is correct,
78 + * BAD_REQUEST if the JSON is invalid
79 + */
80 + @POST
81 + @Consumes(MediaType.APPLICATION_JSON)
82 + @Produces(MediaType.APPLICATION_JSON)
83 + public Response createBgpFlow(InputStream stream) {
84 + try {
85 + ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
86 + JsonNode flow = jsonTree.get(BGPFLOW);
87 + String devId = jsonTree.get(DEVICEID).asText();
88 + boolean status;
89 +
90 + List<ExtFlowTypes> list;
91 + ExtFlowContainer container;
92 +
93 + list = codec(ExtFlowTypes.class).decode((ArrayNode) flow, this);
94 +
95 + if (!validateRpd(list)) {
96 + return Response.status(NOT_ACCEPTABLE).entity(Boolean.FALSE.toString()).build();
97 + }
98 +
99 + container = new ExtFlowContainer(list);
100 + container.setDeviceId(devId);
101 +
102 +
103 + status = flowService.onBgpFlowCreated(container);
104 + Boolean isSuccess = Boolean.valueOf(status);
105 + if (!status) {
106 + return Response.status(NOT_ACCEPTABLE).entity(isSuccess.toString()).build();
107 + }
108 +
109 + return Response.status(OK).entity(isSuccess.toString()).build();
110 + } catch (IOException e) {
111 + log.error("Exception while parsing bgp flow.", e.toString());
112 + throw new IllegalArgumentException(e);
113 + }
114 + }
115 +
116 + /**
117 + * Validates the rpd and flow spec classes.
118 + *
119 + * @param list list of types
120 + * @return a true if the validation succeeds else false
121 + */
122 + boolean validateRpd(List<ExtFlowTypes> list) {
123 + ListIterator<ExtFlowTypes> iterator = list.listIterator();
124 + ExtFlowTypes flow;
125 + boolean key = false;
126 + boolean rpd = false;
127 + boolean nonRpd = false;
128 + ExtTrafficAction flowAction = null;
129 + boolean dstPfx = false;
130 + boolean wcFlg = false;
131 + boolean wcHop = false;
132 + boolean wcWc = false;
133 + boolean wcCAs = false;
134 + boolean wcLAs = false;
135 + boolean wcTarget = false;
136 + boolean wcETarget = false;
137 + boolean wcParm = false;
138 +
139 + while (iterator.hasNext()) {
140 + flow = iterator.next();
141 + switch (flow.type()) {
142 + case EXT_FLOW_RULE_KEY:
143 + key = true;
144 + break;
145 + case IPV4_DST_PFX:
146 + dstPfx = true;
147 + break;
148 + case IPV4_SRC_PFX:
149 + nonRpd = true;
150 + break;
151 + case IP_PROTO_LIST:
152 + nonRpd = true;
153 + break;
154 + case IN_PORT_LIST:
155 + nonRpd = true;
156 + break;
157 + case DST_PORT_LIST:
158 + nonRpd = true;
159 + break;
160 + case SRC_PORT_LIST:
161 + nonRpd = true;
162 + break;
163 + case ICMP_TYPE_LIST:
164 + nonRpd = true;
165 + break;
166 + case ICMP_CODE_LIST:
167 + nonRpd = true;
168 + break;
169 + case TCP_FLAG_LIST:
170 + nonRpd = true;
171 + break;
172 + case PACKET_LENGTH_LIST:
173 + nonRpd = true;
174 + break;
175 + case DSCP_VALUE_LIST:
176 + nonRpd = true;
177 + break;
178 + case FRAGMENT_LIST:
179 + nonRpd = true;
180 + break;
181 + case TRAFFIC_ACTION:
182 + flowAction = (ExtTrafficAction) flow;
183 + if (flowAction.rpd()) {
184 + rpd = true;
185 + }
186 + break;
187 + case TRAFFIC_RATE:
188 + nonRpd = true;
189 + break;
190 + case TRAFFIC_REDIRECT:
191 + nonRpd = true;
192 + break;
193 + case TRAFFIC_MARKING:
194 + nonRpd = true;
195 + break;
196 + case WIDE_COMM_FLAGS:
197 + wcFlg = true;
198 + break;
199 + case WIDE_COMM_HOP_COUNT:
200 + wcHop = true;
201 + break;
202 + case WIDE_COMM_COMMUNITY:
203 + wcWc = true;
204 + break;
205 + case WIDE_COMM_CONTEXT_AS:
206 + wcCAs = true;
207 + break;
208 + case WIDE_COMM_LOCAL_AS:
209 + wcLAs = true;
210 + break;
211 + case WIDE_COMM_TARGET:
212 + wcTarget = true;
213 + break;
214 + case WIDE_COMM_EXT_TARGET:
215 + wcETarget = true;
216 + break;
217 + case WIDE_COMM_PARAMETER:
218 + wcParm = true;
219 + break;
220 + default:
221 + log.error("error: this type is not supported");
222 + break;
223 + }
224 + }
225 +
226 + if (!key) {
227 + return false;
228 + }
229 +
230 + /** checking for non Rpd. */
231 + if (!rpd) {
232 + if (wcFlg || wcHop || wcWc
233 + || wcCAs || wcLAs || wcParm) {
234 + return false;
235 + }
236 + }
237 +
238 + /** checking for Rpd. */
239 + if (nonRpd || !dstPfx || !wcFlg || !wcHop
240 + || !wcWc || !wcCAs || !wcLAs || !wcParm) {
241 + return false;
242 + }
243 +
244 + /** If it is rpd then either of these two or both should be present.*/
245 + if (!wcTarget && !wcETarget) {
246 + rpd = false;
247 + }
248 +
249 + if (!handleRpdLocalPerf(list)) {
250 + return false;
251 + }
252 +
253 + return rpd;
254 + }
255 +
256 + /**
257 + * Validate and format the rpd local perf.
258 + *
259 + * @param list list of types
260 + * @return a true if the validation succeeds else false
261 + */
262 + boolean handleRpdLocalPerf(List<ExtFlowTypes> list) {
263 + ListIterator<ExtFlowTypes> iterator = list.listIterator();
264 + ExtFlowTypes flow;
265 +
266 + ExtWideCommunityInt wcComm = null;
267 + ExtWideCommunityInt wcParam = null;
268 + ListIterator<Integer> wcInt = null;
269 + int community = 0;
270 + int param = 0;
271 +
272 + while (iterator.hasNext()) {
273 + flow = iterator.next();
274 + switch (flow.type()) {
275 + case WIDE_COMM_COMMUNITY:
276 + wcComm = (ExtWideCommunityInt) flow;
277 + wcInt = wcComm.communityInt().listIterator();
278 + community = wcInt.next().intValue();
279 + break;
280 +
281 + case WIDE_COMM_PARAMETER:
282 + wcParam = (ExtWideCommunityInt) flow;
283 + wcInt = wcParam.communityInt().listIterator();
284 + param = wcInt.next().intValue();
285 + break;
286 + default:
287 + log.error("error: this type is not supported");
288 + break;
289 + }
290 + }
291 +
292 + if (community == LOCAL_PERF) {
293 + if (param > 127 || param < -127) {
294 + return false;
295 + }
296 +
297 + /** if -ve then make it 1 bye value and set it, if it is positive then no issue.*/
298 + if (param < 0) {
299 + param = ~param + 129;
300 + list.remove(wcParam);
301 + ExtWideCommunityInt.Builder resultBuilder = new DefaultExtWideCommunityInt.Builder();
302 + resultBuilder.setwCommInt(Integer.valueOf(param));
303 + resultBuilder.setType(ExtFlowTypes.ExtType.WIDE_COMM_PARAMETER);
304 + list.add(resultBuilder.build());
305 + }
306 + }
307 +
308 + return true;
309 + }
310 +
311 + /**
312 + * Delete the the Bgp flow spec.
313 + *
314 + * @param stream bgp flow spec in JSON
315 + * @return status of the request - CREATED if the JSON is correct,
316 + * BAD_REQUEST if the JSON is invalid
317 + */
318 + @DELETE
319 + @Consumes(MediaType.APPLICATION_JSON)
320 + @Produces(MediaType.APPLICATION_JSON)
321 + public Response deleteBgpFlow(InputStream stream) {
322 + try {
323 + ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
324 + JsonNode flow = jsonTree.get(BGPFLOW);
325 + String devId = jsonTree.get(DEVICEID).asText();
326 + boolean status;
327 +
328 + List<ExtFlowTypes> list;
329 + ExtFlowContainer container;
330 +
331 + list = codec(ExtFlowTypes.class).decode((ArrayNode) flow, this);
332 +
333 + if (!validateRpd(list)) {
334 + return Response.status(NOT_ACCEPTABLE).entity(Boolean.FALSE.toString()).build();
335 + }
336 +
337 + container = new ExtFlowContainer(list);
338 + container.setDeviceId(devId);
339 +
340 +
341 + status = flowService.onBgpFlowDeleted(container);
342 + Boolean isSuccess = Boolean.valueOf(status);
343 + if (!status) {
344 + return Response.status(NOT_ACCEPTABLE).entity(isSuccess.toString()).build();
345 + }
346 + return Response.status(OK).entity(isSuccess.toString()).build();
347 + } catch (IOException e) {
348 + log.error("Exception while parsing bgp flow.", e.toString());
349 + throw new IllegalArgumentException(e);
350 + }
351 + }
352 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +
17 +package org.onosproject.bgpweb.resources;
18 +
19 +import org.onlab.rest.AbstractWebApplication;
20 +import java.util.Set;
21 +
22 +/**
23 + * BGP REST API web application.
24 + */
25 +public class BgpWebApplication extends AbstractWebApplication {
26 + @Override
27 + public Set<Class<?>> getClasses() {
28 + return getClasses(BgpFlowWebResource.class);
29 + }
30 +}
31 +
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +
17 +/**
18 + * BGP web that used rest to create BGP resources.
19 + */
20 +package org.onosproject.bgpweb.resources;
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.bgpweb.web;
17 +
18 +import org.apache.felix.scr.annotations.Activate;
19 +import org.apache.felix.scr.annotations.Component;
20 +import org.apache.felix.scr.annotations.Deactivate;
21 +import org.apache.felix.scr.annotations.Reference;
22 +import org.apache.felix.scr.annotations.ReferenceCardinality;
23 +import org.onosproject.codec.CodecService;
24 +import org.onosproject.flowapi.ExtFlowTypes;
25 +import org.slf4j.Logger;
26 +import org.slf4j.LoggerFactory;
27 +
28 +/**
29 + * Implementation of the JSON codec brokering service for BGP app.
30 + */
31 +@Component(immediate = true)
32 +public class BgpCodecRegistrator {
33 +
34 + private static Logger log = LoggerFactory.getLogger(BgpCodecRegistrator.class);
35 +
36 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
37 + protected CodecService codecService;
38 +
39 + @Activate
40 + public void activate() {
41 + codecService.registerCodec(ExtFlowTypes.class, new BgpFlowExtensionCodec());
42 + System.out.print("BgpCodecRegistrator started");
43 + log.info("Started");
44 + }
45 +
46 + @Deactivate
47 + public void deactivate() {
48 + log.info("Stopped");
49 + }
50 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.bgpweb.web;
17 +
18 +import com.fasterxml.jackson.databind.node.ObjectNode;
19 +import org.onosproject.codec.CodecContext;
20 +import org.onosproject.codec.JsonCodec;
21 +import org.onosproject.flowapi.ExtFlowTypes;
22 +import org.slf4j.Logger;
23 +import org.slf4j.LoggerFactory;
24 +
25 +public final class BgpFlowExtensionCodec extends JsonCodec<ExtFlowTypes> {
26 +
27 + protected static final Logger log =
28 + LoggerFactory.getLogger(BgpFlowExtensionCodec.class);
29 +
30 + protected static final String TYPE = "type";
31 + protected static final String NAME = "name";
32 + protected static final String PREFIX = "prefix";
33 + protected static final String PROTOCOLS = "protocols";
34 + protected static final String PORT = "port";
35 + protected static final String DST_PORT = "destinationPort";
36 + protected static final String SRC_PORT = "sourcePort";
37 + protected static final String ICMP_TYPE = "icmpType";
38 + protected static final String ICMP_CODE = "icmpCode";
39 + protected static final String TCP_FLAG = "tcpFlag";
40 + protected static final String PACKET_LENGTH = "packetLength";
41 + protected static final String DSCP_VALUE = "dscpValue";
42 + protected static final String FRAGMENT = "fragment";
43 +
44 + protected static final String TRAFFIC_RATE = "trafficRate";
45 + protected static final String TRAFFIC_ACTION = "trafficAction";
46 + protected static final String TRAFFIC_REDIRECTION = "trafficRedirection";
47 + protected static final String TRAFFIC_MARKING = "trafficMarking";
48 +
49 + protected static final String TRAFFIC_RATE_ASN = "asn";
50 + protected static final String TRAFFIC_RATE_RATE = "rate";
51 + protected static final String TRAFFIC_ACTION_TERMINAL = "terminal";
52 + protected static final String TRAFFIC_ACTION_SAMPLE = "sample";
53 + protected static final String TRAFFIC_ACTION_RPD = "rpd";
54 +
55 + protected static final String WIDE_COMM_FLAGS = "widecommunityFlags";
56 + protected static final String WIDE_COMM_HOP_COUNT = "widecommunityHopCount";
57 + protected static final String WIDE_COMM_COMMUNITY = "widecommunityCommunity";
58 + protected static final String WIDE_COMM_CONTEXT_AS = "widecommunityContextAs";
59 + protected static final String WIDE_COMM_LOCAL_AS = "widecommunityLocalAs";
60 + protected static final String WIDE_COMM_TARGET = "widecommunityTarget";
61 + protected static final String WIDE_COMM_EXT_TARGET = "widecommunityExtTarget";
62 + protected static final String WIDE_COMM_PARAMETER = "widecommunityParameter";
63 +
64 + protected static final String WIDE_COMM_TGT_LOCAL_SP = "localSpeaker";
65 + protected static final String WIDE_COMM_TGT_REMOTE_SP = "remoteSpeaker";
66 +
67 + @Override
68 + public ObjectNode encode(ExtFlowTypes flowTypes, CodecContext context) {
69 + return null;
70 + }
71 +
72 + @Override
73 + public ExtFlowTypes decode(ObjectNode json, CodecContext context) {
74 + DecodeBgpFlowExtnCodecHelper decoder = new DecodeBgpFlowExtnCodecHelper(json);
75 + return decoder.decode();
76 + }
77 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.bgpweb.web;
17 +
18 +import org.onosproject.flowapi.ExtOperatorValue;
19 +import org.slf4j.Logger;
20 +
21 +import java.util.ArrayList;
22 +import java.util.List;
23 +
24 +import static org.slf4j.LoggerFactory.getLogger;
25 +
26 +public class BgpParseAttributes {
27 +
28 + private final Logger log = getLogger(getClass());
29 +
30 + /** Bits as per flow spec rfc 5575.*/
31 + final byte endBit = (byte) 0x80;
32 + final byte andBit = 0x40;
33 + final byte twoByteLen = (byte) (0x01 << 4);
34 + final byte fourByteLen = (byte) (0x02 << 4);
35 + final byte lessThan = 0x04;
36 + final byte greaterThan = 0x02;
37 + final byte equal = 0x01;
38 +
39 + /** Protocol types.*/
40 + protected static final byte ICMP = 1;
41 + protected static final byte IGMP = 2;
42 + protected static final byte TCP = 6;
43 + protected static final byte UDP = 17;
44 + protected static final byte IPV4 = 4;
45 + protected static final byte IPV6 = 41;
46 +
47 + /** TCP Flags.*/
48 + static final byte FIN = (1 << 0);
49 + static final byte SYN = (1 << 1);
50 + static final byte RST = (1 << 2);
51 + static final byte PSH = (1 << 3);
52 + static final byte ACK = (1 << 4);
53 + static final byte URG = (1 << 5);
54 +
55 + final byte notBit = 0x02;
56 + final byte matchBit = 0x01;
57 +
58 + /** Fragment Flags.*/
59 + static final byte DF = (1 << 0);
60 + static final byte IF = (1 << 1);
61 + static final byte FF = (1 << 2);
62 + static final byte LF = (1 << 3);
63 +
64 + List<ExtOperatorValue> parsePort(String string) {
65 + List<ExtOperatorValue> operatorValue = null;
66 +
67 + operatorValue = createOperatorValue(string);
68 +
69 + return operatorValue;
70 + }
71 +
72 + List<ExtOperatorValue> parseIpProtocol(String string) {
73 + List<ExtOperatorValue> operatorValue = null;
74 +
75 + string = string.replaceAll("ICMP", Byte.valueOf(ICMP).toString());
76 + string = string.replaceAll("icmp", Byte.valueOf(ICMP).toString());
77 + string = string.replaceAll("IPv4", Byte.valueOf(IPV4).toString());
78 + string = string.replaceAll("ipv4", Byte.valueOf(IPV4).toString());
79 + string = string.replaceAll("TCP", Byte.valueOf(TCP).toString());
80 + string = string.replaceAll("tcp", Byte.valueOf(TCP).toString());
81 + string = string.replaceAll("UDP", Byte.valueOf(UDP).toString());
82 + string = string.replaceAll("udp", Byte.valueOf(UDP).toString());
83 + string = string.replaceAll("IPv6", Byte.valueOf(IPV6).toString());
84 + string = string.replaceAll("ipv6", Byte.valueOf(IPV6).toString());
85 + string = string.replaceAll("igmp", Byte.valueOf(IGMP).toString());
86 + string = string.replaceAll("IGMP", Byte.valueOf(IGMP).toString());
87 +
88 + operatorValue = createOperatorValue(string);
89 +
90 + return operatorValue;
91 + }
92 +
93 + List<ExtOperatorValue> parseIcmpType(String string) {
94 + List<ExtOperatorValue> operatorValue = null;
95 +
96 + operatorValue = createOperatorValue(string);
97 +
98 + return operatorValue;
99 + }
100 +
101 + List<ExtOperatorValue> parseIcmpCode(String string) {
102 + List<ExtOperatorValue> operatorValue = null;
103 +
104 + operatorValue = createOperatorValue(string);
105 +
106 + return operatorValue;
107 + }
108 +
109 +
110 + List<ExtOperatorValue> parseTcpFlags(String string) {
111 + List<ExtOperatorValue> operatorValue = new ArrayList<>();
112 + Token token;
113 + int index = 0;
114 +
115 + string = string.replaceAll("FIN", Byte.valueOf(FIN).toString());
116 + string = string.replaceAll("fin", Byte.valueOf(FIN).toString());
117 + string = string.replaceAll("SYN", Byte.valueOf(SYN).toString());
118 + string = string.replaceAll("syn", Byte.valueOf(SYN).toString());
119 + string = string.replaceAll("RST", Byte.valueOf(RST).toString());
120 + string = string.replaceAll("rst", Byte.valueOf(RST).toString());
121 + string = string.replaceAll("PSH", Byte.valueOf(PSH).toString());
122 + string = string.replaceAll("psh", Byte.valueOf(PSH).toString());
123 + string = string.replaceAll("ACK", Byte.valueOf(ACK).toString());
124 + string = string.replaceAll("ack", Byte.valueOf(ACK).toString());
125 + string = string.replaceAll("URG", Byte.valueOf(URG).toString());
126 + string = string.replaceAll("urg", Byte.valueOf(URG).toString());
127 +
128 + do {
129 + token = parseTcpTokenValue(string, index);
130 + if (token.error) {
131 + log.error("Error in parsing the TCP value list");
132 + return null;
133 + }
134 + operatorValue.add(new ExtOperatorValue(token.operator, token.value));
135 + index = token.index;
136 + } while ((token.operator & endBit) != endBit);
137 +
138 + return operatorValue;
139 + }
140 +
141 + List<ExtOperatorValue> parsePacketLength(String string) {
142 + List<ExtOperatorValue> operatorValue = null;
143 + operatorValue = createOperatorValue(string);
144 +
145 + return operatorValue;
146 + }
147 +
148 + List<ExtOperatorValue> parseDscp(String string) {
149 + List<ExtOperatorValue> operatorValue = null;
150 +
151 + operatorValue = createOperatorValue(string);
152 +
153 + return operatorValue;
154 + }
155 +
156 + List<ExtOperatorValue> parseFragment(String string) {
157 +
158 + List<ExtOperatorValue> operatorValue = null;
159 +
160 + string = string.replaceAll("DF", Byte.valueOf(DF).toString());
161 + string = string.replaceAll("df", Byte.valueOf(DF).toString());
162 + string = string.replaceAll("IF", Byte.valueOf(IF).toString());
163 + string = string.replaceAll("if", Byte.valueOf(IF).toString());
164 + string = string.replaceAll("FF", Byte.valueOf(FF).toString());
165 + string = string.replaceAll("ff", Byte.valueOf(FF).toString());
166 + string = string.replaceAll("LF", Byte.valueOf(LF).toString());
167 + string = string.replaceAll("lf", Byte.valueOf(LF).toString());
168 +
169 + operatorValue = createOperatorValue(string);
170 + return operatorValue;
171 + }
172 +
173 + private class Token {
174 + byte operator;
175 + byte[] value;
176 + int index;
177 + boolean error;
178 + }
179 +
180 + List<ExtOperatorValue> createOperatorValue(String string) {
181 + List<ExtOperatorValue> operatorValue = new ArrayList<>();
182 + Token token;
183 + int index = 0;
184 +
185 + do {
186 + token = parseMultiTokenValue(string, index);
187 + if (token.error) {
188 + log.error("Error in parsing the operator value list");
189 + return null;
190 + }
191 + operatorValue.add(new ExtOperatorValue(token.operator, token.value));
192 + index = token.index;
193 + } while ((token.operator & endBit) != endBit);
194 +
195 + return operatorValue;
196 + }
197 +
198 +
199 + Token parseMultiTokenValue(String str, int index) {
200 + Token token = new Token();
201 + token.error = true;
202 + int number = 0;
203 + int cur = 0;
204 + byte operator = 0;
205 + boolean prevNumber = false;
206 + boolean bLess = false;
207 + boolean bGreater = false;
208 + boolean bAnd = false;
209 + boolean bEqual = false;
210 +
211 + while (str.length() > index) {
212 +
213 + switch (str.charAt(index)) {
214 + case '=':
215 + if (bEqual) {
216 + return token;
217 + }
218 + bEqual = true;
219 + if (prevNumber) {
220 + return windUp(str, index, number, operator);
221 + }
222 + operator = (byte) (operator | equal);
223 + break;
224 + case '>':
225 + if (bGreater) {
226 + return token;
227 + }
228 + bGreater = true;
229 + if (prevNumber) {
230 + return windUp(str, index, number, operator);
231 + }
232 + operator = (byte) (operator | greaterThan);
233 + break;
234 + case '<':
235 + if (bLess) {
236 + return token;
237 + }
238 + bLess = true;
239 + if (prevNumber) {
240 + return windUp(str, index, number, operator);
241 + }
242 + operator = (byte) (operator | lessThan);
243 + break;
244 + case '&':
245 + if (bAnd) {
246 + return token;
247 + }
248 + bAnd = true;
249 + if (prevNumber) {
250 + return windUp(str, index, number, operator);
251 + }
252 + operator = (byte) (operator | andBit);
253 + break;
254 + case '0':
255 + case '1':
256 + case '2':
257 + case '3':
258 + case '4':
259 + case '5':
260 + case '6':
261 + case '7':
262 + case '8':
263 + case '9':
264 + prevNumber = true;
265 + bLess = false;
266 + bGreater = false;
267 + bAnd = false;
268 + bEqual = false;
269 + cur = str.charAt(index);
270 + number = (number * 10) + cur - '0';
271 + break;
272 +
273 + default:
274 + log.error("Error in parsing the token character" + str.charAt(index));
275 + return token;
276 + }
277 + index++;
278 + }
279 +
280 + if (prevNumber) {
281 + return windUp(str, index, number, operator);
282 + }
283 +
284 + return token;
285 + }
286 +
287 + Token windUp(String str, int index, int number, byte operator) {
288 + Token token = new Token();
289 + byte[] array = new byte[1];
290 +
291 + if (str.length() == index) {
292 + operator = (byte) (operator | endBit);
293 + }
294 +
295 + if (number <= 255) {
296 + array[0] = (byte) number;
297 + } else if (number > 255 && number <= Short.MAX_VALUE) {
298 + operator = (byte) (operator | twoByteLen);
299 + array = shortToByteStream((short) number);
300 + } else if (number > Short.MAX_VALUE) {
301 + operator = (byte) (operator | fourByteLen);
302 + array = intToByteStream(number);
303 + }
304 +
305 + token.value = array;
306 + token.operator = operator;
307 + token.index = index;
308 + token.error = false;
309 + return token;
310 + }
311 +
312 + byte[] intToByteStream(int val) {
313 + return new byte[] {
314 + (byte) (val >>> 24),
315 + (byte) (val >>> 16),
316 + (byte) (val >>> 8),
317 + (byte) val};
318 + }
319 +
320 + byte[] shortToByteStream(short val) {
321 + return new byte[] {
322 + (byte) (val >>> 8),
323 + (byte) val};
324 + }
325 +
326 + Token parseTcpTokenValue(String str, int index) {
327 + Token token = new Token();
328 + token.error = true;
329 + int number = 0;
330 + int cur = 0;
331 + byte operator = 0;
332 + boolean prevNumber = false;
333 +
334 + boolean bNotBit = false;
335 + boolean bAnd = false;
336 + boolean bMatchBit = false;
337 +
338 + while (str.length() > index) {
339 +
340 + switch (str.charAt(index)) {
341 + case '=':
342 + if (bMatchBit) {
343 + return token;
344 + }
345 + bMatchBit = true;
346 + if (prevNumber) {
347 + return windUp(str, index, number, operator);
348 + }
349 + operator = (byte) (operator | matchBit);
350 + break;
351 + case '!':
352 + if (bNotBit) {
353 + return token;
354 + }
355 + bNotBit = true;
356 + if (prevNumber) {
357 + return windUp(str, index, number, operator);
358 + }
359 + operator = (byte) (operator | notBit);
360 + break;
361 + case '&':
362 + if (bAnd) {
363 + return token;
364 + }
365 + bAnd = true;
366 + if (prevNumber) {
367 + return windUp(str, index, number, operator);
368 + }
369 + operator = (byte) (operator | andBit);
370 + break;
371 + case '0':
372 + case '1':
373 + case '2':
374 + case '3':
375 + case '4':
376 + case '5':
377 + case '6':
378 + case '7':
379 + case '8':
380 + case '9':
381 + prevNumber = true;
382 + bNotBit = false;
383 + bAnd = false;
384 + bMatchBit = false;
385 + cur = str.charAt(index);
386 + number = (number * 10) + cur - '0';
387 + break;
388 +
389 + default:
390 + log.error("Error in parsing the TCP token character" + str.charAt(index));
391 + return token;
392 + }
393 + index++;
394 + }
395 +
396 + if (prevNumber) {
397 + return windUp(str, index, number, operator);
398 + }
399 +
400 + return token;
401 + }
402 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.bgpweb.web;
17 +
18 +import com.fasterxml.jackson.databind.JsonNode;
19 +import com.fasterxml.jackson.databind.node.ObjectNode;
20 +import org.onlab.packet.IpAddress;
21 +import org.onlab.packet.IpPrefix;
22 +import org.onosproject.flowapi.DefaultExtDscpValue;
23 +import org.onosproject.flowapi.DefaultExtFragment;
24 +import org.onosproject.flowapi.DefaultExtIcmpCode;
25 +import org.onosproject.flowapi.DefaultExtIcmpType;
26 +import org.onosproject.flowapi.DefaultExtIpProtocol;
27 +import org.onosproject.flowapi.DefaultExtKeyName;
28 +import org.onosproject.flowapi.DefaultExtPacketLength;
29 +import org.onosproject.flowapi.DefaultExtPort;
30 +import org.onosproject.flowapi.DefaultExtPrefix;
31 +import org.onosproject.flowapi.DefaultExtTarget;
32 +import org.onosproject.flowapi.DefaultExtTcpFlag;
33 +import org.onosproject.flowapi.DefaultExtTrafficAction;
34 +import org.onosproject.flowapi.DefaultExtTrafficMarking;
35 +import org.onosproject.flowapi.DefaultExtTrafficRate;
36 +import org.onosproject.flowapi.DefaultExtTrafficRedirect;
37 +import org.onosproject.flowapi.DefaultExtWideCommunityInt;
38 +import org.onosproject.flowapi.ExtDscpValue;
39 +import org.onosproject.flowapi.ExtFlowTypes;
40 +import org.onosproject.flowapi.ExtFragment;
41 +import org.onosproject.flowapi.ExtIcmpCode;
42 +import org.onosproject.flowapi.ExtIcmpType;
43 +import org.onosproject.flowapi.ExtIpProtocol;
44 +import org.onosproject.flowapi.ExtKeyName;
45 +import org.onosproject.flowapi.ExtPacketLength;
46 +import org.onosproject.flowapi.ExtPort;
47 +import org.onosproject.flowapi.ExtPrefix;
48 +import org.onosproject.flowapi.ExtTarget;
49 +import org.onosproject.flowapi.ExtTcpFlag;
50 +import org.onosproject.flowapi.ExtTrafficAction;
51 +import org.onosproject.flowapi.ExtTrafficMarking;
52 +import org.onosproject.flowapi.ExtTrafficRate;
53 +import org.onosproject.flowapi.ExtTrafficRedirect;
54 +import org.onosproject.flowapi.ExtWideCommunityInt;
55 +
56 +import java.util.HashMap;
57 +import java.util.Iterator;
58 +import java.util.Map;
59 +
60 +import static org.onlab.util.Tools.nullIsIllegal;
61 +
62 +/**
63 + * Decode the Ext extension codec.
64 + */
65 +public final class DecodeBgpFlowExtnCodecHelper {
66 +
67 + private final ObjectNode json;
68 +
69 + protected static final String MISSING_MEMBER_MESSAGE =
70 + " member is required in ExtTypes";
71 +
72 + protected static final String MALFORMED_MEMBER_MESSAGE =
73 + " member is malformed";
74 +
75 + private interface ExtensionDecoder {
76 + ExtFlowTypes decodeExtension(ObjectNode json);
77 + }
78 +
79 + private final Map<String, ExtensionDecoder> decoderMap;
80 +
81 + BgpParseAttributes parse = new BgpParseAttributes();
82 +
83 + /**
84 + * Creates a decode extension codec object.
85 + * Initializes the lookup map for Bgp extension types.
86 + *
87 + * @param json JSON object to decode
88 + */
89 + public DecodeBgpFlowExtnCodecHelper(ObjectNode json) {
90 + this.json = json;
91 + decoderMap = new HashMap<>();
92 +
93 + decoderMap.put(ExtFlowTypes.ExtType.IPV4_SRC_PFX.name(), new BgpSourcePrefixDecode());
94 + decoderMap.put(ExtFlowTypes.ExtType.IPV4_DST_PFX.name(), new BgpDestinationPrefixDecode());
95 + decoderMap.put(ExtFlowTypes.ExtType.EXT_FLOW_RULE_KEY.name(), new BgpFlowRuleKeyDecode());
96 + decoderMap.put(ExtFlowTypes.ExtType.IP_PROTO_LIST.name(), new BgpIpProtocolDecode());
97 + decoderMap.put(ExtFlowTypes.ExtType.IN_PORT_LIST.name(), new BgpInPortDecode());
98 + decoderMap.put(ExtFlowTypes.ExtType.DST_PORT_LIST.name(), new BgpDestinationPortDecode());
99 + decoderMap.put(ExtFlowTypes.ExtType.SRC_PORT_LIST.name(), new BgpSourcePortDecode());
100 + decoderMap.put(ExtFlowTypes.ExtType.ICMP_TYPE_LIST.name(), new BgpIcmpTypeDecode());
101 + decoderMap.put(ExtFlowTypes.ExtType.ICMP_CODE_LIST.name(), new BgpIcmpCodeDecode());
102 + decoderMap.put(ExtFlowTypes.ExtType.TCP_FLAG_LIST.name(), new BgpTcpFlagDecode());
103 + decoderMap.put(ExtFlowTypes.ExtType.PACKET_LENGTH_LIST.name(), new BgpPacketLengthDecode());
104 + decoderMap.put(ExtFlowTypes.ExtType.DSCP_VALUE_LIST.name(), new BgpDscpValueDecode());
105 + decoderMap.put(ExtFlowTypes.ExtType.FRAGMENT_LIST.name(), new BgpFragmentDecode());
106 +
107 + decoderMap.put(ExtFlowTypes.ExtType.TRAFFIC_RATE.name(), new BgpTrafficRateDecode());
108 + decoderMap.put(ExtFlowTypes.ExtType.TRAFFIC_ACTION.name(), new BgpTrafficActionDecode());
109 + decoderMap.put(ExtFlowTypes.ExtType.TRAFFIC_REDIRECT.name(), new BgpTrafficRedirectDecode());
110 + decoderMap.put(ExtFlowTypes.ExtType.TRAFFIC_MARKING.name(), new BgpTrafficMarkingDecode());
111 +
112 + decoderMap.put(ExtFlowTypes.ExtType.WIDE_COMM_FLAGS.name(), new BgpWcommFlagsDecode());
113 + decoderMap.put(ExtFlowTypes.ExtType.WIDE_COMM_HOP_COUNT.name(), new BgpWcommHopCountDecode());
114 + decoderMap.put(ExtFlowTypes.ExtType.WIDE_COMM_COMMUNITY.name(), new BgpWcommCommunityDecode());
115 + decoderMap.put(ExtFlowTypes.ExtType.WIDE_COMM_CONTEXT_AS.name(), new BgpWcommContextAsDecode());
116 + decoderMap.put(ExtFlowTypes.ExtType.WIDE_COMM_LOCAL_AS.name(), new BgpWcommLocalAsDecode());
117 + decoderMap.put(ExtFlowTypes.ExtType.WIDE_COMM_TARGET.name(), new BgpWcommTargetDecode());
118 + decoderMap.put(ExtFlowTypes.ExtType.WIDE_COMM_EXT_TARGET.name(), new BgpWcommExtTargetDecode());
119 + decoderMap.put(ExtFlowTypes.ExtType.WIDE_COMM_PARAMETER.name(), new BgpWcommParameterDecode());
120 + }
121 +
122 + /** Source prefix decoder.*/
123 + private class BgpSourcePrefixDecode implements ExtensionDecoder {
124 + @Override
125 + public ExtFlowTypes decodeExtension(ObjectNode json) {
126 + if (json == null || !json.isObject()) {
127 + return null;
128 + }
129 +
130 + ExtPrefix.Builder resultBuilder = new DefaultExtPrefix.Builder();
131 +
132 + String ip = nullIsIllegal(json.get(BgpFlowExtensionCodec.PREFIX),
133 + BgpFlowExtensionCodec.PREFIX + MISSING_MEMBER_MESSAGE).asText();
134 + resultBuilder.setPrefix(IpPrefix.valueOf(ip));
135 + resultBuilder.setType(ExtFlowTypes.ExtType.IPV4_SRC_PFX);
136 +
137 + return resultBuilder.build();
138 + }
139 + }
140 +
141 + /** Destination prefix decoder.*/
142 + private class BgpDestinationPrefixDecode implements ExtensionDecoder {
143 + @Override
144 + public ExtFlowTypes decodeExtension(ObjectNode json) {
145 + if (json == null || !json.isObject()) {
146 + return null;
147 + }
148 +
149 + ExtPrefix.Builder resultBuilder = new DefaultExtPrefix.Builder();
150 +
151 + String ip = nullIsIllegal(json.get(BgpFlowExtensionCodec.PREFIX),
152 + BgpFlowExtensionCodec.PREFIX + MISSING_MEMBER_MESSAGE).asText();
153 + resultBuilder.setPrefix(IpPrefix.valueOf(ip));
154 + resultBuilder.setType(ExtFlowTypes.ExtType.IPV4_DST_PFX);
155 +
156 + return resultBuilder.build();
157 + }
158 + }
159 +
160 + /** Flow rule key decoder.*/
161 + private class BgpFlowRuleKeyDecode implements ExtensionDecoder {
162 + @Override
163 + public ExtFlowTypes decodeExtension(ObjectNode json) {
164 + if (json == null || !json.isObject()) {
165 + return null;
166 + }
167 +
168 + ExtKeyName.Builder resultBuilder = new DefaultExtKeyName.Builder();
169 +
170 + String name = nullIsIllegal(json.get(BgpFlowExtensionCodec.NAME),
171 + BgpFlowExtensionCodec.NAME + MISSING_MEMBER_MESSAGE).asText();
172 + resultBuilder.setKeyName(name);
173 + resultBuilder.setType(ExtFlowTypes.ExtType.EXT_FLOW_RULE_KEY);
174 +
175 + return resultBuilder.build();
176 + }
177 + }
178 +
179 + /** Ip protocol decoder.*/
180 + private class BgpIpProtocolDecode implements ExtensionDecoder {
181 + @Override
182 + public ExtFlowTypes decodeExtension(ObjectNode json) {
183 + if (json == null || !json.isObject()) {
184 + return null;
185 + }
186 +
187 + ExtIpProtocol.Builder resultBuilder = new DefaultExtIpProtocol.Builder();
188 +
189 + String protocols = nullIsIllegal(json.get(BgpFlowExtensionCodec.PROTOCOLS),
190 + BgpFlowExtensionCodec.PROTOCOLS + MISSING_MEMBER_MESSAGE).asText();
191 + resultBuilder.setIpProtocol(parse.parseIpProtocol(protocols));
192 + resultBuilder.setType(ExtFlowTypes.ExtType.IP_PROTO_LIST);
193 +
194 + return resultBuilder.build();
195 + }
196 + }
197 +
198 + /** In port decoder.*/
199 + private class BgpInPortDecode implements ExtensionDecoder {
200 + @Override
201 + public ExtFlowTypes decodeExtension(ObjectNode json) {
202 + if (json == null || !json.isObject()) {
203 + return null;
204 + }
205 +
206 + ExtPort.Builder resultBuilder = new DefaultExtPort.Builder();
207 +
208 + String portList = nullIsIllegal(json.get(BgpFlowExtensionCodec.PORT),
209 + BgpFlowExtensionCodec.PORT + MISSING_MEMBER_MESSAGE).asText();
210 + resultBuilder.setPort(parse.parsePort(portList));
211 + resultBuilder.setType(ExtFlowTypes.ExtType.IN_PORT_LIST);
212 +
213 + return resultBuilder.build();
214 + }
215 + }
216 +
217 + /** Destination decoder.*/
218 + private class BgpDestinationPortDecode implements ExtensionDecoder {
219 + @Override
220 + public ExtFlowTypes decodeExtension(ObjectNode json) {
221 + if (json == null || !json.isObject()) {
222 + return null;
223 + }
224 +
225 + ExtPort.Builder resultBuilder = new DefaultExtPort.Builder();
226 +
227 + String portList = nullIsIllegal(json.get(BgpFlowExtensionCodec.DST_PORT),
228 + BgpFlowExtensionCodec.DST_PORT + MISSING_MEMBER_MESSAGE).asText();
229 + resultBuilder.setPort(parse.parsePort(portList));
230 + resultBuilder.setType(ExtFlowTypes.ExtType.DST_PORT_LIST);
231 +
232 + return resultBuilder.build();
233 + }
234 + }
235 +
236 + /** Source decoder.*/
237 + private class BgpSourcePortDecode implements ExtensionDecoder {
238 + @Override
239 + public ExtFlowTypes decodeExtension(ObjectNode json) {
240 + if (json == null || !json.isObject()) {
241 + return null;
242 + }
243 +
244 + ExtPort.Builder resultBuilder = new DefaultExtPort.Builder();
245 +
246 + String portList = nullIsIllegal(json.get(BgpFlowExtensionCodec.SRC_PORT),
247 + BgpFlowExtensionCodec.SRC_PORT + MISSING_MEMBER_MESSAGE).asText();
248 + resultBuilder.setPort(parse.parsePort(portList));
249 + resultBuilder.setType(ExtFlowTypes.ExtType.SRC_PORT_LIST);
250 +
251 + return resultBuilder.build();
252 + }
253 + }
254 +
255 + /** Icmp type decoder.*/
256 + private class BgpIcmpTypeDecode implements ExtensionDecoder {
257 + @Override
258 + public ExtFlowTypes decodeExtension(ObjectNode json) {
259 + if (json == null || !json.isObject()) {
260 + return null;
261 + }
262 +
263 + ExtIcmpType.Builder resultBuilder = new DefaultExtIcmpType.Builder();
264 +
265 + String icmpType = nullIsIllegal(json.get(BgpFlowExtensionCodec.ICMP_TYPE),
266 + BgpFlowExtensionCodec.ICMP_TYPE + MISSING_MEMBER_MESSAGE).asText();
267 + resultBuilder.setIcmpType(parse.parseIcmpType(icmpType));
268 + resultBuilder.setType(ExtFlowTypes.ExtType.ICMP_TYPE_LIST);
269 +
270 + return resultBuilder.build();
271 + }
272 + }
273 +
274 + /** Icmp code decoder.*/
275 + private class BgpIcmpCodeDecode implements ExtensionDecoder {
276 + @Override
277 + public ExtFlowTypes decodeExtension(ObjectNode json) {
278 + if (json == null || !json.isObject()) {
279 + return null;
280 + }
281 +
282 + ExtIcmpCode.Builder resultBuilder = new DefaultExtIcmpCode.Builder();
283 +
284 + String icmpCode = nullIsIllegal(json.get(BgpFlowExtensionCodec.ICMP_CODE),
285 + BgpFlowExtensionCodec.ICMP_CODE + MISSING_MEMBER_MESSAGE).asText();
286 + resultBuilder.setIcmpCode(parse.parseIcmpCode(icmpCode));
287 + resultBuilder.setType(ExtFlowTypes.ExtType.ICMP_CODE_LIST);
288 +
289 + return resultBuilder.build();
290 + }
291 + }
292 +
293 + /** Tcp flag decoder.*/
294 + private class BgpTcpFlagDecode implements ExtensionDecoder {
295 + @Override
296 + public ExtFlowTypes decodeExtension(ObjectNode json) {
297 + if (json == null || !json.isObject()) {
298 + return null;
299 + }
300 +
301 + ExtTcpFlag.Builder resultBuilder = new DefaultExtTcpFlag.Builder();
302 +
303 + String tcpFlag = nullIsIllegal(json.get(BgpFlowExtensionCodec.TCP_FLAG),
304 + BgpFlowExtensionCodec.TCP_FLAG + MISSING_MEMBER_MESSAGE).asText();
305 + resultBuilder.setTcpFlag(parse.parseTcpFlags(tcpFlag));
306 + resultBuilder.setType(ExtFlowTypes.ExtType.TCP_FLAG_LIST);
307 +
308 + return resultBuilder.build();
309 + }
310 + }
311 +
312 + /** Packet length decoder.*/
313 + private class BgpPacketLengthDecode implements ExtensionDecoder {
314 + @Override
315 + public ExtFlowTypes decodeExtension(ObjectNode json) {
316 + if (json == null || !json.isObject()) {
317 + return null;
318 + }
319 +
320 + ExtPacketLength.Builder resultBuilder = new DefaultExtPacketLength.Builder();
321 +
322 + String packetLength = nullIsIllegal(json.get(BgpFlowExtensionCodec.PACKET_LENGTH),
323 + BgpFlowExtensionCodec.PACKET_LENGTH + MISSING_MEMBER_MESSAGE).asText();
324 + resultBuilder.setPacketLength(parse.parsePacketLength(packetLength));
325 + resultBuilder.setType(ExtFlowTypes.ExtType.PACKET_LENGTH_LIST);
326 +
327 + return resultBuilder.build();
328 + }
329 + }
330 +
331 + /** Dscp value decoder.*/
332 + private class BgpDscpValueDecode implements ExtensionDecoder {
333 + @Override
334 + public ExtFlowTypes decodeExtension(ObjectNode json) {
335 + if (json == null || !json.isObject()) {
336 + return null;
337 + }
338 +
339 + ExtDscpValue.Builder resultBuilder = new DefaultExtDscpValue.Builder();
340 +
341 + String dscpValue = nullIsIllegal(json.get(BgpFlowExtensionCodec.DSCP_VALUE),
342 + BgpFlowExtensionCodec.DSCP_VALUE + MISSING_MEMBER_MESSAGE).asText();
343 + resultBuilder.setDscpValue(parse.parseDscp(dscpValue));
344 + resultBuilder.setType(ExtFlowTypes.ExtType.DSCP_VALUE_LIST);
345 +
346 + return resultBuilder.build();
347 + }
348 + }
349 +
350 + /** Fragment decoder.*/
351 + private class BgpFragmentDecode implements ExtensionDecoder {
352 + @Override
353 + public ExtFlowTypes decodeExtension(ObjectNode json) {
354 + if (json == null || !json.isObject()) {
355 + return null;
356 + }
357 +
358 + ExtFragment.Builder resultBuilder = new DefaultExtFragment.Builder();
359 +
360 + String fragment = nullIsIllegal(json.get(BgpFlowExtensionCodec.FRAGMENT),
361 + BgpFlowExtensionCodec.FRAGMENT + MISSING_MEMBER_MESSAGE).asText();
362 + resultBuilder.setFragment(parse.parseFragment(fragment));
363 + resultBuilder.setType(ExtFlowTypes.ExtType.FRAGMENT_LIST);
364 +
365 + return resultBuilder.build();
366 + }
367 + }
368 +
369 + /** Traffic rate decoder.*/
370 + private class BgpTrafficRateDecode implements ExtensionDecoder {
371 + @Override
372 + public ExtFlowTypes decodeExtension(ObjectNode json) {
373 + if (json == null || !json.isObject()) {
374 + return null;
375 + }
376 +
377 + ExtTrafficRate.Builder resultBuilder = new DefaultExtTrafficRate.Builder();
378 +
379 + String rate = nullIsIllegal(json.get(BgpFlowExtensionCodec.TRAFFIC_RATE),
380 + BgpFlowExtensionCodec.TRAFFIC_RATE + MISSING_MEMBER_MESSAGE).asText();
381 +
382 + String[] commaPart = rate.split(",");
383 + String[] valuePart = commaPart[0].split("=");
384 +
385 + if (valuePart[0].matches(BgpFlowExtensionCodec.TRAFFIC_RATE_ASN)) {
386 + short s = Short.decode(valuePart[1].trim()).shortValue();
387 + resultBuilder.setAsn(s);
388 + } else {
389 + nullIsIllegal(valuePart[0], BgpFlowExtensionCodec.TRAFFIC_RATE + MALFORMED_MEMBER_MESSAGE);
390 + }
391 +
392 + valuePart = commaPart[1].split("=");
393 + if (valuePart[0].matches(BgpFlowExtensionCodec.TRAFFIC_RATE_RATE)) {
394 + float f = Float.parseFloat(valuePart[1].trim());
395 + resultBuilder.setRate(f);
396 + } else {
397 + nullIsIllegal(valuePart[0], BgpFlowExtensionCodec.TRAFFIC_RATE + MALFORMED_MEMBER_MESSAGE);
398 + }
399 +
400 + resultBuilder.setType(ExtFlowTypes.ExtType.TRAFFIC_RATE);
401 +
402 + return resultBuilder.build();
403 + }
404 + }
405 +
406 + /** Traffic action decoder.*/
407 + private class BgpTrafficActionDecode implements ExtensionDecoder {
408 + @Override
409 + public ExtFlowTypes decodeExtension(ObjectNode json) {
410 + if (json == null || !json.isObject()) {
411 + return null;
412 + }
413 +
414 + ExtTrafficAction.Builder resultBuilder = new DefaultExtTrafficAction.Builder();
415 +
416 + String rate = nullIsIllegal(json.get(BgpFlowExtensionCodec.TRAFFIC_ACTION),
417 + BgpFlowExtensionCodec.TRAFFIC_ACTION + MISSING_MEMBER_MESSAGE).asText();
418 +
419 + String[] commaPart = rate.split(",");
420 + String[] valuePart = commaPart[0].split("=");
421 +
422 + if (valuePart[0].matches(BgpFlowExtensionCodec.TRAFFIC_ACTION_TERMINAL)) {
423 + boolean terminal = Boolean.parseBoolean(valuePart[1].trim());
424 + resultBuilder.setTerminal(terminal);
425 + } else {
426 + nullIsIllegal(valuePart[0], BgpFlowExtensionCodec.TRAFFIC_ACTION_TERMINAL + MISSING_MEMBER_MESSAGE);
427 + }
428 +
429 + valuePart = commaPart[1].split("=");
430 + if (valuePart[0].matches(BgpFlowExtensionCodec.TRAFFIC_ACTION_SAMPLE)) {
431 + boolean sample = Boolean.parseBoolean(valuePart[1].trim());
432 + resultBuilder.setSample(sample);
433 + } else {
434 + nullIsIllegal(valuePart[0], BgpFlowExtensionCodec.TRAFFIC_ACTION_SAMPLE + MISSING_MEMBER_MESSAGE);
435 + }
436 +
437 + valuePart = commaPart[2].split("=");
438 + if (valuePart[0].matches(BgpFlowExtensionCodec.TRAFFIC_ACTION_RPD)) {
439 + boolean rpd = Boolean.parseBoolean(valuePart[1].trim());
440 + resultBuilder.setRpd(rpd);
441 + } else {
442 + nullIsIllegal(valuePart[0], BgpFlowExtensionCodec.TRAFFIC_ACTION_RPD + MISSING_MEMBER_MESSAGE);
443 + }
444 +
445 + resultBuilder.setType(ExtFlowTypes.ExtType.TRAFFIC_ACTION);
446 +
447 + return resultBuilder.build();
448 + }
449 + }
450 +
451 + /** Traffic redirect decoder.*/
452 + private class BgpTrafficRedirectDecode implements ExtensionDecoder {
453 + @Override
454 + public ExtFlowTypes decodeExtension(ObjectNode json) {
455 + if (json == null || !json.isObject()) {
456 + return null;
457 + }
458 +
459 + ExtTrafficRedirect.Builder resultBuilder = new DefaultExtTrafficRedirect.Builder();
460 +
461 + String action = nullIsIllegal(json.get(BgpFlowExtensionCodec.TRAFFIC_REDIRECTION),
462 + BgpFlowExtensionCodec.TRAFFIC_REDIRECTION + MISSING_MEMBER_MESSAGE).asText();
463 + resultBuilder.setRedirect(action);
464 + resultBuilder.setType(ExtFlowTypes.ExtType.TRAFFIC_REDIRECT);
465 +
466 + return resultBuilder.build();
467 + }
468 + }
469 +
470 + /** Traffic marking decoder.*/
471 + private class BgpTrafficMarkingDecode implements ExtensionDecoder {
472 + @Override
473 + public ExtFlowTypes decodeExtension(ObjectNode json) {
474 + if (json == null || !json.isObject()) {
475 + return null;
476 + }
477 +
478 + ExtTrafficMarking.Builder resultBuilder = new DefaultExtTrafficMarking.Builder();
479 +
480 + String action = nullIsIllegal(json.get(BgpFlowExtensionCodec.TRAFFIC_MARKING),
481 + BgpFlowExtensionCodec.TRAFFIC_MARKING + MISSING_MEMBER_MESSAGE).asText();
482 +
483 + if ((action.length() != 1) || action.isEmpty()) {
484 + nullIsIllegal(action, BgpFlowExtensionCodec.TRAFFIC_MARKING + MALFORMED_MEMBER_MESSAGE);
485 + }
486 +
487 + resultBuilder.setMarking((byte) action.charAt(0));
488 + resultBuilder.setType(ExtFlowTypes.ExtType.TRAFFIC_MARKING);
489 +
490 + return resultBuilder.build();
491 + }
492 + }
493 +
494 + /** Wide community flag decoder.*/
495 + private class BgpWcommFlagsDecode implements ExtensionDecoder {
496 + @Override
497 + public ExtFlowTypes decodeExtension(ObjectNode json) {
498 + if (json == null || !json.isObject()) {
499 + return null;
500 + }
501 +
502 + ExtWideCommunityInt.Builder resultBuilder = new DefaultExtWideCommunityInt.Builder();
503 +
504 + String wideComm = nullIsIllegal(json.get(BgpFlowExtensionCodec.WIDE_COMM_FLAGS),
505 + BgpFlowExtensionCodec.WIDE_COMM_FLAGS + MISSING_MEMBER_MESSAGE).asText();
506 + resultBuilder.setwCommInt(Integer.valueOf(wideComm));
507 + resultBuilder.setType(ExtFlowTypes.ExtType.WIDE_COMM_FLAGS);
508 +
509 + return resultBuilder.build();
510 + }
511 + }
512 +
513 + /** Wide community hop count decoder.*/
514 + private class BgpWcommHopCountDecode implements ExtensionDecoder {
515 + @Override
516 + public ExtFlowTypes decodeExtension(ObjectNode json) {
517 + if (json == null || !json.isObject()) {
518 + return null;
519 + }
520 +
521 + ExtWideCommunityInt.Builder resultBuilder = new DefaultExtWideCommunityInt.Builder();
522 +
523 + String wideComm = nullIsIllegal(json.get(BgpFlowExtensionCodec.WIDE_COMM_HOP_COUNT),
524 + BgpFlowExtensionCodec.WIDE_COMM_HOP_COUNT + MISSING_MEMBER_MESSAGE).asText();
525 + resultBuilder.setwCommInt(Integer.valueOf(wideComm));
526 + resultBuilder.setType(ExtFlowTypes.ExtType.WIDE_COMM_HOP_COUNT);
527 +
528 + return resultBuilder.build();
529 + }
530 + }
531 +
532 + /** Wide community decoder.*/
533 + private class BgpWcommCommunityDecode implements ExtensionDecoder {
534 + @Override
535 + public ExtFlowTypes decodeExtension(ObjectNode json) {
536 + if (json == null || !json.isObject()) {
537 + return null;
538 + }
539 +
540 + ExtWideCommunityInt.Builder resultBuilder = new DefaultExtWideCommunityInt.Builder();
541 +
542 + String wideComm = nullIsIllegal(json.get(BgpFlowExtensionCodec.WIDE_COMM_COMMUNITY),
543 + BgpFlowExtensionCodec.WIDE_COMM_COMMUNITY + MISSING_MEMBER_MESSAGE).asText();
544 + resultBuilder.setwCommInt(Integer.valueOf(wideComm));
545 + resultBuilder.setType(ExtFlowTypes.ExtType.WIDE_COMM_COMMUNITY);
546 +
547 + return resultBuilder.build();
548 + }
549 + }
550 +
551 + /** Wide community context AS decoder.*/
552 + private class BgpWcommContextAsDecode implements ExtensionDecoder {
553 + @Override
554 + public ExtFlowTypes decodeExtension(ObjectNode json) {
555 + if (json == null || !json.isObject()) {
556 + return null;
557 + }
558 +
559 + ExtWideCommunityInt.Builder resultBuilder = new DefaultExtWideCommunityInt.Builder();
560 +
561 + String wideComm = nullIsIllegal(json.get(BgpFlowExtensionCodec.WIDE_COMM_CONTEXT_AS),
562 + BgpFlowExtensionCodec.WIDE_COMM_CONTEXT_AS + MISSING_MEMBER_MESSAGE).asText();
563 + resultBuilder.setwCommInt(Integer.valueOf(wideComm));
564 + resultBuilder.setType(ExtFlowTypes.ExtType.WIDE_COMM_CONTEXT_AS);
565 +
566 + return resultBuilder.build();
567 + }
568 + }
569 +
570 + /** Wide community local AS decoder.*/
571 + private class BgpWcommLocalAsDecode implements ExtensionDecoder {
572 + @Override
573 + public ExtFlowTypes decodeExtension(ObjectNode json) {
574 + if (json == null || !json.isObject()) {
575 + return null;
576 + }
577 +
578 + ExtWideCommunityInt.Builder resultBuilder = new DefaultExtWideCommunityInt.Builder();
579 +
580 + String wideComm = nullIsIllegal(json.get(BgpFlowExtensionCodec.WIDE_COMM_LOCAL_AS),
581 + BgpFlowExtensionCodec.WIDE_COMM_LOCAL_AS + MISSING_MEMBER_MESSAGE).asText();
582 + resultBuilder.setwCommInt(Integer.valueOf(wideComm));
583 + resultBuilder.setType(ExtFlowTypes.ExtType.WIDE_COMM_LOCAL_AS);
584 +
585 + return resultBuilder.build();
586 + }
587 + }
588 +
589 + /** Wide community parameter decoder.*/
590 + private class BgpWcommParameterDecode implements ExtensionDecoder {
591 + @Override
592 + public ExtFlowTypes decodeExtension(ObjectNode json) {
593 + if (json == null || !json.isObject()) {
594 + return null;
595 + }
596 +
597 + ExtWideCommunityInt.Builder resultBuilder = new DefaultExtWideCommunityInt.Builder();
598 +
599 + String wideComm = nullIsIllegal(json.get(BgpFlowExtensionCodec.WIDE_COMM_PARAMETER),
600 + BgpFlowExtensionCodec.WIDE_COMM_PARAMETER + MISSING_MEMBER_MESSAGE).asText();
601 + resultBuilder.setwCommInt(Integer.valueOf(wideComm));
602 + resultBuilder.setType(ExtFlowTypes.ExtType.WIDE_COMM_PARAMETER);
603 +
604 + return resultBuilder.build();
605 + }
606 + }
607 +
608 + /** Wide community target decoder.*/
609 + private class BgpWcommTargetDecode implements ExtensionDecoder {
610 + @Override
611 + public ExtFlowTypes decodeExtension(ObjectNode json) {
612 + if (json == null || !json.isObject()) {
613 + return null;
614 + }
615 +
616 + ExtTarget.Builder resultBuilder = new DefaultExtTarget.Builder();
617 +
618 + JsonNode jsonNodes = json.get(BgpFlowExtensionCodec.WIDE_COMM_TARGET);
619 + if (jsonNodes == null) {
620 + nullIsIllegal(json.get(BgpFlowExtensionCodec.WIDE_COMM_TARGET),
621 + BgpFlowExtensionCodec.WIDE_COMM_TARGET + MISSING_MEMBER_MESSAGE).asText();
622 + }
623 +
624 + JsonNode array = jsonNodes.path(BgpFlowExtensionCodec.WIDE_COMM_TGT_LOCAL_SP);
625 + if (array == null) {
626 + nullIsIllegal(array, BgpFlowExtensionCodec.WIDE_COMM_TGT_LOCAL_SP + MISSING_MEMBER_MESSAGE).asText();
627 + }
628 +
629 + ExtPrefix.Builder resultBuilderPfx = parseIpArrayToPrefix(array);
630 + resultBuilderPfx.setType(ExtFlowTypes.ExtType.IPV4_SRC_PFX);
631 + resultBuilder.setLocalSpeaker(resultBuilderPfx.build());
632 +
633 + array = jsonNodes.path(BgpFlowExtensionCodec.WIDE_COMM_TGT_REMOTE_SP);
634 + if (array == null) {
635 + nullIsIllegal(array, BgpFlowExtensionCodec.WIDE_COMM_TGT_REMOTE_SP + MISSING_MEMBER_MESSAGE).asText();
636 + }
637 +
638 + resultBuilderPfx = parseIpArrayToPrefix(array);
639 + resultBuilderPfx.setType(ExtFlowTypes.ExtType.IPV4_DST_PFX);
640 + resultBuilder.setRemoteSpeaker(resultBuilderPfx.build());
641 + resultBuilder.setType(ExtFlowTypes.ExtType.WIDE_COMM_TARGET);
642 +
643 + return resultBuilder.build();
644 + }
645 + }
646 +
647 + /** Wide community extended target decoder.*/
648 + private class BgpWcommExtTargetDecode implements ExtensionDecoder {
649 + @Override
650 + public ExtFlowTypes decodeExtension(ObjectNode json) {
651 + if (json == null || !json.isObject()) {
652 + return null;
653 + }
654 +
655 + ExtTarget.Builder resultBuilder = new DefaultExtTarget.Builder();
656 +
657 + JsonNode jsonNodes = json.get(BgpFlowExtensionCodec.WIDE_COMM_EXT_TARGET);
658 + if (jsonNodes == null) {
659 + nullIsIllegal(json.get(BgpFlowExtensionCodec.WIDE_COMM_EXT_TARGET),
660 + BgpFlowExtensionCodec.WIDE_COMM_EXT_TARGET + MISSING_MEMBER_MESSAGE).asText();
661 + }
662 +
663 + JsonNode array = jsonNodes.path(BgpFlowExtensionCodec.WIDE_COMM_TGT_LOCAL_SP);
664 + if (array == null) {
665 + nullIsIllegal(array, BgpFlowExtensionCodec.WIDE_COMM_TGT_LOCAL_SP + MISSING_MEMBER_MESSAGE).asText();
666 + }
667 +
668 + ExtPrefix.Builder resultBuilderPfx = parseIpArrayToPrefix(array);
669 + resultBuilderPfx.setType(ExtFlowTypes.ExtType.IPV4_SRC_PFX);
670 + resultBuilder.setLocalSpeaker(resultBuilderPfx.build());
671 +
672 + array = jsonNodes.path(BgpFlowExtensionCodec.WIDE_COMM_TGT_REMOTE_SP);
673 + if (array == null) {
674 + nullIsIllegal(array, BgpFlowExtensionCodec.WIDE_COMM_TGT_REMOTE_SP + MISSING_MEMBER_MESSAGE).asText();
675 + }
676 +
677 + resultBuilderPfx = parseIpArrayToPrefix(array);
678 + resultBuilderPfx.setType(ExtFlowTypes.ExtType.IPV4_DST_PFX);
679 + resultBuilder.setRemoteSpeaker(resultBuilderPfx.build());
680 + resultBuilder.setType(ExtFlowTypes.ExtType.WIDE_COMM_EXT_TARGET);
681 +
682 + return resultBuilder.build();
683 + }
684 + }
685 +
686 + /** Ip address parser decoder.*/
687 + public ExtPrefix.Builder parseIpArrayToPrefix(JsonNode array) {
688 +
689 + ExtPrefix.Builder resultBuilder = new DefaultExtPrefix.Builder();
690 + String ip;
691 + IpPrefix prefix;
692 + IpAddress ipAddr;
693 +
694 + Iterator<JsonNode> itr = array.iterator();
695 + while (itr.hasNext()) {
696 + ip = itr.next().asText();
697 + ipAddr = IpAddress.valueOf(ip);
698 + prefix = IpPrefix.valueOf(ipAddr, 32);
699 + resultBuilder.setPrefix(prefix);
700 + }
701 +
702 + return resultBuilder;
703 + }
704 +
705 + /**
706 + * Decodes the JSON into a BgpFlowType extension object.
707 + *
708 + * @return ExtFlowTypes object
709 + * @throws IllegalArgumentException if the JSON is invalid
710 + */
711 + public ExtFlowTypes decode() {
712 + String type = json.get(BgpFlowExtensionCodec.TYPE).asText();
713 +
714 + ExtensionDecoder decoder = decoderMap.get(type);
715 + if (decoder != null) {
716 + return decoder.decodeExtension(json);
717 + }
718 +
719 + throw new IllegalArgumentException("Type " + type + " is unknown");
720 + }
721 +}
1 +/*
2 + * Copyright 2016-prensent Open Networking Laboratory
3 + *
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 + */
16 +
17 +/**
18 + * Codec for bgp flow.
19 + */
20 +package org.onosproject.bgpweb.web;
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016-present Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
18 + xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
19 + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
20 + id="ONOS" version="2.5">
21 + <display-name>BGP REST API v1.0</display-name>
22 +
23 +
24 + <servlet>
25 + <servlet-name>JAX-RS Service</servlet-name>
26 + <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
27 + <init-param>
28 + <param-name>javax.ws.rs.Application</param-name>
29 + <param-value>org.onosproject.bgpweb.resources.BgpWebApplication</param-value>
30 + </init-param>
31 + <load-on-startup>1</load-on-startup>
32 + </servlet>
33 +
34 + <servlet-mapping>
35 + <servlet-name>JAX-RS Service</servlet-name>
36 + <url-pattern>/*</url-pattern>
37 + </servlet-mapping>
38 +</web-app>
1 +COMPILE_DEPS = [
2 + '//utils/osgi:onlab-osgi',
3 + '//utils/misc:onlab-misc',
4 + '//lib:commons-io',
5 + '//lib:guava',
6 + '//lib:kryo',
7 + '//lib:slf4j-api',
8 +]
9 +
10 +TEST_DEPS = [
11 + '//lib:TEST_ADAPTERS',
12 +]
13 +
14 +osgi_jar_with_tests (
15 + name = 'onos-apps-bgpflowspec-flowapi',
16 + deps = COMPILE_DEPS,
17 + test_deps = TEST_DEPS,
18 + visibility = ['PUBLIC'],
19 +)
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016-present Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<project xmlns="http://maven.apache.org/POM/4.0.0"
18 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
19 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
20 + <modelVersion>4.0.0</modelVersion>
21 +
22 + <parent>
23 + <groupId>org.onosproject</groupId>
24 + <artifactId>onos-app-bgpflow</artifactId>
25 + <version>1.6.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
27 + </parent>
28 +
29 + <artifactId>onos-app-bgp-flowapi</artifactId>
30 + <packaging>bundle</packaging>
31 +
32 + <description>api bundle to be accessible across the layers</description>
33 +
34 + <dependencies>
35 + <dependency>
36 + <groupId>org.onosproject</groupId>
37 + <artifactId>onlab-misc</artifactId>
38 + <version>1.6.0-SNAPSHOT</version>
39 + </dependency>
40 + <dependency>
41 + <groupId>com.google.guava</groupId>
42 + <artifactId>guava-testlib</artifactId>
43 + <scope>test</scope>
44 + </dependency>
45 + </dependencies>
46 +
47 +</project>
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +import java.util.Objects;
20 +
21 +import static com.google.common.base.MoreObjects.toStringHelper;
22 +import static com.google.common.base.Preconditions.checkNotNull;
23 +
24 +/**
25 + * DSCP value extension implementation.
26 + */
27 +public class DefaultExtDscpValue implements ExtDscpValue {
28 +
29 + private List<ExtOperatorValue> dscpValue;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtDscpValue which contains dscp operator value list.
34 + *
35 + * @param dscpValue is a dscp value rule list
36 + * @param type ExtType type
37 + */
38 + DefaultExtDscpValue(List<ExtOperatorValue> dscpValue, ExtType type) {
39 + this.dscpValue = dscpValue;
40 + this.type = type;
41 + }
42 +
43 + @Override
44 + public ExtType type() {
45 + return type;
46 + }
47 +
48 + @Override
49 + public List<ExtOperatorValue> dscpValue() {
50 + return dscpValue;
51 + }
52 +
53 + @Override
54 + public boolean exactMatch(ExtDscpValue value) {
55 + return this.equals(value) &&
56 + Objects.equals(this.dscpValue, value.dscpValue())
57 + && Objects.equals(this.type, value.type());
58 + }
59 +
60 + @Override
61 + public int hashCode() {
62 + return Objects.hash(dscpValue, type);
63 + }
64 +
65 + @Override
66 + public boolean equals(Object obj) {
67 + if (this == obj) {
68 + return true;
69 + }
70 + if (obj instanceof DefaultExtDscpValue) {
71 + DefaultExtDscpValue that = (DefaultExtDscpValue) obj;
72 + return Objects.equals(dscpValue, that.dscpValue())
73 + && Objects.equals(this.type, that.type());
74 + }
75 + return false;
76 + }
77 +
78 + @Override
79 + public String toString() {
80 + return toStringHelper(this)
81 + .add("dscpValue", dscpValue.toString())
82 + .add("type", type.toString())
83 + .toString();
84 + }
85 +
86 + /**
87 + * Builder class for extension dscp value.
88 + */
89 + public static class Builder implements ExtDscpValue.Builder {
90 + private List<ExtOperatorValue> dscpValue;
91 + private ExtType type;
92 +
93 + @Override
94 + public Builder setDscpValue(List<ExtOperatorValue> dscpValue) {
95 + this.dscpValue = dscpValue;
96 + return this;
97 + }
98 +
99 + @Override
100 + public Builder setType(ExtType type) {
101 + this.type = type;
102 + return this;
103 + }
104 +
105 + @Override
106 + public ExtDscpValue build() {
107 + checkNotNull(dscpValue, "dscpValue cannot be null");
108 + return new DefaultExtDscpValue(dscpValue, type);
109 + }
110 + }
111 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +import java.util.Objects;
20 +
21 +import static com.google.common.base.MoreObjects.toStringHelper;
22 +import static com.google.common.base.Preconditions.checkNotNull;
23 +
24 +/**
25 + * Fragment extension implementation.
26 + */
27 +public class DefaultExtFragment implements ExtFragment {
28 +
29 + private List<ExtOperatorValue> fragment;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtFragment which contains fragment operator value list.
34 + *
35 + * @param fragment is a fragment value rule list
36 + * @param type ExtType type
37 + */
38 + DefaultExtFragment(List<ExtOperatorValue> fragment, ExtType type) {
39 + this.fragment = fragment;
40 + this.type = type;
41 + }
42 +
43 + @Override
44 + public ExtType type() {
45 + return type;
46 + }
47 +
48 + @Override
49 + public List<ExtOperatorValue> fragment() {
50 + return fragment;
51 + }
52 +
53 + @Override
54 + public boolean exactMatch(ExtFragment value) {
55 + return this.equals(value) &&
56 + Objects.equals(this.fragment, value.fragment())
57 + && Objects.equals(this.type, value.type());
58 + }
59 +
60 + @Override
61 + public int hashCode() {
62 + return Objects.hash(fragment, type);
63 + }
64 +
65 + @Override
66 + public boolean equals(Object obj) {
67 + if (this == obj) {
68 + return true;
69 + }
70 + if (obj instanceof DefaultExtFragment) {
71 + DefaultExtFragment that = (DefaultExtFragment) obj;
72 + return Objects.equals(fragment, that.fragment())
73 + && Objects.equals(this.type, that.type());
74 + }
75 + return false;
76 + }
77 +
78 + @Override
79 + public String toString() {
80 + return toStringHelper(this)
81 + .add("fragment", fragment.toString())
82 + .add("type", type.toString())
83 + .toString();
84 + }
85 +
86 + /**
87 + * Builder class for extension fragment value.
88 + */
89 + public static class Builder implements ExtFragment.Builder {
90 + private List<ExtOperatorValue> fragment;
91 + private ExtType type;
92 +
93 + @Override
94 + public Builder setFragment(List<ExtOperatorValue> fragment) {
95 + this.fragment = fragment;
96 + return this;
97 + }
98 +
99 + @Override
100 + public Builder setType(ExtType type) {
101 + this.type = type;
102 + return this;
103 + }
104 +
105 + @Override
106 + public ExtFragment build() {
107 + checkNotNull(fragment, "fragment cannot be null");
108 + return new DefaultExtFragment(fragment, type);
109 + }
110 + }
111 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +import java.util.Objects;
20 +
21 +import static com.google.common.base.MoreObjects.toStringHelper;
22 +import static com.google.common.base.Preconditions.checkNotNull;
23 +
24 +/**
25 + * Icmp code extension implementation.
26 + */
27 +public class DefaultExtIcmpCode implements ExtIcmpCode {
28 +
29 + private List<ExtOperatorValue> icmpCode;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtIcmpCode which contains ICMP code operator value list.
34 + *
35 + * @param icmpCode is a icmp code rule list
36 + * @param type ExtType type
37 + */
38 + DefaultExtIcmpCode(List<ExtOperatorValue> icmpCode, ExtType type) {
39 + this.icmpCode = icmpCode;
40 + this.type = type;
41 + }
42 +
43 + @Override
44 + public ExtType type() {
45 + return type;
46 + }
47 +
48 + @Override
49 + public List<ExtOperatorValue> icmpCode() {
50 + return icmpCode;
51 + }
52 +
53 + @Override
54 + public boolean exactMatch(ExtIcmpCode icmpCode) {
55 + return this.equals(icmpCode) &&
56 + Objects.equals(this.icmpCode, icmpCode.icmpCode())
57 + && Objects.equals(this.type, icmpCode.type());
58 + }
59 +
60 + @Override
61 + public int hashCode() {
62 + return Objects.hash(icmpCode, type);
63 + }
64 +
65 + @Override
66 + public boolean equals(Object obj) {
67 + if (this == obj) {
68 + return true;
69 + }
70 + if (obj instanceof DefaultExtIcmpCode) {
71 + DefaultExtIcmpCode that = (DefaultExtIcmpCode) obj;
72 + return Objects.equals(icmpCode, that.icmpCode())
73 + && Objects.equals(this.type, that.type());
74 + }
75 + return false;
76 + }
77 +
78 + @Override
79 + public String toString() {
80 + return toStringHelper(this)
81 + .add("icmpCode", icmpCode.toString())
82 + .add("type", type.toString())
83 + .toString();
84 + }
85 +
86 + /**
87 + * Builder class for extension icmp type.
88 + */
89 + public static class Builder implements ExtIcmpCode.Builder {
90 + private List<ExtOperatorValue> icmpCode;
91 + private ExtType type;
92 +
93 + @Override
94 + public Builder setIcmpCode(List<ExtOperatorValue> icmpCode) {
95 + this.icmpCode = icmpCode;
96 + return this;
97 + }
98 +
99 + @Override
100 + public Builder setType(ExtType type) {
101 + this.type = type;
102 + return this;
103 + }
104 +
105 + @Override
106 + public ExtIcmpCode build() {
107 + checkNotNull(icmpCode, "icmpCode cannot be null");
108 + return new DefaultExtIcmpCode(icmpCode, type);
109 + }
110 + }
111 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +import java.util.Objects;
20 +
21 +import static com.google.common.base.MoreObjects.toStringHelper;
22 +import static com.google.common.base.Preconditions.checkNotNull;
23 +
24 +/**
25 + * Icmp type extension implementation.
26 + */
27 +public class DefaultExtIcmpType implements ExtIcmpType {
28 +
29 + private List<ExtOperatorValue> icmpType;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtIcmpType which contains ICMP type operator value list.
34 + *
35 + * @param icmpType is a icmp type rule list
36 + * @param type ExtType type
37 + */
38 + DefaultExtIcmpType(List<ExtOperatorValue> icmpType, ExtType type) {
39 + this.icmpType = icmpType;
40 + this.type = type;
41 + }
42 +
43 + @Override
44 + public ExtType type() {
45 + return type;
46 + }
47 +
48 + @Override
49 + public List<ExtOperatorValue> icmpType() {
50 + return icmpType;
51 + }
52 +
53 + @Override
54 + public boolean exactMatch(ExtIcmpType icmpType) {
55 + return this.equals(icmpType) &&
56 + Objects.equals(this.icmpType, icmpType.icmpType())
57 + && Objects.equals(this.type, icmpType.type());
58 + }
59 +
60 + @Override
61 + public int hashCode() {
62 + return Objects.hash(icmpType, type);
63 + }
64 +
65 + @Override
66 + public boolean equals(Object obj) {
67 + if (this == obj) {
68 + return true;
69 + }
70 + if (obj instanceof DefaultExtIcmpType) {
71 + DefaultExtIcmpType that = (DefaultExtIcmpType) obj;
72 + return Objects.equals(icmpType, that.icmpType())
73 + && Objects.equals(this.type, that.type());
74 + }
75 + return false;
76 + }
77 +
78 + @Override
79 + public String toString() {
80 + return toStringHelper(this)
81 + .add("icmpType", icmpType.toString())
82 + .add("type", type.toString())
83 + .toString();
84 + }
85 +
86 + /**
87 + * Builder class for extension icmp type.
88 + */
89 + public static class Builder implements ExtIcmpType.Builder {
90 + private List<ExtOperatorValue> icmpType;
91 + private ExtType type;
92 +
93 + @Override
94 + public Builder setIcmpType(List<ExtOperatorValue> icmpType) {
95 + this.icmpType = icmpType;
96 + return this;
97 + }
98 +
99 + @Override
100 + public Builder setType(ExtType type) {
101 + this.type = type;
102 + return this;
103 + }
104 +
105 + @Override
106 + public ExtIcmpType build() {
107 + checkNotNull(icmpType, "icmpType cannot be null");
108 + return new DefaultExtIcmpType(icmpType, type);
109 + }
110 + }
111 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +import java.util.Objects;
20 +
21 +import static com.google.common.base.MoreObjects.toStringHelper;
22 +import static com.google.common.base.Preconditions.checkNotNull;
23 +
24 +/**
25 + * Ip protocol extension implementation.
26 + */
27 +public final class DefaultExtIpProtocol implements ExtIpProtocol {
28 +
29 + private List<ExtOperatorValue> ipProtocol;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtIpProtocol which contains Ip protocol list.
34 + *
35 + * @param ipProtocol Ip protocol operator value list
36 + * @param type BgpType type
37 + */
38 + DefaultExtIpProtocol(List<ExtOperatorValue> ipProtocol, ExtType type) {
39 + this.ipProtocol = ipProtocol;
40 + this.type = type;
41 + }
42 +
43 + @Override
44 + public ExtType type() {
45 + return type;
46 + }
47 +
48 + @Override
49 + public List<ExtOperatorValue> ipProtocol() {
50 + return ipProtocol;
51 + }
52 +
53 + @Override
54 + public boolean exactMatch(ExtIpProtocol ipProto) {
55 + return this.equals(ipProto) &&
56 + Objects.equals(this.ipProtocol, ipProto.ipProtocol())
57 + && Objects.equals(this.type, ipProto.type());
58 + }
59 +
60 + @Override
61 + public int hashCode() {
62 + return Objects.hash(ipProtocol, type);
63 + }
64 +
65 + @Override
66 + public boolean equals(Object obj) {
67 + if (this == obj) {
68 + return true;
69 + }
70 + if (obj instanceof DefaultExtIpProtocol) {
71 + DefaultExtIpProtocol that = (DefaultExtIpProtocol) obj;
72 + return Objects.equals(ipProtocol, that.ipProtocol())
73 + && Objects.equals(this.type, that.type);
74 + }
75 + return false;
76 + }
77 +
78 + @Override
79 + public String toString() {
80 + return toStringHelper(this)
81 + .add("ipProtocol", ipProtocol.toString())
82 + .add("type", type.toString())
83 + .toString();
84 + }
85 +
86 + /**
87 + * Builder class for extension Ip protocol.
88 + */
89 + public static class Builder implements ExtIpProtocol.Builder {
90 + private List<ExtOperatorValue> ipProtocol;
91 + private ExtType type;
92 +
93 + @Override
94 + public Builder setIpProtocol(List<ExtOperatorValue> ipProtocol) {
95 + this.ipProtocol = ipProtocol;
96 + return this;
97 + }
98 +
99 + @Override
100 + public Builder setType(ExtType type) {
101 + this.type = type;
102 + return this;
103 + }
104 +
105 + @Override
106 + public ExtIpProtocol build() {
107 + checkNotNull(ipProtocol, "Ip protocol cannot be null");
108 + return new DefaultExtIpProtocol(ipProtocol, type);
109 + }
110 + }
111 +}
112 +
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.Objects;
19 +import static com.google.common.base.MoreObjects.toStringHelper;
20 +import static com.google.common.base.Preconditions.checkNotNull;
21 +
22 +/**
23 + * Key Name for the extension implementation.
24 + */
25 +public class DefaultExtKeyName implements ExtKeyName {
26 +
27 + private String keyName;
28 + private ExtType type;
29 +
30 + /**
31 + * Creates an object of type DefaultExtKeyName which name for the flow rule.
32 + *
33 + * @param keyName is a key for the extended rule
34 + * @param type ExtType type
35 + */
36 + DefaultExtKeyName(String keyName, ExtType type) {
37 + this.keyName = keyName;
38 + this.type = type;
39 + }
40 +
41 + @Override
42 + public ExtType type() {
43 + return type;
44 + }
45 +
46 + @Override
47 + public String keyName() {
48 + return keyName;
49 + }
50 +
51 + @Override
52 + public boolean exactMatch(ExtKeyName value) {
53 + return this.equals(value) &&
54 + Objects.equals(this.keyName, value.keyName())
55 + && Objects.equals(this.type, value.type());
56 + }
57 +
58 + @Override
59 + public int hashCode() {
60 + return Objects.hash(keyName, type);
61 + }
62 +
63 + @Override
64 + public boolean equals(Object obj) {
65 + if (this == obj) {
66 + return true;
67 + }
68 + if (obj instanceof DefaultExtKeyName) {
69 + DefaultExtKeyName that = (DefaultExtKeyName) obj;
70 + return Objects.equals(keyName, that.keyName())
71 + && Objects.equals(this.type, that.type());
72 + }
73 + return false;
74 + }
75 +
76 + @Override
77 + public String toString() {
78 + return toStringHelper(this)
79 + .add("keyName", keyName.toString())
80 + .add("type", type.toString())
81 + .toString();
82 + }
83 +
84 + /**
85 + * Builder class for Extended key name for the rule.
86 + */
87 + public static class Builder implements ExtKeyName.Builder {
88 + private String keyName;
89 + private ExtType type;
90 +
91 + @Override
92 + public Builder setKeyName(String keyName) {
93 + this.keyName = keyName;
94 + return this;
95 + }
96 +
97 + @Override
98 + public Builder setType(ExtType type) {
99 + this.type = type;
100 + return this;
101 + }
102 +
103 + @Override
104 + public ExtKeyName build() {
105 + checkNotNull(keyName, "keyName cannot be null");
106 + return new DefaultExtKeyName(keyName, type);
107 + }
108 + }
109 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +import java.util.Objects;
20 +
21 +import static com.google.common.base.MoreObjects.toStringHelper;
22 +import static com.google.common.base.Preconditions.checkNotNull;
23 +
24 +/**
25 + * Packet length extension implementation.
26 + */
27 +public class DefaultExtPacketLength implements ExtPacketLength {
28 +
29 + private List<ExtOperatorValue> packetLength;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtPacketLength which contains packet length list..
34 + *
35 + * @param packetLength is a packet length rule
36 + * @param type ExtType type
37 + */
38 + DefaultExtPacketLength(List<ExtOperatorValue> packetLength, ExtType type) {
39 + this.packetLength = packetLength;
40 + this.type = type;
41 + }
42 +
43 + @Override
44 + public ExtType type() {
45 + return type;
46 + }
47 +
48 + @Override
49 + public List<ExtOperatorValue> packetLength() {
50 + return packetLength;
51 + }
52 +
53 + @Override
54 + public boolean exactMatch(ExtPacketLength length) {
55 + return this.equals(packetLength) &&
56 + Objects.equals(this.packetLength, length.packetLength())
57 + && Objects.equals(this.type, length.type());
58 + }
59 +
60 + @Override
61 + public int hashCode() {
62 + return Objects.hash(packetLength, type);
63 + }
64 +
65 + @Override
66 + public boolean equals(Object obj) {
67 + if (this == obj) {
68 + return true;
69 + }
70 + if (obj instanceof DefaultExtPacketLength) {
71 + DefaultExtPacketLength that = (DefaultExtPacketLength) obj;
72 + return Objects.equals(packetLength, that.packetLength())
73 + && Objects.equals(this.type, that.type());
74 + }
75 + return false;
76 + }
77 +
78 + @Override
79 + public String toString() {
80 + return toStringHelper(this)
81 + .add("packetLength", packetLength.toString())
82 + .add("type", type.toString())
83 + .toString();
84 + }
85 +
86 + /**
87 + * Builder class for extension packet length.
88 + */
89 + public static class Builder implements ExtPacketLength.Builder {
90 + private List<ExtOperatorValue> packetLength;
91 + private ExtType type;
92 +
93 + @Override
94 + public Builder setPacketLength(List<ExtOperatorValue> packetLength) {
95 + this.packetLength = packetLength;
96 + return this;
97 + }
98 +
99 + @Override
100 + public Builder setType(ExtType type) {
101 + this.type = type;
102 + return this;
103 + }
104 +
105 + @Override
106 + public ExtPacketLength build() {
107 + checkNotNull(packetLength, "packetLength cannot be null");
108 + return new DefaultExtPacketLength(packetLength, type);
109 + }
110 + }
111 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +import java.util.Objects;
20 +
21 +import static com.google.common.base.MoreObjects.toStringHelper;
22 +import static com.google.common.base.Preconditions.checkNotNull;
23 +
24 +/**
25 + * Port extension implementation.
26 + */
27 +public class DefaultExtPort implements ExtPort {
28 +
29 + private List<ExtOperatorValue> port;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtPort which contains port list.
34 + *
35 + * @param port is a port rule list
36 + * @param type ExtType type
37 + */
38 + DefaultExtPort(List<ExtOperatorValue> port, ExtType type) {
39 + this.port = port;
40 + this.type = type;
41 + }
42 +
43 + @Override
44 + public ExtType type() {
45 + return type;
46 + }
47 +
48 + @Override
49 + public List<ExtOperatorValue> port() {
50 + return port;
51 + }
52 +
53 + @Override
54 + public boolean exactMatch(ExtPort port) {
55 + return this.equals(port) &&
56 + Objects.equals(this.port, port.port())
57 + && Objects.equals(this.type, port.type());
58 + }
59 +
60 + @Override
61 + public int hashCode() {
62 + return Objects.hash(port, type);
63 + }
64 +
65 + @Override
66 + public boolean equals(Object obj) {
67 + if (this == obj) {
68 + return true;
69 + }
70 + if (obj instanceof DefaultExtPort) {
71 + DefaultExtPort that = (DefaultExtPort) obj;
72 + return Objects.equals(port, that.port())
73 + && Objects.equals(this.type, that.type());
74 + }
75 + return false;
76 + }
77 +
78 + @Override
79 + public String toString() {
80 + return toStringHelper(this)
81 + .add("port", port.toString())
82 + .add("type", type.toString())
83 + .toString();
84 + }
85 +
86 + /**
87 + * Builder class for extension port.
88 + */
89 + public static class Builder implements ExtPort.Builder {
90 + private List<ExtOperatorValue> port;
91 + private ExtType type;
92 +
93 + @Override
94 + public Builder setPort(List<ExtOperatorValue> port) {
95 + this.port = port;
96 + return this;
97 + }
98 +
99 + @Override
100 + public Builder setType(ExtType type) {
101 + this.type = type;
102 + return this;
103 + }
104 +
105 + @Override
106 + public ExtPort build() {
107 + checkNotNull(port, "port cannot be null");
108 + return new DefaultExtPort(port, type);
109 + }
110 + }
111 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import org.onlab.packet.IpPrefix;
19 +
20 +import java.util.ArrayList;
21 +import java.util.List;
22 +import java.util.Objects;
23 +
24 +import static com.google.common.base.MoreObjects.toStringHelper;
25 +import static com.google.common.base.Preconditions.checkNotNull;
26 +
27 +/**
28 + * Ip prefix extension implementation.
29 + */
30 +public final class DefaultExtPrefix implements ExtPrefix {
31 +
32 + private List<IpPrefix> prefix;
33 + private ExtType type;
34 +
35 + /**
36 + * Creates an object of type DefaultExtPrefix which contains Ip prefix list.
37 + *
38 + * @param prefix Ip prefix list
39 + * @param type ExtType type
40 + */
41 + DefaultExtPrefix(List<IpPrefix> prefix, ExtType type) {
42 + this.prefix = prefix;
43 + this.type = type;
44 + }
45 +
46 + @Override
47 + public ExtType type() {
48 + return type;
49 + }
50 +
51 + @Override
52 + public List<IpPrefix> prefix() {
53 + return prefix;
54 + }
55 +
56 + @Override
57 + public boolean exactMatch(ExtPrefix prefix) {
58 + return this.equals(prefix) &&
59 + Objects.equals(this.prefix, prefix.prefix())
60 + && Objects.equals(this.type, prefix.type());
61 + }
62 +
63 + @Override
64 + public int hashCode() {
65 + return Objects.hash(prefix, type);
66 + }
67 +
68 + @Override
69 + public boolean equals(Object obj) {
70 + if (this == obj) {
71 + return true;
72 + }
73 + if (obj instanceof DefaultExtPrefix) {
74 + DefaultExtPrefix that = (DefaultExtPrefix) obj;
75 + return Objects.equals(prefix, that.prefix())
76 + && Objects.equals(this.type, that.type);
77 + }
78 + return false;
79 + }
80 +
81 + @Override
82 + public String toString() {
83 + return toStringHelper(this)
84 + .add("prefix", prefix.toString())
85 + .add("type", type.toString())
86 + .toString();
87 + }
88 +
89 + /**
90 + * Builder class for extension Ip prefix.
91 + */
92 + public static class Builder implements ExtPrefix.Builder {
93 + private List<IpPrefix> prefix = new ArrayList<>();
94 + private ExtType type;
95 +
96 + @Override
97 + public Builder setPrefix(IpPrefix ip) {
98 + this.prefix.add(ip);
99 + return this;
100 + }
101 +
102 + @Override
103 + public Builder setType(ExtType type) {
104 + this.type = type;
105 + return this;
106 + }
107 +
108 + @Override
109 + public ExtPrefix build() {
110 + checkNotNull(prefix, "Ip prefix cannot be null");
111 + return new DefaultExtPrefix(prefix, type);
112 + }
113 + }
114 +}
115 +
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.Objects;
19 +
20 +import static com.google.common.base.MoreObjects.toStringHelper;
21 +import static com.google.common.base.Preconditions.checkNotNull;
22 +
23 +/**
24 + * Target local and remote speaker implementation for wide community.
25 + */
26 +public final class DefaultExtTarget implements ExtTarget {
27 +
28 + private ExtPrefix localSpeaker;
29 + private ExtPrefix remoteSpeaker;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtTarget which contains local and remote speakers.
34 + *
35 + * @param localSpeaker local speaker prefix list
36 + * @param remoteSpeaker remoteSpeaker speaker prefix list
37 + * @param type ExtType type
38 + */
39 + DefaultExtTarget(ExtPrefix localSpeaker, ExtPrefix remoteSpeaker, ExtType type) {
40 + this.localSpeaker = localSpeaker;
41 + this.remoteSpeaker = remoteSpeaker;
42 + this.type = type;
43 + }
44 +
45 + @Override
46 + public ExtType type() {
47 + return type;
48 + }
49 +
50 + /**
51 + * Returns the local speaker prefix list.
52 + *
53 + * @return the ExtPrefix
54 + */
55 + @Override
56 + public ExtPrefix localSpeaker() {
57 + return localSpeaker;
58 + }
59 +
60 + /**
61 + * Returns the remote speaker prefix list.
62 + *
63 + * @return the ExtPrefix
64 + */
65 + @Override
66 + public ExtPrefix remoteSpeaker() {
67 + return remoteSpeaker;
68 + }
69 +
70 + /**
71 + * Returns whether this target is an exact match to the target given
72 + * in the argument.
73 + *
74 + * @param target other target to match
75 + * @return true if the target are an exact match, otherwise false
76 + */
77 + @Override
78 + public boolean exactMatch(ExtTarget target) {
79 + return this.equals(target) &&
80 + Objects.equals(this.localSpeaker, target.localSpeaker())
81 + && Objects.equals(this.remoteSpeaker, target.remoteSpeaker())
82 + && Objects.equals(this.type, target.type());
83 + }
84 +
85 + @Override
86 + public int hashCode() {
87 + return Objects.hash(localSpeaker, remoteSpeaker, type);
88 + }
89 +
90 + @Override
91 + public boolean equals(Object obj) {
92 + if (this == obj) {
93 + return true;
94 + }
95 + if (obj instanceof DefaultExtTarget) {
96 + DefaultExtTarget that = (DefaultExtTarget) obj;
97 + return Objects.equals(localSpeaker, that.localSpeaker())
98 + && Objects.equals(remoteSpeaker, that.remoteSpeaker())
99 + && Objects.equals(this.type, that.type);
100 + }
101 + return false;
102 + }
103 +
104 + @Override
105 + public String toString() {
106 + return toStringHelper(this)
107 + .add("localSpeaker", localSpeaker)
108 + .add("remoteSpeaker", remoteSpeaker)
109 + .add("type", type)
110 + .toString();
111 + }
112 +
113 + /**
114 + * Builder class for wide community target.
115 + */
116 + public static class Builder implements ExtTarget.Builder {
117 + private ExtPrefix localSpeaker;
118 + private ExtPrefix remoteSpeaker;
119 + private ExtType type;
120 +
121 + @Override
122 + public Builder setLocalSpeaker(ExtPrefix localSpeaker) {
123 + this.localSpeaker = localSpeaker;
124 + return this;
125 + }
126 +
127 + @Override
128 + public Builder setRemoteSpeaker(ExtPrefix remoteSpeaker) {
129 + this.remoteSpeaker = remoteSpeaker;
130 + return this;
131 + }
132 +
133 + @Override
134 + public Builder setType(ExtType type) {
135 + this.type = type;
136 + return this;
137 + }
138 +
139 + @Override
140 + public ExtTarget build() {
141 + checkNotNull(localSpeaker, "localSpeaker cannot be null");
142 + checkNotNull(remoteSpeaker, "remoteSpeaker cannot be null");
143 + return new DefaultExtTarget(localSpeaker, remoteSpeaker, type);
144 + }
145 + }
146 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +import java.util.Objects;
20 +
21 +import static com.google.common.base.MoreObjects.toStringHelper;
22 +import static com.google.common.base.Preconditions.checkNotNull;
23 +
24 +/**
25 + * Tcp flag extension implementation.
26 + */
27 +public class DefaultExtTcpFlag implements ExtTcpFlag {
28 +
29 + private List<ExtOperatorValue> tcpFlag;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtTcpFlag which contains tcp flag.
34 + *
35 + * @param tcpFlag is a Tcp Flag rule list
36 + * @param type ExtType type
37 + */
38 + DefaultExtTcpFlag(List<ExtOperatorValue> tcpFlag, ExtType type) {
39 + this.tcpFlag = tcpFlag;
40 + this.type = type;
41 + }
42 +
43 + @Override
44 + public ExtType type() {
45 + return type;
46 + }
47 +
48 + @Override
49 + public List<ExtOperatorValue> tcpFlag() {
50 + return tcpFlag;
51 + }
52 +
53 + @Override
54 + public boolean exactMatch(ExtTcpFlag flag) {
55 + return this.equals(tcpFlag) &&
56 + Objects.equals(this.tcpFlag, flag.tcpFlag())
57 + && Objects.equals(this.type, flag.type());
58 + }
59 +
60 + @Override
61 + public int hashCode() {
62 + return Objects.hash(tcpFlag, type);
63 + }
64 +
65 + @Override
66 + public boolean equals(Object obj) {
67 + if (this == obj) {
68 + return true;
69 + }
70 + if (obj instanceof DefaultExtTcpFlag) {
71 + DefaultExtTcpFlag that = (DefaultExtTcpFlag) obj;
72 + return Objects.equals(tcpFlag, that.tcpFlag())
73 + && Objects.equals(this.type, that.type());
74 + }
75 + return false;
76 + }
77 +
78 + @Override
79 + public String toString() {
80 + return toStringHelper(this)
81 + .add("tcpFlag", tcpFlag.toString())
82 + .add("type", type.toString())
83 + .toString();
84 + }
85 +
86 + /**
87 + * Builder class for extension tcp flag.
88 + */
89 + public static class Builder implements ExtTcpFlag.Builder {
90 + private List<ExtOperatorValue> tcpFlag;
91 + private ExtType type;
92 +
93 + @Override
94 + public Builder setTcpFlag(List<ExtOperatorValue> tcpFlag) {
95 + this.tcpFlag = tcpFlag;
96 + return this;
97 + }
98 +
99 + @Override
100 + public Builder setType(ExtType type) {
101 + this.type = type;
102 + return this;
103 + }
104 +
105 + @Override
106 + public ExtTcpFlag build() {
107 + checkNotNull(tcpFlag, "tcpFlag cannot be null");
108 + return new DefaultExtTcpFlag(tcpFlag, type);
109 + }
110 + }
111 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.Objects;
19 +
20 +import static com.google.common.base.MoreObjects.toStringHelper;
21 +import static com.google.common.base.Preconditions.checkNotNull;
22 +
23 +/**
24 + * Extended traffic action implementation.
25 + */
26 +public class DefaultExtTrafficAction implements ExtTrafficAction {
27 +
28 + private boolean terminal;
29 + private boolean sample;
30 + private boolean rpd;
31 + private ExtType type;
32 +
33 + /**
34 + * Creates an object of type DefaultExtTrafficAction which contains traffic action flag.
35 + *
36 + * @param terminal traffic action terminal bit
37 + * @param sample is a traffic action sampling
38 + * @param rpd traffic action rpd bit
39 + * @param type ExtType type
40 + */
41 + DefaultExtTrafficAction(boolean terminal, boolean sample, boolean rpd, ExtType type) {
42 + this.terminal = terminal;
43 + this.sample = sample;
44 + this.rpd = rpd;
45 + this.type = type;
46 + }
47 +
48 + @Override
49 + public ExtType type() {
50 + return type;
51 + }
52 +
53 + @Override
54 + public boolean terminal() {
55 + return terminal;
56 + }
57 +
58 + @Override
59 + public boolean sample() {
60 + return sample;
61 + }
62 +
63 + @Override
64 + public boolean rpd() {
65 + return rpd;
66 + }
67 +
68 + @Override
69 + public boolean exactMatch(ExtTrafficAction value) {
70 + return this.equals(value) &&
71 + Objects.equals(this.terminal, value.terminal())
72 + && Objects.equals(this.sample, value.sample())
73 + && Objects.equals(this.rpd, value.rpd())
74 + && Objects.equals(this.type, value.type());
75 + }
76 +
77 + @Override
78 + public int hashCode() {
79 + return Objects.hash(terminal, sample, rpd, type);
80 + }
81 +
82 + @Override
83 + public boolean equals(Object obj) {
84 + if (this == obj) {
85 + return true;
86 + }
87 + if (obj instanceof DefaultExtTrafficAction) {
88 + DefaultExtTrafficAction that = (DefaultExtTrafficAction) obj;
89 + return Objects.equals(terminal, that.terminal())
90 + && Objects.equals(this.sample, that.sample())
91 + && Objects.equals(this.rpd, that.rpd())
92 + && Objects.equals(this.type, that.type());
93 + }
94 + return false;
95 + }
96 +
97 + @Override
98 + public String toString() {
99 + return toStringHelper(this)
100 + .add("terminal", Boolean.valueOf(terminal).toString())
101 + .add("sample", Boolean.valueOf(sample).toString())
102 + .add("rpd", Boolean.valueOf(rpd).toString())
103 + .add("type", type.toString())
104 + .toString();
105 + }
106 +
107 + /**
108 + * Builder class for extended traffic rate rule.
109 + */
110 + public static class Builder implements ExtTrafficAction.Builder {
111 + private boolean terminal;
112 + private boolean sample;
113 + private boolean rpd;
114 + private ExtType type;
115 +
116 + @Override
117 + public Builder setTerminal(boolean terminal) {
118 + this.terminal = terminal;
119 + return this;
120 + }
121 +
122 + @Override
123 + public Builder setSample(boolean sample) {
124 + this.sample = sample;
125 + return this;
126 + }
127 +
128 + @Override
129 + public Builder setRpd(boolean rpd) {
130 + this.rpd = rpd;
131 + return this;
132 + }
133 +
134 + @Override
135 + public Builder setType(ExtType type) {
136 + this.type = type;
137 + return this;
138 + }
139 +
140 + @Override
141 + public ExtTrafficAction build() {
142 + checkNotNull(terminal, "terminal cannot be null");
143 + checkNotNull(sample, "sample cannot be null");
144 + checkNotNull(rpd, "rpd cannot be null");
145 + return new DefaultExtTrafficAction(terminal, sample, rpd, type);
146 + }
147 + }
148 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.Objects;
19 +
20 +import static com.google.common.base.MoreObjects.toStringHelper;
21 +import static com.google.common.base.Preconditions.checkNotNull;
22 +
23 +/**
24 + * Extended traffic marking implementation.
25 + */
26 +public class DefaultExtTrafficMarking implements ExtTrafficMarking {
27 +
28 + private byte marking;
29 + private ExtType type;
30 +
31 + /**
32 + * Creates an object of type DefaultExtTrafficMarking which contains traffic marking byte.
33 + *
34 + * @param marking is a marking rule
35 + * @param type ExtType type
36 + */
37 + DefaultExtTrafficMarking(byte marking, ExtType type) {
38 + this.marking = marking;
39 + this.type = type;
40 + }
41 +
42 + @Override
43 + public ExtType type() {
44 + return type;
45 + }
46 +
47 + @Override
48 + public byte marking() {
49 + return marking;
50 + }
51 +
52 + @Override
53 + public boolean exactMatch(ExtTrafficMarking value) {
54 + return this.equals(value) &&
55 + Objects.equals(this.marking, value.marking())
56 + && Objects.equals(this.type, value.type());
57 + }
58 +
59 + @Override
60 + public int hashCode() {
61 + return Objects.hash(marking, type);
62 + }
63 +
64 + @Override
65 + public boolean equals(Object obj) {
66 + if (this == obj) {
67 + return true;
68 + }
69 + if (obj instanceof DefaultExtTrafficMarking) {
70 + DefaultExtTrafficMarking that = (DefaultExtTrafficMarking) obj;
71 + return Objects.equals(marking, that.marking())
72 + && Objects.equals(this.type, that.type());
73 + }
74 + return false;
75 + }
76 +
77 + @Override
78 + public String toString() {
79 + return toStringHelper(this)
80 + .add("marking", marking)
81 + .add("type", type.toString())
82 + .toString();
83 + }
84 +
85 + /**
86 + * Builder class for extended traffic marking value rule.
87 + */
88 + public static class Builder implements ExtTrafficMarking.Builder {
89 + private byte marking;
90 + private ExtType type;
91 +
92 + @Override
93 + public Builder setMarking(byte marking) {
94 + this.marking = marking;
95 + return this;
96 + }
97 +
98 + @Override
99 + public Builder setType(ExtType type) {
100 + this.type = type;
101 + return this;
102 + }
103 +
104 + @Override
105 + public ExtTrafficMarking build() {
106 + checkNotNull(marking, "marking cannot be null");
107 + return new DefaultExtTrafficMarking(marking, type);
108 + }
109 + }
110 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.Objects;
19 +
20 +import static com.google.common.base.MoreObjects.toStringHelper;
21 +import static com.google.common.base.Preconditions.checkNotNull;
22 +
23 +/**
24 + * Extended traffic rate implementation.
25 + */
26 +public class DefaultExtTrafficRate implements ExtTrafficRate {
27 +
28 + private Short asn;
29 + private Float rate;
30 + private ExtType type;
31 +
32 + /**
33 + * Creates an object of type DefaultExtTrafficRate which contains traffic rate action.
34 + *
35 + * @param asn is a AS number
36 + * @param rate is a traffic rate in bytes per second
37 + * @param type ExtType type
38 + */
39 + DefaultExtTrafficRate(short asn, float rate, ExtType type) {
40 + this.asn = Short.valueOf(asn);
41 + this.rate = Float.valueOf(rate);
42 + this.type = type;
43 + }
44 +
45 + @Override
46 + public ExtType type() {
47 + return type;
48 + }
49 +
50 + @Override
51 + public Short asn() {
52 + return asn;
53 + }
54 +
55 + @Override
56 + public Float rate() {
57 + return rate;
58 + }
59 +
60 + @Override
61 + public boolean exactMatch(ExtTrafficRate value) {
62 + return this.equals(value) &&
63 + Objects.equals(this.asn, value.asn())
64 + && Objects.equals(this.rate, value.rate())
65 + && Objects.equals(this.type, value.type());
66 + }
67 +
68 + @Override
69 + public int hashCode() {
70 + return Objects.hash(asn, rate, type);
71 + }
72 +
73 + @Override
74 + public boolean equals(Object obj) {
75 + if (this == obj) {
76 + return true;
77 + }
78 + if (obj instanceof DefaultExtTrafficRate) {
79 + DefaultExtTrafficRate that = (DefaultExtTrafficRate) obj;
80 + return Objects.equals(asn, that.asn())
81 + && Objects.equals(this.rate, that.rate())
82 + && Objects.equals(this.type, that.type());
83 + }
84 + return false;
85 + }
86 +
87 + @Override
88 + public String toString() {
89 + return toStringHelper(this)
90 + .add("asn", asn.toString())
91 + .add("rate", rate.toString())
92 + .add("type", type.toString())
93 + .toString();
94 + }
95 +
96 + /**
97 + * Builder class for extended traffic rate rule.
98 + */
99 + public static class Builder implements ExtTrafficRate.Builder {
100 + private Short asn;
101 + private Float rate;
102 + private ExtType type;
103 +
104 + @Override
105 + public Builder setAsn(short asn) {
106 + this.asn = Short.valueOf(asn);
107 + return this;
108 + }
109 +
110 + @Override
111 + public Builder setRate(float rate) {
112 + this.rate = Float.valueOf(rate);
113 + return this;
114 + }
115 +
116 + @Override
117 + public Builder setType(ExtType type) {
118 + this.type = type;
119 + return this;
120 + }
121 +
122 + @Override
123 + public ExtTrafficRate build() {
124 + checkNotNull(asn, "asn cannot be null");
125 + checkNotNull(rate, "rate cannot be null");
126 + return new DefaultExtTrafficRate(asn, rate, type);
127 + }
128 + }
129 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.Objects;
19 +
20 +import static com.google.common.base.MoreObjects.toStringHelper;
21 +import static com.google.common.base.Preconditions.checkNotNull;
22 +
23 +/**
24 + * Extended traffic redirect implementation.
25 + */
26 +public class DefaultExtTrafficRedirect implements ExtTrafficRedirect {
27 +
28 + private String redirect;
29 + private ExtType type;
30 +
31 + /**
32 + * Creates an object of type DefaultExtTrafficRedirect which contains traffic redirect action.
33 + *
34 + * @param redirect is a redirect rule
35 + * @param type ExtType type
36 + */
37 + DefaultExtTrafficRedirect(String redirect, ExtType type) {
38 + this.redirect = redirect;
39 + this.type = type;
40 + }
41 +
42 + @Override
43 + public ExtType type() {
44 + return type;
45 + }
46 +
47 + @Override
48 + public String redirect() {
49 + return redirect;
50 + }
51 +
52 + @Override
53 + public boolean exactMatch(ExtTrafficRedirect value) {
54 + return this.equals(value) &&
55 + Objects.equals(this.redirect, value.redirect())
56 + && Objects.equals(this.type, value.type());
57 + }
58 +
59 + @Override
60 + public int hashCode() {
61 + return Objects.hash(redirect, type);
62 + }
63 +
64 + @Override
65 + public boolean equals(Object obj) {
66 + if (this == obj) {
67 + return true;
68 + }
69 + if (obj instanceof DefaultExtTrafficRedirect) {
70 + DefaultExtTrafficRedirect that = (DefaultExtTrafficRedirect) obj;
71 + return Objects.equals(redirect, that.redirect())
72 + && Objects.equals(this.type, that.type());
73 + }
74 + return false;
75 + }
76 +
77 + @Override
78 + public String toString() {
79 + return toStringHelper(this)
80 + .add("redirect", redirect.toString())
81 + .add("type", type.toString())
82 + .toString();
83 + }
84 +
85 + /**
86 + * Builder class for extended redirect value rule.
87 + */
88 + public static class Builder implements ExtTrafficRedirect.Builder {
89 + private String redirect;
90 + private ExtType type;
91 +
92 + @Override
93 + public Builder setRedirect(String redirect) {
94 + this.redirect = redirect;
95 + return this;
96 + }
97 +
98 + @Override
99 + public Builder setType(ExtType type) {
100 + this.type = type;
101 + return this;
102 + }
103 +
104 + @Override
105 + public ExtTrafficRedirect build() {
106 + checkNotNull(redirect, "redirect cannot be null");
107 + return new DefaultExtTrafficRedirect(redirect, type);
108 + }
109 + }
110 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.ArrayList;
19 +import java.util.List;
20 +import java.util.Objects;
21 +
22 +import static com.google.common.base.MoreObjects.toStringHelper;
23 +import static com.google.common.base.Preconditions.checkNotNull;
24 +
25 +/**
26 + * Wide community attributes for RPD implementation.
27 + */
28 +public class DefaultExtWideCommunityInt implements ExtWideCommunityInt {
29 +
30 + private List<Integer> wCommInt;
31 + private ExtType type;
32 +
33 + /**
34 + * Creates an object of type DefaultExtWideCommunityInt which contains wide community attributes.
35 + *
36 + * @param wCommInt is a wide community value
37 + * @param type ExtType type
38 + */
39 + DefaultExtWideCommunityInt(List<Integer> wCommInt, ExtType type) {
40 + this.wCommInt = wCommInt;
41 + this.type = type;
42 + }
43 +
44 + @Override
45 + public ExtType type() {
46 + return type;
47 + }
48 +
49 + @Override
50 + public List<Integer> communityInt() {
51 + return wCommInt;
52 + }
53 +
54 + @Override
55 + public boolean exactMatch(ExtWideCommunityInt value) {
56 + return this.equals(value) &&
57 + Objects.equals(this.wCommInt, value.communityInt())
58 + && Objects.equals(this.type, value.type());
59 + }
60 +
61 + @Override
62 + public int hashCode() {
63 + return Objects.hash(wCommInt, type);
64 + }
65 +
66 + @Override
67 + public boolean equals(Object obj) {
68 + if (this == obj) {
69 + return true;
70 + }
71 + if (obj instanceof DefaultExtWideCommunityInt) {
72 + DefaultExtWideCommunityInt that = (DefaultExtWideCommunityInt) obj;
73 + return Objects.equals(wCommInt, that.communityInt())
74 + && Objects.equals(this.type, that.type());
75 + }
76 + return false;
77 + }
78 +
79 + @Override
80 + public String toString() {
81 + return toStringHelper(this)
82 + .add("value", wCommInt.toString())
83 + .add("type", type.toString())
84 + .toString();
85 + }
86 +
87 + /**
88 + * Builder class for wide community value rule.
89 + */
90 + public static class Builder implements ExtWideCommunityInt.Builder {
91 + private List<Integer> wCommInt = new ArrayList<>();
92 + private ExtType type;
93 +
94 + @Override
95 + public Builder setwCommInt(Integer wCommInt) {
96 + this.wCommInt.add(wCommInt);
97 + return this;
98 + }
99 +
100 + @Override
101 + public Builder setType(ExtType type) {
102 + this.type = type;
103 + return this;
104 + }
105 +
106 + @Override
107 + public ExtWideCommunityInt build() {
108 + checkNotNull(wCommInt, "value cannot be null");
109 + return new DefaultExtWideCommunityInt(wCommInt, type);
110 + }
111 + }
112 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Extended multivalue Dscp value class.
22 + */
23 +public interface ExtDscpValue extends ExtFlowTypes {
24 +
25 + /**
26 + * Returns the ExtType.
27 + *
28 + * @return the ExtType
29 + */
30 + ExtType type();
31 +
32 + /**
33 + * Returns the dscp value operator value list.
34 + *
35 + * @return the dscp value operator value list
36 + */
37 + List<ExtOperatorValue> dscpValue();
38 +
39 + /**
40 + * Returns whether this dscp value list is an exact match to the dscp value list given
41 + * in the argument.
42 + *
43 + * @param dscpValue other dscp value to match against
44 + * @return true if the dscp value list are an exact match, otherwise false
45 + */
46 + boolean exactMatch(ExtDscpValue dscpValue);
47 +
48 + /**
49 + * A dscp value extended builder..
50 + */
51 + interface Builder {
52 +
53 + /**
54 + * Assigns the ExtType to this object.
55 + *
56 + * @param type extended type
57 + * @return this the builder object
58 + */
59 + Builder setType(ExtType type);
60 +
61 + /**
62 + * Assigns the dscp operator value to this object.
63 + *
64 + * @param dscpValue the dscp value
65 + * @return this the builder object
66 + */
67 + Builder setDscpValue(List<ExtOperatorValue> dscpValue);
68 +
69 + /**
70 + * Builds a dscp value object.
71 + *
72 + * @return a dscp value object.
73 + */
74 + ExtDscpValue build();
75 + }
76 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.base.MoreObjects;
19 +
20 +import java.util.ArrayList;
21 +import java.util.List;
22 +import java.util.Objects;
23 +
24 +/**
25 + * Representation of Multi value flow container having custom rules.
26 + */
27 +public final class ExtFlowContainer {
28 +
29 + private List<ExtFlowTypes> container = new ArrayList<>();
30 + private String deviceId;
31 +
32 + /**
33 + * Creates an object of type ExtFlowContainer.
34 + */
35 + public ExtFlowContainer(List<ExtFlowTypes> container) {
36 + this.container = container;
37 + }
38 +
39 + /**
40 + * Returns the ExtFlowContainer by setting its value.
41 + *
42 + * @return ExtFlowContainer
43 + */
44 + public static ExtFlowContainer of(List<ExtFlowTypes> container) {
45 + return new ExtFlowContainer(container);
46 + }
47 +
48 + /**
49 + * Returns the list of ExtFlowTypes value.
50 + *
51 + * @return list of ExtFlowTypes
52 + */
53 + public List<ExtFlowTypes> container() {
54 + return container;
55 + }
56 +
57 + /**
58 + * Returns the device Id.
59 + *
60 + * @return deviceId
61 + */
62 + public String deviceId() {
63 + return deviceId;
64 + }
65 +
66 + /**
67 + * Adds the flow type to the container list.
68 + *
69 + * @param obj of ExtFlowTypes type
70 + */
71 + public void add(ExtFlowTypes obj) {
72 + container.add(obj);
73 + }
74 +
75 + /**
76 + * Removes the flow type from the container list.
77 + *
78 + * @param obj of ExtFlowTypes type
79 + */
80 + public void remove(ExtFlowTypes obj) {
81 + container.remove(obj);
82 + }
83 +
84 + /**
85 + * Sets the device Id to this container.
86 + *
87 + * @param deviceId to be set to this container
88 + */
89 + public void setDeviceId(String deviceId) {
90 + this.deviceId = deviceId;
91 + }
92 +
93 + @Override
94 + public int hashCode() {
95 + return Objects.hash(container);
96 + }
97 +
98 + @Override
99 + public boolean equals(Object obj) {
100 + if (this == obj) {
101 + return true;
102 + }
103 + if (!(obj instanceof ExtFlowContainer)) {
104 + return false;
105 + }
106 + final ExtFlowContainer other = (ExtFlowContainer) obj;
107 + return Objects.equals(this.container, other.container)
108 + && Objects.equals(this.deviceId, other.deviceId);
109 + }
110 +
111 + @Override
112 + public String toString() {
113 + return MoreObjects.toStringHelper(this)
114 + .add("container", container)
115 + .add("deviceId", deviceId)
116 + .toString();
117 + }
118 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +/**
19 + * Representation of BgpFlow container having custom rules.
20 + */
21 +public interface ExtFlowTypes {
22 +
23 + /**
24 + * Bgp types.
25 + */
26 + public enum ExtType {
27 +
28 + /** Extended flow rule key. */
29 + EXT_FLOW_RULE_KEY(0),
30 +
31 + /** IPv4 destination address. */
32 + IPV4_DST_PFX(1),
33 +
34 + /** IPv4 source address. */
35 + IPV4_SRC_PFX(2),
36 +
37 + /** IP protocol list. */
38 + IP_PROTO_LIST(3),
39 +
40 + /** Input port list. */
41 + IN_PORT_LIST(4),
42 +
43 + /** Destination port list. */
44 + DST_PORT_LIST(5),
45 +
46 + /** Source port list. */
47 + SRC_PORT_LIST(6),
48 +
49 + /** ICMP type list. */
50 + ICMP_TYPE_LIST(7),
51 +
52 + /** ICMP code list. */
53 + ICMP_CODE_LIST(8),
54 +
55 + /** TCP flag list. */
56 + TCP_FLAG_LIST(9),
57 +
58 + /** Packet length list. */
59 + PACKET_LENGTH_LIST(10),
60 +
61 + /** DSCP Value component. */
62 + DSCP_VALUE_LIST(11),
63 +
64 + /** Fragment list. */
65 + FRAGMENT_LIST(12),
66 +
67 + /** Wide community flags. */
68 + WIDE_COMM_FLAGS(13),
69 +
70 + /** Wide community hop count. */
71 + WIDE_COMM_HOP_COUNT(14),
72 +
73 + /** Wide community community attribute. */
74 + WIDE_COMM_COMMUNITY(15),
75 +
76 + /** Wide community context AS. */
77 + WIDE_COMM_CONTEXT_AS(16),
78 +
79 + /** Wide community local AS. */
80 + WIDE_COMM_LOCAL_AS(17),
81 +
82 + /** Wide community target prefixes. */
83 + WIDE_COMM_TARGET(18),
84 +
85 + /** Wide community extended target prefixes. */
86 + WIDE_COMM_EXT_TARGET(19),
87 +
88 + /** Wide community parameter. */
89 + WIDE_COMM_PARAMETER(20),
90 +
91 + /** Traffic filtering actions. */
92 +
93 + TRAFFIC_RATE(0x8006),
94 + TRAFFIC_ACTION(0x8007),
95 + TRAFFIC_REDIRECT(0x8008),
96 + TRAFFIC_MARKING(0x8009);
97 +
98 + private int type;
99 +
100 + /**
101 + * Creates a new type.
102 + *
103 + * @param type type code
104 + */
105 + ExtType(int type) {
106 + this.type = type;
107 + }
108 +
109 + /**
110 + * Returns the type object for this type code.
111 + *
112 + * @return ExtType object
113 + */
114 + public int type() {
115 + return (type);
116 + }
117 + }
118 +
119 + ExtType type();
120 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Extended multivalue Fragment value list class.
22 + */
23 +public interface ExtFragment extends ExtFlowTypes {
24 +
25 + /**
26 + * Returns the ExtType.
27 + *
28 + * @return the ExtType
29 + */
30 + ExtType type();
31 +
32 + /**
33 + * Returns the fragment operator value list.
34 + *
35 + * @return the fragment operator value list
36 + */
37 + List<ExtOperatorValue> fragment();
38 +
39 + /**
40 + * Returns whether this fragment value list is an exact match to the fragment value list given
41 + * in the argument.
42 + *
43 + * @param fragment other fragment value to match against
44 + * @return true if the fragment value list are an exact match, otherwise false
45 + */
46 + boolean exactMatch(ExtFragment fragment);
47 +
48 + /**
49 + * Extended fragment value builder..
50 + */
51 + interface Builder {
52 +
53 + /**
54 + * Assigns the ExtType to this object.
55 + *
56 + * @param type extended type
57 + * @return this the builder object
58 + */
59 + Builder setType(ExtType type);
60 +
61 + /**
62 + * Assigns the fragment operator value to this object.
63 + *
64 + * @param fragment the fragment value
65 + * @return this the builder object
66 + */
67 + Builder setFragment(List<ExtOperatorValue> fragment);
68 +
69 + /**
70 + * Builds a fragment value object.
71 + *
72 + * @return a fragment value object.
73 + */
74 + ExtFragment build();
75 + }
76 +}
77 +
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Extended multivalue ICMP code class.
22 + */
23 +public interface ExtIcmpCode extends ExtFlowTypes {
24 +
25 + /**
26 + * Returns the ExtType.
27 + *
28 + * @return the ExtType
29 + */
30 + ExtType type();
31 +
32 + /**
33 + * Returns the Icmp code operator value list.
34 + *
35 + * @return the Icmp code operator value list
36 + */
37 + List<ExtOperatorValue> icmpCode();
38 +
39 + /**
40 + * Returns whether this Icmp code list is an exact match to the Icmp code list given
41 + * in the argument.
42 + *
43 + * @param icmpCode other Icmp code to match against
44 + * @return true if the Icmp code list are an exact match, otherwise false
45 + */
46 + boolean exactMatch(ExtIcmpCode icmpCode);
47 +
48 + /**
49 + * An Icmp code extension builder..
50 + */
51 + interface Builder {
52 +
53 + /**
54 + * Assigns the ExtType to this object.
55 + *
56 + * @param type extended type
57 + * @return this the builder object
58 + */
59 + Builder setType(ExtType type);
60 +
61 + /**
62 + * Assigns the Icmp code operator value to this object.
63 + *
64 + * @param icmpCode the Icmp code operator value combination
65 + * @return this the builder object
66 + */
67 + Builder setIcmpCode(List<ExtOperatorValue> icmpCode);
68 +
69 + /**
70 + * Builds a Icmp code object.
71 + *
72 + * @return a Tcmp code object.
73 + */
74 + ExtIcmpCode build();
75 + }
76 +}
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Extended multivalue ICMP type class.
22 + */
23 +public interface ExtIcmpType extends ExtFlowTypes {
24 +
25 + /**
26 + * Returns the ExtType.
27 + *
28 + * @return the ExtType
29 + */
30 + ExtType type();
31 +
32 + /**
33 + * Returns the Icmp type operator value list.
34 + *
35 + * @return the Icmp type operator value list
36 + */
37 + List<ExtOperatorValue> icmpType();
38 +
39 + /**
40 + * Returns whether this Icmp type list is an exact match to the Icmp type list given
41 + * in the argument.
42 + *
43 + * @param icmpType other Icmp type to match against
44 + * @return true if the Icmp type list are an exact match, otherwise false
45 + */
46 + boolean exactMatch(ExtIcmpType icmpType);
47 +
48 + /**
49 + * An Icmp type extension builder..
50 + */
51 + interface Builder {
52 +
53 + /**
54 + * Assigns the ExtType to this object.
55 + *
56 + * @param type extended type
57 + * @return this the builder object
58 + */
59 + Builder setType(ExtType type);
60 +
61 + /**
62 + * Assigns the Icmp type operator value to this object.
63 + *
64 + * @param icmpType the Icmp type operator value combination
65 + * @return this the builder object
66 + */
67 + Builder setIcmpType(List<ExtOperatorValue> icmpType);
68 +
69 + /**
70 + * Builds a Icmp type object.
71 + *
72 + * @return a Tcmp type object.
73 + */
74 + ExtIcmpType build();
75 + }
76 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Extended multivalue Ip protocol class.
22 + */
23 +public interface ExtIpProtocol extends ExtFlowTypes {
24 +
25 + /**
26 + * Returns the ExtType.
27 + *
28 + * @return the ExtType
29 + */
30 + ExtType type();
31 +
32 + /**
33 + * Returns the Ip protocol operator value list.
34 + *
35 + * @return the Ip protocol operator value list
36 + */
37 + List<ExtOperatorValue> ipProtocol();
38 +
39 + /**
40 + * Returns whether this Ip protocol list is an exact match to the Ip protocol list given
41 + * in the argument.
42 + *
43 + * @param ipProto other Ip protocols list to match against
44 + * @return true if the Ip protocols list are an exact match, otherwise false
45 + */
46 + boolean exactMatch(ExtIpProtocol ipProto);
47 +
48 + /**
49 + * Ip protocol extension builder.
50 + */
51 + interface Builder {
52 +
53 + /**
54 + * Assigns the ExtType to this object.
55 + *
56 + * @param type extended type
57 + * @return this the builder object
58 + */
59 + Builder setType(ExtType type);
60 +
61 + /**
62 + * Adds the Ip protocol operator value to this object.
63 + *
64 + * @param ipProto is the operator-value combination
65 + * @return this the builder object
66 + */
67 + Builder setIpProtocol(List<ExtOperatorValue> ipProto);
68 +
69 + /**
70 + * Builds a Ip protocol object.
71 + *
72 + * @return a Ip protocol object.
73 + */
74 + ExtIpProtocol build();
75 + }
76 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +/**
19 + * Ext flwo key name class.
20 + */
21 +public interface ExtKeyName extends ExtFlowTypes {
22 +
23 + /**
24 + * Returns the ExtType.
25 + *
26 + * @return the ExtType
27 + */
28 + ExtType type();
29 +
30 + /**
31 + * Returns the key name identifier for the flow.
32 + *
33 + * @return the key name
34 + */
35 + String keyName();
36 +
37 + /**
38 + * Returns whether this key name is an exact match to the key name given
39 + * in the argument.
40 + *
41 + * @param key other key name to match against
42 + * @return true if the key name are an exact match, otherwise false
43 + */
44 + boolean exactMatch(ExtKeyName key);
45 +
46 + /**
47 + * A key name value list builder..
48 + */
49 + interface Builder {
50 +
51 + /**
52 + * Assigns the ExtType to this object.
53 + *
54 + * @param type extended type
55 + * @return this the builder object
56 + */
57 + Builder setType(ExtType type);
58 +
59 + /**
60 + * Assigns the key name to this object.
61 + *
62 + * @param key the key name
63 + * @return this the builder object
64 + */
65 + Builder setKeyName(String key);
66 +
67 + /**
68 + * Builds a key name object.
69 + *
70 + * @return a key name object.
71 + */
72 + ExtKeyName build();
73 + }
74 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import org.slf4j.Logger;
20 +import org.slf4j.LoggerFactory;
21 +
22 +import java.util.Arrays;
23 +import java.util.Objects;
24 +
25 +/**
26 + * Flow specification type operator and value implementation.
27 + */
28 +public class ExtOperatorValue {
29 +
30 + protected static final Logger log = LoggerFactory.getLogger(ExtOperatorValue.class);
31 +
32 + private final byte option;
33 + private final byte[] value;
34 +
35 + /**
36 + * Creates an object of type ExtOperatorValue.
37 + *
38 + * @param option for a specific flow type
39 + * @param value for a specific flow type
40 + */
41 + public ExtOperatorValue(byte option, byte[] value) {
42 + this.option = option;
43 + this.value = Arrays.copyOf(value, value.length);
44 + }
45 +
46 + /**
47 + * Returns option of the flow type.
48 + *
49 + * @return option of the flow type
50 + */
51 + public byte option() {
52 + return option;
53 + }
54 +
55 + /**
56 + * Returns value of the flow type.
57 + *
58 + * @return value of the flow type
59 + */
60 + public byte[] value() {
61 + return value;
62 + }
63 +
64 + @Override
65 + public int hashCode() {
66 + return Objects.hash(option, Arrays.hashCode(value));
67 + }
68 +
69 + @Override
70 + public boolean equals(Object obj) {
71 + if (this == obj) {
72 + return true;
73 + }
74 + if (obj instanceof ExtOperatorValue) {
75 + ExtOperatorValue other = (ExtOperatorValue) obj;
76 + return Objects.equals(this.option, other.option) && Arrays.equals(this.value, other.value);
77 + }
78 + return false;
79 + }
80 +
81 + @Override
82 + public String toString() {
83 + return MoreObjects.toStringHelper(getClass()).add("option", option).add("value", value).toString();
84 + }
85 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Extended multivalue packet length list class.
22 + */
23 +public interface ExtPacketLength extends ExtFlowTypes {
24 +
25 + /**
26 + * Returns the ExtType.
27 + *
28 + * @return the ExtType
29 + */
30 + ExtType type();
31 +
32 + /**
33 + * Returns the packet length operator value list.
34 + *
35 + * @return the packet length operator value list
36 + */
37 + List<ExtOperatorValue> packetLength();
38 +
39 + /**
40 + * Returns whether this packet length list is an exact match to the packet length list given
41 + * in the argument.
42 + *
43 + * @param packetLength other packet length to match against
44 + * @return true if the packet length list are an exact match, otherwise false
45 + */
46 + boolean exactMatch(ExtPacketLength packetLength);
47 +
48 + /**
49 + * A packet length extended builder..
50 + */
51 + interface Builder {
52 +
53 + /**
54 + * Assigns the ExtType to this object.
55 + *
56 + * @param type extended type
57 + * @return this the builder object
58 + */
59 + Builder setType(ExtType type);
60 +
61 + /**
62 + * Assigns the packet length list to this object.
63 + *
64 + * @param packetLength the packet length
65 + * @return this the builder object
66 + */
67 + Builder setPacketLength(List<ExtOperatorValue> packetLength);
68 +
69 + /**
70 + * Builds a packet length object.
71 + *
72 + * @return a packet length object.
73 + */
74 + ExtPacketLength build();
75 + }
76 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Extended multivalue port class.
22 + */
23 +public interface ExtPort extends ExtFlowTypes {
24 +
25 + /**
26 + * Returns the ExtType.
27 + *
28 + * @return the ExtType
29 + */
30 + ExtType type();
31 +
32 + /**
33 + * Returns the port operator value list.
34 + *
35 + * @return the port operator value list
36 + */
37 + List<ExtOperatorValue> port();
38 +
39 + /**
40 + * Returns whether this port list is an exact match to the port list given
41 + * in the argument.
42 + *
43 + * @param port other port to match against
44 + * @return true if the port list are an exact match, otherwise false
45 + */
46 + boolean exactMatch(ExtPort port);
47 +
48 + /**
49 + * An extended port extension builder..
50 + */
51 + interface Builder {
52 +
53 + /**
54 + * Assigns the ExtType to this object.
55 + *
56 + * @param type extended type
57 + * @return this the builder object
58 + */
59 + Builder setType(ExtType type);
60 +
61 + /**
62 + * Assigns the port list operator value to this object.
63 + *
64 + * @param port is the operator-value combination
65 + * @return this the builder object
66 + */
67 + Builder setPort(List<ExtOperatorValue> port);
68 +
69 + /**
70 + * Builds a port object.
71 + *
72 + * @return a port object.
73 + */
74 + ExtPort build();
75 + }
76 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import org.onlab.packet.IpPrefix;
19 +
20 +import java.util.List;
21 +
22 +/**
23 + * Ext Prefix class.
24 + */
25 +public interface ExtPrefix extends ExtFlowTypes {
26 +
27 + /**
28 + * Returns the ExtType.
29 + *
30 + * @return the ExtType
31 + */
32 + ExtType type();
33 +
34 + /**
35 + * Returns the prefix list.
36 + *
37 + * @return the IpPrefix list
38 + */
39 + List<IpPrefix> prefix();
40 +
41 + /**
42 + * Returns whether this prefix list is an exact match to the prefix list given
43 + * in the argument.
44 + *
45 + * @param prefix other prefix to match against
46 + * @return true if the prefix are an exact match, otherwise false
47 + */
48 + boolean exactMatch(ExtPrefix prefix);
49 +
50 + /**
51 + * A prefix builder..
52 + */
53 + interface Builder {
54 +
55 + /**
56 + * Assigns the ExtType to this object.
57 + *
58 + * @param type the prefix
59 + * @return this the builder object
60 + */
61 + Builder setType(ExtType type);
62 +
63 + /**
64 + * Add the prefix to this object.
65 + *
66 + * @param prefix the prefix
67 + * @return this the builder object
68 + */
69 + Builder setPrefix(IpPrefix prefix);
70 +
71 + /**
72 + * Builds a prefix object.
73 + *
74 + * @return a port chain.
75 + */
76 + ExtPrefix build();
77 + }
78 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +/**
19 + * Ext target prefix class class.
20 + */
21 +public interface ExtTarget extends ExtFlowTypes {
22 +
23 + /**
24 + * Returns the ExtType.
25 + *
26 + * @return the ExtType
27 + */
28 + ExtType type();
29 +
30 + /**
31 + * Returns the local speaker prefix list.
32 + *
33 + * @return the prefix list
34 + */
35 + ExtPrefix localSpeaker();
36 +
37 + /**
38 + * Returns the remote speaker prefix list.
39 + *
40 + * @return the prefix list
41 + */
42 + ExtPrefix remoteSpeaker();
43 +
44 + /**
45 + * Returns whether this prefix list is an exact match to the prefix list given
46 + * in the argument.
47 + *
48 + * @param prefix other prefix to match against
49 + * @return true if the prefix are an exact match, otherwise false
50 + */
51 + boolean exactMatch(ExtTarget prefix);
52 +
53 + /**
54 + * A prefix builder..
55 + */
56 + interface Builder {
57 +
58 + /**
59 + * Assigns the ExtType to this object.
60 + *
61 + * @param type the prefix
62 + * @return this the builder object
63 + */
64 + Builder setType(ExtType type);
65 +
66 + /**
67 + * Add the local speaker prefix to this object.
68 + *
69 + * @param localSpeaker list of local speakers
70 + * @return this the builder object
71 + */
72 + Builder setLocalSpeaker(ExtPrefix localSpeaker);
73 +
74 + /**
75 + * Add the remote speaker prefix to this object.
76 + *
77 + * @param remoteSpeaker list of remote speakers
78 + * @return this the builder object
79 + */
80 + Builder setRemoteSpeaker(ExtPrefix remoteSpeaker);
81 +
82 + /**
83 + * Builds a prefix object.
84 + *
85 + * @return a port chain.
86 + */
87 + ExtTarget build();
88 + }
89 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Extended multivalue Tcp Flags list class.
22 + */
23 +public interface ExtTcpFlag extends ExtFlowTypes {
24 +
25 + /**
26 + * Returns the ExtType.
27 + *
28 + * @return the ExtType
29 + */
30 + ExtType type();
31 +
32 + /**
33 + * Returns the Tcp flag Extended multivalue.
34 + *
35 + * @return the Tcp flag Extended multivalue
36 + */
37 + List<ExtOperatorValue> tcpFlag();
38 +
39 + /**
40 + * Returns whether this Tcp flag list is an exact match to the Tcp flag list given
41 + * in the argument.
42 + *
43 + * @param tcpFlag other Tcp flag to match against
44 + * @return true if the Tcp flag list are an exact match, otherwise false
45 + */
46 + boolean exactMatch(ExtTcpFlag tcpFlag);
47 +
48 + /**
49 + * A Tcp flag extended builder..
50 + */
51 + interface Builder {
52 +
53 + /**
54 + * Assigns the ExtType to this object.
55 + *
56 + * @param type extended type
57 + * @return this the builder object
58 + */
59 + Builder setType(ExtType type);
60 +
61 + /**
62 + * Assigns the Tcp flag operator value to this object.
63 + *
64 + * @param tcpFlag the Tcp flag
65 + * @return this the builder object
66 + */
67 + Builder setTcpFlag(List<ExtOperatorValue> tcpFlag);
68 +
69 + /**
70 + * Builds a Tcp flag object.
71 + *
72 + * @return a Tcp flag object.
73 + */
74 + ExtTcpFlag build();
75 + }
76 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +/**
19 + * Extended flow traffic action class.
20 + */
21 +public interface ExtTrafficAction extends ExtFlowTypes {
22 +
23 + /**
24 + * Returns the ExtType.
25 + *
26 + * @return the ExtType
27 + */
28 + ExtType type();
29 +
30 + /**
31 + * Returns the terminal action.
32 + *
33 + * @return the terminal action is set or not
34 + */
35 + boolean terminal();
36 +
37 + /**
38 + * Returns the traffic sampling.
39 + *
40 + * @return the traffic sampling set or not
41 + */
42 + boolean sample();
43 +
44 + /**
45 + * Returns the traffic action to be taken is rpd.
46 + *
47 + * @return the traffic action rpd is set or not
48 + */
49 + boolean rpd();
50 +
51 + /**
52 + * Returns whether this traffic action is an exact match to the traffic action given
53 + * in the argument.
54 + *
55 + * @param trafficAction other traffic action to match against
56 + * @return true if the traffic action are an exact match, otherwise false
57 + */
58 + boolean exactMatch(ExtTrafficAction trafficAction);
59 +
60 + /**
61 + * A traffic action builder..
62 + */
63 + interface Builder {
64 +
65 + /**
66 + * Assigns the ExtType to this object.
67 + *
68 + * @param type extended type
69 + * @return this the builder object
70 + */
71 + Builder setType(ExtType type);
72 +
73 + /**
74 + * Assigns the terminal action to this object.
75 + *
76 + * @param terminal action
77 + * @return this the builder object
78 + */
79 + Builder setTerminal(boolean terminal);
80 +
81 + /**
82 + * Assigns the traffic sampling to this object.
83 + *
84 + * @param sample to be done or not
85 + * @return this the builder object
86 + */
87 + Builder setSample(boolean sample);
88 +
89 + /**
90 + * Assigns the traffic action rpd to this object.
91 + *
92 + * @param rpd rpd or not
93 + * @return this the builder object
94 + */
95 + Builder setRpd(boolean rpd);
96 +
97 + /**
98 + * Builds a traffic action object.
99 + *
100 + * @return a traffic action object.
101 + */
102 + ExtTrafficAction build();
103 + }
104 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +/**
19 + * Extended traffic marking class.
20 + */
21 +public interface ExtTrafficMarking extends ExtFlowTypes {
22 +
23 + /**
24 + * Returns the ExtType.
25 + *
26 + * @return the ExtType
27 + */
28 + ExtType type();
29 +
30 + /**
31 + * Returns the traffic marking DSCP value.
32 + *
33 + * @return the marking rule
34 + */
35 + byte marking();
36 +
37 + /**
38 + * Returns whether this traffic marking is an exact match to the traffic marking given
39 + * in the argument.
40 + *
41 + * @param marking other traffic marking to match against
42 + * @return true if the traffic marking are an exact match, otherwise false
43 + */
44 + boolean exactMatch(ExtTrafficMarking marking);
45 +
46 + /**
47 + * A traffic marking builder..
48 + */
49 + interface Builder {
50 +
51 + /**
52 + * Assigns the ExtType to this object.
53 + *
54 + * @param type extended type
55 + * @return this the builder object
56 + */
57 + Builder setType(ExtType type);
58 +
59 + /**
60 + * Assigns the traffic marking to this object.
61 + *
62 + * @param marking the marking value
63 + * @return this the builder object
64 + */
65 + Builder setMarking(byte marking);
66 +
67 + /**
68 + * Builds a traffic marking object.
69 + *
70 + * @return a marking value object.
71 + */
72 + ExtTrafficMarking build();
73 + }
74 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +/**
19 + * Extended flow traffic rate class.
20 + */
21 +public interface ExtTrafficRate extends ExtFlowTypes {
22 +
23 + /**
24 + * Returns the ExtType.
25 + *
26 + * @return the ExtType
27 + */
28 + ExtType type();
29 +
30 + /**
31 + * Returns the AS number.
32 + *
33 + * @return the 2 byte ASN
34 + */
35 + Short asn();
36 +
37 + /**
38 + * Returns the traffic rate.
39 + *
40 + * @return the floating point traffic rate
41 + */
42 + Float rate();
43 +
44 + /**
45 + * Returns whether this traffic rate is an exact match to the traffic rate given
46 + * in the argument.
47 + *
48 + * @param trafficRate other traffic rate to match against
49 + * @return true if the traffic rate list are an exact match, otherwise false
50 + */
51 + boolean exactMatch(ExtTrafficRate trafficRate);
52 +
53 + /**
54 + * A traffic rate builder..
55 + */
56 + interface Builder {
57 +
58 + /**
59 + * Assigns the ExtType to this object.
60 + *
61 + * @param type extended type
62 + * @return this the builder object
63 + */
64 + Builder setType(ExtType type);
65 +
66 + /**
67 + * Assigns the AS number to this object.
68 + *
69 + * @param asn the ASN
70 + * @return this the builder object
71 + */
72 + Builder setAsn(short asn);
73 +
74 + /**
75 + * Assigns the traffic rate to this object.
76 + *
77 + * @param rate in floating point number bytes per second
78 + * @return this the builder object
79 + */
80 + Builder setRate(float rate);
81 +
82 + /**
83 + * Builds a traffic rate object.
84 + *
85 + * @return a traffic rate object.
86 + */
87 + ExtTrafficRate build();
88 + }
89 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +/**
19 + * Extended flow traffic redirect class.
20 + */
21 +public interface ExtTrafficRedirect extends ExtFlowTypes {
22 +
23 + /**
24 + * Returns the ExtType.
25 + *
26 + * @return the ExtType
27 + */
28 + ExtType type();
29 +
30 + /**
31 + * Returns the traffic redirect in human readable format.
32 + *
33 + * @return the redirect rule
34 + */
35 + String redirect();
36 +
37 + /**
38 + * Returns whether this traffic redirect is an exact match to the traffic redirect given
39 + * in the argument.
40 + *
41 + * @param redirect other traffic redirect to match against
42 + * @return true if the traffic redirect are an exact match, otherwise false
43 + */
44 + boolean exactMatch(ExtTrafficRedirect redirect);
45 +
46 + /**
47 + * A dscp value list builder..
48 + */
49 + interface Builder {
50 +
51 + /**
52 + * Assigns the ExtType to this object.
53 + *
54 + * @param type extended type
55 + * @return this the builder object
56 + */
57 + Builder setType(ExtType type);
58 +
59 + /**
60 + * Assigns the traffic redirect to this object.
61 + *
62 + * @param redirect the redirect value
63 + * @return this the builder object
64 + */
65 + Builder setRedirect(String redirect);
66 +
67 + /**
68 + * Builds a traffic redirect object.
69 + *
70 + * @return a redirect value object.
71 + */
72 + ExtTrafficRedirect build();
73 + }
74 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import java.util.List;
19 +
20 +/**
21 + * Extended wide community integer class.
22 + */
23 +public interface ExtWideCommunityInt extends ExtFlowTypes {
24 +
25 + /**
26 + * Returns the ExtType.
27 + *
28 + * @return the ExtType
29 + */
30 + ExtType type();
31 +
32 + /**
33 + * Returns the wide community integer list.
34 + *
35 + * @return the wide community integer list
36 + */
37 + List<Integer> communityInt();
38 +
39 + /**
40 + * Returns whether this wide community integer is an exact match to the wide community int given
41 + * in the argument.
42 + *
43 + * @param wCommInt other wide community integer to match against
44 + * @return true if the wide community integer are an exact match, otherwise false
45 + */
46 + boolean exactMatch(ExtWideCommunityInt wCommInt);
47 +
48 + /**
49 + * A wide community integer list builder..
50 + */
51 + interface Builder {
52 +
53 + /**
54 + * Assigns the ExtType to this object.
55 + *
56 + * @param type extended type
57 + * @return this the builder object
58 + */
59 + Builder setType(ExtType type);
60 +
61 + /**
62 + * Assigns the wide community integer to this object.
63 + *
64 + * @param wCommInt the wide community integer
65 + * @return this the builder object
66 + */
67 + Builder setwCommInt(Integer wCommInt);
68 +
69 + /**
70 + * Builds a wide community integer object.
71 + *
72 + * @return a wide community integer value object.
73 + */
74 + ExtWideCommunityInt build();
75 + }
76 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +
17 +/**
18 + * API bundle.
19 + */
20 +package org.onosproject.flowapi;
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +import java.util.ArrayList;
22 +import java.util.List;
23 +
24 +/**
25 + * Test for extended dscp value attribute.
26 + */
27 +public class DefaultExtDscpValueTest {
28 +
29 + private List<ExtOperatorValue> dscpValue = new ArrayList<>();
30 + private List<ExtOperatorValue> dscpValue1 = new ArrayList<>();
31 + private ExtOperatorValue opVal = new ExtOperatorValue((byte) 1, new byte[100]);
32 + private ExtOperatorValue opVal1 = new ExtOperatorValue((byte) 1, new byte[200]);
33 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.DSCP_VALUE_LIST;
34 +
35 + @Test
36 + public void basics() {
37 + dscpValue.add(opVal);
38 + dscpValue1.add(opVal1);
39 + DefaultExtDscpValue data = new DefaultExtDscpValue(dscpValue, type);
40 + DefaultExtDscpValue sameAsData = new DefaultExtDscpValue(dscpValue, type);
41 + DefaultExtDscpValue diffData = new DefaultExtDscpValue(dscpValue1, type);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +import java.util.ArrayList;
22 +import java.util.List;
23 +
24 +/**
25 + * Test for extended fragment value attribute.
26 + */
27 +public class DefaultExtFragmentTest {
28 +
29 + private List<ExtOperatorValue> fragment = new ArrayList<>();
30 + private List<ExtOperatorValue> fragment1 = new ArrayList<>();
31 + private ExtOperatorValue opVal = new ExtOperatorValue((byte) 1, new byte[100]);
32 + private ExtOperatorValue opVal1 = new ExtOperatorValue((byte) 1, new byte[200]);
33 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.FRAGMENT_LIST;
34 +
35 + @Test
36 + public void basics() {
37 + fragment.add(opVal);
38 + fragment1.add(opVal1);
39 + DefaultExtFragment data = new DefaultExtFragment(fragment, type);
40 + DefaultExtFragment sameAsData = new DefaultExtFragment(fragment, type);
41 + DefaultExtFragment diffData = new DefaultExtFragment(fragment1, type);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +import java.util.ArrayList;
22 +import java.util.List;
23 +
24 +/**
25 + * Test for extended icmp code value attribute.
26 + */
27 +public class DefaultExtIcmpCodeTest {
28 +
29 + private List<ExtOperatorValue> icmpCode = new ArrayList<>();
30 + private List<ExtOperatorValue> icmpCode1 = new ArrayList<>();
31 + private ExtOperatorValue opVal = new ExtOperatorValue((byte) 1, new byte[100]);
32 + private ExtOperatorValue opVal1 = new ExtOperatorValue((byte) 1, new byte[200]);
33 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.ICMP_CODE_LIST;
34 +
35 + @Test
36 + public void basics() {
37 + icmpCode.add(opVal);
38 + icmpCode1.add(opVal1);
39 + DefaultExtIcmpCode data = new DefaultExtIcmpCode(icmpCode, type);
40 + DefaultExtIcmpCode sameAsData = new DefaultExtIcmpCode(icmpCode, type);
41 + DefaultExtIcmpCode diffData = new DefaultExtIcmpCode(icmpCode1, type);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 + import com.google.common.testing.EqualsTester;
19 + import org.junit.Test;
20 +
21 + import java.util.ArrayList;
22 + import java.util.List;
23 +
24 +/**
25 + * Test for extended icmp type value attribute.
26 + */
27 +public class DefaultExtIcmpTypeTest {
28 +
29 + private List<ExtOperatorValue> icmpType = new ArrayList<>();
30 + private List<ExtOperatorValue> icmpType1 = new ArrayList<>();
31 + private ExtOperatorValue opVal = new ExtOperatorValue((byte) 1, new byte[100]);
32 + private ExtOperatorValue opVal1 = new ExtOperatorValue((byte) 1, new byte[200]);
33 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.ICMP_TYPE_LIST;
34 +
35 + @Test
36 + public void basics() {
37 + icmpType.add(opVal);
38 + icmpType1.add(opVal1);
39 + DefaultExtIcmpType data = new DefaultExtIcmpType(icmpType, type);
40 + DefaultExtIcmpType sameAsData = new DefaultExtIcmpType(icmpType, type);
41 + DefaultExtIcmpType diffData = new DefaultExtIcmpType(icmpType1, type);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +import java.util.ArrayList;
22 +import java.util.List;
23 +
24 +/**
25 + * Test for extended icmp type value attribute.
26 + */
27 +public class DefaultExtIpProtocolTest {
28 +
29 + private List<ExtOperatorValue> ipProtocol = new ArrayList<>();
30 + private List<ExtOperatorValue> ipProtocol1 = new ArrayList<>();
31 + private ExtOperatorValue opVal = new ExtOperatorValue((byte) 1, new byte[100]);
32 + private ExtOperatorValue opVal1 = new ExtOperatorValue((byte) 1, new byte[200]);
33 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.IP_PROTO_LIST;
34 +
35 + @Test
36 + public void basics() {
37 + ipProtocol.add(opVal);
38 + ipProtocol1.add(opVal1);
39 + DefaultExtIpProtocol data = new DefaultExtIpProtocol(ipProtocol, type);
40 + DefaultExtIpProtocol sameAsData = new DefaultExtIpProtocol(ipProtocol, type);
41 + DefaultExtIpProtocol diffData = new DefaultExtIpProtocol(ipProtocol1, type);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +/**
22 + * Test for extended key name value attribute.
23 + */
24 +public class DefaultExtKeyNameTest {
25 +
26 + private String keyName = new String("hello");
27 + private String keyName1 = new String("Hi");
28 +
29 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.EXT_FLOW_RULE_KEY;
30 +
31 + @Test
32 + public void basics() {
33 +
34 + DefaultExtKeyName data = new DefaultExtKeyName(keyName, type);
35 + DefaultExtKeyName sameAsData = new DefaultExtKeyName(keyName, type);
36 + DefaultExtKeyName diffData = new DefaultExtKeyName(keyName1, type);
37 + new EqualsTester().addEqualityGroup(data, sameAsData)
38 + .addEqualityGroup(diffData).testEquals();
39 + }
40 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +import java.util.ArrayList;
22 +import java.util.List;
23 +
24 +/**
25 + * Test for extended packet length value attribute.
26 + */
27 +public class DefaultExtPacketLengthTest {
28 +
29 + private List<ExtOperatorValue> packetLength = new ArrayList<>();
30 + private List<ExtOperatorValue> packetLength1 = new ArrayList<>();
31 + private ExtOperatorValue opVal = new ExtOperatorValue((byte) 1, new byte[100]);
32 + private ExtOperatorValue opVal1 = new ExtOperatorValue((byte) 1, new byte[200]);
33 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.PACKET_LENGTH_LIST;
34 +
35 + @Test
36 + public void basics() {
37 + packetLength.add(opVal);
38 + packetLength1.add(opVal1);
39 + DefaultExtPacketLength data = new DefaultExtPacketLength(packetLength, type);
40 + DefaultExtPacketLength sameAsData = new DefaultExtPacketLength(packetLength, type);
41 + DefaultExtPacketLength diffData = new DefaultExtPacketLength(packetLength1, type);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 + import com.google.common.testing.EqualsTester;
19 + import org.junit.Test;
20 +
21 + import java.util.ArrayList;
22 + import java.util.List;
23 +
24 +/**
25 + * Test for extended icmp type value attribute.
26 + */
27 +public class DefaultExtPortTest {
28 +
29 + private List<ExtOperatorValue> port = new ArrayList<>();
30 + private List<ExtOperatorValue> port1 = new ArrayList<>();
31 + private ExtOperatorValue opVal = new ExtOperatorValue((byte) 1, new byte[100]);
32 + private ExtOperatorValue opVal1 = new ExtOperatorValue((byte) 1, new byte[200]);
33 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.IN_PORT_LIST;
34 +
35 + @Test
36 + public void basics() {
37 + port.add(opVal);
38 + port1.add(opVal1);
39 + DefaultExtPort data = new DefaultExtPort(port, type);
40 + DefaultExtPort sameAsData = new DefaultExtPort(port, type);
41 + DefaultExtPort diffData = new DefaultExtPort(port1, type);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 + import com.google.common.testing.EqualsTester;
19 + import org.junit.Test;
20 + import org.onlab.packet.IpAddress;
21 + import org.onlab.packet.IpPrefix;
22 +
23 + import java.util.ArrayList;
24 + import java.util.List;
25 +
26 +/**
27 + * Test for extended prefix value attribute.
28 + */
29 +public class DefaultExtPrefixTest {
30 +
31 + private List<IpPrefix> prefix = new ArrayList<>();
32 + private List<IpPrefix> prefix1 = new ArrayList<>();
33 + private IpAddress address = IpAddress.valueOf("192.168.1.1");
34 + private IpPrefix opVal = IpPrefix.valueOf(address, 16);
35 + private IpPrefix opVal1 = IpPrefix.valueOf(address, 20);
36 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.IPV4_DST_PFX;
37 +
38 + @Test
39 + public void basics() {
40 + prefix.add(opVal);
41 + prefix1.add(opVal1);
42 + DefaultExtPrefix data = new DefaultExtPrefix(prefix, type);
43 + DefaultExtPrefix sameAsData = new DefaultExtPrefix(prefix, type);
44 + DefaultExtPrefix diffData = new DefaultExtPrefix(prefix1, type);
45 + new EqualsTester().addEqualityGroup(data, sameAsData)
46 + .addEqualityGroup(diffData).testEquals();
47 + }
48 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +import org.onlab.packet.IpAddress;
21 +import org.onlab.packet.IpPrefix;
22 +
23 +import java.util.ArrayList;
24 +import java.util.List;
25 +
26 +/**
27 + * Test for extended t value target ttribute.
28 + */
29 +public class DefaultExtTargetTest {
30 + private List<IpPrefix> prefix = new ArrayList<>();
31 + private List<IpPrefix> prefix1 = new ArrayList<>();
32 + private IpAddress address = IpAddress.valueOf("192.168.1.1");
33 + private IpPrefix opVal = IpPrefix.valueOf(address, 16);
34 + private IpPrefix opVal1 = IpPrefix.valueOf(address, 20);
35 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.IPV4_DST_PFX;
36 + private ExtFlowTypes.ExtType typeThis = ExtFlowTypes.ExtType.WIDE_COMM_TARGET;
37 +
38 + @Test
39 + public void basics() {
40 + prefix.add(opVal);
41 + prefix1.add(opVal1);
42 + DefaultExtPrefix localSpeaker = new DefaultExtPrefix(prefix, type);
43 + DefaultExtPrefix remoteSpeaker = new DefaultExtPrefix(prefix, type);
44 + DefaultExtPrefix localSpeaker1 = new DefaultExtPrefix(prefix1, type);
45 + DefaultExtPrefix remoteSpeaker1 = new DefaultExtPrefix(prefix1, type);
46 +
47 + DefaultExtTarget data = new DefaultExtTarget(localSpeaker, remoteSpeaker, typeThis);
48 + DefaultExtTarget sameAsData = new DefaultExtTarget(localSpeaker, remoteSpeaker, typeThis);
49 + DefaultExtTarget diffData = new DefaultExtTarget(localSpeaker1, remoteSpeaker1, typeThis);
50 + new EqualsTester().addEqualityGroup(data, sameAsData)
51 + .addEqualityGroup(diffData).testEquals();
52 + }
53 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +import java.util.ArrayList;
22 +import java.util.List;
23 +
24 +/**
25 + * Test for extended tcp flag value attribute.
26 + */
27 +public class DefaultExtTcpFlagTest {
28 +
29 + private List<ExtOperatorValue> tcpFlag = new ArrayList<>();
30 + private List<ExtOperatorValue> tcpFlag1 = new ArrayList<>();
31 + private ExtOperatorValue opVal = new ExtOperatorValue((byte) 1, new byte[100]);
32 + private ExtOperatorValue opVal1 = new ExtOperatorValue((byte) 1, new byte[200]);
33 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.TCP_FLAG_LIST;
34 +
35 + @Test
36 + public void basics() {
37 + tcpFlag.add(opVal);
38 + tcpFlag1.add(opVal1);
39 + DefaultExtTcpFlag data = new DefaultExtTcpFlag(tcpFlag, type);
40 + DefaultExtTcpFlag sameAsData = new DefaultExtTcpFlag(tcpFlag, type);
41 + DefaultExtTcpFlag diffData = new DefaultExtTcpFlag(tcpFlag1, type);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +/**
22 + * Test for extended traffic action value attribute.
23 + */
24 +public class DefaultExtTrafficActionTest {
25 +
26 + private boolean terminal = true;
27 + private boolean sample = true;
28 + private boolean rpd = true;
29 + private boolean terminal1 = false;
30 + private boolean sample1 = false;
31 + private boolean rpd1 = false;
32 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.TRAFFIC_ACTION;
33 +
34 + @Test
35 + public void basics() {
36 +
37 + DefaultExtTrafficAction data = new DefaultExtTrafficAction(terminal, sample, rpd, type);
38 + DefaultExtTrafficAction sameAsData = new DefaultExtTrafficAction(terminal, sample, rpd, type);
39 + DefaultExtTrafficAction diffData = new DefaultExtTrafficAction(terminal1, sample1, rpd1, type);
40 + new EqualsTester().addEqualityGroup(data, sameAsData)
41 + .addEqualityGroup(diffData).testEquals();
42 + }
43 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +/**
22 + * Test for extended traffic marking value attribute.
23 + */
24 +public class DefaultExtTrafficMarkingTest {
25 +
26 + private byte marking = 01;
27 + private byte marking1 = 02;
28 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.TRAFFIC_MARKING;
29 +
30 + @Test
31 + public void basics() {
32 + DefaultExtTrafficMarking data = new DefaultExtTrafficMarking(marking, type);
33 + DefaultExtTrafficMarking sameAsData = new DefaultExtTrafficMarking(marking, type);
34 + DefaultExtTrafficMarking diffData = new DefaultExtTrafficMarking(marking1, type);
35 + new EqualsTester().addEqualityGroup(data, sameAsData)
36 + .addEqualityGroup(diffData).testEquals();
37 + }
38 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +/**
22 + * Test for extended traffic rate value attribute.
23 + */
24 +public class DefaultExtTrafficRateTest {
25 +
26 + private Short asn = new Short((short) 1);
27 + private Float rate = new Float(1.0);
28 + private Short asn1 = new Short((short) 2);
29 + private Float rate1 = new Float(1.0);
30 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.TRAFFIC_RATE;
31 +
32 + @Test
33 + public void basics() {
34 + DefaultExtTrafficRate data = new DefaultExtTrafficRate(asn, rate, type);
35 + DefaultExtTrafficRate sameAsData = new DefaultExtTrafficRate(asn, rate, type);
36 + DefaultExtTrafficRate diffData = new DefaultExtTrafficRate(asn1, rate1, type);
37 + new EqualsTester().addEqualityGroup(data, sameAsData)
38 + .addEqualityGroup(diffData).testEquals();
39 + }
40 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +/**
22 + * Test for extended traffic redirect value attribute.
23 + */
24 +public class DefaultExtTrafficRedirectTest {
25 +
26 + String redirect = new String("vpnid1");
27 + String redirect1 = new String("vpnid2");
28 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.TRAFFIC_REDIRECT;
29 +
30 + @Test
31 + public void basics() {
32 +
33 + DefaultExtTrafficRedirect data = new DefaultExtTrafficRedirect(redirect, type);
34 + DefaultExtTrafficRedirect sameAsData = new DefaultExtTrafficRedirect(redirect, type);
35 + DefaultExtTrafficRedirect diffData = new DefaultExtTrafficRedirect(redirect1, type);
36 + new EqualsTester().addEqualityGroup(data, sameAsData)
37 + .addEqualityGroup(diffData).testEquals();
38 + }
39 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +import java.util.ArrayList;
22 +import java.util.List;
23 +
24 +/**
25 + * Test for extended wide community value attribute.
26 + */
27 +public class DefaultExtWideCommunityIntTest {
28 +
29 + private List<Integer> wCommInt = new ArrayList<>();
30 + private List<Integer> wCommInt1 = new ArrayList<>();
31 + private Integer opVal = new Integer(1);
32 + private Integer opVal1 = new Integer(2);
33 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.WIDE_COMM_COMMUNITY;
34 +
35 + @Test
36 + public void basics() {
37 + wCommInt.add(opVal);
38 + wCommInt1.add(opVal1);
39 + DefaultExtWideCommunityInt data = new DefaultExtWideCommunityInt(wCommInt, type);
40 + DefaultExtWideCommunityInt sameAsData = new DefaultExtWideCommunityInt(wCommInt, type);
41 + DefaultExtWideCommunityInt diffData = new DefaultExtWideCommunityInt(wCommInt1, type);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import com.google.common.testing.EqualsTester;
19 +import org.junit.Test;
20 +
21 +import java.util.ArrayList;
22 +import java.util.List;
23 +
24 +/**
25 + * Test for extended flow container value attribute.
26 + */
27 +public class ExtFlowContainerTest {
28 +
29 + private List<ExtFlowTypes> container = new ArrayList<>();
30 + private List<ExtFlowTypes> container1 = new ArrayList<>();
31 + private ExtFlowTypes.ExtType type = ExtFlowTypes.ExtType.EXT_FLOW_RULE_KEY;
32 + ExtFlowTypes val = new DefaultExtKeyName("Name", type);
33 + ExtFlowTypes val1 = new DefaultExtKeyName("Name1", type);
34 +
35 + @Test
36 + public void basics() {
37 + container.add(val);
38 + container1.add(val1);
39 + ExtFlowContainer data = new ExtFlowContainer(container);
40 + ExtFlowContainer sameAsData = new ExtFlowContainer(container);
41 + ExtFlowContainer diffData = new ExtFlowContainer(container1);
42 + new EqualsTester().addEqualityGroup(data, sameAsData)
43 + .addEqualityGroup(diffData).testEquals();
44 + }
45 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flowapi;
17 +
18 +import org.junit.Test;
19 +
20 +import com.google.common.testing.EqualsTester;
21 +
22 +/**
23 + * Test for ExtOperatorValue flow specification component.
24 + */
25 +public class ExtOperatorValueTest {
26 + ExtOperatorValue tlv1 = new ExtOperatorValue((byte) 1, new byte[100]);
27 + ExtOperatorValue sameAsTlv1 = new ExtOperatorValue((byte) 1, new byte[100]);
28 + ExtOperatorValue tlv2 = new ExtOperatorValue((byte) 1, new byte[200]);
29 +
30 + @Test
31 + public void testEquality() {
32 + new EqualsTester()
33 + .addEqualityGroup(tlv1, sameAsTlv1)
34 + .addEqualityGroup(tlv2)
35 + .testEquals();
36 + }
37 +}
1 +COMPILE_DEPS = [
2 + '//lib:CORE_DEPS',
3 + '//core/store/serializers:onos-core-serializers',
4 + '//apps/bgpflowspec/flowapi:onos-apps-bgpflowspec-flowapi',
5 +]
6 +
7 +osgi_jar_with_tests (
8 + name = 'onos-apps-bgpflowspec-flowmgr',
9 + deps = COMPILE_DEPS,
10 +)
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2015 Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<project
18 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
19 + xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
20 + <modelVersion>4.0.0</modelVersion>
21 + <parent>
22 + <groupId>org.onosproject</groupId>
23 + <artifactId>onos-app-bgpflow</artifactId>
24 + <version>1.6.0-SNAPSHOT</version>
25 + <relativePath>../pom.xml</relativePath>
26 + </parent>
27 +
28 + <artifactId>onos-app-bgp-flowmgr</artifactId>
29 + <packaging>bundle</packaging>
30 +
31 + <dependencies>
32 + <dependency>
33 + <groupId>org.onosproject</groupId>
34 + <artifactId>onos-api</artifactId>
35 + </dependency>
36 + <dependency>
37 + <groupId>javax.ws.rs</groupId>
38 + <artifactId>javax.ws.rs-api</artifactId>
39 + <version>2.0.1</version>
40 + </dependency>
41 + <dependency>
42 + <groupId>org.apache.karaf.shell</groupId>
43 + <artifactId>org.apache.karaf.shell.console</artifactId>
44 + </dependency>
45 + <dependency>
46 + <groupId>org.onosproject</groupId>
47 + <artifactId>onos-app-bgp-flowapi</artifactId>
48 + <version>1.6.0-SNAPSHOT</version>
49 + </dependency>
50 + </dependencies>
51 +</project>
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flow.forwarder;
17 +
18 +import org.onosproject.flowapi.ExtFlowContainer;
19 +
20 +/**
21 + * Abstraction of an entity which provides Bgp Flow Service.
22 + */
23 +public interface BgpFlowForwarderService {
24 +
25 + /**
26 + * Install forwarding rule.
27 + *
28 + * @param container BgpFlow container
29 + * @return a true if success else false
30 + */
31 + boolean installForwardingRule(ExtFlowContainer container);
32 +
33 + /**
34 + * Uninstall forwarding rule.
35 + *
36 + * @param container BgpFlow container
37 + * @return a true if success else false
38 + */
39 + boolean unInstallForwardingRule(ExtFlowContainer container);
40 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flow.forwarder.impl;
17 +
18 +import org.onosproject.core.ApplicationId;
19 +import org.onosproject.flow.forwarder.BgpFlowForwarderService;
20 +
21 +import org.onosproject.flowapi.ExtFlowContainer;
22 +import org.onosproject.net.Annotations;
23 +import org.onosproject.net.Device;
24 +import org.onosproject.net.DeviceId;
25 +import org.onosproject.net.behaviour.ExtensionSelectorResolver;
26 +import org.onosproject.net.device.DeviceService;
27 +import org.onosproject.net.driver.DriverHandler;
28 +import org.onosproject.net.driver.DriverService;
29 +import org.onosproject.net.flow.DefaultTrafficSelector;
30 +import org.onosproject.net.flow.DefaultTrafficTreatment;
31 +import org.onosproject.net.flow.TrafficSelector;
32 +import org.onosproject.net.flow.TrafficTreatment;
33 +import org.onosproject.net.flow.criteria.ExtensionSelector;
34 +import org.onosproject.net.flowobjective.DefaultForwardingObjective;
35 +import org.onosproject.net.flowobjective.FlowObjectiveService;
36 +import org.onosproject.net.flowobjective.ForwardingObjective;
37 +import org.onosproject.net.flowobjective.ForwardingObjective.Flag;
38 +import org.onosproject.net.flowobjective.Objective;
39 +import org.slf4j.Logger;
40 +
41 +import java.util.Iterator;
42 +
43 +import static com.google.common.base.Preconditions.checkNotNull;
44 +import static org.onosproject.net.flow.criteria.ExtensionSelectorType.ExtensionSelectorTypes.EXT_MATCH_FLOW_TYPE;
45 +import static org.slf4j.LoggerFactory.getLogger;
46 +
47 +/**
48 + * Provides Bgp flow forwarder implementation.
49 + */
50 +public class BgpFlowForwarderImpl implements BgpFlowForwarderService {
51 +
52 + protected DriverService driverService;
53 + protected DeviceService deviceService;
54 + protected FlowObjectiveService flowObjectiveService;
55 + private final Logger log = getLogger(getClass());
56 + protected ApplicationId appId;
57 +
58 + private static final String BGP_FLOW_CONTAINER_NOT_NULL = "Bgp flow container cannot be null";
59 + private static final String APP_ID_NOT_NULL = "Application-Id cannot be null";
60 + public static final String FLOW_PEER = "flowPeer";
61 +
62 + /**
63 + * Default constructor.
64 + */
65 + public BgpFlowForwarderImpl() {
66 + }
67 +
68 + /**
69 + * Explicit constructor.
70 + *
71 + * @param appId Application id
72 + * @param flowObjectiveService flow service
73 + * @param deviceService device service
74 + * @param driverService driver service
75 + */
76 + public BgpFlowForwarderImpl(ApplicationId appId, FlowObjectiveService flowObjectiveService,
77 + DeviceService deviceService, DriverService driverService) {
78 + this.appId = checkNotNull(appId, APP_ID_NOT_NULL);
79 + this.flowObjectiveService = flowObjectiveService;
80 + this.deviceService = deviceService;
81 + this.driverService = driverService;
82 + }
83 +
84 + @Override
85 + public boolean installForwardingRule(ExtFlowContainer container) {
86 + checkNotNull(container, BGP_FLOW_CONTAINER_NOT_NULL);
87 + return pushBgpFlowRuleForwarder(container, Objective.Operation.ADD);
88 + }
89 +
90 + @Override
91 + public boolean unInstallForwardingRule(ExtFlowContainer container) {
92 + checkNotNull(container, BGP_FLOW_CONTAINER_NOT_NULL);
93 + return pushBgpFlowRuleForwarder(container, Objective.Operation.REMOVE);
94 + }
95 +
96 + /**
97 + * Find the bgp device and push the rule.
98 + *
99 + * @param container is a flow rule container
100 + * @param type either add or remove the service rule
101 + * @return a true if success else false
102 + */
103 + public boolean pushBgpFlowRuleForwarder(ExtFlowContainer container,
104 + Objective.Operation type) {
105 + DeviceId deviceId = null;
106 +
107 + Iterable<Device> devices = deviceService.getAvailableDevices();
108 + Iterator<Device> itr = devices.iterator();
109 + while (itr.hasNext()) {
110 + DeviceId tmp = itr.next().id();
111 + if (tmp.toString().equals(container.deviceId())) {
112 + if (validatePeer(tmp)) {
113 + deviceId = tmp;
114 + break;
115 + }
116 + }
117 + }
118 +
119 + if (deviceId != null) {
120 + // pack traffic selector
121 + TrafficSelector.Builder selector = packTrafficSelector(deviceId, container);
122 +
123 + // pack traffic treatment
124 + TrafficTreatment.Builder treatment = packTrafficTreatment(container);
125 +
126 + sendBgpFlowRuleForwarder(selector, treatment, deviceId, type);
127 + } else {
128 + log.error("Bgp devices are not available..");
129 + return false;
130 + }
131 +
132 + return true;
133 + }
134 +
135 + /**
136 + * Validates the device id is a flow peer or not.
137 + *
138 + * @param deviceId device to which the flow needed to be pushed.
139 + * @return true if success else false
140 + */
141 + boolean validatePeer(DeviceId deviceId) {
142 + boolean ret = false;
143 + Device d = deviceService.getDevice(deviceId);
144 + Annotations a = d != null ? d.annotations() : null;
145 + String ipAddress = a.value(FLOW_PEER);
146 + if (ipAddress != null) {
147 + ret = true;
148 + }
149 + return ret;
150 + }
151 +
152 + /**
153 + * Traffic selector builder function.
154 + *
155 + * @param deviceId device id.
156 + * @param container container need to be pushed.
157 + * @return the traffic selector builder
158 + */
159 + public TrafficSelector.Builder packTrafficSelector(DeviceId deviceId, ExtFlowContainer container) {
160 + TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
161 +
162 + DriverHandler handler = driverService.createHandler(deviceId);
163 + ExtensionSelectorResolver resolver = handler.behaviour(ExtensionSelectorResolver.class);
164 + ExtensionSelector bgpExtSelector = resolver.getExtensionSelector(EXT_MATCH_FLOW_TYPE.type());
165 +
166 + try {
167 + bgpExtSelector.setPropertyValue("container", container);
168 + } catch (Exception e) {
169 + log.error("Failed to get extension instruction for bgp flow {}", deviceId);
170 + }
171 +
172 + selector.extension(bgpExtSelector, deviceId);
173 + return selector;
174 + }
175 +
176 + /**
177 + * Traffic treatment builder function.
178 + *
179 + * @param container container need to be pushed.
180 + * @return the traffic treatment builder
181 + */
182 + public TrafficTreatment.Builder packTrafficTreatment(ExtFlowContainer container) {
183 + TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
184 +
185 + return treatment;
186 + }
187 +
188 + /**
189 + * Send bgp flow forwarder to bgp provider.
190 + *
191 + * @param selector traffic selector
192 + * @param treatment traffic treatment
193 + * @param deviceId device id
194 + * @param type operation type
195 + */
196 + public void sendBgpFlowRuleForwarder(TrafficSelector.Builder selector, TrafficTreatment.Builder treatment,
197 + DeviceId deviceId, Objective.Operation type) {
198 + ForwardingObjective.Builder objective = DefaultForwardingObjective.builder().withTreatment(treatment.build())
199 + .withSelector(selector.build()).fromApp(appId).makePermanent().withFlag(Flag.VERSATILE);
200 + if (type.equals(Objective.Operation.ADD)) {
201 + log.debug("ADD");
202 + flowObjectiveService.forward(deviceId, objective.add());
203 + } else {
204 + log.debug("REMOVE");
205 + flowObjectiveService.forward(deviceId, objective.remove());
206 + }
207 + }
208 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +
17 +/**
18 + * Bgp service manager for interacting with bgp provider.
19 + */
20 +package org.onosproject.flow.forwarder.impl;
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +
17 +/**
18 + * Service forwarder for bgp flow.
19 + */
20 +package org.onosproject.flow.forwarder;
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flow.manager;
17 +
18 +import org.onosproject.flowapi.ExtFlowContainer;
19 +
20 +/**
21 + * Bgp flow service application.
22 + */
23 +public interface BgpFlowService {
24 +
25 + /**
26 + * Bgp flow rule create interface.
27 + *
28 + * @param container flow container class
29 + * @return true if success else false
30 + */
31 + boolean onBgpFlowCreated(ExtFlowContainer container);
32 +
33 + /**
34 + * Bgp flow rule delete interface.
35 + *
36 + * @param container flow container class
37 + * @return true if success else false
38 + */
39 + boolean onBgpFlowDeleted(ExtFlowContainer container);
40 +}
1 +/*
2 + * Copyright 2016 Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.flow.manager.impl;
17 +
18 +import org.apache.felix.scr.annotations.Activate;
19 +import org.apache.felix.scr.annotations.Component;
20 +import org.apache.felix.scr.annotations.Deactivate;
21 +import org.apache.felix.scr.annotations.Reference;
22 +import org.apache.felix.scr.annotations.ReferenceCardinality;
23 +import org.apache.felix.scr.annotations.Service;
24 +import org.onosproject.core.ApplicationId;
25 +import org.onosproject.core.CoreService;
26 +import org.onosproject.flow.forwarder.BgpFlowForwarderService;
27 +import org.onosproject.flow.forwarder.impl.BgpFlowForwarderImpl;
28 +import org.onosproject.flow.manager.BgpFlowService;
29 +import org.onosproject.flowapi.ExtFlowContainer;
30 +import org.onosproject.net.device.DeviceService;
31 +import org.onosproject.net.driver.DriverService;
32 +import org.onosproject.net.flowobjective.FlowObjectiveService;
33 +import org.slf4j.Logger;
34 +
35 +import static org.slf4j.LoggerFactory.getLogger;
36 +
37 +/**
38 + * Provides implementation of Bgp flow Service.
39 + */
40 +@Component(immediate = true)
41 +@Service
42 +public class BgpFlowManager implements BgpFlowService {
43 +
44 + private final Logger log = getLogger(getClass());
45 + private static final String APP_ID = "org.onosproject.app.bgpflow";
46 +
47 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
48 + protected CoreService coreService;
49 +
50 + protected ApplicationId appId;
51 + private BgpFlowForwarderService bgpFlowForwarderService;
52 +
53 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
54 + protected DriverService driverService;
55 +
56 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
57 + protected DeviceService deviceService;
58 +
59 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
60 + protected FlowObjectiveService flowObjectiveService;
61 +
62 + @Activate
63 + public void activate() {
64 + appId = coreService.registerApplication(APP_ID);
65 + bgpFlowForwarderService = new BgpFlowForwarderImpl(appId, flowObjectiveService, deviceService, driverService);
66 + log.info("Started");
67 + }
68 +
69 + @Deactivate
70 + public void deactivate() {
71 + log.info("Stopped");
72 + }
73 +
74 + @Override
75 + public boolean onBgpFlowCreated(ExtFlowContainer container) {
76 + return bgpFlowForwarderService.installForwardingRule(container);
77 + }
78 +
79 + @Override
80 + public boolean onBgpFlowDeleted(ExtFlowContainer container) {
81 + return bgpFlowForwarderService.unInstallForwardingRule(container);
82 + }
83 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +
17 +/**
18 + * Bgp service manager for interacting provider.
19 + */
20 +package org.onosproject.flow.manager.impl;
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +
17 +/**
18 + * Bgp flow manager.
19 + */
20 +package org.onosproject.flow.manager;
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016-present Open Networking Laboratory
4 + ~
5 + ~ Licensed under the Apache License, Version 2.0 (the "License");
6 + ~ you may not use this file except in compliance with the License.
7 + ~ You may obtain a copy of the License at
8 + ~
9 + ~ http://www.apache.org/licenses/LICENSE-2.0
10 + ~
11 + ~ Unless required by applicable law or agreed to in writing, software
12 + ~ distributed under the License is distributed on an "AS IS" BASIS,
13 + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 + ~ See the License for the specific language governing permissions and
15 + ~ limitations under the License.
16 + -->
17 +<project xmlns="http://maven.apache.org/POM/4.0.0"
18 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
19 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
20 + <modelVersion>4.0.0</modelVersion>
21 +
22 + <parent>
23 + <groupId>org.onosproject</groupId>
24 + <artifactId>onos-apps</artifactId>
25 + <version>1.6.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
27 + </parent>
28 +
29 + <artifactId>onos-app-bgpflow</artifactId>
30 + <packaging>pom</packaging>
31 +
32 + <description>ONOS bgp flow spec applications</description>
33 +
34 + <modules>
35 + <module>app</module>
36 + <module>flowapi</module>
37 + <module>flowmgr</module>
38 + <module>bgpweb</module>
39 + </modules>
40 + <dependencies>
41 + <dependency>
42 + <groupId>org.onosproject</groupId>
43 + <artifactId>onlab-junit</artifactId>
44 + <scope>test</scope>
45 + </dependency>
46 + <dependency>
47 + <groupId>com.google.guava</groupId>
48 + <artifactId>guava-testlib</artifactId>
49 + <scope>test</scope>
50 + </dependency>
51 + <dependency>
52 + <groupId>org.easymock</groupId>
53 + <artifactId>easymock</artifactId>
54 + <scope>test</scope>
55 + </dependency>
56 + <dependency>
57 + <groupId>org.onosproject</groupId>
58 + <artifactId>onlab-osgi</artifactId>
59 + <classifier>tests</classifier>
60 + <scope>test</scope>
61 + </dependency>
62 + <dependency>
63 + <groupId>org.onosproject</groupId>
64 + <artifactId>onos-api</artifactId>
65 + <scope>test</scope>
66 + <classifier>tests</classifier>
67 + </dependency>
68 + <dependency>
69 + <groupId>org.glassfish.jersey.containers</groupId>
70 + <artifactId>jersey-container-servlet</artifactId>
71 + </dependency>
72 + <dependency>
73 + <groupId>org.glassfish.jersey.test-framework</groupId>
74 + <artifactId>jersey-test-framework-core</artifactId>
75 + <scope>test</scope>
76 + </dependency>
77 + <dependency>
78 + <groupId>org.glassfish.jersey.test-framework.providers</groupId>
79 + <artifactId>jersey-test-framework-provider-jetty</artifactId>
80 + <scope>test</scope>
81 + </dependency>
82 + </dependencies>
83 +</project>
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
42 <module>reactive-routing</module> 42 <module>reactive-routing</module>
43 <module>virtualbng</module> 43 <module>virtualbng</module>
44 <module>bgprouter</module> 44 <module>bgprouter</module>
45 + <module>bgpflowspec</module>
45 <module>test</module> 46 <module>test</module>
46 <module>segmentrouting</module> 47 <module>segmentrouting</module>
47 <module>xos-integration</module> 48 <module>xos-integration</module>
......
...@@ -40,6 +40,7 @@ public class ExtensionSelectorType { ...@@ -40,6 +40,7 @@ public class ExtensionSelectorType {
40 NICIRA_MATCH_NSH_CH4(5), 40 NICIRA_MATCH_NSH_CH4(5),
41 NICIRA_MATCH_ENCAP_ETH_TYPE(6), 41 NICIRA_MATCH_ENCAP_ETH_TYPE(6),
42 OFDPA_MATCH_VLAN_VID(16), 42 OFDPA_MATCH_VLAN_VID(16),
43 + EXT_MATCH_FLOW_TYPE(20),
43 BMV2_MATCH_PARAMS(128); 44 BMV2_MATCH_PARAMS(128);
44 45
45 private ExtensionSelectorType type; 46 private ExtensionSelectorType type;
......
...@@ -4,6 +4,7 @@ COMPILE_DEPS = [ ...@@ -4,6 +4,7 @@ COMPILE_DEPS = [
4 '//drivers/utilities:onos-drivers-utilities', 4 '//drivers/utilities:onos-drivers-utilities',
5 '//protocols/openflow/api:onos-protocols-openflow-api', 5 '//protocols/openflow/api:onos-protocols-openflow-api',
6 '//core/store/serializers:onos-core-serializers', 6 '//core/store/serializers:onos-core-serializers',
7 + '//apps/bgpflowspec/flowapi:onos-apps-bgpflowspec-flowapi',
7 ] 8 ]
8 9
9 TEST_DEPS = [ 10 TEST_DEPS = [
...@@ -28,5 +29,6 @@ onos_app ( ...@@ -28,5 +29,6 @@ onos_app (
28 ':onos-drivers-default', 29 ':onos-drivers-default',
29 '//lib:openflowj', 30 '//lib:openflowj',
30 '//protocols/openflow/api:onos-protocols-openflow-api', 31 '//protocols/openflow/api:onos-protocols-openflow-api',
32 + '//apps/bgpflowspec/flowapi:onos-apps-bgpflowspec-flowapi',
31 ] 33 ]
32 ) 34 )
......
...@@ -44,6 +44,11 @@ ...@@ -44,6 +44,11 @@
44 </dependency> 44 </dependency>
45 <dependency> 45 <dependency>
46 <groupId>org.onosproject</groupId> 46 <groupId>org.onosproject</groupId>
47 + <artifactId>onos-app-bgp-flowapi</artifactId>
48 + <version>${project.version}</version>
49 + </dependency>
50 + <dependency>
51 + <groupId>org.onosproject</groupId>
47 <artifactId>openflowj</artifactId> 52 <artifactId>openflowj</artifactId>
48 </dependency> 53 </dependency>
49 </dependencies> 54 </dependencies>
......
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.driver.extensions;
17 +
18 +import org.onlab.util.KryoNamespace;
19 +import org.onosproject.flowapi.ExtFlowContainer;
20 +import org.onosproject.net.flow.AbstractExtension;
21 +import org.onosproject.net.flow.criteria.ExtensionSelector;
22 +import org.onosproject.net.flow.criteria.ExtensionSelectorType;
23 +import java.util.Objects;
24 +
25 +import static com.google.common.base.MoreObjects.toStringHelper;
26 +
27 +/**
28 + * Implementation of extension selector for multi value.
29 + */
30 +public final class ExtMatchExtension extends AbstractExtension implements ExtensionSelector {
31 + private ExtFlowContainer container;
32 +
33 + private final KryoNamespace appKryo = new KryoNamespace.Builder().register(ExtMatchExtension.class).build();
34 +
35 + /**
36 + * Creates an object of ExtMatchExtension.
37 + */
38 + public ExtMatchExtension() {
39 + this.container = null;
40 + }
41 +
42 + /**
43 + * Returns the container.
44 + *
45 + * @return the container to match
46 + */
47 + public ExtFlowContainer container() {
48 + return container;
49 + }
50 +
51 + @Override
52 + public ExtensionSelectorType type() {
53 + return ExtensionSelectorType.ExtensionSelectorTypes.EXT_MATCH_FLOW_TYPE.type();
54 + }
55 +
56 + @Override
57 + public byte[] serialize() {
58 + return appKryo.serialize(container);
59 + }
60 +
61 + @Override
62 + public void deserialize(byte[] data) {
63 + container = ExtFlowContainer.of(appKryo.deserialize(data));
64 + }
65 +
66 + @Override
67 + public String toString() {
68 + return toStringHelper(type().toString())
69 + .add("container", container)
70 + .toString();
71 + }
72 +
73 + @Override
74 + public int hashCode() {
75 + return Objects.hash(type(), container);
76 + }
77 +
78 + @Override
79 + public boolean equals(Object obj) {
80 + if (this == obj) {
81 + return true;
82 + }
83 + if (obj instanceof ExtMatchExtension) {
84 + ExtMatchExtension that = (ExtMatchExtension) obj;
85 + return Objects.equals(container, that.container) &&
86 + Objects.equals(this.type(), that.type());
87 + }
88 + return false;
89 + }
90 +}
1 +/*
2 + * Copyright 2016-present Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.driver.extensions;
17 +
18 +import org.onosproject.net.behaviour.ExtensionSelectorResolver;
19 +import org.onosproject.net.driver.AbstractHandlerBehaviour;
20 +import org.onosproject.net.flow.criteria.ExtensionSelector;
21 +import org.onosproject.net.flow.criteria.ExtensionSelectorType;
22 +
23 +/**
24 + * Interpreter for bgp selector extensions.
25 + */
26 +public class MultiExtensionSelectorInterpreter
27 + extends AbstractHandlerBehaviour
28 + implements ExtensionSelectorResolver {
29 +
30 + @Override
31 + public ExtensionSelector getExtensionSelector(ExtensionSelectorType type) {
32 + if (type.equals(ExtensionSelectorType.ExtensionSelectorTypes.EXT_MATCH_FLOW_TYPE.type())) {
33 + return new ExtMatchExtension();
34 + }
35 + return null;
36 + }
37 +}
...@@ -141,6 +141,11 @@ ...@@ -141,6 +141,11 @@
141 <behaviour api="org.onosproject.net.behaviour.Pipeliner" 141 <behaviour api="org.onosproject.net.behaviour.Pipeliner"
142 impl="org.onosproject.driver.pipeline.OpenVSwitchPipeline"/> 142 impl="org.onosproject.driver.pipeline.OpenVSwitchPipeline"/>
143 </driver> 143 </driver>
144 + <driver name="l3Device" extends="default"
145 + manufacturer="" hwVersion="" swVersion="">
146 + <behaviour api="org.onosproject.net.behaviour.ExtensionSelectorResolver"
147 + impl="org.onosproject.driver.extensions.MultiExtensionSelectorInterpreter" />
148 + </driver>
144 <driver name="aos" extends="ofdpa" 149 <driver name="aos" extends="ofdpa"
145 manufacturer="Accton" hwVersion=".*" swVersion="1.*"> 150 manufacturer="Accton" hwVersion=".*" swVersion="1.*">
146 </driver> 151 </driver>
......
...@@ -231,6 +231,7 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi ...@@ -231,6 +231,7 @@ public class BgpTopologyProvider extends AbstractProvider implements DeviceProvi
231 231
232 DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder(); 232 DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
233 233
234 + newBuilder.set(AnnotationKeys.DRIVER, "l3Device");
234 newBuilder.set(AnnotationKeys.TYPE, "L3"); 235 newBuilder.set(AnnotationKeys.TYPE, "L3");
235 newBuilder.set(ROUTING_UNIVERSE, Long.toString(nodeNlri.getIdentifier())); 236 newBuilder.set(ROUTING_UNIVERSE, Long.toString(nodeNlri.getIdentifier()));
236 237
......
...@@ -35,5 +35,15 @@ ...@@ -35,5 +35,15 @@
35 <groupId>org.osgi</groupId> 35 <groupId>org.osgi</groupId>
36 <artifactId>org.osgi.compendium</artifactId> 36 <artifactId>org.osgi.compendium</artifactId>
37 </dependency> 37 </dependency>
38 + <dependency>
39 + <groupId>org.onosproject</groupId>
40 + <artifactId>onos-app-bgp-flowapi</artifactId>
41 + <version>${project.version}</version>
42 + </dependency>
43 + <dependency>
44 + <groupId>org.onosproject</groupId>
45 + <artifactId>onos-bgp-ctl</artifactId>
46 + <version>1.6.0-SNAPSHOT</version>
47 + </dependency>
38 </dependencies> 48 </dependencies>
39 </project> 49 </project>
......
...@@ -18,8 +18,11 @@ package org.onosproject.provider.bgpcep.flow.impl; ...@@ -18,8 +18,11 @@ package org.onosproject.provider.bgpcep.flow.impl;
18 import java.util.ArrayList; 18 import java.util.ArrayList;
19 import java.util.Collection; 19 import java.util.Collection;
20 import java.util.Collections; 20 import java.util.Collections;
21 +import java.util.Iterator;
21 import java.util.LinkedList; 22 import java.util.LinkedList;
22 import java.util.List; 23 import java.util.List;
24 +import java.util.ListIterator;
25 +import java.util.Set;
23 26
24 import org.apache.felix.scr.annotations.Activate; 27 import org.apache.felix.scr.annotations.Activate;
25 import org.apache.felix.scr.annotations.Component; 28 import org.apache.felix.scr.annotations.Component;
...@@ -31,13 +34,63 @@ import org.onlab.packet.IpAddress; ...@@ -31,13 +34,63 @@ import org.onlab.packet.IpAddress;
31 import org.onlab.packet.IpPrefix; 34 import org.onlab.packet.IpPrefix;
32 import org.onlab.packet.MplsLabel; 35 import org.onlab.packet.MplsLabel;
33 import org.onosproject.bgp.controller.BgpController; 36 import org.onosproject.bgp.controller.BgpController;
37 +import org.onosproject.bgp.controller.BgpId;
38 +import org.onosproject.bgp.controller.BgpPeer;
39 +import org.onosproject.bgpio.protocol.flowspec.BgpFlowSpecNlri;
40 +import org.onosproject.bgpio.protocol.flowspec.BgpFlowSpecRouteKey;
41 +import org.onosproject.bgpio.types.BgpFsActionReDirect;
42 +import org.onosproject.bgpio.types.BgpFsActionTrafficAction;
43 +import org.onosproject.bgpio.types.BgpFsActionTrafficMarking;
44 +import org.onosproject.bgpio.types.BgpFsActionTrafficRate;
45 +import org.onosproject.bgpio.types.BgpFsDestinationPortNum;
46 +import org.onosproject.bgpio.types.BgpFsDestinationPrefix;
47 +import org.onosproject.bgpio.types.BgpFsDscpValue;
48 +import org.onosproject.bgpio.types.BgpFsFragment;
49 +import org.onosproject.bgpio.types.BgpFsIcmpCode;
50 +import org.onosproject.bgpio.types.BgpFsIcmpType;
51 +import org.onosproject.bgpio.types.BgpFsIpProtocol;
52 +import org.onosproject.bgpio.types.BgpFsOperatorValue;
53 +import org.onosproject.bgpio.types.BgpFsPacketLength;
54 +import org.onosproject.bgpio.types.BgpFsPortNum;
55 +import org.onosproject.bgpio.types.BgpFsSourcePortNum;
56 +import org.onosproject.bgpio.types.BgpFsSourcePrefix;
57 +import org.onosproject.bgpio.types.BgpFsTcpFlags;
58 +import org.onosproject.bgpio.types.BgpValueType;
59 +import org.onosproject.bgpio.types.WideCommunityAttrHeader;
60 +import org.onosproject.bgpio.types.WideCommunityExcludeTarget;
61 +import org.onosproject.bgpio.types.WideCommunityInteger;
62 +import org.onosproject.bgpio.types.WideCommunityIpV4Neighbour;
63 +import org.onosproject.bgpio.types.WideCommunityParameter;
64 +import org.onosproject.bgpio.types.WideCommunityTarget;
65 +import org.onosproject.bgpio.types.attr.WideCommunity;
34 import org.onosproject.core.ApplicationId; 66 import org.onosproject.core.ApplicationId;
67 +import org.onosproject.flowapi.ExtDscpValue;
68 +import org.onosproject.flowapi.ExtFlowContainer;
69 +import org.onosproject.flowapi.ExtFlowTypes;
70 +import org.onosproject.flowapi.ExtFragment;
71 +import org.onosproject.flowapi.ExtIcmpCode;
72 +import org.onosproject.flowapi.ExtIcmpType;
73 +import org.onosproject.flowapi.ExtIpProtocol;
74 +import org.onosproject.flowapi.ExtKeyName;
75 +import org.onosproject.flowapi.ExtOperatorValue;
76 +import org.onosproject.flowapi.ExtPacketLength;
77 +import org.onosproject.flowapi.ExtPort;
78 +import org.onosproject.flowapi.ExtPrefix;
79 +import org.onosproject.flowapi.ExtTarget;
80 +import org.onosproject.flowapi.ExtTcpFlag;
81 +import org.onosproject.flowapi.ExtTrafficAction;
82 +import org.onosproject.flowapi.ExtTrafficMarking;
83 +import org.onosproject.flowapi.ExtTrafficRate;
84 +import org.onosproject.flowapi.ExtTrafficRedirect;
85 +import org.onosproject.flowapi.ExtWideCommunityInt;
35 import org.onosproject.incubator.net.resource.label.LabelResourceId; 86 import org.onosproject.incubator.net.resource.label.LabelResourceId;
36 import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint; 87 import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
37 import org.onosproject.incubator.net.tunnel.Tunnel; 88 import org.onosproject.incubator.net.tunnel.Tunnel;
38 import org.onosproject.incubator.net.tunnel.TunnelId; 89 import org.onosproject.incubator.net.tunnel.TunnelId;
39 import org.onosproject.incubator.net.tunnel.TunnelService; 90 import org.onosproject.incubator.net.tunnel.TunnelService;
40 import org.onosproject.net.ConnectPoint; 91 import org.onosproject.net.ConnectPoint;
92 +
93 +import org.onosproject.net.Annotations;
41 import org.onosproject.net.Device; 94 import org.onosproject.net.Device;
42 import org.onosproject.net.DeviceId; 95 import org.onosproject.net.DeviceId;
43 import org.onosproject.net.Link; 96 import org.onosproject.net.Link;
...@@ -56,12 +109,15 @@ import org.onosproject.net.flow.FlowRuleProviderService; ...@@ -56,12 +109,15 @@ import org.onosproject.net.flow.FlowRuleProviderService;
56 import org.onosproject.net.flow.TrafficSelector; 109 import org.onosproject.net.flow.TrafficSelector;
57 import org.onosproject.net.flow.FlowEntry.FlowEntryState; 110 import org.onosproject.net.flow.FlowEntry.FlowEntryState;
58 import org.onosproject.net.flow.criteria.Criterion; 111 import org.onosproject.net.flow.criteria.Criterion;
112 +import org.onosproject.net.flow.criteria.ExtensionCriterion;
113 +import org.onosproject.net.flow.criteria.ExtensionSelector;
59 import org.onosproject.net.flow.criteria.IPCriterion; 114 import org.onosproject.net.flow.criteria.IPCriterion;
60 import org.onosproject.net.flow.criteria.MetadataCriterion; 115 import org.onosproject.net.flow.criteria.MetadataCriterion;
61 import org.onosproject.net.flow.criteria.MplsBosCriterion; 116 import org.onosproject.net.flow.criteria.MplsBosCriterion;
62 import org.onosproject.net.flow.criteria.MplsCriterion; 117 import org.onosproject.net.flow.criteria.MplsCriterion;
63 import org.onosproject.net.flow.criteria.PortCriterion; 118 import org.onosproject.net.flow.criteria.PortCriterion;
64 import org.onosproject.net.flow.criteria.TunnelIdCriterion; 119 import org.onosproject.net.flow.criteria.TunnelIdCriterion;
120 +import org.onosproject.net.flow.instructions.ExtensionPropertyException;
65 import org.onosproject.net.provider.AbstractProvider; 121 import org.onosproject.net.provider.AbstractProvider;
66 import org.onosproject.net.provider.ProviderId; 122 import org.onosproject.net.provider.ProviderId;
67 import org.onosproject.net.resource.ResourceService; 123 import org.onosproject.net.resource.ResourceService;
...@@ -125,6 +181,7 @@ public class BgpcepFlowRuleProvider extends AbstractProvider ...@@ -125,6 +181,7 @@ public class BgpcepFlowRuleProvider extends AbstractProvider
125 protected DeviceService deviceService; 181 protected DeviceService deviceService;
126 182
127 private FlowRuleProviderService providerService; 183 private FlowRuleProviderService providerService;
184 + public static final String FLOW_PEER = "flowPeer";
128 private PcepLabelObject labelObj; 185 private PcepLabelObject labelObj;
129 public static final int OUT_LABEL_TYPE = 0; 186 public static final int OUT_LABEL_TYPE = 0;
130 public static final int IN_LABEL_TYPE = 1; 187 public static final int IN_LABEL_TYPE = 1;
...@@ -572,14 +629,19 @@ public class BgpcepFlowRuleProvider extends AbstractProvider ...@@ -572,14 +629,19 @@ public class BgpcepFlowRuleProvider extends AbstractProvider
572 case ADD: 629 case ADD:
573 if (criteria == null) { 630 if (criteria == null) {
574 processRule(fbe.target(), PcepFlowType.ADD); 631 processRule(fbe.target(), PcepFlowType.ADD);
575 - flowEntries.add(new DefaultFlowEntry(fbe.target(), FlowEntryState.ADDED, 0, 0, 0)); 632 + } else {
633 + handleMessage(fbe, BgpPeer.FlowSpecOperation.ADD, batch.deviceId());
576 } 634 }
635 + flowEntries.add(new DefaultFlowEntry(fbe.target(), FlowEntryState.ADDED, 0, 0, 0));
577 break; 636 break;
578 case REMOVE: 637 case REMOVE:
579 if (criteria == null) { 638 if (criteria == null) {
580 processRule(fbe.target(), PcepFlowType.REMOVE); 639 processRule(fbe.target(), PcepFlowType.REMOVE);
581 - flowEntries.add(new DefaultFlowEntry(fbe.target(), FlowEntryState.REMOVED, 0, 0, 0)); 640 + } else {
641 + handleMessage(fbe, BgpPeer.FlowSpecOperation.DELETE, batch.deviceId());
582 } 642 }
643 +
644 + flowEntries.add(new DefaultFlowEntry(fbe.target(), FlowEntryState.REMOVED, 0, 0, 0));
583 break; 645 break;
584 default: 646 default:
585 log.error("Unknown flow operation: {}", fbe); 647 log.error("Unknown flow operation: {}", fbe);
...@@ -590,4 +652,330 @@ public class BgpcepFlowRuleProvider extends AbstractProvider ...@@ -590,4 +652,330 @@ public class BgpcepFlowRuleProvider extends AbstractProvider
590 providerService.batchOperationCompleted(batch.id(), status); 652 providerService.batchOperationCompleted(batch.id(), status);
591 providerService.pushFlowMetrics(batch.deviceId(), flowEntries); 653 providerService.pushFlowMetrics(batch.deviceId(), flowEntries);
592 } 654 }
655 +
656 + public void handleMessage(FlowRuleBatchEntry fbe, BgpPeer.FlowSpecOperation operType, DeviceId deviceId) {
657 + Set<Criterion> set = fbe.target().selector().criteria();
658 + Iterator iterator = set.iterator();
659 + Criterion cr;
660 +
661 + while (iterator.hasNext()) {
662 + cr = (Criterion) iterator.next();
663 +
664 + switch (cr.type()) {
665 + case EXTENSION:
666 + ExtensionCriterion extensionCriterion = (ExtensionCriterion) cr;
667 + ExtensionSelector extension = extensionCriterion.extensionSelector();
668 +
669 + ExtFlowContainer container = null;
670 + List<ExtFlowTypes> bgpFlows = null;
671 +
672 + try {
673 + container = extension.getPropertyValue("container");
674 + } catch (ExtensionPropertyException e) {
675 + e.printStackTrace();
676 + }
677 +
678 + bgpFlows = container.container();
679 + iterateAndSend(bgpFlows, operType, deviceId);
680 + break;
681 + default:
682 + log.error("This flow type is not supported: {}", cr.type());
683 + }
684 + }
685 + }
686 +
687 + void iterateAndSend(List<ExtFlowTypes> bgpFlows, BgpPeer.FlowSpecOperation operType, DeviceId deviceId) {
688 + ListIterator<ExtFlowTypes> iterator = bgpFlows.listIterator();
689 + ExtFlowTypes flow;
690 + ExtKeyName name = null;
691 + ExtPrefix ipcSource = null;
692 + ExtPrefix ipcDestination = null;
693 + IpPrefix prefix = null;
694 + ListIterator<IpPrefix> pfxItr = null;
695 + ExtTrafficRate flowRate = null;
696 + ExtTrafficAction flowAction = null;
697 + ExtTrafficMarking flowMarking = null;
698 + List<BgpValueType> flowSpecComponents = new ArrayList<>();
699 + List<BgpFsOperatorValue> operatorValue;
700 + BgpFlowSpecNlri flowSpec = new BgpFlowSpecNlri(flowSpecComponents);
701 + BgpFsActionTrafficRate rate = null;
702 + BgpFsActionTrafficAction action = null;
703 + BgpFsActionReDirect redirection = null;
704 + BgpFsActionTrafficMarking marking = null;
705 + List<BgpValueType> flowSpecAction = new LinkedList<>();
706 +
707 + ExtWideCommunityInt wcIntList = null;
708 + ListIterator<Integer> wcItr = null;
709 + WideCommunity wideCommunity = null;
710 +
711 + int flags = 0;
712 + int hopCount = 0;
713 + int community = 0;
714 + int contextAs = 0;
715 + int localAs = 0;
716 + WideCommunityInteger wCommInt;
717 + WideCommunityParameter wCommParam = null;
718 + List<BgpValueType> wcParam = new ArrayList<>();
719 + WideCommunityTarget wcTarget = null;
720 + WideCommunityExcludeTarget wcExcludeTarget = null;
721 + WideCommunityAttrHeader wideCommunityHeader = null;
722 +
723 + while (iterator.hasNext()) {
724 + flow = iterator.next();
725 + switch (flow.type()) {
726 + case EXT_FLOW_RULE_KEY:
727 + name = (ExtKeyName) flow;
728 + break;
729 + case IPV4_DST_PFX:
730 + ipcDestination = (ExtPrefix) flow;
731 + pfxItr = ipcDestination.prefix().listIterator();
732 + prefix = pfxItr.next();
733 + flowSpecComponents.add(new BgpFsDestinationPrefix((byte) prefix.prefixLength(),
734 + prefix));
735 + break;
736 + case IPV4_SRC_PFX:
737 + ipcSource = (ExtPrefix) flow;
738 + pfxItr = ipcSource.prefix().listIterator();
739 + prefix = pfxItr.next();
740 + flowSpecComponents.add(new BgpFsSourcePrefix((byte) prefix.prefixLength(),
741 + prefix));
742 + break;
743 + case IP_PROTO_LIST:
744 + operatorValue = convert(((ExtIpProtocol) flow).ipProtocol());
745 + flowSpecComponents.add(new BgpFsIpProtocol(operatorValue));
746 + break;
747 + case IN_PORT_LIST:
748 + operatorValue = convert(((ExtPort) flow).port());
749 + flowSpecComponents.add(new BgpFsPortNum(operatorValue));
750 + break;
751 + case DST_PORT_LIST:
752 + operatorValue = convert(((ExtPort) flow).port());
753 + flowSpecComponents.add(new BgpFsDestinationPortNum(operatorValue));
754 + break;
755 + case SRC_PORT_LIST:
756 + operatorValue = convert(((ExtPort) flow).port());
757 + flowSpecComponents.add(new BgpFsSourcePortNum(operatorValue));
758 + break;
759 + case ICMP_TYPE_LIST:
760 + operatorValue = convert(((ExtIcmpType) flow).icmpType());
761 + flowSpecComponents.add(new BgpFsIcmpType(operatorValue));
762 + break;
763 + case ICMP_CODE_LIST:
764 + operatorValue = convert(((ExtIcmpCode) flow).icmpCode());
765 + flowSpecComponents.add(new BgpFsIcmpCode(operatorValue));
766 + break;
767 + case TCP_FLAG_LIST:
768 + operatorValue = convert(((ExtTcpFlag) flow).tcpFlag());
769 + flowSpecComponents.add(new BgpFsTcpFlags(operatorValue));
770 + break;
771 + case PACKET_LENGTH_LIST:
772 + operatorValue = convert(((ExtPacketLength) flow).packetLength());
773 + flowSpecComponents.add(new BgpFsPacketLength(operatorValue));
774 + break;
775 + case DSCP_VALUE_LIST:
776 + operatorValue = convert(((ExtDscpValue) flow).dscpValue());
777 + flowSpecComponents.add(new BgpFsDscpValue(operatorValue));
778 + break;
779 + case FRAGMENT_LIST:
780 + operatorValue = convert(((ExtFragment) flow).fragment());
781 + flowSpecComponents.add(new BgpFsFragment(operatorValue));
782 + break;
783 + case TRAFFIC_RATE:
784 + flowRate = (ExtTrafficRate) flow;
785 + rate = new BgpFsActionTrafficRate(flowRate.asn(), flowRate.rate().floatValue());
786 + flowSpecAction.add(rate);
787 + flowSpec.setFsActionTlv(flowSpecAction);
788 + break;
789 + case TRAFFIC_ACTION:
790 + flowAction = (ExtTrafficAction) flow;
791 + byte[] byteAction = processTrafficAction((ExtTrafficAction) flow);
792 + action = new BgpFsActionTrafficAction(byteAction);
793 + flowSpecAction.add(action);
794 + flowSpec.setFsActionTlv(flowSpecAction);
795 + break;
796 + case TRAFFIC_REDIRECT:
797 + byte[] byteRedirect = processTrafficRedirect((ExtTrafficRedirect) flow);
798 + redirection = new BgpFsActionReDirect(byteRedirect);
799 + flowSpecAction.add(redirection);
800 + flowSpec.setFsActionTlv(flowSpecAction);
801 + break;
802 + case TRAFFIC_MARKING:
803 + byte[] byteMarking = new byte[6];
804 + flowMarking = (ExtTrafficMarking) flow;
805 + byteMarking[5] = flowMarking.marking();
806 + marking = new BgpFsActionTrafficMarking(byteMarking);
807 + flowSpecAction.add(marking);
808 + flowSpec.setFsActionTlv(flowSpecAction);
809 + break;
810 + case WIDE_COMM_FLAGS:
811 + wcIntList = (ExtWideCommunityInt) flow;
812 + wcItr = wcIntList.communityInt().listIterator();
813 + flags = wcItr.next().intValue();
814 + break;
815 + case WIDE_COMM_HOP_COUNT:
816 + wcIntList = (ExtWideCommunityInt) flow;
817 + wcItr = wcIntList.communityInt().listIterator();
818 + hopCount = wcItr.next().intValue();
819 + break;
820 + case WIDE_COMM_COMMUNITY:
821 + wcIntList = (ExtWideCommunityInt) flow;
822 + wcItr = wcIntList.communityInt().listIterator();
823 + community = wcItr.next().intValue();
824 + break;
825 + case WIDE_COMM_CONTEXT_AS:
826 + wcIntList = (ExtWideCommunityInt) flow;
827 + wcItr = wcIntList.communityInt().listIterator();
828 + contextAs = wcItr.next().intValue();
829 + break;
830 + case WIDE_COMM_LOCAL_AS:
831 + wcIntList = (ExtWideCommunityInt) flow;
832 + wcItr = wcIntList.communityInt().listIterator();
833 + localAs = wcItr.next().intValue();
834 + break;
835 + case WIDE_COMM_TARGET:
836 + wcTarget = processWideCommTarget((ExtTarget) flow);
837 + break;
838 + case WIDE_COMM_EXT_TARGET:
839 + wcExcludeTarget = processWideCommExcTarget((ExtTarget) flow);
840 + break;
841 + case WIDE_COMM_PARAMETER:
842 + wcIntList = (ExtWideCommunityInt) flow;
843 + wCommInt = new WideCommunityInteger(wcIntList.communityInt());
844 + wcParam.add(wCommInt);
845 + wCommParam = new WideCommunityParameter(wcParam);
846 + break;
847 + default:
848 + log.error("error: this type is not supported");
849 + break;
850 + }
851 + }
852 +
853 + if ((flowAction != null) && flowAction.rpd()) {
854 + wideCommunityHeader = new WideCommunityAttrHeader((byte) flags, (byte) hopCount, (short) 0);
855 + wideCommunity = new WideCommunity(wideCommunityHeader, community, localAs, contextAs,
856 + wcTarget, wcExcludeTarget, wCommParam);
857 + }
858 +
859 + if (name == null) {
860 + log.error("BGP Flow key is required");
861 + return;
862 + }
863 +
864 + BgpPeer peer = getPeer(deviceId);
865 + if (peer != null) {
866 + peer.updateFlowSpec(operType, new BgpFlowSpecRouteKey(name.keyName()), flowSpec, wideCommunity);
867 + }
868 + }
869 +
870 + byte[] processTrafficAction(ExtTrafficAction flow) {
871 + ExtTrafficAction flowAction = null;
872 + byte[] byteAction = new byte[6];
873 + byte actionByte = 0;
874 + flowAction = (ExtTrafficAction) flow;
875 + if (flowAction.terminal()) {
876 + actionByte = (byte) (actionByte | (byte) 0x01);
877 + }
878 + if (flowAction.sample()) {
879 + actionByte = (byte) (actionByte | (byte) 0x02);
880 + }
881 + if (flowAction.rpd()) {
882 + actionByte = (byte) (actionByte | (byte) 0x04);
883 + }
884 + byteAction[5] = actionByte;
885 + return byteAction;
886 + }
887 +
888 + byte[] processTrafficRedirect(ExtTrafficRedirect flow) {
889 + ExtTrafficRedirect flowRedirect = null;
890 + byte[] byteRedirect = new byte[6];
891 + byte[] tmp;
892 + int val;
893 + flowRedirect = (ExtTrafficRedirect) flow;
894 + val = Integer.decode(flowRedirect.redirect()).intValue();
895 + tmp = intToByteStream(val);
896 + for (int i = 0; i < tmp.length; i++) {
897 + byteRedirect[i] = tmp [i];
898 + }
899 + return byteRedirect;
900 + }
901 +
902 + WideCommunityTarget processWideCommTarget(ExtTarget flow) {
903 + ExtPrefix localSpeaker;
904 + ExtPrefix remoteSpeaker;
905 + ListIterator<IpPrefix> pfxItr = null;
906 + ListIterator<IpPrefix> pfxItr1 = null;
907 + List<BgpValueType> wcIpv4 = null;
908 + ExtTarget target = flow;
909 + WideCommunityIpV4Neighbour wcIpV4Neighbour = null;
910 + WideCommunityTarget wcTarget = null;
911 + localSpeaker = target.localSpeaker();
912 + remoteSpeaker = target.remoteSpeaker();
913 + wcIpV4Neighbour = new WideCommunityIpV4Neighbour();
914 +
915 + pfxItr = localSpeaker.prefix().listIterator();
916 + pfxItr1 = remoteSpeaker.prefix().listIterator();
917 + while (pfxItr.hasNext()) {
918 + wcIpV4Neighbour.add(pfxItr.next().address(), pfxItr1.next().address());
919 + }
920 +
921 + wcIpv4 = new ArrayList<>();
922 + wcIpv4.add(wcIpV4Neighbour);
923 + wcTarget = new WideCommunityTarget(wcIpv4);
924 + return wcTarget;
925 + }
926 +
927 + WideCommunityExcludeTarget processWideCommExcTarget(ExtTarget flow) {
928 + ExtPrefix localSpeaker;
929 + ExtPrefix remoteSpeaker;
930 + ListIterator<IpPrefix> pfxItr = null;
931 + ListIterator<IpPrefix> pfxItr1 = null;
932 + List<BgpValueType> wcIpv4 = null;
933 + ExtTarget target = flow;
934 + localSpeaker = target.localSpeaker();
935 + remoteSpeaker = target.remoteSpeaker();
936 + WideCommunityIpV4Neighbour wcIpV4Neighbour = null;
937 + wcIpV4Neighbour = new WideCommunityIpV4Neighbour();
938 + WideCommunityExcludeTarget wcExcludeTarget = null;
939 +
940 + pfxItr = localSpeaker.prefix().listIterator();
941 + pfxItr1 = remoteSpeaker.prefix().listIterator();
942 + while (pfxItr.hasNext()) {
943 + wcIpV4Neighbour.add(pfxItr.next().address(), pfxItr1.next().address());
944 + }
945 +
946 + wcIpv4 = new ArrayList<>();
947 + wcIpv4.add(wcIpV4Neighbour);
948 + wcExcludeTarget = new WideCommunityExcludeTarget(wcIpv4);
949 + return wcExcludeTarget;
950 + }
951 +
952 + BgpPeer getPeer(DeviceId deviceId) {
953 + Device d = deviceService.getDevice(deviceId);
954 + Annotations a = d != null ? d.annotations() : null;
955 + String ipAddress = a.value(FLOW_PEER);
956 + BgpId bgpId = BgpId.bgpId(IpAddress.valueOf(ipAddress));
957 + BgpPeer peer = bgpController.getPeer(bgpId);
958 + return peer;
959 + }
960 +
961 + byte[] intToByteStream(int val) {
962 + return new byte[] {
963 + (byte) (val >>> 24),
964 + (byte) (val >>> 16),
965 + (byte) (val >>> 8),
966 + (byte) val};
967 + }
968 +
969 + List<BgpFsOperatorValue> convert(List<ExtOperatorValue> opVal) {
970 + List<BgpFsOperatorValue> list = new ArrayList();
971 + BgpFsOperatorValue operatorValue;
972 + Iterator iterator = opVal.iterator();
973 + while (iterator.hasNext()) {
974 + ExtOperatorValue element = (ExtOperatorValue) iterator.next();
975 + operatorValue = new BgpFsOperatorValue(element.option(), element.value());
976 + list.add(operatorValue);
977 + }
978 +
979 + return list;
980 + }
593 } 981 }
......
...@@ -32,14 +32,23 @@ ...@@ -32,14 +32,23 @@
32 </modules> 32 </modules>
33 33
34 <dependencies> 34 <dependencies>
35 + <dependency>
36 + <groupId>org.onosproject</groupId>
37 + <artifactId>onos-app-bgp-flowapi</artifactId>
38 + <version>${project.version}</version>
39 + </dependency>
35 <dependency> 40 <dependency>
36 <groupId>org.onosproject</groupId> 41 <groupId>org.onosproject</groupId>
37 - <artifactId>onos-pcep-controller-api</artifactId> 42 + <artifactId>onos-bgp-api</artifactId>
38 <version>${project.version}</version> 43 <version>${project.version}</version>
39 </dependency> 44 </dependency>
45 + <dependency>
46 + <groupId>org.onosproject</groupId>
47 + <artifactId>onos-bgpio</artifactId>
48 + </dependency>
40 <dependency> 49 <dependency>
41 <groupId>org.onosproject</groupId> 50 <groupId>org.onosproject</groupId>
42 - <artifactId>onos-bgp-api</artifactId> 51 + <artifactId>onos-pcep-controller-api</artifactId>
43 <version>${project.version}</version> 52 <version>${project.version}</version>
44 </dependency> 53 </dependency>
45 <dependency> 54 <dependency>
...@@ -51,6 +60,22 @@ ...@@ -51,6 +60,22 @@
51 <groupId>org.onosproject</groupId> 60 <groupId>org.onosproject</groupId>
52 <artifactId>onos-pcepio</artifactId> 61 <artifactId>onos-pcepio</artifactId>
53 <version>${project.version}</version> 62 <version>${project.version}</version>
63 + </dependency>
64 + <dependency>
65 + <groupId>org.onosproject</groupId>
66 + <artifactId>onos-api</artifactId>
67 + <classifier>tests</classifier>
68 + <scope>test</scope>
69 + </dependency>
70 +
71 + <dependency>
72 + <groupId>io.netty</groupId>
73 + <artifactId>netty</artifactId>
74 + </dependency>
75 +
76 + <dependency>
77 + <groupId>org.onosproject</groupId>
78 + <artifactId>onlab-junit</artifactId>
54 </dependency> 79 </dependency>
55 </dependencies> 80 </dependencies>
56 81
......
...@@ -70,6 +70,11 @@ ...@@ -70,6 +70,11 @@
70 </dependency> 70 </dependency>
71 71
72 <dependency> 72 <dependency>
73 + <groupId>org.onosproject</groupId>
74 + <artifactId>onos-app-bgp-flowapi</artifactId>
75 + <version>${project.version}</version>
76 + </dependency>
77 + <dependency>
73 <groupId>org.apache.felix</groupId> 78 <groupId>org.apache.felix</groupId>
74 <artifactId>org.apache.felix.scr.annotations</artifactId> 79 <artifactId>org.apache.felix.scr.annotations</artifactId>
75 </dependency> 80 </dependency>
......