Committed by
Gerrit Code Review
Removing all existing Netconf flow rule implementation: not compatible with curr…
…ent version and tailored on specific software. Doing so removes all ties with odl Yangtools in ONOS core. Change-Id: I4315bdf20dc388d42ea6f0f6276689da9a75c741
Showing
7 changed files
with
1 additions
and
1054 deletions
... | @@ -37,12 +37,7 @@ | ... | @@ -37,12 +37,7 @@ |
37 | <artifactId>onos-netconf-provider-device</artifactId> | 37 | <artifactId>onos-netconf-provider-device</artifactId> |
38 | <version>${project.version}</version> | 38 | <version>${project.version}</version> |
39 | </dependency> | 39 | </dependency> |
40 | - <dependency> | 40 | + <!-- Add other dependencies here as more bundles are added to the app --> |
41 | - <groupId>org.onosproject</groupId> | ||
42 | - <artifactId>onos-netconf-provider-flow</artifactId> | ||
43 | - <version>${project.version}</version> | ||
44 | - </dependency> | ||
45 | - <!-- TODO: add other dependencies here as more bundles are added to the app --> | ||
46 | </dependencies> | 41 | </dependencies> |
47 | 42 | ||
48 | </project> | 43 | </project> | ... | ... |
providers/netconf/flow/pom.xml
deleted
100644 → 0
1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
2 | -<!-- | ||
3 | - ~ Copyright 2014 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-netconf-providers</artifactId> | ||
25 | - <version>1.4.0-SNAPSHOT</version> | ||
26 | - <relativePath>../pom.xml</relativePath> | ||
27 | - </parent> | ||
28 | - | ||
29 | - <artifactId>onos-netconf-provider-flow</artifactId> | ||
30 | - <packaging>bundle</packaging> | ||
31 | - | ||
32 | - <dependencies> | ||
33 | - <dependency> | ||
34 | - <groupId>org.osgi</groupId> | ||
35 | - <artifactId>org.osgi.compendium</artifactId> | ||
36 | - </dependency> | ||
37 | - <dependency> | ||
38 | - <groupId>ch.ethz.ganymed</groupId> | ||
39 | - <artifactId>ganymed-ssh2</artifactId> | ||
40 | - <version>262</version> | ||
41 | - </dependency> | ||
42 | - <dependency> | ||
43 | - <!-- TODO: change this appropriately when the official TailF JNC is available --> | ||
44 | - <groupId>org.onosproject</groupId> | ||
45 | - <artifactId>jnc</artifactId> | ||
46 | - <version>1.0</version> | ||
47 | - </dependency> | ||
48 | - <dependency> | ||
49 | - <groupId>org.jdom</groupId> | ||
50 | - <artifactId>jdom2</artifactId> | ||
51 | - <version>2.0.5</version> | ||
52 | - </dependency> | ||
53 | - <dependency> | ||
54 | - <groupId>jaxen</groupId> | ||
55 | - <artifactId>jaxen</artifactId> | ||
56 | - <version>1.1.4</version> | ||
57 | - <optional>true</optional> | ||
58 | - </dependency> | ||
59 | - <dependency> | ||
60 | - <groupId>org.osgi</groupId> | ||
61 | - <artifactId>org.osgi.core</artifactId> | ||
62 | - </dependency> | ||
63 | - <dependency> | ||
64 | - <groupId>org.onosproject</groupId> | ||
65 | - <artifactId>onlab-junit</artifactId> | ||
66 | - <scope>test</scope> | ||
67 | - </dependency> | ||
68 | - <dependency> | ||
69 | - <groupId>org.easymock</groupId> | ||
70 | - <artifactId>easymock</artifactId> | ||
71 | - <scope>test</scope> | ||
72 | - </dependency> | ||
73 | - <dependency> | ||
74 | - <groupId>org.onosproject</groupId> | ||
75 | - <artifactId>onos-yang-tool</artifactId> | ||
76 | - <version>1.3</version> | ||
77 | - </dependency> | ||
78 | - </dependencies> | ||
79 | - | ||
80 | - <build> | ||
81 | - <plugins> | ||
82 | - <plugin> | ||
83 | - <groupId>org.apache.maven.plugins</groupId> | ||
84 | - <artifactId>maven-shade-plugin</artifactId> | ||
85 | - <version>2.3</version> | ||
86 | - <configuration> | ||
87 | - <filters> | ||
88 | - <filter> | ||
89 | - <artifact>com.tailf:JNC</artifact> | ||
90 | - <includes> | ||
91 | - <include>com/tailf/jnc/**</include> | ||
92 | - </includes> | ||
93 | - </filter> | ||
94 | - <filter> | ||
95 | - <artifact>ch.ethz.ganymed:ganymed-ssh2</artifact> | ||
96 | - <includes> | ||
97 | - <include>ch/ethz/ssh2/**</include> | ||
98 | - </includes> | ||
99 | - </filter> | ||
100 | - <filter> | ||
101 | - <artifact>org.jdom:jdom2</artifact> | ||
102 | - <includes> | ||
103 | - <include>org/jdom2/**</include> | ||
104 | - </includes> | ||
105 | - </filter> | ||
106 | - <filter> | ||
107 | - <artifact>org.onosproject:onos-yang-tool</artifact> | ||
108 | - <includes> | ||
109 | - <include>org/opendaylight/yang/gen/**</include> | ||
110 | - </includes> | ||
111 | - </filter> | ||
112 | - </filters> | ||
113 | - </configuration> | ||
114 | - <executions> | ||
115 | - <execution> | ||
116 | - <phase>package</phase> | ||
117 | - <goals> | ||
118 | - <goal>shade</goal> | ||
119 | - </goals> | ||
120 | - </execution> | ||
121 | - </executions> | ||
122 | - </plugin> | ||
123 | - <plugin> | ||
124 | - <groupId>org.apache.felix</groupId> | ||
125 | - <artifactId>maven-scr-plugin</artifactId> | ||
126 | - </plugin> | ||
127 | - <plugin> | ||
128 | - <groupId>org.apache.felix</groupId> | ||
129 | - <artifactId>maven-bundle-plugin</artifactId> | ||
130 | - <configuration> | ||
131 | - <instructions> | ||
132 | - <Export-Package> | ||
133 | - com.tailf.jnc, | ||
134 | - ch.ethz.ssh2, | ||
135 | - ch.ethz.ssh2.auth, | ||
136 | - ch.ethz.ssh2.channel, | ||
137 | - ch.ethz.ssh2.crypto, | ||
138 | - ch.ethz.ssh2.crypto.cipher, | ||
139 | - ch.ethz.ssh2.crypto.dh, | ||
140 | - ch.ethz.ssh2.crypto.digest, | ||
141 | - ch.ethz.ssh2.log, | ||
142 | - ch.ethz.ssh2.packets, | ||
143 | - ch.ethz.ssh2.server, | ||
144 | - ch.ethz.ssh2.sftp, | ||
145 | - ch.ethz.ssh2.signature, | ||
146 | - ch.ethz.ssh2.transport, | ||
147 | - ch.ethz.ssh2.util, | ||
148 | - org.jdom2, | ||
149 | - org.jdom2.input, | ||
150 | - org.jdom2.output, | ||
151 | - org.jdom2.adapters, | ||
152 | - org.jdom2.filter, | ||
153 | - org.jdom2.internal, | ||
154 | - org.jdom2.located, | ||
155 | - org.jdom2.transform, | ||
156 | - org.jdom2.util, | ||
157 | - org.jdom2.xpath, | ||
158 | - org.jdom2.input.sax, | ||
159 | - org.jdom2.input.stax, | ||
160 | - org.jdom2.output.support, | ||
161 | - org.jdom2.xpath.jaxen, | ||
162 | - org.jdom2.xpath.util, | ||
163 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520, | ||
164 | - org.opendaylight.yangtools.yang.data.impl.schema.tree, | ||
165 | - org.opendaylight.yangtools.yang.data.impl.codec, | ||
166 | - org.opendaylight.yangtools.yang.model.parser.api, | ||
167 | - org.opendaylight.yangtools.yang.data.impl.schema.nodes, | ||
168 | - org.opendaylight.yangtools.yang.binding.util, | ||
169 | - org.opendaylight.yangtools.yang.data.impl, | ||
170 | - org.opendaylight.yangtools.sal.binding.generator.impl, | ||
171 | - org.opendaylight.yangtools.yang.parser.impl.util, | ||
172 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625, | ||
173 | - org.opendaylight.yangtools.yang.data.api, | ||
174 | - org.opendaylight.yangtools.objcache.spi, | ||
175 | - org.opendaylight.yangtools.yang.data.impl.schema.transform.base.parser, | ||
176 | - org.opendaylight.yangtools.maven.sal.api.gen.plugin, | ||
177 | - org.opendaylight.yangtools.yang.data.impl.schema.builder.impl, | ||
178 | - org.opendaylight.yangtools.yang.data.api.schema.tree, | ||
179 | - org.opendaylight.yangtools.binding.generator.util, | ||
180 | - org.opendaylight.yangtools.sal.binding.generator.spi, | ||
181 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715, | ||
182 | - org.opendaylight.yangtools.yang2sources.spi, | ||
183 | - org.opendaylight.yangtools.yang.model.repo.api, | ||
184 | - org.opendaylight.yangtools.util, | ||
185 | - org.opendaylight.yangtools.yang.parser.util, | ||
186 | - org.opendaylight.yangtools.yang.data.api.schema.stream, | ||
187 | - org.opendaylight.yangtools.yang.data.impl.schema.transform.base.serializer, | ||
188 | - org.opendaylight.yangtools.concepts, | ||
189 | - org.opendaylight.yangtools.yang.binding, | ||
190 | - org.opendaylight.yangtools.yang.model.util.repo, | ||
191 | - org.opendaylight.yangtools.yang.wadl.generator.maven, | ||
192 | - org.opendaylight.yangtools.yang.data.api.schema, | ||
193 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type, | ||
194 | - org.opendaylight.yangtools.concepts.util, | ||
195 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries, | ||
196 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.ace.ip.ace.ip.version, | ||
197 | - org.opendaylight.yangtools.sal.binding.model.api, | ||
198 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.ace.ip, | ||
199 | - org.opendaylight.yangtools.yang.data.impl.schema.builder.api, | ||
200 | - org.opendaylight.yangtools.util.concurrent, | ||
201 | - org.opendaylight.yangtools.yang.parser.builder.impl, | ||
202 | - org.opendaylight.yangtools.yang.data.impl.schema.transform.base, | ||
203 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.actions.packet.handling, | ||
204 | - org.opendaylight.yangtools.sal.binding.model.api.type.builder, | ||
205 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625.acl.transport.header.fields, | ||
206 | - org.opendaylight.yangtools.yang2sources.plugin, | ||
207 | - org.opendaylight.yangtools.yang.data.impl.codec.xml, | ||
208 | - org.opendaylight.yangtools.antlrv4.code.gen, | ||
209 | - org.opendaylight.yangtools.yang.parser.builder.util, | ||
210 | - org.opendaylight.yangtools.yang.data.impl.schema.transform, | ||
211 | - org.opendaylight.yangtools.yang.model.api.type, | ||
212 | - org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.serializer, | ||
213 | - org.opendaylight.yangtools.yang.data.api.schema.tree.spi, | ||
214 | - org.opendaylight.yangtools.yang.data.impl.schema.transform.dom.parser, | ||
215 | - org.opendaylight.yangtools.sal.binding.yang.types, | ||
216 | - org.opendaylight.yangtools.yang.data.impl.schema.transform.dom, | ||
217 | - org.opendaylight.yangtools.yang.data.impl.util, | ||
218 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625.timerange, | ||
219 | - org.opendaylight.yangtools.sal.binding.generator.api, | ||
220 | - org.opendaylight.yangtools.sal.java.api.generator, | ||
221 | - org.opendaylight.yangtools.yang.binding.annotations, | ||
222 | - org.opendaylight.yangtools.sal.binding.generator.util, | ||
223 | - org.opendaylight.yangtools.yang.model.repo.util, | ||
224 | - org.opendaylight.yangtools.yang.model.api, | ||
225 | - org.opendaylight.yangtools.yang.common, | ||
226 | - org.opendaylight.yangtools.yang.wadl.generator, | ||
227 | - org.opendaylight.yangtools.yang.parser.builder.api, | ||
228 | - org.opendaylight.yangtools.yang.model.util, | ||
229 | - org.opendaylight.yangtools.yang.parser.impl, | ||
230 | - org.opendaylight.yangtools.yang.data.impl.schema, | ||
231 | - org.opendaylight.yangtools.yang.data.api.codec, | ||
232 | - org.opendaylight.yangtools.yang.unified.doc.generator, | ||
233 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list, | ||
234 | - org.opendaylight.yangtools.objcache, | ||
235 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.actions, | ||
236 | - org.opendaylight.yangtools.yang.data.util, | ||
237 | - org.opendaylight.yangtools.yang.unified.doc.generator.maven, | ||
238 | - org.opendaylight.yangtools.binding.generator.util.generated.type.builder, | ||
239 | - org.opendaylight.yangtools.yang.model.repo.spi, | ||
240 | - org.opendaylight.yangtools.yang.parser.repo, | ||
241 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715, | ||
242 | - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches, | ||
243 | - org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.valid, | ||
244 | - com.romix.scala, | ||
245 | - com.romix.scala.collection, | ||
246 | - com.romix.scala.collection.concurrent, | ||
247 | - org.opendaylight.yangtools.objcache.impl | ||
248 | - </Export-Package> | ||
249 | - </instructions> | ||
250 | - </configuration> | ||
251 | - </plugin> | ||
252 | - <plugin> | ||
253 | - <groupId>org.onosproject</groupId> | ||
254 | - <artifactId>onos-maven-plugin</artifactId> | ||
255 | - </plugin> | ||
256 | - </plugins> | ||
257 | - </build> | ||
258 | - | ||
259 | -</project> |
1 | -/* | ||
2 | - * Copyright 2015 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.provider.netconf.flow.impl; | ||
17 | - | ||
18 | -import static com.google.common.base.Strings.isNullOrEmpty; | ||
19 | -import static org.onlab.util.Tools.get; | ||
20 | -import static org.slf4j.LoggerFactory.getLogger; | ||
21 | - | ||
22 | -import java.net.URI; | ||
23 | -import java.net.URISyntaxException; | ||
24 | -import java.util.ArrayList; | ||
25 | -import java.util.Collections; | ||
26 | -import java.util.Dictionary; | ||
27 | -import java.util.Enumeration; | ||
28 | -import java.util.HashMap; | ||
29 | -import java.util.List; | ||
30 | -import java.util.Map; | ||
31 | -import java.util.Set; | ||
32 | -import java.util.concurrent.ConcurrentHashMap; | ||
33 | -import java.util.concurrent.ConcurrentMap; | ||
34 | -import java.util.concurrent.TimeUnit; | ||
35 | - | ||
36 | -import org.apache.felix.scr.annotations.Activate; | ||
37 | -import org.apache.felix.scr.annotations.Component; | ||
38 | -import org.apache.felix.scr.annotations.Deactivate; | ||
39 | -import org.apache.felix.scr.annotations.Modified; | ||
40 | -import org.apache.felix.scr.annotations.Reference; | ||
41 | -import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
42 | -import org.jboss.netty.util.HashedWheelTimer; | ||
43 | -import org.jboss.netty.util.Timeout; | ||
44 | -import org.jboss.netty.util.TimerTask; | ||
45 | -import org.onlab.util.Timer; | ||
46 | -import org.onosproject.core.ApplicationId; | ||
47 | -import org.onosproject.net.DeviceId; | ||
48 | -import org.onosproject.net.flow.FlowEntry; | ||
49 | -import org.onosproject.net.flow.FlowRule; | ||
50 | -import org.onosproject.net.flow.FlowRuleBatchOperation; | ||
51 | -import org.onosproject.net.flow.FlowRuleProvider; | ||
52 | -import org.onosproject.net.flow.FlowRuleProviderRegistry; | ||
53 | -import org.onosproject.net.flow.FlowRuleProviderService; | ||
54 | -import org.onosproject.net.provider.AbstractProvider; | ||
55 | -import org.onosproject.net.provider.ProviderId; | ||
56 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.AccessList; | ||
57 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.AccessListBuilder; | ||
58 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.AccessListEntries; | ||
59 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.AccessListEntriesBuilder; | ||
60 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.ActionsBuilder; | ||
61 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.Matches; | ||
62 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.MatchesBuilder; | ||
63 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.actions.packet.handling.DenyBuilder; | ||
64 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.actions.packet.handling.PermitBuilder; | ||
65 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.AceIp; | ||
66 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.AceIpBuilder; | ||
67 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.ace.ip.ace.ip.version.AceIpv4; | ||
68 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.ace.ip.ace.ip.version.AceIpv4Builder; | ||
69 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; | ||
70 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; | ||
71 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625.acl.transport.header.fields.DestinationPortRange; | ||
72 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625.acl.transport.header.fields.DestinationPortRangeBuilder; | ||
73 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625.acl.transport.header.fields.SourcePortRange; | ||
74 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625.acl.transport.header.fields.SourcePortRangeBuilder; | ||
75 | -import org.osgi.service.component.ComponentContext; | ||
76 | -import org.slf4j.Logger; | ||
77 | - | ||
78 | -/** | ||
79 | - * Netconf provider to accept any flow and report them. | ||
80 | - */ | ||
81 | -@Component(immediate = true) | ||
82 | -public class NetconfFlowRuleProvider extends AbstractProvider | ||
83 | - implements FlowRuleProvider { | ||
84 | - private final Logger log = getLogger(getClass()); | ||
85 | - | ||
86 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
87 | - protected FlowRuleProviderRegistry providerRegistry; | ||
88 | - | ||
89 | - private ConcurrentMap<DeviceId, Set<FlowEntry>> flowTable = new ConcurrentHashMap<>(); | ||
90 | - | ||
91 | - private FlowRuleProviderService providerService; | ||
92 | - | ||
93 | - private XmlBuilder xmlBuilder; | ||
94 | - | ||
95 | - private AceIp aceIp; | ||
96 | - private SourcePortRange srcPortRange; | ||
97 | - private DestinationPortRange destPortRange; | ||
98 | - private Matches matches; | ||
99 | - private HashedWheelTimer timer = Timer.getTimer(); | ||
100 | - private Timeout timeout; | ||
101 | - private static final String ACL_NAME_KEY = "acl-name"; | ||
102 | - private static final String ACL_LIST_ENTRIES_RULE_NAME_KEY = "access-list-entries.rule-name"; | ||
103 | - private static final String ACL_LIST_SP_LOWER_KEY = "source-port-range.lower-port"; | ||
104 | - private static final String ACL_LIST_SP_UPPER_KEY = "source-port-range.upper-port"; | ||
105 | - private static final String ACL_LIST_DP_LOWER_KEY = "destination-port-range.lower-port"; | ||
106 | - private static final String ACL_LIST_DP_UPPER_KEY = "destination-port-range.upper-port"; | ||
107 | - private static final String ACL_LIST_DEST_IPV4_KEY = "matches.destination-ipv4-address"; | ||
108 | - private static final String ACL_LIST_SRC_IPV4_KEY = "matches.source-ipv4-address"; | ||
109 | - private static final String ACL_LIST_ACTIONS_KEY = "actions"; | ||
110 | - | ||
111 | - public NetconfFlowRuleProvider() { | ||
112 | - super(new ProviderId("netconf", "org.onosproject.provider.netconf")); | ||
113 | - } | ||
114 | - | ||
115 | - @Activate | ||
116 | - public void activate(ComponentContext context) { | ||
117 | - providerService = providerRegistry.register(this); | ||
118 | - timeout = timer.newTimeout(new StatisticTask(), 5, TimeUnit.SECONDS); | ||
119 | - applyRule(); | ||
120 | - modified(context); | ||
121 | - log.info("Started"); | ||
122 | - } | ||
123 | - | ||
124 | - @Deactivate | ||
125 | - public void deactivate() { | ||
126 | - providerRegistry.unregister(this); | ||
127 | - providerService = null; | ||
128 | - timeout.cancel(); | ||
129 | - log.info("Stopped"); | ||
130 | - } | ||
131 | - | ||
132 | - @Modified | ||
133 | - public void modified(ComponentContext context) { | ||
134 | - if (xmlBuilder == null) { | ||
135 | - xmlBuilder = new XmlBuilder(); | ||
136 | - } | ||
137 | - if (context == null) { | ||
138 | - log.info("No configuration file"); | ||
139 | - return; | ||
140 | - } | ||
141 | - Dictionary<?, ?> properties = context.getProperties(); | ||
142 | - String deviceEntry = get(properties, "devConfigs"); | ||
143 | - log.info("Settings: devConfigs={}", deviceEntry); | ||
144 | - Enumeration<?> elements = properties.keys(); | ||
145 | - Object nextElement = elements.nextElement(); | ||
146 | - while (elements.hasMoreElements()) { | ||
147 | - if (nextElement instanceof String) { | ||
148 | - log.info("key::" + nextElement + ", value::" | ||
149 | - + get(properties, (String) nextElement)); | ||
150 | - } | ||
151 | - nextElement = elements.nextElement(); | ||
152 | - } | ||
153 | - if (!isNullOrEmpty(deviceEntry)) { | ||
154 | - Map<String, String> deviceMap = processDeviceEntry(deviceEntry); | ||
155 | - AccessList accessList = buildAccessList(properties); | ||
156 | - String xmlMsg = xmlBuilder.buildAclRequestXml(accessList); | ||
157 | - log.info("The resultant xml from the builder\n" + xmlMsg); | ||
158 | - NetconfOperation netconfOperation = new NetconfOperation(); | ||
159 | - netconfOperation.sendXmlMessage(xmlMsg, deviceMap.get("username"), | ||
160 | - deviceMap.get("password"), | ||
161 | - deviceMap.get("hostIp"), Integer | ||
162 | - .parseInt(deviceMap | ||
163 | - .get("hostPort"))); | ||
164 | - } | ||
165 | - } | ||
166 | - | ||
167 | - /** | ||
168 | - * @param properties | ||
169 | - * @return accessList | ||
170 | - */ | ||
171 | - private AccessList buildAccessList(Dictionary<?, ?> properties) { | ||
172 | - /** | ||
173 | - * Populating Access List. | ||
174 | - */ | ||
175 | - AccessListBuilder abuilder = new AccessListBuilder(); | ||
176 | - String aclName = get(properties, ACL_NAME_KEY); | ||
177 | - if (aclName != null) { | ||
178 | - abuilder.setAclName(aclName); | ||
179 | - } | ||
180 | - AccessList accessList = abuilder.build(); | ||
181 | - abuilder.setAccessListEntries(getAccessListEntries(properties, matches)); | ||
182 | - srcPortRange = getSourcePortRange(properties); | ||
183 | - destPortRange = getDestinationPortRange(properties); | ||
184 | - aceIp = getAceIp(properties, srcPortRange, destPortRange); | ||
185 | - matches = getMatches(properties); | ||
186 | - return accessList; | ||
187 | - } | ||
188 | - | ||
189 | - /** | ||
190 | - * @param properties | ||
191 | - * @return matches | ||
192 | - */ | ||
193 | - private Matches getMatches(Dictionary<?, ?> properties) { | ||
194 | - /** | ||
195 | - * Building Matches for given ACL model. | ||
196 | - */ | ||
197 | - MatchesBuilder matchesBuilder = new MatchesBuilder(); | ||
198 | - if (aceIp != null) { | ||
199 | - matchesBuilder.setAceType(aceIp); | ||
200 | - } | ||
201 | - matches = matchesBuilder.build(); | ||
202 | - return matches; | ||
203 | - } | ||
204 | - | ||
205 | - /** | ||
206 | - * @param properties | ||
207 | - * @return srcPortRange | ||
208 | - */ | ||
209 | - private SourcePortRange getSourcePortRange(Dictionary<?, ?> properties) { | ||
210 | - /** | ||
211 | - * Building Source Port Range for given ACL model. | ||
212 | - */ | ||
213 | - String spRangeLowerStr = get(properties, ACL_LIST_SP_LOWER_KEY); | ||
214 | - String spRangeUpperStr = get(properties, ACL_LIST_SP_UPPER_KEY); | ||
215 | - SourcePortRangeBuilder srcPortRangeBuilder = new SourcePortRangeBuilder(); | ||
216 | - if (spRangeLowerStr != null) { | ||
217 | - int spRangeLower = Integer.parseInt(spRangeLowerStr); | ||
218 | - srcPortRangeBuilder.setLowerPort(new PortNumber(spRangeLower)); | ||
219 | - } | ||
220 | - if (spRangeUpperStr != null) { | ||
221 | - int spRangeUpper = Integer.parseInt(spRangeUpperStr); | ||
222 | - srcPortRangeBuilder.setUpperPort(new PortNumber(spRangeUpper)); | ||
223 | - } | ||
224 | - srcPortRange = srcPortRangeBuilder.build(); | ||
225 | - return srcPortRange; | ||
226 | - } | ||
227 | - | ||
228 | - /** | ||
229 | - * @param properties | ||
230 | - * @return destPortRange | ||
231 | - */ | ||
232 | - private DestinationPortRange getDestinationPortRange(Dictionary<?, ?> properties) { | ||
233 | - /** | ||
234 | - * Building Destination Port Range for given ACL model. | ||
235 | - */ | ||
236 | - String dpRangeLowerStr = get(properties, ACL_LIST_DP_LOWER_KEY); | ||
237 | - String dpRangeUpperStr = get(properties, ACL_LIST_DP_UPPER_KEY); | ||
238 | - DestinationPortRangeBuilder destPortRangeBuilder = new DestinationPortRangeBuilder(); | ||
239 | - if (dpRangeLowerStr != null) { | ||
240 | - int dpRangeLower = Integer.parseInt(dpRangeLowerStr); | ||
241 | - destPortRangeBuilder.setLowerPort(new PortNumber(dpRangeLower)); | ||
242 | - } | ||
243 | - if (dpRangeUpperStr != null) { | ||
244 | - int dpRangeUpper = Integer.parseInt(dpRangeUpperStr); | ||
245 | - destPortRangeBuilder.setUpperPort(new PortNumber(dpRangeUpper)); | ||
246 | - } | ||
247 | - destPortRange = destPortRangeBuilder.build(); | ||
248 | - return destPortRange; | ||
249 | - } | ||
250 | - | ||
251 | - /** | ||
252 | - * @param properties | ||
253 | - * @return accessListEntries | ||
254 | - */ | ||
255 | - private List<AccessListEntries> getAccessListEntries(Dictionary<?, ?> properties, | ||
256 | - Matches matches) { | ||
257 | - /** | ||
258 | - * Build and Populate Access List Entries. | ||
259 | - */ | ||
260 | - AccessListEntriesBuilder acLListEntriesBuilder = new AccessListEntriesBuilder(); | ||
261 | - String aclListEntriesRuleName = get(properties, | ||
262 | - ACL_LIST_ENTRIES_RULE_NAME_KEY); | ||
263 | - if (aclListEntriesRuleName != null) { | ||
264 | - acLListEntriesBuilder.setRuleName(aclListEntriesRuleName); | ||
265 | - } | ||
266 | - acLListEntriesBuilder.setMatches(matches); | ||
267 | - String aclActions = get(properties, ACL_LIST_ACTIONS_KEY); | ||
268 | - if (aclActions != null) { | ||
269 | - ActionsBuilder actionBuilder = new ActionsBuilder(); | ||
270 | - if (aclActions.equalsIgnoreCase("deny")) { | ||
271 | - DenyBuilder denyBuilder = new DenyBuilder(); | ||
272 | - actionBuilder.setPacketHandling(denyBuilder.build()); | ||
273 | - } else if (aclActions.equalsIgnoreCase("permit")) { | ||
274 | - PermitBuilder permitBuilder = new PermitBuilder(); | ||
275 | - actionBuilder.setPacketHandling(permitBuilder.build()); | ||
276 | - } | ||
277 | - acLListEntriesBuilder.setActions(actionBuilder.build()); | ||
278 | - } | ||
279 | - AccessListEntries aclListEntries = acLListEntriesBuilder.build(); | ||
280 | - List<AccessListEntries> accessListEntries = new ArrayList<AccessListEntries>(); | ||
281 | - accessListEntries.add(aclListEntries); | ||
282 | - return accessListEntries; | ||
283 | - } | ||
284 | - | ||
285 | - /** | ||
286 | - * @param properties | ||
287 | - * @return aceIp | ||
288 | - */ | ||
289 | - private AceIp getAceIp(Dictionary<?, ?> properties, | ||
290 | - SourcePortRange srcPortRange, | ||
291 | - DestinationPortRange destPortRange) { | ||
292 | - /** | ||
293 | - * Building Ace IPV4 Type | ||
294 | - */ | ||
295 | - String destIpv4 = get(properties, ACL_LIST_DEST_IPV4_KEY); | ||
296 | - String srcIpv4 = get(properties, ACL_LIST_SRC_IPV4_KEY); | ||
297 | - AceIpv4Builder aceIpv4Builder = new AceIpv4Builder(); | ||
298 | - aceIp = null; | ||
299 | - if (destIpv4 != null) { | ||
300 | - Ipv4Prefix destinationIp = new Ipv4Prefix(destIpv4); | ||
301 | - aceIpv4Builder.setDestinationIpv4Address(destinationIp); | ||
302 | - } | ||
303 | - if (srcIpv4 != null) { | ||
304 | - Ipv4Prefix sourceIp = new Ipv4Prefix(srcIpv4); | ||
305 | - aceIpv4Builder.setSourceIpv4Address(sourceIp); | ||
306 | - } | ||
307 | - if (destIpv4 != null || srcIpv4 != null) { | ||
308 | - AceIpv4 aceIpv4 = aceIpv4Builder.build(); | ||
309 | - AceIpBuilder aceIpBuilder = new AceIpBuilder(); | ||
310 | - aceIpBuilder.setAceIpVersion(aceIpv4); | ||
311 | - aceIpBuilder.setSourcePortRange(srcPortRange); | ||
312 | - aceIpBuilder.setDestinationPortRange(destPortRange); | ||
313 | - aceIp = aceIpBuilder.build(); | ||
314 | - } | ||
315 | - return aceIp; | ||
316 | - } | ||
317 | - | ||
318 | - /** | ||
319 | - * @param deviceEntry | ||
320 | - * @return deviceMap | ||
321 | - */ | ||
322 | - private Map<String, String> processDeviceEntry(String deviceEntry) { | ||
323 | - if (deviceEntry == null) { | ||
324 | - log.info("No content for Device Entry, so cannot proceed further."); | ||
325 | - return null; | ||
326 | - } | ||
327 | - | ||
328 | - Map<String, String> deviceMap = new HashMap<String, String>(); | ||
329 | - log.info("Trying to convert Device Entry String: " + deviceEntry | ||
330 | - + " to a Netconf Device Object"); | ||
331 | - try { | ||
332 | - URI uri = new URI(deviceEntry); | ||
333 | - String path = uri.getPath(); | ||
334 | - String userInfo = path.substring(path.lastIndexOf('@')); | ||
335 | - String hostInfo = path.substring(path.lastIndexOf('@') + 1); | ||
336 | - String[] infoSplit = userInfo.split(":"); | ||
337 | - String username = infoSplit[0]; | ||
338 | - String password = infoSplit[1]; | ||
339 | - infoSplit = hostInfo.split(":"); | ||
340 | - String hostIp = infoSplit[0]; | ||
341 | - String hostPort = infoSplit[1]; | ||
342 | - if (isNullOrEmpty(username) || isNullOrEmpty(password) | ||
343 | - || isNullOrEmpty(hostIp) || isNullOrEmpty(hostPort)) { | ||
344 | - log.warn("Bad Configuration Data: both user and device" | ||
345 | - + " information parts of Configuration " + deviceEntry | ||
346 | - + " should be non-nullable"); | ||
347 | - } else { | ||
348 | - deviceMap.put("hostIp", hostIp); | ||
349 | - deviceMap.put("hostPort", hostPort); | ||
350 | - deviceMap.put("username", username); | ||
351 | - deviceMap.put("password", password); | ||
352 | - } | ||
353 | - } catch (ArrayIndexOutOfBoundsException aie) { | ||
354 | - log.error("Error while reading config infromation from the config file: " | ||
355 | - + "The user, host and device state infomation should be " | ||
356 | - + "in the order 'userInfo@hostInfo:deviceState'" | ||
357 | - + deviceEntry, aie); | ||
358 | - } catch (URISyntaxException urie) { | ||
359 | - log.error("Error while parsing config information for the device entry: " | ||
360 | - + "Illegal character in path " + deviceEntry, | ||
361 | - urie); | ||
362 | - } catch (Exception e) { | ||
363 | - log.error("Error while parsing config information for the device entry: " | ||
364 | - + deviceEntry, e); | ||
365 | - } | ||
366 | - return deviceMap; | ||
367 | - } | ||
368 | - | ||
369 | - @Override | ||
370 | - public void applyFlowRule(FlowRule... flowRules) { | ||
371 | - } | ||
372 | - | ||
373 | - @Override | ||
374 | - public void removeFlowRule(FlowRule... flowRules) { | ||
375 | - } | ||
376 | - | ||
377 | - private void applyRule() { | ||
378 | - // applyFlowRule(flowRules);//currentl | ||
379 | - } | ||
380 | - | ||
381 | - @Override | ||
382 | - public void removeRulesById(ApplicationId id, FlowRule... flowRules) { | ||
383 | - log.info("removal by app id not supported in null provider"); | ||
384 | - } | ||
385 | - | ||
386 | - @Override | ||
387 | - public void executeBatch(FlowRuleBatchOperation batch) { | ||
388 | - | ||
389 | - } | ||
390 | - | ||
391 | - private class StatisticTask implements TimerTask { | ||
392 | - | ||
393 | - @Override | ||
394 | - public void run(Timeout to) throws Exception { | ||
395 | - for (DeviceId devId : flowTable.keySet()) { | ||
396 | - providerService.pushFlowMetrics(devId, flowTable | ||
397 | - .getOrDefault(devId, Collections.emptySet())); | ||
398 | - } | ||
399 | - timeout = timer.newTimeout(to.getTask(), 5, TimeUnit.SECONDS); | ||
400 | - | ||
401 | - } | ||
402 | - } | ||
403 | -} |
1 | -/* | ||
2 | - * Copyright 2015 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.provider.netconf.flow.impl; | ||
17 | - | ||
18 | -import static org.onlab.util.Tools.delay; | ||
19 | -import static org.slf4j.LoggerFactory.getLogger; | ||
20 | - | ||
21 | -import java.io.IOException; | ||
22 | - | ||
23 | -import org.slf4j.Logger; | ||
24 | - | ||
25 | -import com.tailf.jnc.Capabilities; | ||
26 | -import com.tailf.jnc.JNCException; | ||
27 | -import com.tailf.jnc.SSHConnection; | ||
28 | -import com.tailf.jnc.SSHSession; | ||
29 | - | ||
30 | -/** | ||
31 | - * This is to carry necessary information to connect and execute NETCONF | ||
32 | - * operations. | ||
33 | - */ | ||
34 | -public class NetconfOperation { | ||
35 | - private final Logger log = getLogger(NetconfOperation.class); | ||
36 | - private static final int EVENTINTERVAL = 2000; | ||
37 | - private static final int CONNECTION_CHECK_INTERVAL = 3; | ||
38 | - private static final String INPUT_HELLO_XML_MSG = new StringBuilder( | ||
39 | - "<?xml version=\"1.0\" encoding=\"UTF-8\"?>") | ||
40 | - .append("<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">") | ||
41 | - .append("<capabilities><capability>urn:ietf:params:netconf:base:1.0</capability>") | ||
42 | - .append("</capabilities></hello>").toString(); | ||
43 | - | ||
44 | - /** | ||
45 | - * This will send a Xml message to the device. | ||
46 | - * @param xmlMsg XML to send | ||
47 | - * @param username user name | ||
48 | - * @param password pass word | ||
49 | - * @param deviceIp ip address of the device | ||
50 | - * @param devicePort port on the device | ||
51 | - */ | ||
52 | - protected void sendXmlMessage(String xmlMsg, String username, | ||
53 | - String password, String deviceIp, | ||
54 | - Integer devicePort) { | ||
55 | - SSHSession ssh = null; | ||
56 | - try { | ||
57 | - SSHConnection sshConnection = getConnection(username, password, | ||
58 | - deviceIp, devicePort); | ||
59 | - ssh = new SSHSession(sshConnection); | ||
60 | - executeMessage(ssh, INPUT_HELLO_XML_MSG); | ||
61 | - /* | ||
62 | - * execute acl message | ||
63 | - */ | ||
64 | - executeMessage(ssh, xmlMsg); | ||
65 | - | ||
66 | - } catch (IOException e) { | ||
67 | - log.error("Unable to send Hello Message to the device: ", e); | ||
68 | - } catch (JNCException e) { | ||
69 | - log.error("Authentication fail while sending Hello Message to the device: ", | ||
70 | - e); | ||
71 | - } catch (Exception e) { | ||
72 | - log.error("Unable to send Hello Message to the device: ", e); | ||
73 | - } finally { | ||
74 | - log.debug("Closing the session after successful execution"); | ||
75 | - if (ssh != null) { | ||
76 | - ssh.close(); | ||
77 | - } | ||
78 | - } | ||
79 | - } | ||
80 | - | ||
81 | - private void executeMessage(SSHSession ssh, String xmlMsg) | ||
82 | - throws IOException, JNCException { | ||
83 | - String helloRequestXML = xmlMsg.trim(); | ||
84 | - | ||
85 | - log.debug("Sending Hello"); | ||
86 | - ssh.print(helloRequestXML); | ||
87 | - ssh.flush(); | ||
88 | - String xmlResponse = null; | ||
89 | - int i = CONNECTION_CHECK_INTERVAL; | ||
90 | - while (!ssh.ready() && i > 0) { | ||
91 | - delay(EVENTINTERVAL); | ||
92 | - i--; | ||
93 | - } | ||
94 | - | ||
95 | - if (ssh.ready()) { | ||
96 | - StringBuffer readOne = ssh.readOne(); | ||
97 | - if (readOne == null) { | ||
98 | - log.error("The Hello Contains No Capabilites"); | ||
99 | - throw new JNCException( | ||
100 | - JNCException.SESSION_ERROR, | ||
101 | - "server does not support NETCONF base capability: " | ||
102 | - + Capabilities.NETCONF_BASE_CAPABILITY); | ||
103 | - } else { | ||
104 | - xmlResponse = readOne.toString().trim(); | ||
105 | - | ||
106 | - log.debug("Reading Capabilities: " | ||
107 | - + ssh.getSSHConnection().getGanymedConnection() | ||
108 | - .getHostname()); | ||
109 | - } | ||
110 | - } | ||
111 | - } | ||
112 | - | ||
113 | - /** | ||
114 | - * To establish SSH Connection. | ||
115 | - * | ||
116 | - * @param username user name | ||
117 | - * @param password pass word | ||
118 | - * @param sshHost host | ||
119 | - * @param sshPort port | ||
120 | - * @return new SSH connection | ||
121 | - * @throws IOException if connection fails | ||
122 | - * @throws JNCException if connection causes an error | ||
123 | - */ | ||
124 | - public SSHConnection getConnection(String username, String password, | ||
125 | - String sshHost, Integer sshPort) | ||
126 | - throws IOException, JNCException { | ||
127 | - SSHConnection sshConnection; | ||
128 | - try { | ||
129 | - sshConnection = new SSHConnection(sshHost, sshPort); | ||
130 | - sshConnection.authenticateWithPassword(username, password); | ||
131 | - } catch (IOException e) { | ||
132 | - log.error("Unable to create a connection to the device: "); | ||
133 | - throw e; | ||
134 | - } catch (JNCException e) { | ||
135 | - log.error("Failed to connect to the device: "); | ||
136 | - throw e; | ||
137 | - } | ||
138 | - return sshConnection; | ||
139 | - } | ||
140 | - | ||
141 | -} |
1 | -/* | ||
2 | - * Copyright 2015 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.provider.netconf.flow.impl; | ||
17 | - | ||
18 | -import static org.slf4j.LoggerFactory.getLogger; | ||
19 | - | ||
20 | -import org.jdom2.Document; | ||
21 | -import org.jdom2.Element; | ||
22 | -import org.jdom2.Namespace; | ||
23 | -import org.jdom2.output.Format; | ||
24 | -import org.jdom2.output.XMLOutputter; | ||
25 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.AccessList; | ||
26 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.AceType; | ||
27 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.AceEth; | ||
28 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.AceIp; | ||
29 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.ace.ip.AceIpVersion; | ||
30 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.ace.ip.ace.ip.version.AceIpv4; | ||
31 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev140520.access.list.access.list.entries.matches.ace.type.ace.ip.ace.ip.version.AceIpv6; | ||
32 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber; | ||
33 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625.acl.transport.header.fields.DestinationPortRange; | ||
34 | -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625.acl.transport.header.fields.SourcePortRange; | ||
35 | -import org.slf4j.Logger; | ||
36 | - | ||
37 | -/** | ||
38 | - * Xml Builder to generate the xml according to given ACL model. | ||
39 | - */ | ||
40 | -public class XmlBuilder { | ||
41 | - private final Logger log = getLogger(XmlBuilder.class); | ||
42 | - | ||
43 | - public String buildAclRequestXml(AccessList accessList) { | ||
44 | - Document doc = new Document(); | ||
45 | - Namespace namespaceRpc = Namespace | ||
46 | - .getNamespace("urn:ietf:params:xml:ns:netconf:base:1.0"); | ||
47 | - Namespace accessNamespaceRpc = Namespace | ||
48 | - .getNamespace("urn:ietf:params:xml:ns:yang:ietf-acl"); | ||
49 | - doc.setRootElement(new Element("rpc", namespaceRpc) | ||
50 | - .setAttribute("message-id", "101")); | ||
51 | - | ||
52 | - /** | ||
53 | - * Access list elements of given ACL model. | ||
54 | - */ | ||
55 | - Element access = new Element("access-list", accessNamespaceRpc); | ||
56 | - access.addContent(new Element("acl-name", accessNamespaceRpc) | ||
57 | - .setText(accessList.getAclName())); | ||
58 | - // access.addContent(accessEntries); | ||
59 | - | ||
60 | - if (!accessList.getAccessListEntries().isEmpty() | ||
61 | - && accessList.getAccessListEntries() != null) { | ||
62 | - for (int accessEntryIntVlu = 0; accessEntryIntVlu < accessList | ||
63 | - .getAccessListEntries().size(); accessEntryIntVlu++) { | ||
64 | - access.addContent(getAccessEntries(accessEntryIntVlu, | ||
65 | - accessList, | ||
66 | - accessNamespaceRpc)); | ||
67 | - } | ||
68 | - } | ||
69 | - | ||
70 | - /** | ||
71 | - * edit-config operation for given ACL model. | ||
72 | - */ | ||
73 | - Element editConfig = new Element("edit-config", namespaceRpc); | ||
74 | - editConfig.addContent(new Element("target", namespaceRpc) | ||
75 | - .addContent(new Element("running", namespaceRpc))); | ||
76 | - editConfig.addContent(new Element("config", Namespace | ||
77 | - .getNamespace("urn:ietf:params:xml:ns:netconf:base:1.0")) | ||
78 | - .addContent(access)); | ||
79 | - | ||
80 | - doc.getRootElement().addContent(editConfig); | ||
81 | - XMLOutputter xmlOutputter = new XMLOutputter(Format.getPrettyFormat()); | ||
82 | - String outputString = xmlOutputter.outputString(doc); | ||
83 | - | ||
84 | - return outputString; | ||
85 | - } | ||
86 | - | ||
87 | - /** | ||
88 | - * access entries operation for given ACL model. | ||
89 | - */ | ||
90 | - private Element getAccessEntries(int accessEntryIntVlu, | ||
91 | - AccessList accessList, | ||
92 | - Namespace accessNamespaceRpc) { | ||
93 | - | ||
94 | - /** | ||
95 | - * Port Number | ||
96 | - */ | ||
97 | - | ||
98 | - int srcPortRangeLower = 0; | ||
99 | - int srcPortRangeUpper = 0; | ||
100 | - int destPortRangeLower = 0; | ||
101 | - int destPortRangeUpper = 0; | ||
102 | - | ||
103 | - String sourceIpAdd = ""; | ||
104 | - String destinationIpAdd = ""; | ||
105 | - | ||
106 | - /* | ||
107 | - * checking accessList is null or not | ||
108 | - */ | ||
109 | - if (accessList != null) { | ||
110 | - /* | ||
111 | - * checking list entries are empty or null | ||
112 | - */ | ||
113 | - if (!accessList.getAccessListEntries().isEmpty() | ||
114 | - && accessList.getAccessListEntries() != null) { | ||
115 | - AceType aceType = accessList.getAccessListEntries() | ||
116 | - .get(accessEntryIntVlu).getMatches().getAceType(); | ||
117 | - | ||
118 | - if (aceType instanceof AceIp) { | ||
119 | - AceIp aceIp = (AceIp) aceType; | ||
120 | - SourcePortRange sourcePortRange = aceIp | ||
121 | - .getSourcePortRange(); | ||
122 | - if (sourcePortRange != null) { | ||
123 | - PortNumber lowerPort = sourcePortRange.getLowerPort(); | ||
124 | - PortNumber upperPort = sourcePortRange.getUpperPort(); | ||
125 | - | ||
126 | - if (lowerPort != null) { | ||
127 | - srcPortRangeLower = lowerPort.getValue(); | ||
128 | - } | ||
129 | - if (upperPort != null) { | ||
130 | - srcPortRangeUpper = upperPort.getValue(); | ||
131 | - } | ||
132 | - } | ||
133 | - DestinationPortRange destinationPortRange = aceIp | ||
134 | - .getDestinationPortRange(); | ||
135 | - | ||
136 | - if (destinationPortRange != null) { | ||
137 | - PortNumber lowerPort = destinationPortRange | ||
138 | - .getLowerPort(); | ||
139 | - if (lowerPort != null) { | ||
140 | - destPortRangeLower = lowerPort.getValue(); | ||
141 | - } | ||
142 | - | ||
143 | - PortNumber upperPort = destinationPortRange | ||
144 | - .getUpperPort(); | ||
145 | - if (upperPort != null) { | ||
146 | - destPortRangeUpper = upperPort.getValue(); | ||
147 | - } | ||
148 | - | ||
149 | - } | ||
150 | - | ||
151 | - AceIpVersion aceIpVersion = aceIp.getAceIpVersion(); | ||
152 | - if (aceIpVersion instanceof AceIpv4) { | ||
153 | - AceIpv4 obj = (AceIpv4) aceIpVersion; | ||
154 | - destinationIpAdd = obj.getDestinationIpv4Address() | ||
155 | - .getValue(); | ||
156 | - sourceIpAdd = obj.getSourceIpv4Address().getValue(); | ||
157 | - } else if (aceIpVersion instanceof AceIpv6) { | ||
158 | - AceIpv6 obj = (AceIpv6) aceIpVersion; | ||
159 | - destinationIpAdd = obj.getDestinationIpv6Address() | ||
160 | - .getValue(); | ||
161 | - sourceIpAdd = obj.getSourceIpv6Address().getValue(); | ||
162 | - } | ||
163 | - } else if (aceType instanceof AceEth) { | ||
164 | - log.debug("Need to add execution loging for Ace Type Ethernet"); | ||
165 | - } | ||
166 | - } | ||
167 | - } | ||
168 | - | ||
169 | - /** | ||
170 | - * Matches elements to define IP address & Port range for given ACL | ||
171 | - * model. | ||
172 | - */ | ||
173 | - Element matchesElement = new Element("matches", accessNamespaceRpc); | ||
174 | - if (String.valueOf(srcPortRangeLower) != null | ||
175 | - && !String.valueOf(srcPortRangeLower).isEmpty()) { | ||
176 | - | ||
177 | - matchesElement.addContent(new Element("source-port-range", | ||
178 | - accessNamespaceRpc) | ||
179 | - .addContent(new Element("lower-port", accessNamespaceRpc) | ||
180 | - .setText(String.valueOf(srcPortRangeLower)))); | ||
181 | - | ||
182 | - matchesElement.addContent(new Element("source-port-range", | ||
183 | - accessNamespaceRpc) | ||
184 | - .addContent(new Element("upper-port", accessNamespaceRpc) | ||
185 | - .setText(String.valueOf(srcPortRangeUpper)))); | ||
186 | - | ||
187 | - matchesElement.addContent(new Element("destination-port-range", | ||
188 | - accessNamespaceRpc) | ||
189 | - .addContent(new Element("lower-port", accessNamespaceRpc) | ||
190 | - .setText(String.valueOf(destPortRangeLower)))); | ||
191 | - | ||
192 | - matchesElement.addContent(new Element("destination-port-range", | ||
193 | - accessNamespaceRpc) | ||
194 | - .addContent(new Element("upper-port", accessNamespaceRpc) | ||
195 | - .setText(String.valueOf(destPortRangeUpper)))); | ||
196 | - } | ||
197 | - | ||
198 | - if (destinationIpAdd != null && !destinationIpAdd.isEmpty()) { | ||
199 | - matchesElement.addContent(new Element("destination-ipv4-address", | ||
200 | - accessNamespaceRpc) | ||
201 | - .setText(destinationIpAdd)); | ||
202 | - } | ||
203 | - if (sourceIpAdd != null && !sourceIpAdd.isEmpty()) { | ||
204 | - matchesElement.addContent(new Element("source-ipv4-address", | ||
205 | - accessNamespaceRpc) | ||
206 | - .setText(sourceIpAdd)); | ||
207 | - } | ||
208 | - | ||
209 | - /** | ||
210 | - * Access entries elements for given ACL model. | ||
211 | - */ | ||
212 | - Element accessEntries = new Element("access-list-entries", | ||
213 | - accessNamespaceRpc); | ||
214 | - accessEntries.addContent(new Element("rule-name", accessNamespaceRpc) | ||
215 | - .setText(accessList.getAccessListEntries() | ||
216 | - .get(accessEntryIntVlu).getRuleName())); | ||
217 | - accessEntries.addContent(matchesElement); | ||
218 | - accessEntries.addContent(new Element("actions", accessNamespaceRpc) | ||
219 | - .addContent(new Element("deny", accessNamespaceRpc))); | ||
220 | - | ||
221 | - return accessEntries; | ||
222 | - } | ||
223 | -} |
1 | -/* | ||
2 | - * Copyright 2014 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 | - * Provider that will accept any flow rules. | ||
19 | - */ | ||
20 | -package org.onosproject.provider.netconf.flow.impl; | ||
21 | - |
-
Please register or login to post a comment