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
apps/bgpflowspec/BUCK
0 → 100755
| 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 | +) |
apps/bgpflowspec/app/app.xml
0 → 100755
| 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> |
apps/bgpflowspec/app/features.xml
0 → 100755
| 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> |
apps/bgpflowspec/app/pom.xml
0 → 100755
| 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> |
apps/bgpflowspec/bgpweb/BUCK
0 → 100755
| 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 | +) |
apps/bgpflowspec/bgpweb/pom.xml
0 → 100755
| 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> |
apps/bgpflowspec/bgpweb/src/main/java/org/onosproject/bgpweb/resources/BgpFlowWebResource.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/bgpweb/src/main/java/org/onosproject/bgpweb/resources/BgpWebApplication.java
0 → 100755
| 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; |
apps/bgpflowspec/bgpweb/src/main/java/org/onosproject/bgpweb/web/BgpCodecRegistrator.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/bgpweb/src/main/java/org/onosproject/bgpweb/web/BgpFlowExtensionCodec.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/bgpweb/src/main/java/org/onosproject/bgpweb/web/DecodeBgpFlowExtnCodecHelper.java
0 → 100755
| 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> |
apps/bgpflowspec/flowapi/BUCK
0 → 100755
| 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 | +) |
apps/bgpflowspec/flowapi/pom.xml
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowapi/src/main/java/org/onosproject/flowapi/DefaultExtPacketLength.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowapi/src/main/java/org/onosproject/flowapi/DefaultExtTrafficAction.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowapi/src/main/java/org/onosproject/flowapi/DefaultExtTrafficMarking.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowapi/src/main/java/org/onosproject/flowapi/DefaultExtTrafficRate.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowapi/src/main/java/org/onosproject/flowapi/DefaultExtTrafficRedirect.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowapi/src/main/java/org/onosproject/flowapi/DefaultExtWideCommunityInt.java
0 → 100755
| 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; |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtDscpValueTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtFragmentTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtIcmpCodeTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtIcmpTypeTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtIpProtocolTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtKeyNameTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtPacketLengthTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtTcpFlagTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtTrafficActionTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtTrafficMarkingTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtTrafficRateTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtTrafficRedirectTest.java
0 → 100644
| 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 |
apps/bgpflowspec/flowapi/src/test/java/org/onosproject/flowapi/DefaultExtWideCommunityIntTest.java
0 → 100644
| 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 | +} |
apps/bgpflowspec/flowmgr/BUCK
0 → 100755
apps/bgpflowspec/flowmgr/pom.xml
0 → 100755
| 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> |
apps/bgpflowspec/flowmgr/src/main/java/org/onosproject/flow/forwarder/BgpFlowForwarderService.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowmgr/src/main/java/org/onosproject/flow/forwarder/impl/BgpFlowForwarderImpl.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowmgr/src/main/java/org/onosproject/flow/forwarder/impl/package-info.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowmgr/src/main/java/org/onosproject/flow/manager/impl/BgpFlowManager.java
0 → 100755
| 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 | +} |
apps/bgpflowspec/flowmgr/src/main/java/org/onosproject/flow/manager/impl/package-info.java
0 → 100755
| 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; |
apps/bgpflowspec/pom.xml
0 → 100755
| 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> | ... | ... |
-
Please register or login to post a comment