sangho
Committed by Gerrit Code Review

Refactoring of OpenstackSwitching and OpenstackRouting

Change-Id: Ib7caea98006274dcdfebfe27c07e3533730ab23e
Showing 54 changed files with 2453 additions and 414 deletions
...@@ -103,7 +103,7 @@ ...@@ -103,7 +103,7 @@
103 </dependency> 103 </dependency>
104 <dependency> 104 <dependency>
105 <groupId>org.onosproject</groupId> 105 <groupId>org.onosproject</groupId>
106 - <artifactId>onos-app-openstackswitching-api</artifactId> 106 + <artifactId>onos-app-openstacknetworking-api</artifactId>
107 <version>${project.version}</version> 107 <version>${project.version}</version>
108 </dependency> 108 </dependency>
109 <dependency> 109 <dependency>
......
...@@ -19,8 +19,8 @@ import com.google.common.base.MoreObjects; ...@@ -19,8 +19,8 @@ import com.google.common.base.MoreObjects;
19 import org.onlab.packet.IpAddress; 19 import org.onlab.packet.IpAddress;
20 import org.onlab.packet.IpPrefix; 20 import org.onlab.packet.IpPrefix;
21 import org.onosproject.net.Host; 21 import org.onosproject.net.Host;
22 -import org.onosproject.openstackswitching.OpenstackNetwork; 22 +import org.onosproject.openstacknetworking.OpenstackNetwork;
23 -import org.onosproject.openstackswitching.OpenstackSubnet; 23 +import org.onosproject.openstacknetworking.OpenstackSubnet;
24 24
25 import java.util.Map; 25 import java.util.Map;
26 import java.util.Objects; 26 import java.util.Objects;
......
...@@ -62,10 +62,10 @@ import org.onosproject.net.packet.PacketProcessor; ...@@ -62,10 +62,10 @@ import org.onosproject.net.packet.PacketProcessor;
62 import org.onosproject.net.packet.PacketService; 62 import org.onosproject.net.packet.PacketService;
63 import org.onosproject.net.provider.AbstractProvider; 63 import org.onosproject.net.provider.AbstractProvider;
64 import org.onosproject.net.provider.ProviderId; 64 import org.onosproject.net.provider.ProviderId;
65 -import org.onosproject.openstackswitching.OpenstackNetwork; 65 +import org.onosproject.openstacknetworking.OpenstackNetworkingService;
66 -import org.onosproject.openstackswitching.OpenstackPort; 66 +import org.onosproject.openstacknetworking.OpenstackNetwork;
67 -import org.onosproject.openstackswitching.OpenstackSubnet; 67 +import org.onosproject.openstacknetworking.OpenstackPort;
68 -import org.onosproject.openstackswitching.OpenstackSwitchingService; 68 +import org.onosproject.openstacknetworking.OpenstackSubnet;
69 import org.slf4j.Logger; 69 import org.slf4j.Logger;
70 70
71 import java.util.List; 71 import java.util.List;
...@@ -123,7 +123,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro ...@@ -123,7 +123,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro
123 protected GroupService groupService; 123 protected GroupService groupService;
124 124
125 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 125 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
126 - protected OpenstackSwitchingService openstackService; 126 + protected OpenstackNetworkingService openstackService;
127 127
128 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 128 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
129 protected DhcpService dhcpService; 129 protected DhcpService dhcpService;
......
...@@ -71,8 +71,8 @@ import org.onosproject.net.group.GroupBuckets; ...@@ -71,8 +71,8 @@ import org.onosproject.net.group.GroupBuckets;
71 import org.onosproject.net.group.GroupDescription; 71 import org.onosproject.net.group.GroupDescription;
72 import org.onosproject.net.group.GroupKey; 72 import org.onosproject.net.group.GroupKey;
73 import org.onosproject.net.group.GroupService; 73 import org.onosproject.net.group.GroupService;
74 -import org.onosproject.openstackswitching.OpenstackNetwork; 74 +import org.onosproject.openstacknetworking.OpenstackNetwork;
75 -import org.onosproject.openstackswitching.OpenstackSubnet; 75 +import org.onosproject.openstacknetworking.OpenstackSubnet;
76 import org.slf4j.Logger; 76 import org.slf4j.Logger;
77 77
78 import java.util.ArrayList; 78 import java.util.ArrayList;
......
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- 2 <!--
3 - ~ Copyright 2015 Open Networking Laboratory 3 + ~ Copyright 2016 Open Networking Laboratory
4 ~ 4 ~
5 ~ Licensed under the Apache License, Version 2.0 (the "License"); 5 ~ Licensed under the Apache License, Version 2.0 (the "License");
6 ~ you may not use this file except in compliance with the License. 6 ~ you may not use this file except in compliance with the License.
...@@ -16,35 +16,34 @@ ...@@ -16,35 +16,34 @@
16 --> 16 -->
17 <project xmlns="http://maven.apache.org/POM/4.0.0" 17 <project xmlns="http://maven.apache.org/POM/4.0.0"
18 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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"> 19 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
20 <modelVersion>4.0.0</modelVersion> 20 <modelVersion>4.0.0</modelVersion>
21 21
22 <parent> 22 <parent>
23 <groupId>org.onosproject</groupId> 23 <groupId>org.onosproject</groupId>
24 - <artifactId>onos-openstackswitching</artifactId> 24 + <artifactId>onos-app-openstacknetworking</artifactId>
25 <version>1.5.0-SNAPSHOT</version> 25 <version>1.5.0-SNAPSHOT</version>
26 <relativePath>../pom.xml</relativePath> 26 <relativePath>../pom.xml</relativePath>
27 </parent> 27 </parent>
28 28
29 - <artifactId>onos-app-openstackswitching-api</artifactId> 29 + <artifactId>onos-app-openstacknetworking-api</artifactId>
30 <packaging>bundle</packaging> 30 <packaging>bundle</packaging>
31 31
32 - <description>SONA Openstack Switching application API</description>
33 -
34 <dependencies> 32 <dependencies>
35 <dependency> 33 <dependency>
36 - <groupId>org.onosproject</groupId>
37 - <artifactId>onos-api</artifactId>
38 - <version>${project.version}</version>
39 - </dependency>
40 - <dependency>
41 <groupId>org.osgi</groupId> 34 <groupId>org.osgi</groupId>
42 <artifactId>org.osgi.compendium</artifactId> 35 <artifactId>org.osgi.compendium</artifactId>
43 </dependency> 36 </dependency>
44 <dependency> 37 <dependency>
45 - <groupId>org.osgi</groupId> 38 + <groupId>org.onosproject</groupId>
46 - <artifactId>org.osgi.core</artifactId> 39 + <artifactId>onos-api</artifactId>
40 + </dependency>
41 + <dependency>
42 + <groupId>org.onosproject</groupId>
43 + <artifactId>onos-core-serializers</artifactId>
44 + <version>${project.version}</version>
47 </dependency> 45 </dependency>
48 </dependencies> 46 </dependencies>
49 47
50 </project> 48 </project>
49 +
......
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.openstacknetworking;
17 +
18 +import com.google.common.collect.Maps;
19 +import org.onlab.packet.Ip4Address;
20 +import java.util.Map;
21 +import java.util.Objects;
22 +
23 +/**
24 + * A configurable external gateway modes extension model in openstack router.
25 + */
26 +public final class OpenstackExternalGateway {
27 +
28 + private final String networkId;
29 + private final boolean enablePnat;
30 + private final Map<String, Ip4Address> externalFixedIps;
31 +
32 + private OpenstackExternalGateway(String networkId, boolean enablePnat,
33 + Map<String, Ip4Address> externalFixedIps) {
34 + this.networkId = networkId;
35 + this.enablePnat = enablePnat;
36 + this.externalFixedIps = externalFixedIps;
37 + }
38 +
39 + /**
40 + * Returns network ID.
41 + *
42 + * @return Network ID
43 + */
44 + public String networkId() {
45 + return networkId;
46 + }
47 +
48 + /**
49 + * Returns the PNAT status for external gateway.
50 + *
51 + * @return PNAT status
52 + */
53 + public boolean isEnablePnat() {
54 + return enablePnat;
55 + }
56 +
57 + /**
58 + * Returns external fixed IP informations.
59 + *
60 + * @return External fixed IP informations
61 + */
62 + public Map<String, Ip4Address> externalFixedIps() {
63 + return externalFixedIps;
64 + }
65 +
66 + @Override
67 + public boolean equals(Object o) {
68 + if (this == o) {
69 + return true;
70 + }
71 +
72 + if (o instanceof OpenstackExternalGateway) {
73 + OpenstackExternalGateway that = (OpenstackExternalGateway) o;
74 +
75 + return this.networkId.equals(that.networkId) &&
76 + this.enablePnat == that.enablePnat &&
77 + this.externalFixedIps.equals(that.externalFixedIps);
78 + }
79 +
80 + return false;
81 + }
82 +
83 + @Override
84 + public int hashCode() {
85 + return Objects.hash(networkId, enablePnat, externalFixedIps);
86 + }
87 +
88 + /**
89 + * An Openstack External Gateway Builder class.
90 + */
91 + public static final class Builder {
92 + private String networkId;
93 + private boolean enablePnat;
94 + private Map<String, Ip4Address> externalFixedIps;
95 +
96 + public Builder() {
97 + externalFixedIps = Maps.newHashMap();
98 + }
99 +
100 + /**
101 + * Sets network ID.
102 + *
103 + * @param networkId Network ID
104 + * @return Builder object
105 + */
106 + public Builder networkId(String networkId) {
107 + this.networkId = networkId;
108 + return this;
109 + }
110 +
111 + /**
112 + * Sets whether PNAT status is enabled or not.
113 + *
114 + * @param enablePnat true if PNAT status is enabled, false otherwise
115 + * @return Builder object
116 + */
117 + public Builder enablePnat(boolean enablePnat) {
118 + this.enablePnat = enablePnat;
119 + return this;
120 + }
121 +
122 + /**
123 + * Sets external fixed IP address information.
124 + *
125 + * @param externalFixedIps External fixed IP information
126 + * @return Builder object
127 + */
128 +
129 + public Builder externalFixedIps(Map<String, Ip4Address> externalFixedIps) {
130 + this.externalFixedIps.putAll(externalFixedIps);
131 + return this;
132 + }
133 +
134 + /**
135 + * Builds an OpenstackExternalGateway object.
136 + *
137 + * @return OpenstackExternalGateway object
138 + */
139 + public OpenstackExternalGateway build() {
140 + return new OpenstackExternalGateway(networkId, enablePnat, externalFixedIps);
141 + }
142 + }
143 +
144 +}
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.openstacknetworking;
17 +
18 +import org.onlab.packet.Ip4Address;
19 +
20 +import java.util.Objects;
21 +
22 +/**
23 + * An Openstack Neutron Floating IP Model.
24 + */
25 +public final class OpenstackFloatingIP {
26 +
27 + public enum FloatingIPStatus {
28 + UP,
29 + DOWN,
30 + ACTIVE,
31 + }
32 +
33 + private final String tenantId;
34 + private final String networkId;
35 + private final Ip4Address fixedIpAddress;
36 + private final String portId;
37 + private final String routerId;
38 + private final String id;
39 + private final Ip4Address floatingIpAddress;
40 + private final FloatingIPStatus status;
41 +
42 + private OpenstackFloatingIP(FloatingIPStatus status, String id, String tenantId,
43 + String networkId, Ip4Address fixedIpAddress, String portId,
44 + String routerId, Ip4Address floatingIpAddress) {
45 + this.status = status;
46 + this.id = id;
47 + this.tenantId = tenantId;
48 + this.networkId = networkId;
49 + this.fixedIpAddress = fixedIpAddress;
50 + this.portId = portId;
51 + this.routerId = routerId;
52 + this.floatingIpAddress = floatingIpAddress;
53 + }
54 +
55 + /**
56 + * Returns floating IP status.
57 + *
58 + * @return floating IP status
59 + */
60 + public FloatingIPStatus status() {
61 + return status;
62 + }
63 +
64 + /**
65 + * Returns floating IP`s ID.
66 + *
67 + * @return floating IP`s ID
68 + */
69 + public String id() {
70 + return id;
71 + }
72 +
73 + /**
74 + * Returns tenant ID.
75 + *
76 + * @return tenant ID
77 + */
78 + public String tenantId() {
79 + return tenantId;
80 + }
81 +
82 + /**
83 + * Returns network ID.
84 + *
85 + * @return network ID
86 + */
87 + public String networkId() {
88 + return networkId;
89 + }
90 +
91 + /**
92 + * Returns fixed IP Address.
93 + *
94 + * @return fixed IP Address
95 + */
96 + public Ip4Address fixedIpAddress() {
97 + return fixedIpAddress;
98 + }
99 +
100 + /**
101 + * Returns port ID.
102 + *
103 + * @return port ID
104 + */
105 + public String portId() {
106 + return portId;
107 + }
108 +
109 + /**
110 + * Returns router ID.
111 + *
112 + * @return router ID
113 + */
114 + public String routerId() {
115 + return routerId;
116 + }
117 +
118 + /**
119 + * Returns floating IP address.
120 + *
121 + * @return Floating IP address
122 + */
123 + public Ip4Address floatingIpAddress() {
124 + return floatingIpAddress;
125 + }
126 +
127 + @Override
128 + public boolean equals(Object o) {
129 + if (this == o) {
130 + return true;
131 + }
132 +
133 + if (o instanceof OpenstackFloatingIP) {
134 + OpenstackFloatingIP that = (OpenstackFloatingIP) o;
135 +
136 + return this.status.equals(that.status) &&
137 + this.id.equals(that.id) &&
138 + this.tenantId.equals(that.tenantId) &&
139 + this.networkId.equals(that.networkId) &&
140 + this.fixedIpAddress.equals(that.fixedIpAddress) &&
141 + this.floatingIpAddress.equals(that.floatingIpAddress) &&
142 + this.portId.equals(that.portId) &&
143 + this.routerId.equals(that.routerId);
144 + }
145 +
146 + return false;
147 + }
148 +
149 + @Override
150 + public int hashCode() {
151 + return Objects.hash(status, id, tenantId, networkId, floatingIpAddress, fixedIpAddress, portId, routerId);
152 + }
153 +
154 + /**
155 + * An Openstack Floating IP Builder class.
156 + */
157 + public static final class Builder {
158 + private String tenantId;
159 + private String networkId;
160 + private Ip4Address fixedIpAddress;
161 + private String portId;
162 + private String routerId;
163 + private String id;
164 + private Ip4Address floatingIpAddress;
165 + private FloatingIPStatus status;
166 +
167 + /**
168 + * Sets tenant ID.
169 + *
170 + * @param tenantId tenant ID
171 + * @return Builder object
172 + */
173 + public Builder tenantId(String tenantId) {
174 + this.tenantId = tenantId;
175 + return this;
176 + }
177 +
178 + /**
179 + * Sets floating IP status.
180 + *
181 + * @param status Floating IP status
182 + * @return Builder object
183 + */
184 + public Builder status(FloatingIPStatus status) {
185 + this.status = status;
186 + return this;
187 + }
188 +
189 + /**
190 + * Sets Floating IP`s ID.
191 + *
192 + * @param id Floating IP`s ID
193 + * @return Builder object
194 + */
195 + public Builder id(String id) {
196 + this.id = id;
197 + return this;
198 + }
199 +
200 + /**
201 + * Sets network ID.
202 + *
203 + * @param networkId Network ID
204 + * @return Builder object
205 + */
206 + public Builder networkId(String networkId) {
207 + this.networkId = networkId;
208 + return this;
209 + }
210 +
211 + /**
212 + * Sets fixed IP address.
213 + *
214 + * @param fixedIpAddress Fixed IP address
215 + * @return Builder object
216 + */
217 + public Builder fixedIpAddress(Ip4Address fixedIpAddress) {
218 + this.fixedIpAddress = fixedIpAddress;
219 + return this;
220 + }
221 +
222 + /**
223 + * Sets port ID.
224 + *
225 + * @param portId port ID
226 + * @return Builder object
227 + */
228 + public Builder portId(String portId) {
229 + this.portId = portId;
230 + return this;
231 + }
232 +
233 + /**
234 + * Sets router ID.
235 + *
236 + * @param routerId router ID
237 + * @return Builder object
238 + */
239 + public Builder routerId(String routerId) {
240 + this.routerId = routerId;
241 + return this;
242 + }
243 +
244 + /**
245 + * Sets floating IP address.
246 + *
247 + * @param floatingIpAddress Floating IP address
248 + * @return Builder object
249 + */
250 + public Builder floatingIpAddress(Ip4Address floatingIpAddress) {
251 + this.floatingIpAddress = floatingIpAddress;
252 + return this;
253 + }
254 +
255 + /**
256 + * Builds an OpenstackFloatingIP object.
257 + *
258 + * @return OpenstackFloatingIP object
259 + */
260 + public OpenstackFloatingIP build() {
261 + return new OpenstackFloatingIP(status, id, tenantId, networkId,
262 + fixedIpAddress, portId, routerId, floatingIpAddress);
263 +
264 + }
265 + }
266 +}
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching; 16 +package org.onosproject.openstacknetworking;
17 17
18 import java.util.Collection; 18 import java.util.Collection;
19 19
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.impl; 16 +package org.onosproject.openstacknetworking;
17 17
18 import org.onosproject.core.ApplicationId; 18 import org.onosproject.core.ApplicationId;
19 import org.onosproject.net.config.Config; 19 import org.onosproject.net.config.Config;
...@@ -22,7 +22,7 @@ import org.onosproject.net.config.basics.BasicElementConfig; ...@@ -22,7 +22,7 @@ import org.onosproject.net.config.basics.BasicElementConfig;
22 /** 22 /**
23 * Handles configuration for OpenstackSwitching app. 23 * Handles configuration for OpenstackSwitching app.
24 */ 24 */
25 -public class OpenstackSwitchingConfig extends Config<ApplicationId> { 25 +public class OpenstackNetworkingConfig extends Config<ApplicationId> {
26 public static final String DONOTPUSH = "do_not_push_flows"; 26 public static final String DONOTPUSH = "do_not_push_flows";
27 public static final String NEUTRON_SERVER = "neutron_server"; 27 public static final String NEUTRON_SERVER = "neutron_server";
28 public static final String KEYSTONE_SERVER = "keystone_server"; 28 public static final String KEYSTONE_SERVER = "keystone_server";
......
...@@ -13,53 +13,17 @@ ...@@ -13,53 +13,17 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching; 16 +package org.onosproject.openstacknetworking;
17 17
18 import org.onosproject.net.Port; 18 import org.onosproject.net.Port;
19 -import org.onosproject.openstackrouting.OpenstackRouter;
20 -import org.onosproject.openstackrouting.OpenstackRouterInterface;
21 19
22 import java.util.Collection; 20 import java.util.Collection;
21 +import java.util.Map;
23 22
24 /** 23 /**
25 * Handles port management REST API from Openstack for VMs. 24 * Handles port management REST API from Openstack for VMs.
26 */ 25 */
27 -public interface OpenstackSwitchingService { 26 +public interface OpenstackNetworkingService {
28 -
29 - /**
30 - * Store the port information created by Openstack.
31 - *
32 - * @param openstackPort port information
33 - */
34 - void createPorts(OpenstackPort openstackPort);
35 -
36 - /**
37 - * Removes flow rules corresponding to the port removed by Openstack.
38 - *
39 - * @param uuid UUID
40 - */
41 - void deletePort(String uuid);
42 -
43 - /**
44 - * Updates flow rules corresponding to the port information updated by Openstack.
45 - *
46 - * @param openstackPort OpenStack port
47 - */
48 - void updatePort(OpenstackPort openstackPort);
49 -
50 - /**
51 - * Stores the network information created by openstack.
52 - *
53 - * @param openstackNetwork network information
54 - */
55 - void createNetwork(OpenstackNetwork openstackNetwork);
56 -
57 - /**
58 - * Stores the subnet information created by openstack.
59 - *
60 - * @param openstackSubnet subnet information
61 - */
62 - void createSubnet(OpenstackSubnet openstackSubnet);
63 27
64 /** 28 /**
65 * Returns port information list for the network ID given. 29 * Returns port information list for the network ID given.
...@@ -95,10 +59,16 @@ public interface OpenstackSwitchingService { ...@@ -95,10 +59,16 @@ public interface OpenstackSwitchingService {
95 * Returns network information list for the network ID given. 59 * Returns network information list for the network ID given.
96 * 60 *
97 * @param networkId Network ID 61 * @param networkId Network ID
98 - * @return network information list, or null if not present 62 + * @return network information, or null if not present
99 */ 63 */
100 OpenstackNetwork network(String networkId); 64 OpenstackNetwork network(String networkId);
101 65
66 + /**
67 + * Returns the information of all openstack networks.
68 + *
69 + * @return collection of network information
70 + */
71 + Collection<OpenstackNetwork> networks();
102 72
103 /** 73 /**
104 * Returns subnet information for the subnet ID give. 74 * Returns subnet information for the subnet ID give.
...@@ -109,37 +79,11 @@ public interface OpenstackSwitchingService { ...@@ -109,37 +79,11 @@ public interface OpenstackSwitchingService {
109 OpenstackSubnet subnet(String subnetId); 79 OpenstackSubnet subnet(String subnetId);
110 80
111 /** 81 /**
112 - * Sends the created router information to OpenstackRouting service. 82 + * Returns collection of openstack subnet information.
113 - *
114 - * @param openstackRouter Router Information
115 - */
116 - void createRouter(OpenstackRouter openstackRouter);
117 - /**
118 - * Sends the updated router information to OpenstackRouting service.
119 - *
120 - * @param routerId Router ID
121 - */
122 - void updateRouter(String routerId);
123 - /**
124 - * Sends the removed router information to OpenstackRouting service.
125 - *
126 - * @param routerId Router ID
127 - */
128 - void deleteRouter(String routerId);
129 -
130 - /**
131 - * Sends the updated router interface information to OpenstackRouting service.
132 - *
133 - * @param openstackRouterInterface Router interface information
134 - */
135 - void updateRouterInterface(OpenstackRouterInterface openstackRouterInterface);
136 -
137 - /**
138 - * Sends the removed router interface information to OpenstackRouting service.
139 * 83 *
140 - * @param openstackRouterInterface Router interface information 84 + * @return collection of openststack subnet information
141 */ 85 */
142 - void removeRouterInterface(OpenstackRouterInterface openstackRouterInterface); 86 + Collection<OpenstackSubnet> subnets();
143 87
144 /** 88 /**
145 * Returns the router information list. 89 * Returns the router information list.
...@@ -157,18 +101,28 @@ public interface OpenstackSwitchingService { ...@@ -157,18 +101,28 @@ public interface OpenstackSwitchingService {
157 OpenstackRouter router(String routerId); 101 OpenstackRouter router(String routerId);
158 102
159 /** 103 /**
160 - * Returns the OpensatckPortInfo list. 104 + * Retruns OpenstackPortInfo map.
161 * 105 *
162 - * @return OpensatckPortInfo list 106 + * @return OpenstackPortInfo map
163 */ 107 */
164 - Collection<OpenstackPortInfo> portInfos(); 108 + Map<String, OpenstackPortInfo> openstackPortInfo();
165 109
166 /** 110 /**
167 - * Returns the MacAddress for physical router. 111 + * Sets configurations specified by net-config.xml file.
168 * 112 *
169 - * @return physical router mac 113 + * @param neutronUrl neutron server url
114 + * @param keystoneUrl keystone server url
115 + * @param userName horizon user name
116 + * @param pass horizon passowrd
170 */ 117 */
171 - String physicalRouterMac(); 118 + void setConfigurations(String neutronUrl, String keystoneUrl, String userName, String pass);
172 119
120 + /**
121 + * Returns Security Group information of the security groupd id given.
122 + *
123 + * @param id security group id
124 + * @return security group information
125 + */
126 + OpenstackSecurityGroup getSecurityGroup(String id);
173 127
174 } 128 }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching; 16 +package org.onosproject.openstacknetworking;
17 17
18 import com.google.common.collect.Maps; 18 import com.google.common.collect.Maps;
19 import org.onlab.packet.Ip4Address; 19 import org.onlab.packet.Ip4Address;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching; 16 +package org.onosproject.openstacknetworking;
17 17
18 import org.onlab.packet.Ip4Address; 18 import org.onlab.packet.Ip4Address;
19 import org.onlab.packet.MacAddress; 19 import org.onlab.packet.MacAddress;
......
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.openstacknetworking;
17 +
18 +import java.util.Objects;
19 +
20 +/**
21 + * An Openstack Neutron Router Model.
22 + */
23 +public final class OpenstackRouter {
24 +
25 + public enum RouterStatus {
26 + UP,
27 + DOWN,
28 + ACTIVE,
29 + }
30 +
31 + private final String tenantId;
32 + private final String id;
33 + private final String name;
34 + private final RouterStatus status;
35 + private final boolean adminStateUp;
36 + private final OpenstackExternalGateway gatewayExternalInfo;
37 +
38 + private OpenstackRouter(String id, String tenantId, String name, RouterStatus status,
39 + boolean adminStateUp, OpenstackExternalGateway gatewayExternalInfo) {
40 + this.id = id;
41 + this.tenantId = tenantId;
42 + this.name = name;
43 + this.status = status;
44 + this.adminStateUp = adminStateUp;
45 + this.gatewayExternalInfo = gatewayExternalInfo;
46 +
47 + }
48 +
49 + /**
50 + * Returns tenant ID.
51 + *
52 + * @return tenant ID
53 + */
54 + public String tenantId() {
55 + return tenantId;
56 + }
57 +
58 + /**
59 + * Returns router ID.
60 + *
61 + * @return router ID
62 + */
63 + public String id() {
64 + return id;
65 + }
66 +
67 + /**
68 + * Returns router name.
69 + *
70 + * @return router name
71 + */
72 + public String name() {
73 + return name;
74 + }
75 +
76 + /**
77 + * Returns router status.
78 + *
79 + * @return router stauts
80 + */
81 + public RouterStatus status() {
82 + return status;
83 + }
84 +
85 + /**
86 + * Returns whether admin state up or not.
87 + *
88 + * @return true if admin state up, false otherwise
89 + */
90 + public boolean adminStateUp() {
91 + return adminStateUp;
92 + }
93 +
94 + /**
95 + * Returns external gateway information.
96 + *
97 + * @return external gateway information
98 + */
99 + public OpenstackExternalGateway gatewayExternalInfo() {
100 + return gatewayExternalInfo;
101 + }
102 +
103 + @Override
104 + public boolean equals(Object o) {
105 + if (this == o) {
106 + return true;
107 + }
108 +
109 + if (o instanceof OpenstackRouter) {
110 + OpenstackRouter that = (OpenstackRouter) o;
111 +
112 + return this.adminStateUp == that.adminStateUp &&
113 + this.gatewayExternalInfo.equals(that.gatewayExternalInfo) &&
114 + this.id.equals(that.id) &&
115 + this.name.equals(that.name) &&
116 + this.status.equals(that.status) &&
117 + this.tenantId.equals(that.tenantId);
118 + }
119 +
120 + return false;
121 + }
122 +
123 + @Override
124 + public int hashCode() {
125 + return Objects.hash(adminStateUp, gatewayExternalInfo, id, name, status, tenantId);
126 + }
127 +
128 + /**
129 + * An Openstack Router Builder class.
130 + */
131 + public static final class Builder {
132 +
133 + private String tenantId;
134 + private String id;
135 + private String name;
136 + private RouterStatus status;
137 + private Boolean adminStateUp;
138 + private OpenstackExternalGateway gatewayExternalInfo;
139 +
140 + /**
141 + * Sets router ID.
142 + *
143 + * @param id router ID
144 + * @return Builder object
145 + */
146 + public Builder id(String id) {
147 + this.id = id;
148 + return this;
149 + }
150 +
151 + /**
152 + * Sets router name.
153 + *
154 + * @param name router name
155 + * @return Builder object
156 + */
157 + public Builder name(String name) {
158 + this.name = name;
159 + return this;
160 + }
161 +
162 + /**
163 + * Sets router status.
164 + *
165 + * @param status router status
166 + * @return Builder object
167 + */
168 + public Builder status(RouterStatus status) {
169 + this.status = status;
170 + return this;
171 + }
172 +
173 + /**
174 + * Sets tenant ID.
175 + *
176 + * @param tenantId Tenant ID
177 + * @return Builder object
178 + */
179 + public Builder tenantId(String tenantId) {
180 + this.tenantId = tenantId;
181 + return this;
182 + }
183 +
184 + /**
185 + * Sets whether admin state up or not.
186 + *
187 + * @param adminStateUp true if admin state is up, false otherwise
188 + * @return Builder object
189 + */
190 + public Builder adminStateUp(boolean adminStateUp) {
191 + this.adminStateUp = adminStateUp;
192 + return this;
193 + }
194 +
195 + /**
196 + * Sets external gateway information.
197 + *
198 + * @param gatewayExternalInfo external gateway information
199 + * @return Builder object
200 + */
201 + public Builder gatewayExternalInfo(OpenstackExternalGateway gatewayExternalInfo) {
202 + this.gatewayExternalInfo = gatewayExternalInfo;
203 + return this;
204 + }
205 +
206 + /**
207 + * Builds an OpenstackRouter object.
208 + *
209 + * @return OpenstasckRouter object
210 + */
211 + public OpenstackRouter build() {
212 + return new OpenstackRouter(id, tenantId, name, status,
213 + adminStateUp, gatewayExternalInfo);
214 + }
215 + }
216 +
217 +
218 +}
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.openstacknetworking;
17 +
18 +import java.util.Objects;
19 +
20 +import static com.google.common.base.Preconditions.checkNotNull;
21 +
22 +/**
23 + * An Openstack Neutron Router Interface Model.
24 + */
25 +public final class OpenstackRouterInterface {
26 + private final String id;
27 + private final String tenantId;
28 + private final String subnetId;
29 + private final String portId;
30 +
31 + private OpenstackRouterInterface(String id, String tenantId,
32 + String subnetId, String portId) {
33 + this.id = checkNotNull(id);
34 + this.tenantId = checkNotNull(tenantId);
35 + this.subnetId = checkNotNull(subnetId);
36 + this.portId = checkNotNull(portId);
37 + }
38 +
39 + /**
40 + * Returns Router Interface ID.
41 + *
42 + * @return router interface ID
43 + */
44 + public String id() {
45 + return id;
46 + }
47 +
48 + /**
49 + * Returns tenant ID.
50 + *
51 + * @return tenant ID
52 + */
53 + public String tenantId() {
54 + return tenantId;
55 + }
56 +
57 + /**
58 + * Returns subnet ID.
59 + *
60 + * @return subnet ID
61 + */
62 + public String subnetId() {
63 + return subnetId;
64 + }
65 +
66 + /**
67 + * Returns port ID.
68 + *
69 + * @return port ID
70 + */
71 + public String portId() {
72 + return portId;
73 + }
74 +
75 + @Override
76 + public boolean equals(Object o) {
77 + if (this == o) {
78 + return true;
79 + }
80 +
81 + if (o instanceof OpenstackRouterInterface) {
82 + OpenstackRouterInterface that = (OpenstackRouterInterface) o;
83 +
84 + return this.id.equals(that.id) &&
85 + this.portId.equals(that.portId) &&
86 + this.subnetId.equals(that.subnetId) &&
87 + this.tenantId.equals(that.tenantId);
88 + }
89 +
90 + return false;
91 + }
92 +
93 + @Override
94 + public int hashCode() {
95 + return Objects.hash(id, portId, subnetId, tenantId);
96 + }
97 +
98 + /**
99 + * An Openstack Router Interface Builder class.
100 + */
101 + public static final class Builder {
102 + private String id;
103 + private String tenantId;
104 + private String subnetId;
105 + private String portId;
106 +
107 + /**
108 + * Sets Router Interface ID.
109 + *
110 + * @param id router interface ID
111 + * @return Builder object
112 + */
113 + public Builder id(String id) {
114 + this.id = id;
115 + return this;
116 + }
117 +
118 + /**
119 + * Sets tenant ID.
120 + *
121 + * @param tenantId tenant ID
122 + * @return Builder object
123 + */
124 + public Builder tenantId(String tenantId) {
125 + this.tenantId = tenantId;
126 + return this;
127 + }
128 +
129 + /**
130 + * Sets subnet ID.
131 + *
132 + * @param subnetId subnet ID
133 + * @return Builder object
134 + */
135 + public Builder subnetId(String subnetId) {
136 + this.subnetId = subnetId;
137 + return this;
138 + }
139 +
140 + /**
141 + * Sets port ID.
142 + *
143 + * @param portId port ID
144 + * @return Builder object
145 + */
146 + public Builder portId(String portId) {
147 + this.portId = portId;
148 + return this;
149 + }
150 +
151 +
152 + /**
153 + * Builds an Openstack Router Interface object.
154 + *
155 + * @return OpenstackRouterInterface object
156 + */
157 + public OpenstackRouterInterface build() {
158 + return new OpenstackRouterInterface(id, tenantId, subnetId, portId);
159 + }
160 +
161 + }
162 +}
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.openstacknetworking;
17 +
18 +/**
19 + * The Interface of Openstack Routing.
20 + */
21 +public interface OpenstackRoutingService {
22 +
23 + /**
24 + * Stores the Floating IP information created by Openstack.
25 + *
26 + * @param openstackFloatingIP Floating IP information
27 + */
28 + void createFloatingIP(OpenstackFloatingIP openstackFloatingIP);
29 +
30 + /**
31 + * Updates flow rules corresponding to the Floating IP information updated by Openstack.
32 + *
33 + * @param openstackFloatingIP Floating IP information
34 + */
35 + void updateFloatingIP(OpenstackFloatingIP openstackFloatingIP);
36 +
37 + /**
38 + * Removes flow rules corresponding to Floating IP information removed by Openstack.
39 + *
40 + * @param id Deleted Floating IP`s ID
41 + */
42 + void deleteFloatingIP(String id);
43 +
44 + /**
45 + * Stores the router information created by Openstack.
46 + *
47 + * @param openstackRouter Floating IP information
48 + */
49 + void createRouter(OpenstackRouter openstackRouter);
50 +
51 + /**
52 + * Updates flow rules corresponding to the router information updated by Openstack.
53 + *
54 + * @param openstackRouter Router information
55 + */
56 + void updateRouter(OpenstackRouter openstackRouter);
57 +
58 + /**
59 + * Removes flow rules corresponding to the router information removed by Openstack.
60 + *
61 + * @param id Deleted router`s ID
62 + */
63 + void deleteRouter(String id);
64 +
65 + /**
66 + * Updates flow rules corresponding to the router information updated by Openstack.
67 + *
68 + * @param openstackRouterInterface Router information
69 + */
70 + void updateRouterInterface(OpenstackRouterInterface openstackRouterInterface);
71 +
72 + /**
73 + * Removes flow rules corresponding to the router information removed by Openstack.
74 + *
75 + * @param openstackRouterInterface Router information
76 + */
77 + void removeRouterInterface(OpenstackRouterInterface openstackRouterInterface);
78 +
79 +
80 +}
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.impl; 16 +package org.onosproject.openstacknetworking;
17 17
18 import java.util.Collection; 18 import java.util.Collection;
19 import java.util.Collections; 19 import java.util.Collections;
...@@ -112,7 +112,7 @@ public final class OpenstackSecurityGroup { ...@@ -112,7 +112,7 @@ public final class OpenstackSecurityGroup {
112 this.rules.containsAll(that.rules); 112 this.rules.containsAll(that.rules);
113 } 113 }
114 114
115 - return true; 115 + return false;
116 } 116 }
117 117
118 @Override 118 @Override
......
...@@ -13,23 +13,27 @@ ...@@ -13,23 +13,27 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.impl; 16 +package org.onosproject.openstacknetworking;
17 +
18 +import java.util.Objects;
19 +
20 +import static com.google.common.base.Preconditions.checkNotNull;
17 21
18 /** 22 /**
19 * Represents Openstack Security Group Rules. 23 * Represents Openstack Security Group Rules.
20 */ 24 */
21 public final class OpenstackSecurityGroupRule { 25 public final class OpenstackSecurityGroupRule {
22 26
23 - private String direction; 27 + private final String direction;
24 - private String ethertype; 28 + private final String ethertype;
25 - private String id; 29 + private final String id;
26 - private String portRangeMax; 30 + private final String portRangeMax;
27 - private String portRangeMin; 31 + private final String portRangeMin;
28 - private String protocol; 32 + private final String protocol;
29 - private String remoteGroupId; 33 + private final String remoteGroupId;
30 - private String remoteIpPrefix; 34 + private final String remoteIpPrefix;
31 - private String secuityGroupId; 35 + private final String secuityGroupId;
32 - private String tenantId; 36 + private final String tenantId;
33 37
34 private OpenstackSecurityGroupRule(String direction, 38 private OpenstackSecurityGroupRule(String direction,
35 String ethertype, 39 String ethertype,
...@@ -43,7 +47,7 @@ public final class OpenstackSecurityGroupRule { ...@@ -43,7 +47,7 @@ public final class OpenstackSecurityGroupRule {
43 String tenantId) { 47 String tenantId) {
44 this.direction = direction; 48 this.direction = direction;
45 this.ethertype = ethertype; 49 this.ethertype = ethertype;
46 - this.id = id; 50 + this.id = checkNotNull(id);
47 this.portRangeMax = portRangeMax; 51 this.portRangeMax = portRangeMax;
48 this.portRangeMin = portRangeMin; 52 this.portRangeMin = portRangeMin;
49 this.protocol = protocol; 53 this.protocol = protocol;
...@@ -53,15 +57,6 @@ public final class OpenstackSecurityGroupRule { ...@@ -53,15 +57,6 @@ public final class OpenstackSecurityGroupRule {
53 this.tenantId = tenantId; 57 this.tenantId = tenantId;
54 } 58 }
55 59
56 - /**
57 - * Returns the builder object for the OpenstackSecurityGroupRule.
58 - *
59 - * @return OpenstackSecurityGroupRule builder object
60 - */
61 - public static OpenstackSecurityGroupRule.Builder builder() {
62 - return new Builder();
63 - }
64 -
65 @Override 60 @Override
66 public String toString() { 61 public String toString() {
67 return new StringBuilder(" [") 62 return new StringBuilder(" [")
...@@ -78,6 +73,35 @@ public final class OpenstackSecurityGroupRule { ...@@ -78,6 +73,35 @@ public final class OpenstackSecurityGroupRule {
78 .toString(); 73 .toString();
79 } 74 }
80 75
76 + @Override
77 + public boolean equals(Object o) {
78 + if (this == o) {
79 + return true;
80 + }
81 +
82 + if (this instanceof OpenstackSecurityGroupRule) {
83 + OpenstackSecurityGroupRule that = (OpenstackSecurityGroupRule) o;
84 + return this.direction.equals(that.direction) &&
85 + this.ethertype.equals(that.direction) &&
86 + this.id.equals(that.id) &&
87 + this.portRangeMax.equals(that.portRangeMax) &&
88 + this.portRangeMin.equals(that.portRangeMin) &&
89 + this.protocol.equals(that.protocol) &&
90 + this.remoteGroupId.equals(that.remoteGroupId) &&
91 + this.secuityGroupId.equals(that.secuityGroupId) &&
92 + this.remoteIpPrefix.equals(that.remoteIpPrefix) &&
93 + this.tenantId.equals(that.tenantId);
94 + }
95 +
96 + return false;
97 + }
98 +
99 + @Override
100 + public int hashCode() {
101 + return Objects.hash(direction, ethertype, id, portRangeMax, portRangeMin, protocol,
102 + remoteGroupId, remoteIpPrefix, secuityGroupId, tenantId);
103 + }
104 +
81 /** 105 /**
82 * Represents a security group rule builder object. 106 * Represents a security group rule builder object.
83 */ 107 */
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching; 16 +package org.onosproject.openstacknetworking;
17 17
18 import org.onlab.packet.Ip4Address; 18 import org.onlab.packet.Ip4Address;
19 19
......
1 +/*
2 + * Copyright 2015-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.openstacknetworking;
17 +
18 +import java.util.Map;
19 +
20 +/**
21 + * Handles port management REST API from Openstack for VMs.
22 + */
23 +public interface OpenstackSwitchingService {
24 +
25 + /**
26 + * Store the port information created by Openstack.
27 + *
28 + * @param openstackPort port information
29 + */
30 + void createPorts(OpenstackPort openstackPort);
31 +
32 + /**
33 + * Removes flow rules corresponding to the port removed by Openstack.
34 + *
35 + * @param uuid UUID
36 + */
37 + void removePort(String uuid);
38 +
39 + /**
40 + * Updates flow rules corresponding to the port information updated by Openstack.
41 + *
42 + * @param openstackPort OpenStack port
43 + */
44 + void updatePort(OpenstackPort openstackPort);
45 +
46 + /**
47 + * Stores the network information created by openstack.
48 + *
49 + * @param openstackNetwork network information
50 + */
51 + void createNetwork(OpenstackNetwork openstackNetwork);
52 +
53 + /**
54 + * Stores the subnet information created by openstack.
55 + *
56 + * @param openstackSubnet subnet information
57 + */
58 + void createSubnet(OpenstackSubnet openstackSubnet);
59 +
60 + /**
61 + * Retruns OpenstackPortInfo map.
62 + *
63 + * @return OpenstackPortInfo map
64 + */
65 + Map<String, OpenstackPortInfo> openstackPortInfo();
66 +
67 +}
1 /* 1 /*
2 - * Copyright 2015 Open Networking Laboratory 2 + * Copyright 2016 Open Networking Laboratory
3 * 3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License. 5 * you may not use this file except in compliance with the License.
...@@ -15,6 +15,6 @@ ...@@ -15,6 +15,6 @@
15 */ 15 */
16 16
17 /** 17 /**
18 - * OpenStack switching REST API. 18 + * Application for OpenstackRouting.
19 */ 19 */
20 -package org.onosproject.openstackswitching.web; 20 +package org.onosproject.openstacknetworking;
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -14,12 +14,15 @@ ...@@ -14,12 +14,15 @@
14 ~ See the License for the specific language governing permissions and 14 ~ See the License for the specific language governing permissions and
15 ~ limitations under the License. 15 ~ limitations under the License.
16 --> 16 -->
17 -<app name="org.onosproject.openstackswitching" origin="ON.Lab" version="${project.version}" 17 +<app name="org.onosproject.openstacknetworking" origin="ON.Lab" version="${project.version}"
18 category="default" url="http://onosproject.org" 18 category="default" url="http://onosproject.org"
19 featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features" 19 featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
20 features="${project.artifactId}"> 20 features="${project.artifactId}">
21 <description>${project.description}</description> 21 <description>${project.description}</description>
22 + <artifact>mvn:${project.groupId}/onos-app-openstacknetworking-api/${project.version}</artifact>
23 + <artifact>mvn:${project.groupId}/onos-app-openstacknetworking-web/${project.version}</artifact>
22 <artifact>mvn:${project.groupId}/onos-app-openstackswitching/${project.version}</artifact> 24 <artifact>mvn:${project.groupId}/onos-app-openstackswitching/${project.version}</artifact>
25 + <artifact>mvn:${project.groupId}/onos-app-openstackrouting/${project.version}</artifact>
23 <artifact>mvn:${project.groupId}/onos-app-dhcp-api/${project.version}</artifact> 26 <artifact>mvn:${project.groupId}/onos-app-dhcp-api/${project.version}</artifact>
24 <artifact>mvn:${project.groupId}/onos-app-dhcp/${project.version}</artifact> 27 <artifact>mvn:${project.groupId}/onos-app-dhcp/${project.version}</artifact>
25 </app> 28 </app>
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
18 <feature name="${project.artifactId}" version="${project.version}" 18 <feature name="${project.artifactId}" version="${project.version}"
19 description="${project.description}"> 19 description="${project.description}">
20 <feature>onos-api</feature> 20 <feature>onos-api</feature>
21 - <bundle>mvn:${project.groupId}/onos-app-openstackswitching-api/${project.version}</bundle> 21 + <bundle>mvn:${project.groupId}/onos-app-openstacknetworking-api/${project.version}</bundle>
22 + <bundle>mvn:${project.groupId}/onos-app-openstacknetworking-web/${project.version}</bundle>
22 <bundle>mvn:${project.groupId}/onos-app-openstackswitching/${project.version}</bundle> 23 <bundle>mvn:${project.groupId}/onos-app-openstackswitching/${project.version}</bundle>
23 <bundle>mvn:${project.groupId}/onos-app-dhcp-api/${project.version}</bundle> 24 <bundle>mvn:${project.groupId}/onos-app-dhcp-api/${project.version}</bundle>
24 <bundle>mvn:${project.groupId}/onos-app-dhcp/${project.version}</bundle> 25 <bundle>mvn:${project.groupId}/onos-app-dhcp/${project.version}</bundle>
......
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016 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/xsd/maven-4.0.0.xsd">
20 + <modelVersion>4.0.0</modelVersion>
21 +
22 + <parent>
23 + <groupId>org.onosproject</groupId>
24 + <artifactId>onos-app-openstacknetworking</artifactId>
25 + <version>1.5.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
27 + </parent>
28 +
29 + <artifactId>onos-app-openstacknetworking-app</artifactId>
30 + <packaging>pom</packaging>
31 +
32 + <properties>
33 + <onos.app.name>org.onosproject.openstacknetworking</onos.app.name>
34 + <onos.app.category>default</onos.app.category>
35 + <onos.app.url>http://onosproject.org</onos.app.url>
36 + <onos.app.readme>Openstack Networking Application.</onos.app.readme>
37 + </properties>
38 +
39 + <description>SONA Openstack Networking main Application</description>
40 +
41 + <dependencies>
42 + <dependency>
43 + <groupId>org.onosproject</groupId>
44 + <artifactId>onos-app-openstackswitching</artifactId>
45 + <version>${project.version}</version>
46 + </dependency>
47 + <dependency>
48 + <groupId>org.onosproject</groupId>
49 + <artifactId>onos-app-openstackrouting</artifactId>
50 + <version>${project.version}</version>
51 + </dependency>
52 + <dependency>
53 + <groupId>org.onosproject</groupId>
54 + <artifactId>onos-app-openstacknetworking-api</artifactId>
55 + <version>${project.version}</version>
56 + </dependency>
57 + <dependency>
58 + <groupId>org.onosproject</groupId>
59 + <artifactId>onos-app-openstacknetworking-web</artifactId>
60 + <version>${project.version}</version>
61 + </dependency>
62 + </dependencies>
63 +</project>
1 +{
2 + "apps" : {
3 + "org.onosproject.openstackswitching" : {
4 + "openstackswitching" : {
5 + "do_not_push_flows" : "false",
6 + "neutron_server" : "http://192.168.56.103:9696/v2.0/",
7 + "keystone_server" : "http://192.168.56.103:5000/v2.0/",
8 + "user_name" : "admin",
9 + "password" : "nova",
10 + "physicalRouterMac" : "00:00:00:00:00:20",
11 + "nodes" : [
12 + {
13 + "hostname" : "compute-01",
14 + "ovsdbIp" : "192.168.56.102",
15 + "ovsdbPort" : "6640",
16 + "bridgeId" : "of:0000000000000001",
17 + "openstackNodeType" : "COMPUTENODE"
18 + },
19 + {
20 + "hostname" : "compute-02",
21 + "ovsdbIp" : "192.168.56.101",
22 + "ovsdbPort" : "6640",
23 + "bridgeId" : "of:0000000000000002",
24 + "openstackNodeType" : "COMPUTENODE"
25 + },
26 + {
27 + "hostname" : "network",
28 + "ovsdbIp" : "192.168.56.106",
29 + "ovsdbPort" : "6640",
30 + "bridgeId" : "of:0000000000000003",
31 + "openstackNodeType" : "GATEWAYNODE",
32 + "externalIfName" : "eth3",
33 + "externalIfMacAddress" : "00:00:00:00:00:11"
34 + }
35 + ]
36 + }
37 + }
38 + },
39 + "devices" : {
40 + "of:0000000000000001" : {
41 + "basic" : {
42 + "driver" : "sona"
43 + }
44 + },
45 + "of:0000000000000002" : {
46 + "basic" : {
47 + "driver" : "sona"
48 + }
49 + }
50 + }
51 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016 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/xsd/maven-4.0.0.xsd">
20 + <modelVersion>4.0.0</modelVersion>
21 +
22 + <parent>
23 + <groupId>org.onosproject</groupId>
24 + <artifactId>onos-app-openstacknetworking</artifactId>
25 + <version>1.5.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
27 + </parent>
28 +
29 + <artifactId>onos-app-openstackrouting</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>org.onosproject</groupId>
39 + <artifactId>onos-api</artifactId>
40 + </dependency>
41 + <dependency>
42 + <groupId>org.onosproject</groupId>
43 + <artifactId>onos-core-serializers</artifactId>
44 + <version>${project.version}</version>
45 + </dependency>
46 + <dependency>
47 + <groupId>org.onosproject</groupId>
48 + <artifactId>onos-app-openstacknetworking-api</artifactId>
49 + <version>${project.version}</version>
50 + </dependency>
51 + </dependencies>
52 +
53 +</project>
54 +
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.openstacknetworking.routing;
17 +
18 +import org.onosproject.event.AbstractEvent;
19 +
20 +/**
21 + * Handle FloatingIP Event for Managing Flow Rules In Openstack Nodes.
22 + */
23 +public class OpenstackFloatingIPHandler implements Runnable {
24 +
25 + volatile AbstractEvent event;
26 + OpenstackFloatingIPHandler(AbstractEvent event) {
27 + this.event = event;
28 + }
29 +
30 + @Override
31 + public void run() {
32 +
33 + }
34 +}
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.openstacknetworking.routing;
17 +
18 +import org.onosproject.net.packet.PacketContext;
19 +
20 +/**
21 + * Handle ICMP packet processing for Managing Flow Rules In Openstack Nodes.
22 + */
23 +public class OpenstackIcmpHandler implements Runnable {
24 +
25 + volatile PacketContext context;
26 + private OpenstackRoutingRulePopulator rulePopulator;
27 + OpenstackIcmpHandler(OpenstackRoutingRulePopulator rulePopulator, PacketContext context) {
28 + this.context = context;
29 + this.rulePopulator = rulePopulator;
30 + }
31 +
32 + @Override
33 + public void run() {
34 + }
35 +}
...\ No newline at end of file ...\ No newline at end of file
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.openstacknetworking.routing;
17 +
18 +import org.onlab.packet.Ethernet;
19 +import org.onlab.packet.IPv4;
20 +import org.onlab.packet.MacAddress;
21 +import org.onlab.packet.TCP;
22 +import org.onlab.packet.UDP;
23 +import org.onosproject.net.DeviceId;
24 +import org.onosproject.net.PortNumber;
25 +import org.onosproject.net.flow.DefaultTrafficTreatment;
26 +import org.onosproject.net.flow.TrafficTreatment;
27 +import org.onosproject.net.packet.DefaultOutboundPacket;
28 +import org.onosproject.net.packet.InboundPacket;
29 +import org.onosproject.net.packet.PacketContext;
30 +import org.onosproject.net.packet.PacketService;
31 +import org.onosproject.openstacknetworking.OpenstackPort;
32 +import org.slf4j.Logger;
33 +import org.slf4j.LoggerFactory;
34 +
35 +import java.nio.ByteBuffer;
36 +
37 +import static com.google.common.base.Preconditions.checkNotNull;
38 +
39 +
40 +/**
41 + * Handle NAT packet processing for Managing Flow Rules In Openstack Nodes.
42 + */
43 +public class OpenstackPnatHandler implements Runnable {
44 +
45 + volatile PacketContext context;
46 + private final Logger log = LoggerFactory.getLogger(getClass());
47 +
48 + protected PacketService packetService;
49 +
50 + private final OpenstackRoutingRulePopulator rulePopulator;
51 + private final int portNum;
52 + private final OpenstackPort openstackPort;
53 +
54 + OpenstackPnatHandler(OpenstackRoutingRulePopulator rulePopulator, PacketContext context,
55 + int portNum, OpenstackPort openstackPort) {
56 + this.rulePopulator = checkNotNull(rulePopulator);
57 + this.context = checkNotNull(context);
58 + this.portNum = checkNotNull(portNum);
59 + this.openstackPort = checkNotNull(openstackPort);
60 + }
61 +
62 + @Override
63 + public void run() {
64 + InboundPacket inboundPacket = context.inPacket();
65 + Ethernet ethernet = checkNotNull(inboundPacket.parsed());
66 +
67 + //TODO: Considers IPV6
68 + if (ethernet.getEtherType() != Ethernet.TYPE_IPV4) {
69 + log.warn("Now, we just consider IP version 4");
70 + return;
71 + }
72 +
73 + packetOut(inboundPacket, portNum);
74 +
75 + rulePopulator.populatePnatFlowRules(inboundPacket, openstackPort, portNum,
76 + getExternalInterfaceMacAddress(), getExternalRouterMacAddress());
77 + }
78 +
79 + private void packetOut(InboundPacket inboundPacket, int portNum) {
80 + Ethernet ethernet = checkNotNull(inboundPacket.parsed());
81 + IPv4 iPacket = (IPv4) ethernet.getPayload();
82 +
83 + TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
84 +
85 + switch (iPacket.getProtocol()) {
86 + case IPv4.PROTOCOL_TCP:
87 + TCP tcpPacket = (TCP) iPacket.getPayload();
88 + tcpPacket.setSourcePort(portNum);
89 + tcpPacket.resetChecksum();
90 + tcpPacket.setParent(iPacket);
91 + iPacket.setPayload(tcpPacket);
92 + break;
93 + case IPv4.PROTOCOL_UDP:
94 + UDP udpPacket = (UDP) iPacket.getPayload();
95 + udpPacket.setSourcePort(portNum);
96 + udpPacket.resetChecksum();
97 + udpPacket.setParent(iPacket);
98 + iPacket.setPayload(udpPacket);
99 + break;
100 + default:
101 + break;
102 + }
103 +
104 + iPacket.resetChecksum();
105 + iPacket.setPayload(ethernet);
106 + ethernet.setSourceMACAddress(getExternalInterfaceMacAddress())
107 + .setDestinationMACAddress(getExternalRouterMacAddress());
108 + ethernet.resetChecksum();
109 +
110 + treatment.setOutput(getExternalPort(inboundPacket.receivedFrom().deviceId()));
111 +
112 + packetService.emit(new DefaultOutboundPacket(inboundPacket.receivedFrom().deviceId(),
113 + treatment.build(), ByteBuffer.wrap(ethernet.serialize())));
114 + }
115 +
116 + private PortNumber getExternalPort(DeviceId deviceId) {
117 + // TODO
118 + return null;
119 + }
120 + private MacAddress getExternalInterfaceMacAddress() {
121 + // TODO
122 + return null;
123 + }
124 + private MacAddress getExternalRouterMacAddress() {
125 + // TODO
126 + return null;
127 + }
128 +}
...\ No newline at end of file ...\ No newline at end of file
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.openstacknetworking.routing;
17 +
18 +import com.google.common.collect.Lists;
19 +import com.google.common.collect.Maps;
20 +import org.apache.felix.scr.annotations.Activate;
21 +import org.apache.felix.scr.annotations.Component;
22 +import org.apache.felix.scr.annotations.Deactivate;
23 +import org.apache.felix.scr.annotations.Reference;
24 +import org.apache.felix.scr.annotations.ReferenceCardinality;
25 +import org.apache.felix.scr.annotations.Service;
26 +import org.onlab.packet.Ethernet;
27 +import org.onlab.packet.IPv4;
28 +import org.onlab.packet.Ip4Address;
29 +import org.onlab.packet.MacAddress;
30 +import org.onosproject.core.ApplicationId;
31 +import org.onosproject.core.CoreService;
32 +import org.onosproject.net.device.DeviceService;
33 +import org.onosproject.net.driver.DriverService;
34 +import org.onosproject.net.flowobjective.FlowObjectiveService;
35 +import org.onosproject.net.packet.InboundPacket;
36 +import org.onosproject.net.packet.PacketContext;
37 +import org.onosproject.net.packet.PacketProcessor;
38 +import org.onosproject.net.packet.PacketService;
39 +import org.onosproject.openstacknetworking.OpenstackFloatingIP;
40 +import org.onosproject.openstacknetworking.OpenstackNetworkingService;
41 +import org.onosproject.openstacknetworking.OpenstackPort;
42 +import org.onosproject.openstacknetworking.OpenstackRouter;
43 +import org.onosproject.openstacknetworking.OpenstackRouterInterface;
44 +import org.onosproject.openstacknetworking.OpenstackRoutingService;
45 +import org.slf4j.Logger;
46 +import org.slf4j.LoggerFactory;
47 +
48 +import java.util.Collection;
49 +import java.util.List;
50 +import java.util.Map;
51 +import java.util.concurrent.ExecutorService;
52 +import java.util.concurrent.Executors;
53 +import java.util.stream.Collectors;
54 +
55 +import static com.google.common.base.Preconditions.checkNotNull;
56 +import static org.onlab.util.Tools.groupedThreads;
57 +
58 +@Service
59 +@Component(immediate = true)
60 +/**
61 + * Populates flow rules about L3 functionality for VMs in Openstack.
62 + */
63 +public class OpenstackRoutingManager implements OpenstackRoutingService {
64 + private final Logger log = LoggerFactory
65 + .getLogger(getClass());
66 +
67 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
68 + protected CoreService coreService;
69 +
70 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
71 + protected PacketService packetService;
72 +
73 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
74 + protected DeviceService deviceService;
75 +
76 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
77 + protected OpenstackNetworkingService openstackService;
78 +
79 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
80 + protected FlowObjectiveService flowObjectiveService;
81 +
82 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
83 + protected DriverService driverService;
84 +
85 + private ApplicationId appId;
86 + private Map<String, OpenstackRouterInterface> routerInterfaceMap = Maps.newHashMap();
87 + private Map<Integer, String> portNumMap = initPortNumMap();
88 + private static final String APP_ID = "org.onosproject.openstackrouting";
89 + private Map<Integer, String> initPortNumMap() {
90 + Map<Integer, String> map = Maps.newHashMap();
91 + for (int i = 1024; i < 65535; i++) {
92 + map.put(i, "");
93 + }
94 + return map;
95 + }
96 +
97 + private InternalPacketProcessor internalPacketProcessor = new InternalPacketProcessor();
98 + private ExecutorService l3EventExecutorService =
99 + Executors.newSingleThreadExecutor(groupedThreads("onos/openstackrouting", "L3-event"));
100 + private ExecutorService icmpEventExecutorService =
101 + Executors.newSingleThreadExecutor(groupedThreads("onos/openstackrouting", "icmp-event"));
102 +
103 + @Activate
104 + protected void activate() {
105 + appId = coreService.registerApplication(APP_ID);
106 + packetService.addProcessor(internalPacketProcessor, PacketProcessor.director(1));
107 +
108 + log.info("onos-openstackrouting started");
109 + }
110 +
111 + @Deactivate
112 + protected void deactivate() {
113 + packetService.removeProcessor(internalPacketProcessor);
114 + log.info("onos-openstackrouting stopped");
115 + }
116 +
117 +
118 + @Override
119 + public void createFloatingIP(OpenstackFloatingIP openstackFloatingIP) {
120 +
121 + }
122 +
123 + @Override
124 + public void updateFloatingIP(OpenstackFloatingIP openstackFloatingIP) {
125 +
126 + }
127 +
128 + @Override
129 + public void deleteFloatingIP(String id) {
130 +
131 + }
132 +
133 + @Override
134 + public void createRouter(OpenstackRouter openstackRouter) {
135 + checkExternalConnection(openstackRouter, getOpenstackRouterInterface(openstackRouter));
136 + }
137 +
138 + @Override
139 + public void updateRouter(OpenstackRouter openstackRouter) {
140 + checkExternalConnection(openstackRouter, getOpenstackRouterInterface(openstackRouter));
141 + }
142 +
143 + @Override
144 + public void deleteRouter(String id) {
145 + //TODO
146 + }
147 +
148 + @Override
149 + public void updateRouterInterface(OpenstackRouterInterface routerInterface) {
150 + routerInterfaceMap.putIfAbsent(routerInterface.portId(), routerInterface);
151 + List<OpenstackRouterInterface> routerInterfaces = Lists.newArrayList();
152 + routerInterfaces.add(routerInterface);
153 + checkExternalConnection(getOpenstackRouter(routerInterface.tenantId()), routerInterfaces);
154 + }
155 +
156 + @Override
157 + public void removeRouterInterface(OpenstackRouterInterface routerInterface) {
158 + OpenstackRoutingRulePopulator rulePopulator = new OpenstackRoutingRulePopulator(appId,
159 + openstackService, flowObjectiveService, deviceService, driverService);
160 + rulePopulator.removeExternalRules(routerInterface);
161 + routerInterfaceMap.remove(routerInterface.portId());
162 + }
163 + private class InternalPacketProcessor implements PacketProcessor {
164 +
165 + @Override
166 + public void process(PacketContext context) {
167 +
168 + if (context.isHandled()) {
169 + return;
170 + }
171 +
172 + InboundPacket pkt = context.inPacket();
173 + Ethernet ethernet = pkt.parsed();
174 +
175 + if (ethernet != null && ethernet.getEtherType() == Ethernet.TYPE_IPV4) {
176 + IPv4 iPacket = (IPv4) ethernet.getPayload();
177 + OpenstackRoutingRulePopulator rulePopulator = new OpenstackRoutingRulePopulator(appId,
178 + openstackService, flowObjectiveService, deviceService,
179 + driverService);
180 + switch (iPacket.getProtocol()) {
181 + case IPv4.PROTOCOL_ICMP:
182 + icmpEventExecutorService.execute(new OpenstackIcmpHandler(rulePopulator, context));
183 + break;
184 + default:
185 + int portNum = getPortNum(ethernet.getSourceMAC(), iPacket.getDestinationAddress());
186 + OpenstackPort openstackPort = getOpenstackPort(ethernet.getSourceMAC(),
187 + Ip4Address.valueOf(iPacket.getSourceAddress()));
188 + l3EventExecutorService.execute(new OpenstackPnatHandler(rulePopulator, context,
189 + portNum, openstackPort));
190 + break;
191 + }
192 +
193 + }
194 + }
195 +
196 + private int getPortNum(MacAddress sourceMac, int destinationAddress) {
197 + int portNum = portNumMap.keySet().stream()
198 + .filter(k -> portNumMap.get(k).equals("")).findFirst().orElse(0);
199 + portNumMap.replace(portNum, sourceMac.toString().concat(":").concat(String.valueOf(destinationAddress)));
200 + return portNum;
201 + }
202 + }
203 +
204 + private void checkExternalConnection(OpenstackRouter router,
205 + Collection<OpenstackRouterInterface> routerInterfaces) {
206 + checkNotNull(router, "Router can not be null");
207 + checkNotNull(routerInterfaces, "RouterInterfaces can not be null");
208 + Ip4Address externalIp = router.gatewayExternalInfo().externalFixedIps()
209 + .values().stream().findFirst().orElse(null);
210 + if ((externalIp == null) || (!router.gatewayExternalInfo().isEnablePnat())) {
211 + log.debug("Failed to set pnat configuration");
212 + return;
213 + }
214 + routerInterfaces.forEach(routerInterface -> {
215 + initiateL3Rule(router, routerInterface);
216 + });
217 + }
218 +
219 + private void initiateL3Rule(OpenstackRouter router, OpenstackRouterInterface routerInterface) {
220 + long vni = Long.parseLong(openstackService.network(openstackService
221 + .port(routerInterface.portId()).networkId()).segmentId());
222 + OpenstackRoutingRulePopulator rulePopulator = new OpenstackRoutingRulePopulator(appId,
223 + openstackService, flowObjectiveService, deviceService, driverService);
224 + rulePopulator.populateExternalRules(vni, router, routerInterface);
225 + }
226 +
227 + private Collection<OpenstackRouterInterface> getOpenstackRouterInterface(OpenstackRouter router) {
228 + return routerInterfaceMap.values().stream().filter(i -> i.id().equals(router.id()))
229 + .collect(Collectors.toList());
230 + }
231 +
232 + private OpenstackRouter getOpenstackRouter(String tenantId) {
233 + return openstackService.routers().stream().filter(r ->
234 + r.tenantId().equals(tenantId)).findFirst().orElse(null);
235 + }
236 +
237 + private OpenstackPort getOpenstackPort(MacAddress sourceMac, Ip4Address ip4Address) {
238 + OpenstackPort openstackPort = openstackService.ports("").stream()
239 + .filter(p -> p.macAddress().equals(sourceMac)).findFirst().orElse(null);
240 + return openstackPort.fixedIps().values().stream().findFirst().orElse(null)
241 + .equals(ip4Address) ? openstackPort : null;
242 + }
243 +
244 +}
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.openstacknetworking.routing;
17 +
18 +import org.onlab.packet.Ethernet;
19 +import org.onlab.packet.IPv4;
20 +import org.onlab.packet.Ip4Address;
21 +import org.onlab.packet.IpAddress;
22 +import org.onlab.packet.IpPrefix;
23 +import org.onlab.packet.MacAddress;
24 +import org.onlab.packet.TCP;
25 +import org.onlab.packet.TpPort;
26 +import org.onlab.packet.UDP;
27 +import org.onosproject.core.ApplicationId;
28 +import org.onosproject.net.Device;
29 +import org.onosproject.net.DeviceId;
30 +import org.onosproject.net.Port;
31 +import org.onosproject.net.PortNumber;
32 +import org.onosproject.net.behaviour.ExtensionTreatmentResolver;
33 +import org.onosproject.net.device.DeviceService;
34 +import org.onosproject.net.driver.DefaultDriverData;
35 +import org.onosproject.net.driver.DefaultDriverHandler;
36 +import org.onosproject.net.driver.Driver;
37 +import org.onosproject.net.driver.DriverHandler;
38 +import org.onosproject.net.driver.DriverService;
39 +import org.onosproject.net.flow.DefaultTrafficSelector;
40 +import org.onosproject.net.flow.DefaultTrafficTreatment;
41 +import org.onosproject.net.flow.TrafficSelector;
42 +import org.onosproject.net.flow.TrafficTreatment;
43 +import org.onosproject.net.flow.instructions.ExtensionPropertyException;
44 +import org.onosproject.net.flow.instructions.ExtensionTreatment;
45 +import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
46 +import org.onosproject.net.flowobjective.DefaultForwardingObjective;
47 +import org.onosproject.net.flowobjective.FlowObjectiveService;
48 +import org.onosproject.net.flowobjective.ForwardingObjective;
49 +import org.onosproject.net.packet.InboundPacket;
50 +import org.onosproject.openstacknetworking.OpenstackNetworkingService;
51 +import org.onosproject.openstacknetworking.OpenstackPort;
52 +import org.onosproject.openstacknetworking.OpenstackRouter;
53 +import org.onosproject.openstacknetworking.OpenstackRouterInterface;
54 +import org.slf4j.Logger;
55 +import org.slf4j.LoggerFactory;
56 +
57 +import java.util.stream.StreamSupport;
58 +
59 +import static com.google.common.base.Preconditions.checkNotNull;
60 +
61 +/**
62 + * Populates Routing Flow Rules.
63 + */
64 +public class OpenstackRoutingRulePopulator {
65 +
66 + private static Logger log = LoggerFactory
67 + .getLogger(OpenstackRoutingRulePopulator.class);
68 + private ApplicationId appId;
69 + private FlowObjectiveService flowObjectiveService;
70 + private OpenstackNetworkingService openstackService;
71 + private DeviceService deviceService;
72 + private DriverService driverService;
73 +
74 + public static final String PORTNAME_PREFIX_VM = "tap";
75 + public static final String PORTNAME_PREFIX_ROUTER = "qr";
76 + public static final String PORTNAME_PREFIX_TUNNEL = "vxlan";
77 + public static final String PORTNAME = "portName";
78 +
79 + private static final int ROUTING_RULE_PRIORITY = 25000;
80 + private static final int PNAT_RULE_PRIORITY = 24000;
81 + private static final int PNAT_TIMEOUT = 120;
82 + private static final MacAddress GATEWAYMAC = MacAddress.valueOf("1f:1f:1f:1f:1f:1f");
83 +
84 + private InboundPacket inboundPacket;
85 + private OpenstackPort openstackPort;
86 + private int portNum;
87 + private MacAddress externalInterface;
88 + private MacAddress externalRouter;
89 + private OpenstackRouter router;
90 + private OpenstackRouterInterface routerInterface;
91 +
92 + // TODO: This will be replaced to get the information from openstackswitchingservice.
93 + private static final String EXTERNAL_INTERFACE_NAME = "eth3";
94 +
95 + public OpenstackRoutingRulePopulator(ApplicationId appId, OpenstackNetworkingService openstackService,
96 + FlowObjectiveService flowObjectiveService,
97 + DeviceService deviceService, DriverService driverService) {
98 + this.appId = appId;
99 + this.flowObjectiveService = flowObjectiveService;
100 + this.openstackService = openstackService;
101 + this.deviceService = deviceService;
102 + this.driverService = driverService;
103 + }
104 +
105 + public void populatePnatFlowRules(InboundPacket inboundPacket, OpenstackPort openstackPort, int portNum,
106 + MacAddress externalInterfaceMacAddress, MacAddress externalRouterMacAddress) {
107 + this.inboundPacket = inboundPacket;
108 + this.openstackPort = openstackPort;
109 + this.portNum = portNum;
110 + this.externalInterface = externalInterfaceMacAddress;
111 + this.externalRouter = externalRouterMacAddress;
112 +
113 + long vni = getVni(openstackPort);
114 +
115 + populatePnatIncomingFlowRules(vni);
116 + populatePnatOutgoingFlowRules(vni);
117 + }
118 +
119 + private void populatePnatOutgoingFlowRules(long vni) {
120 + IPv4 iPacket = (IPv4) inboundPacket.parsed().getPayload();
121 +
122 + TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
123 + sBuilder.matchEthType(Ethernet.TYPE_IPV4)
124 + .matchIPProtocol(iPacket.getProtocol())
125 + .matchTunnelId(vni)
126 + .matchIPSrc(IpPrefix.valueOf(iPacket.getSourceAddress(), 32))
127 + .matchIPDst(IpPrefix.valueOf(iPacket.getDestinationAddress(), 32));
128 +
129 + TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
130 + tBuilder.setEthSrc(externalInterface)
131 + .setEthDst(externalRouter);
132 +
133 + switch (iPacket.getProtocol()) {
134 + case IPv4.PROTOCOL_TCP:
135 + TCP tcpPacket = (TCP) iPacket.getPayload();
136 + sBuilder.matchTcpSrc(TpPort.tpPort(tcpPacket.getSourcePort()))
137 + .matchTcpDst(TpPort.tpPort(tcpPacket.getDestinationPort()));
138 + tBuilder.setTcpDst(TpPort.tpPort(portNum));
139 + break;
140 + case IPv4.PROTOCOL_UDP:
141 + UDP udpPacket = (UDP) iPacket.getPayload();
142 + sBuilder.matchUdpDst(TpPort.tpPort(udpPacket.getSourcePort()))
143 + .matchUdpDst(TpPort.tpPort(udpPacket.getDestinationPort()));
144 + tBuilder.setUdpDst(TpPort.tpPort(portNum));
145 + break;
146 + default:
147 + break;
148 + }
149 +
150 + Port port = getPortNumOfExternalInterface();
151 + checkNotNull(port, "Port can not be null");
152 + tBuilder.setOutput(port.number());
153 +
154 + ForwardingObjective fo = DefaultForwardingObjective.builder()
155 + .withSelector(sBuilder.build())
156 + .withTreatment(tBuilder.build())
157 + .withFlag(ForwardingObjective.Flag.VERSATILE)
158 + .withPriority(PNAT_RULE_PRIORITY)
159 + .makeTemporary(PNAT_TIMEOUT)
160 + .fromApp(appId)
161 + .add();
162 +
163 + flowObjectiveService.forward(inboundPacket.receivedFrom().deviceId(), fo);
164 + }
165 +
166 + private Port getPortNumOfExternalInterface() {
167 + return deviceService.getPorts(inboundPacket.receivedFrom().deviceId()).stream()
168 + .filter(p -> p.annotations().value("portName").equals(EXTERNAL_INTERFACE_NAME))
169 + .findAny().orElse(null);
170 + }
171 +
172 +
173 + private void populatePnatIncomingFlowRules(long vni) {
174 + IPv4 iPacket = (IPv4) inboundPacket.parsed().getPayload();
175 + DeviceId deviceId = inboundPacket.receivedFrom().deviceId();
176 +
177 + TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
178 + sBuilder.matchEthType(Ethernet.TYPE_IPV4)
179 + .matchIPProtocol(iPacket.getProtocol())
180 + .matchIPSrc(IpPrefix.valueOf(iPacket.getDestinationAddress(), 32));
181 +
182 + TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
183 + tBuilder.setTunnelId(vni)
184 + .setIpDst(IpAddress.valueOf(iPacket.getSourceAddress()));
185 +
186 + switch (iPacket.getProtocol()) {
187 + case IPv4.PROTOCOL_TCP:
188 + TCP tcpPacket = (TCP) iPacket.getPayload();
189 + sBuilder.matchTcpSrc(TpPort.tpPort(tcpPacket.getDestinationPort()))
190 + .matchTcpDst(TpPort.tpPort(portNum));
191 + tBuilder.setTcpDst(TpPort.tpPort(tcpPacket.getSourcePort()));
192 + break;
193 + case IPv4.PROTOCOL_UDP:
194 + UDP udpPacket = (UDP) iPacket.getPayload();
195 + sBuilder.matchUdpSrc(TpPort.tpPort(udpPacket.getDestinationPort()))
196 + .matchUdpDst(TpPort.tpPort(portNum));
197 + tBuilder.setUdpDst(TpPort.tpPort(udpPacket.getSourcePort()));
198 + break;
199 + default:
200 + break;
201 + }
202 +
203 + tBuilder.extension(buildNiciraExtenstion(deviceId, Ip4Address.valueOf(iPacket.getSourceAddress())), deviceId)
204 + .setOutput(getTunnelPort(deviceId));
205 +
206 + ForwardingObjective fo = DefaultForwardingObjective.builder()
207 + .withSelector(sBuilder.build())
208 + .withTreatment(tBuilder.build())
209 + .withFlag(ForwardingObjective.Flag.VERSATILE)
210 + .withPriority(PNAT_RULE_PRIORITY)
211 + .makeTemporary(PNAT_TIMEOUT)
212 + .fromApp(appId)
213 + .add();
214 +
215 + flowObjectiveService.forward(inboundPacket.receivedFrom().deviceId(), fo);
216 + }
217 +
218 + private ExtensionTreatment buildNiciraExtenstion(DeviceId id, Ip4Address hostIp) {
219 + Driver driver = driverService.getDriver(id);
220 + DriverHandler driverHandler = new DefaultDriverHandler(new DefaultDriverData(driver, id));
221 + ExtensionTreatmentResolver resolver = driverHandler.behaviour(ExtensionTreatmentResolver.class);
222 +
223 + ExtensionTreatment extensionInstruction =
224 + resolver.getExtensionInstruction(
225 + ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_TUNNEL_DST.type());
226 +
227 + try {
228 + extensionInstruction.setPropertyValue("tunnelDst", hostIp);
229 + } catch (ExtensionPropertyException e) {
230 + log.error("Error setting Nicira extension setting {}", e);
231 + }
232 +
233 + return extensionInstruction;
234 + }
235 +
236 + private PortNumber getTunnelPort(DeviceId deviceId) {
237 + Port port = deviceService.getPorts(deviceId).stream()
238 + .filter(p -> p.annotations().value("portName").equals(PORTNAME_PREFIX_TUNNEL))
239 + .findAny().orElse(null);
240 +
241 + if (port == null) {
242 + log.error("No TunnelPort was created.");
243 + return null;
244 + }
245 + return port.number();
246 +
247 + }
248 +
249 + public void populateExternalRules(long vni, OpenstackRouter router,
250 + OpenstackRouterInterface routerInterface) {
251 + this.router = router;
252 + this.routerInterface = routerInterface;
253 +
254 + // 1. computeNode to gateway
255 + populateComputeNodeRules(vni);
256 + // 2. gatewayNode to controller
257 + populateRuleGatewaytoController(vni);
258 + }
259 +
260 + private void populateRuleGatewaytoController(long vni) {
261 + Device gatewayDevice = getGatewayNode();
262 + TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
263 + TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
264 +
265 + sBuilder.matchEthType(Ethernet.TYPE_IPV4)
266 + .matchTunnelId(vni)
267 + .matchEthDst(GATEWAYMAC);
268 + tBuilder.setOutput(PortNumber.CONTROLLER);
269 +
270 + ForwardingObjective fo = DefaultForwardingObjective.builder()
271 + .withSelector(sBuilder.build())
272 + .withTreatment(tBuilder.build())
273 + .withFlag(ForwardingObjective.Flag.VERSATILE)
274 + .withPriority(ROUTING_RULE_PRIORITY)
275 + .fromApp(appId)
276 + .add();
277 +
278 + flowObjectiveService.forward(gatewayDevice.id(), fo);
279 + }
280 +
281 + private void populateComputeNodeRules(long vni) {
282 + Device gatewayDevice = getGatewayNode();
283 +
284 + StreamSupport.stream(deviceService.getAvailableDevices().spliterator(), false)
285 + .filter(d -> !checkGatewayNode(d.id()))
286 + .forEach(d -> populateRuleToGateway(d, gatewayDevice, vni));
287 + /*deviceService.getAvailableDevices().forEach(d -> {
288 + if (!checkGatewayNode(d.id())) {
289 + populateRuleToGateway(d, gatewayDevice, vni);
290 + }
291 + });*/
292 + }
293 +
294 + private void populateRuleToGateway(Device d, Device gatewayDevice, long vni) {
295 + TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
296 + TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
297 +
298 + sBuilder.matchEthType(Ethernet.TYPE_IPV4)
299 + .matchTunnelId(vni)
300 + .matchEthDst(GATEWAYMAC);
301 + tBuilder.extension(buildNiciraExtenstion(d.id(), getIPAddressforDevice(gatewayDevice)), d.id())
302 + .setOutput(getTunnelPort(d.id()));
303 +
304 + ForwardingObjective fo = DefaultForwardingObjective.builder()
305 + .withSelector(sBuilder.build())
306 + .withTreatment(tBuilder.build())
307 + .withFlag(ForwardingObjective.Flag.SPECIFIC)
308 + .withPriority(ROUTING_RULE_PRIORITY)
309 + .fromApp(appId)
310 + .add();
311 +
312 + flowObjectiveService.forward(d.id(), fo);
313 + }
314 +
315 + private Ip4Address getIPAddressforDevice(Device device) {
316 + return Ip4Address.valueOf(device.annotations().value("channelId").split(":")[0]);
317 + }
318 +
319 + private Device getGatewayNode() {
320 + final Device[] device = new Device[1];
321 + deviceService.getAvailableDevices().forEach(d -> {
322 + if (checkGatewayNode(d.id())) {
323 + device[0] = d;
324 + }
325 + });
326 + return device[0];
327 + }
328 +
329 + private boolean checkGatewayNode(DeviceId deviceId) {
330 + return !deviceService.getPorts(deviceId).stream().anyMatch(port ->
331 + port.annotations().value("portName").startsWith(PORTNAME_PREFIX_ROUTER) ||
332 + port.annotations().value("portName").startsWith(PORTNAME_PREFIX_VM));
333 + }
334 +
335 + private long getVni(OpenstackPort openstackPort) {
336 + return Long.parseLong(openstackService.network(openstackPort.networkId()).segmentId());
337 + }
338 +
339 + public void removeExternalRules(OpenstackRouterInterface routerInterface) {
340 + OpenstackPort openstackPort = openstackService.port(routerInterface.portId());
341 + TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
342 + sBuilder.matchEthType(Ethernet.TYPE_IPV4)
343 + .matchTunnelId(getVni(openstackPort))
344 + .matchEthDst(GATEWAYMAC);
345 +
346 + StreamSupport.stream(deviceService.getAvailableDevices().spliterator(), false)
347 + .forEach(d -> {
348 + if (checkGatewayNode(d.id())) {
349 + removeExternalRule(d.id(), sBuilder, ForwardingObjective.Flag.VERSATILE);
350 + } else {
351 + removeExternalRule(d.id(), sBuilder, ForwardingObjective.Flag.SPECIFIC);
352 + }
353 + });
354 +
355 + }
356 +
357 + private void removeExternalRule(DeviceId id, TrafficSelector.Builder sBuilder, ForwardingObjective.Flag flag) {
358 + TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();
359 +
360 + ForwardingObjective fo = DefaultForwardingObjective.builder()
361 + .withSelector(sBuilder.build())
362 + .withTreatment(tBuilder.build())
363 + .withFlag(flag)
364 + .withPriority(ROUTING_RULE_PRIORITY)
365 + .fromApp(appId)
366 + .remove();
367 +
368 + flowObjectiveService.forward(id, fo);
369 + }
370 +
371 +}
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 +
17 +/**
18 + * Application for OpenstackRouting.
19 + */
20 +package org.onosproject.openstacknetworking.routing;
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2015-2016 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-openstacknetworking</artifactId>
25 + <version>1.5.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
27 + </parent>
28 +
29 + <artifactId>onos-app-openstackswitching</artifactId>
30 + <packaging>bundle</packaging>
31 +
32 + <dependencies>
33 + <dependency>
34 + <groupId>org.onosproject</groupId>
35 + <artifactId>onos-app-openstacknetworking-api</artifactId>
36 + <version>${project.version}</version>
37 + </dependency>
38 + <dependency>
39 + <groupId>org.onosproject</groupId>
40 + <artifactId>onos-app-dhcp</artifactId>
41 + <version>1.5.0-SNAPSHOT</version>
42 + </dependency>
43 + <dependency>
44 + <groupId>org.onosproject</groupId>
45 + <artifactId>onos-app-dhcp-api</artifactId>
46 + <version>1.5.0-SNAPSHOT</version>
47 + </dependency>
48 + <dependency>
49 + <groupId>org.onosproject</groupId>
50 + <artifactId>onos-rest</artifactId>
51 + <version>${project.version}</version>
52 + </dependency>
53 + <dependency>
54 + <groupId>org.onosproject</groupId>
55 + <artifactId>onlab-rest</artifactId>
56 + <version>${project.version}</version>
57 + </dependency>
58 + <dependency>
59 + <groupId>org.onosproject</groupId>
60 + <artifactId>onlab-misc</artifactId>
61 + <version>${project.version}</version>
62 + </dependency>
63 + </dependencies>
64 +
65 +
66 +</project>
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.impl; 16 +package org.onosproject.openstacknetworking.switching;
17 17
18 import org.onlab.packet.ARP; 18 import org.onlab.packet.ARP;
19 import org.onlab.packet.Ethernet; 19 import org.onlab.packet.Ethernet;
...@@ -27,8 +27,9 @@ import org.onosproject.net.host.HostService; ...@@ -27,8 +27,9 @@ import org.onosproject.net.host.HostService;
27 import org.onosproject.net.packet.DefaultOutboundPacket; 27 import org.onosproject.net.packet.DefaultOutboundPacket;
28 import org.onosproject.net.packet.InboundPacket; 28 import org.onosproject.net.packet.InboundPacket;
29 import org.onosproject.net.packet.PacketService; 29 import org.onosproject.net.packet.PacketService;
30 -import org.onosproject.openstackswitching.OpenstackPort; 30 +import org.onosproject.openstacknetworking.OpenstackNetworkingService;
31 -import org.onosproject.openstackswitching.OpenstackPortInfo; 31 +import org.onosproject.openstacknetworking.OpenstackPort;
32 +import org.onosproject.openstacknetworking.OpenstackPortInfo;
32 import org.slf4j.Logger; 33 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory; 34 import org.slf4j.LoggerFactory;
34 import java.nio.ByteBuffer; 35 import java.nio.ByteBuffer;
...@@ -45,19 +46,19 @@ public class OpenstackArpHandler { ...@@ -45,19 +46,19 @@ public class OpenstackArpHandler {
45 .getLogger(OpenstackArpHandler.class); 46 .getLogger(OpenstackArpHandler.class);
46 private static final MacAddress GATEWAY_MAC = MacAddress.valueOf("1f:1f:1f:1f:1f:1f"); 47 private static final MacAddress GATEWAY_MAC = MacAddress.valueOf("1f:1f:1f:1f:1f:1f");
47 private PacketService packetService; 48 private PacketService packetService;
48 - private OpenstackRestHandler restHandler; 49 + private OpenstackNetworkingService openstackService;
49 private HostService hostService; 50 private HostService hostService;
50 51
51 /** 52 /**
52 * Returns OpenstackArpHandler reference. 53 * Returns OpenstackArpHandler reference.
53 * 54 *
54 - * @param restHandler rest API handler reference 55 + * @param openstackService OpenstackNetworkingService reference
55 * @param packetService PacketService reference 56 * @param packetService PacketService reference
56 * @param hostService host service 57 * @param hostService host service
57 */ 58 */
58 - public OpenstackArpHandler(OpenstackRestHandler restHandler, PacketService packetService, 59 + public OpenstackArpHandler(OpenstackNetworkingService openstackService, PacketService packetService,
59 HostService hostService) { 60 HostService hostService) {
60 - this.restHandler = checkNotNull(restHandler); 61 + this.openstackService = openstackService;
61 this.packetService = packetService; 62 this.packetService = packetService;
62 this.hostService = hostService; 63 this.hostService = hostService;
63 } 64 }
...@@ -123,7 +124,7 @@ public class OpenstackArpHandler { ...@@ -123,7 +124,7 @@ public class OpenstackArpHandler {
123 private MacAddress getMacFromOpenstack(IpAddress targetIp) { 124 private MacAddress getMacFromOpenstack(IpAddress targetIp) {
124 checkNotNull(targetIp); 125 checkNotNull(targetIp);
125 126
126 - OpenstackPort openstackPort = restHandler.getPorts() 127 + OpenstackPort openstackPort = openstackService.ports()
127 .stream() 128 .stream()
128 .filter(port -> port.fixedIps().containsValue(targetIp)) 129 .filter(port -> port.fixedIps().containsValue(targetIp))
129 .findFirst() 130 .findFirst()
......
...@@ -13,8 +13,9 @@ ...@@ -13,8 +13,9 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.impl; 16 +package org.onosproject.openstacknetworking.switching;
17 17
18 +import com.google.common.collect.ImmutableMap;
18 import com.google.common.collect.ImmutableSet; 19 import com.google.common.collect.ImmutableSet;
19 import com.google.common.collect.Lists; 20 import com.google.common.collect.Lists;
20 import com.google.common.collect.Maps; 21 import com.google.common.collect.Maps;
...@@ -50,29 +51,26 @@ import org.onosproject.net.packet.InboundPacket; ...@@ -50,29 +51,26 @@ import org.onosproject.net.packet.InboundPacket;
50 import org.onosproject.net.packet.PacketContext; 51 import org.onosproject.net.packet.PacketContext;
51 import org.onosproject.net.packet.PacketProcessor; 52 import org.onosproject.net.packet.PacketProcessor;
52 import org.onosproject.net.packet.PacketService; 53 import org.onosproject.net.packet.PacketService;
53 -import org.onosproject.openstackrouting.OpenstackRouter; 54 +import org.onosproject.openstacknetworking.OpenstackNetwork;
54 -import org.onosproject.openstackrouting.OpenstackRouterInterface; 55 +import org.onosproject.openstacknetworking.OpenstackNetworkingConfig;
55 -import org.onosproject.openstackrouting.OpenstackRoutingService; 56 +import org.onosproject.openstacknetworking.OpenstackNetworkingService;
56 -import org.onosproject.openstackswitching.OpenstackNetwork; 57 +import org.onosproject.openstacknetworking.OpenstackPort;
57 -import org.onosproject.openstackswitching.OpenstackPort; 58 +import org.onosproject.openstacknetworking.OpenstackPortInfo;
58 -import org.onosproject.openstackswitching.OpenstackPortInfo; 59 +import org.onosproject.openstacknetworking.OpenstackSecurityGroup;
59 -import org.onosproject.openstackswitching.OpenstackSubnet; 60 +import org.onosproject.openstacknetworking.OpenstackSubnet;
60 -import org.onosproject.openstackswitching.OpenstackSwitchingService; 61 +import org.onosproject.openstacknetworking.OpenstackSwitchingService;
61 import org.slf4j.Logger; 62 import org.slf4j.Logger;
62 import org.slf4j.LoggerFactory; 63 import org.slf4j.LoggerFactory;
63 import java.util.List; 64 import java.util.List;
64 import java.util.Collection; 65 import java.util.Collection;
65 import java.util.Map; 66 import java.util.Map;
66 -import java.util.NoSuchElementException;
67 import java.util.Set; 67 import java.util.Set;
68 import java.util.concurrent.ExecutorService; 68 import java.util.concurrent.ExecutorService;
69 import java.util.concurrent.Executors; 69 import java.util.concurrent.Executors;
70 -import java.util.stream.Collectors;
71 70
72 import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY; 71 import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
73 import static org.onlab.util.Tools.groupedThreads; 72 import static org.onlab.util.Tools.groupedThreads;
74 73
75 -@SuppressWarnings("ALL")
76 @Service 74 @Service
77 @Component(immediate = true) 75 @Component(immediate = true)
78 /** 76 /**
...@@ -80,8 +78,8 @@ import static org.onlab.util.Tools.groupedThreads; ...@@ -80,8 +78,8 @@ import static org.onlab.util.Tools.groupedThreads;
80 */ 78 */
81 public class OpenstackSwitchingManager implements OpenstackSwitchingService { 79 public class OpenstackSwitchingManager implements OpenstackSwitchingService {
82 80
83 - private static Logger log = LoggerFactory 81 + private final Logger log = LoggerFactory
84 - .getLogger(OpenstackSwitchingManager.class); 82 + .getLogger(getClass());
85 83
86 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 84 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
87 protected CoreService coreService; 85 protected CoreService coreService;
...@@ -108,7 +106,7 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -108,7 +106,7 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
108 protected DriverService driverService; 106 protected DriverService driverService;
109 107
110 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 108 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
111 - protected OpenstackRoutingService openstackRoutingService; 109 + protected OpenstackNetworkingService openstackService;
112 110
113 public static final String PORTNAME_PREFIX_VM = "tap"; 111 public static final String PORTNAME_PREFIX_VM = "tap";
114 public static final String PORTNAME_PREFIX_ROUTER = "qr-"; 112 public static final String PORTNAME_PREFIX_ROUTER = "qr-";
...@@ -125,7 +123,6 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -125,7 +123,6 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
125 private String password; 123 private String password;
126 private String physicalRouterMac; 124 private String physicalRouterMac;
127 private OpenstackArpHandler arpHandler; 125 private OpenstackArpHandler arpHandler;
128 - private OpenstackRestHandler restHandler;
129 126
130 private ExecutorService deviceEventExcutorService = 127 private ExecutorService deviceEventExcutorService =
131 Executors.newSingleThreadExecutor(groupedThreads("onos/openstackswitching", "device-event")); 128 Executors.newSingleThreadExecutor(groupedThreads("onos/openstackswitching", "device-event"));
...@@ -136,17 +133,20 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -136,17 +133,20 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
136 private InternalDeviceListener internalDeviceListener = new InternalDeviceListener(); 133 private InternalDeviceListener internalDeviceListener = new InternalDeviceListener();
137 private InternalConfigListener internalConfigListener = new InternalConfigListener(); 134 private InternalConfigListener internalConfigListener = new InternalConfigListener();
138 private InternalHostListener internalHostListener = new InternalHostListener(); 135 private InternalHostListener internalHostListener = new InternalHostListener();
136 +
137 +
139 private final Set<ConfigFactory> factories = ImmutableSet.of( 138 private final Set<ConfigFactory> factories = ImmutableSet.of(
140 - new ConfigFactory<ApplicationId, OpenstackSwitchingConfig>(APP_SUBJECT_FACTORY, 139 + new ConfigFactory<ApplicationId, OpenstackNetworkingConfig>(APP_SUBJECT_FACTORY,
141 - OpenstackSwitchingConfig.class, 140 + OpenstackNetworkingConfig.class,
142 "openstackswitching") { 141 "openstackswitching") {
143 @Override 142 @Override
144 - public OpenstackSwitchingConfig createConfig() { 143 + public OpenstackNetworkingConfig createConfig() {
145 - return new OpenstackSwitchingConfig(); 144 + return new OpenstackNetworkingConfig();
146 } 145 }
147 } 146 }
148 ); 147 );
149 148
149 +
150 private Map<String, OpenstackPortInfo> openstackPortInfoMap = Maps.newHashMap(); 150 private Map<String, OpenstackPortInfo> openstackPortInfoMap = Maps.newHashMap();
151 151
152 @Activate 152 @Activate
...@@ -189,14 +189,14 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -189,14 +189,14 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
189 189
190 if (!openstackPort.securityGroups().isEmpty()) { 190 if (!openstackPort.securityGroups().isEmpty()) {
191 openstackPort.securityGroups().forEach(sgId -> { 191 openstackPort.securityGroups().forEach(sgId -> {
192 - OpenstackSecurityGroup sg = restHandler.getSecurityGroup(sgId); 192 + OpenstackSecurityGroup sg = openstackService.getSecurityGroup(sgId);
193 log.debug("SecurityGroup : {}", sg.toString()); 193 log.debug("SecurityGroup : {}", sg.toString());
194 }); 194 });
195 } 195 }
196 } 196 }
197 197
198 @Override 198 @Override
199 - public void deletePort(String uuid) { 199 + public void removePort(String uuid) {
200 // When VMs are remvoed, the flow rules for the VMs are removed using ONOS port update event. 200 // When VMs are remvoed, the flow rules for the VMs are removed using ONOS port update event.
201 // But, when router is removed, no ONOS port event occurs and we need to use Neutron port event. 201 // But, when router is removed, no ONOS port event occurs and we need to use Neutron port event.
202 // Here we should not touch any rules for VMs. 202 // Here we should not touch any rules for VMs.
...@@ -212,7 +212,7 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -212,7 +212,7 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
212 if (pName.equals(routerPortName)) { 212 if (pName.equals(routerPortName)) {
213 OpenstackSwitchingRulePopulator rulePopulator = 213 OpenstackSwitchingRulePopulator rulePopulator =
214 new OpenstackSwitchingRulePopulator(appId, flowObjectiveService, 214 new OpenstackSwitchingRulePopulator(appId, flowObjectiveService,
215 - deviceService, restHandler, driverService); 215 + deviceService, openstackService, driverService);
216 216
217 rulePopulator.removeSwitchingRules(doNotPushFlows, port, openstackPortInfoMap); 217 rulePopulator.removeSwitchingRules(doNotPushFlows, port, openstackPortInfoMap);
218 openstackPortInfoMap.remove(routerPortName); 218 openstackPortInfoMap.remove(routerPortName);
...@@ -236,125 +236,8 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -236,125 +236,8 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
236 } 236 }
237 237
238 @Override 238 @Override
239 - public Collection<OpenstackPort> ports(String networkId) { 239 + public Map<String, OpenstackPortInfo> openstackPortInfo() {
240 - Collection<OpenstackPort> ports = restHandler.getPorts(); 240 + return ImmutableMap.copyOf(this.openstackPortInfoMap);
241 - List<OpenstackPort> portList = ports.stream()
242 - .filter(p -> p.networkId().equals(networkId))
243 - .collect(Collectors.toList());
244 -
245 - return portList;
246 - }
247 -
248 - @Override
249 - public Collection<OpenstackPort> ports() {
250 - return restHandler.getPorts();
251 - }
252 -
253 - @Override
254 - public OpenstackPort port(Port port) {
255 - Collection<OpenstackPort> ports = restHandler.getPorts();
256 - String uuid = port.annotations().value(PORTNAME).substring(3);
257 - return ports.stream()
258 - .filter(p -> p.id().startsWith(uuid))
259 - .findFirst().orElse(null);
260 - }
261 -
262 - @Override
263 - public OpenstackPort port(String portId) {
264 - Collection<OpenstackPort> ports = restHandler.getPorts();
265 - return ports.stream()
266 - .filter(p -> p.id().equals(portId))
267 - .findFirst().orElse(null);
268 - }
269 -
270 - @Override
271 - public OpenstackNetwork network(String networkId) {
272 - try {
273 - Collection<OpenstackSubnet> subnets = restHandler.getSubnets().stream()
274 - .filter(s -> s.networkId().equals(networkId))
275 - .collect(Collectors.toList());
276 -
277 - Collection<OpenstackNetwork> networks = restHandler.getNetworks();
278 - OpenstackNetwork openstackNetwork = networks.stream()
279 - .filter(n -> n.id().equals(networkId))
280 - .findFirst().get();
281 -
282 - return OpenstackNetwork.builder()
283 - .id(openstackNetwork.id())
284 - .name(openstackNetwork.name())
285 - .networkType(openstackNetwork.networkType())
286 - .segmentId(openstackNetwork.segmentId())
287 - .tenantId(openstackNetwork.tenantId())
288 - .subnets(subnets)
289 - .build();
290 - } catch (NoSuchElementException e) {
291 - log.warn("There is no network infor for net ID {}", networkId);
292 - return null;
293 - }
294 - }
295 -
296 - @Override
297 - public OpenstackSubnet subnet(String subnetId) {
298 - Collection<OpenstackSubnet> subnets = restHandler.getSubnets();
299 - try {
300 - return subnets.stream()
301 - .filter(s -> s.id().equals(subnetId))
302 - .findFirst().get();
303 - } catch (NoSuchElementException e) {
304 - log.warn("There is no subnet info for subnet ID {}", subnetId);
305 - return null;
306 - }
307 - }
308 -
309 - @Override
310 - public void createRouter(OpenstackRouter openstackRouter) {
311 - openstackRoutingService.createRouter(openstackRouter);
312 - }
313 - @Override
314 - public void updateRouter(String routerId) {
315 - openstackRoutingService.updateRouter(router(routerId));
316 - }
317 -
318 - @Override
319 - public void removeRouterInterface(OpenstackRouterInterface openstackRouterInterface) {
320 - openstackRoutingService.removeRouterInterface(openstackRouterInterface);
321 - }
322 - @Override
323 - public void deleteRouter(String id) {
324 - openstackRoutingService.deleteRouter(id);
325 - }
326 -
327 - @Override
328 - public void updateRouterInterface(OpenstackRouterInterface openstackRouterInterface) {
329 - openstackRoutingService.updateRouterInterface(openstackRouterInterface);
330 - }
331 -
332 - @Override
333 - public OpenstackRouter router(String routerId) {
334 - Collection<OpenstackRouter> openstackRouters = restHandler.getRouters();
335 - try {
336 - return openstackRouters.stream()
337 - .filter(r -> r.id().equals(routerId))
338 - .findAny().get();
339 - } catch (NoSuchElementException e) {
340 - log.warn("There is no router info for subnet ID {}", routerId);
341 - return null;
342 - }
343 - }
344 -
345 - @Override
346 - public Collection<OpenstackRouter> routers() {
347 - return restHandler.getRouters();
348 - }
349 -
350 - @Override
351 - public Collection<OpenstackPortInfo> portInfos() {
352 - return openstackPortInfoMap.values();
353 - }
354 -
355 - @Override
356 - public String physicalRouterMac() {
357 - return physicalRouterMac;
358 } 241 }
359 242
360 private void processDeviceAdded(Device device) { 243 private void processDeviceAdded(Device device) {
...@@ -366,10 +249,10 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -366,10 +249,10 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
366 if (port.isEnabled() || port.annotations().value(PORTNAME).startsWith(PORTNAME_PREFIX_ROUTER)) { 249 if (port.isEnabled() || port.annotations().value(PORTNAME).startsWith(PORTNAME_PREFIX_ROUTER)) {
367 OpenstackSwitchingRulePopulator rulePopulator = 250 OpenstackSwitchingRulePopulator rulePopulator =
368 new OpenstackSwitchingRulePopulator(appId, flowObjectiveService, 251 new OpenstackSwitchingRulePopulator(appId, flowObjectiveService,
369 - deviceService, restHandler, driverService); 252 + deviceService, openstackService, driverService);
370 253
371 rulePopulator.populateSwitchingRules(doNotPushFlows, device, port); 254 rulePopulator.populateSwitchingRules(doNotPushFlows, device, port);
372 - updatePortMap(device.id(), port, restHandler.getNetworks(), restHandler.getSubnets(), 255 + updatePortMap(device.id(), port, openstackService.networks(), openstackService.subnets(),
373 rulePopulator.openstackPort(port)); 256 rulePopulator.openstackPort(port));
374 257
375 //In case portupdate event is driven by vm shutoff from openstack 258 //In case portupdate event is driven by vm shutoff from openstack
...@@ -377,7 +260,7 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -377,7 +260,7 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
377 log.debug("Flowrules according to the port {} were removed", port.number().toString()); 260 log.debug("Flowrules according to the port {} were removed", port.number().toString());
378 OpenstackSwitchingRulePopulator rulePopulator = 261 OpenstackSwitchingRulePopulator rulePopulator =
379 new OpenstackSwitchingRulePopulator(appId, flowObjectiveService, 262 new OpenstackSwitchingRulePopulator(appId, flowObjectiveService,
380 - deviceService, restHandler, driverService); 263 + deviceService, openstackService, driverService);
381 264
382 rulePopulator.removeSwitchingRules(doNotPushFlows, port, openstackPortInfoMap); 265 rulePopulator.removeSwitchingRules(doNotPushFlows, port, openstackPortInfoMap);
383 dhcpService.removeStaticMapping(openstackPortInfoMap.get(port.annotations().value(PORTNAME)).mac()); 266 dhcpService.removeStaticMapping(openstackPortInfoMap.get(port.annotations().value(PORTNAME)).mac());
...@@ -393,10 +276,10 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -393,10 +276,10 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
393 private void initializeFlowRules() { 276 private void initializeFlowRules() {
394 OpenstackSwitchingRulePopulator rulePopulator = 277 OpenstackSwitchingRulePopulator rulePopulator =
395 new OpenstackSwitchingRulePopulator(appId, flowObjectiveService, 278 new OpenstackSwitchingRulePopulator(appId, flowObjectiveService,
396 - deviceService, restHandler, driverService); 279 + deviceService, openstackService, driverService);
397 280
398 - Collection<OpenstackNetwork> networks = restHandler.getNetworks(); 281 + Collection<OpenstackNetwork> networks = openstackService.networks();
399 - Collection<OpenstackSubnet> subnets = restHandler.getSubnets(); 282 + Collection<OpenstackSubnet> subnets = openstackService.subnets();
400 283
401 deviceService.getDevices().forEach(device -> { 284 deviceService.getDevices().forEach(device -> {
402 log.debug("device {} num of ports {} ", device.id(), 285 log.debug("device {} num of ports {} ", device.id(),
...@@ -458,7 +341,7 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -458,7 +341,7 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
458 341
459 ip4Address = (Ip4Address) openstackPort.fixedIps().values().stream().findFirst().orElse(null); 342 ip4Address = (Ip4Address) openstackPort.fixedIps().values().stream().findFirst().orElse(null);
460 343
461 - openstackSubnet = restHandler.getSubnets().stream() 344 + openstackSubnet = openstackService.subnets().stream()
462 .filter(n -> n.networkId().equals(openstackPort.networkId())) 345 .filter(n -> n.networkId().equals(openstackPort.networkId()))
463 .findFirst().get(); 346 .findFirst().get();
464 347
...@@ -579,16 +462,18 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -579,16 +462,18 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
579 private class InternalConfigListener implements NetworkConfigListener { 462 private class InternalConfigListener implements NetworkConfigListener {
580 463
581 public void configureNetwork() { 464 public void configureNetwork() {
582 - OpenstackSwitchingConfig cfg = 465 + OpenstackNetworkingConfig cfg =
583 - cfgService.getConfig(appId, OpenstackSwitchingConfig.class); 466 + cfgService.getConfig(appId, OpenstackNetworkingConfig.class);
584 if (cfg == null) { 467 if (cfg == null) {
585 log.error("There is no openstack server information in config."); 468 log.error("There is no openstack server information in config.");
586 return; 469 return;
587 } 470 }
471 +
588 doNotPushFlows = cfg.doNotPushFlows(); 472 doNotPushFlows = cfg.doNotPushFlows();
589 physicalRouterMac = cfg.physicalRouterMac(); 473 physicalRouterMac = cfg.physicalRouterMac();
590 - restHandler = new OpenstackRestHandler(cfg); 474 + openstackService.setConfigurations(cfg.neutronServer(), cfg.keystoneServer(),
591 - arpHandler = new OpenstackArpHandler(restHandler, packetService, hostService); 475 + cfg.userName(), cfg.password());
476 + arpHandler = new OpenstackArpHandler(openstackService, packetService, hostService);
592 initializeFlowRules(); 477 initializeFlowRules();
593 } 478 }
594 479
...@@ -596,8 +481,10 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService { ...@@ -596,8 +481,10 @@ public class OpenstackSwitchingManager implements OpenstackSwitchingService {
596 public void event(NetworkConfigEvent event) { 481 public void event(NetworkConfigEvent event) {
597 if (((event.type() == NetworkConfigEvent.Type.CONFIG_ADDED || 482 if (((event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
598 event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED)) && 483 event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED)) &&
599 - event.configClass().equals(OpenstackSwitchingConfig.class)) { 484 + event.configClass().equals(OpenstackNetworkingConfig.class)) {
600 - networkEventExcutorService.execute(this::configureNetwork); 485 +
486 + log.info("Network configuration changed");
487 + networkEventExcutorService.execute(this::configureNetwork);
601 } 488 }
602 } 489 }
603 } 490 }
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 16
17 -package org.onosproject.openstackswitching.impl; 17 +package org.onosproject.openstacknetworking.switching;
18 18
19 import org.onlab.packet.Ethernet; 19 import org.onlab.packet.Ethernet;
20 import org.onlab.packet.Ip4Address; 20 import org.onlab.packet.Ip4Address;
...@@ -40,9 +40,10 @@ import org.onosproject.net.flow.instructions.ExtensionTreatmentType; ...@@ -40,9 +40,10 @@ import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
40 import org.onosproject.net.flowobjective.DefaultForwardingObjective; 40 import org.onosproject.net.flowobjective.DefaultForwardingObjective;
41 import org.onosproject.net.flowobjective.FlowObjectiveService; 41 import org.onosproject.net.flowobjective.FlowObjectiveService;
42 import org.onosproject.net.flowobjective.ForwardingObjective; 42 import org.onosproject.net.flowobjective.ForwardingObjective;
43 -import org.onosproject.openstackswitching.OpenstackNetwork; 43 +import org.onosproject.openstacknetworking.OpenstackNetwork;
44 -import org.onosproject.openstackswitching.OpenstackPort; 44 +import org.onosproject.openstacknetworking.OpenstackNetworkingService;
45 -import org.onosproject.openstackswitching.OpenstackPortInfo; 45 +import org.onosproject.openstacknetworking.OpenstackPort;
46 +import org.onosproject.openstacknetworking.OpenstackPortInfo;
46 import org.slf4j.Logger; 47 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory; 48 import org.slf4j.LoggerFactory;
48 49
...@@ -63,7 +64,6 @@ public class OpenstackSwitchingRulePopulator { ...@@ -63,7 +64,6 @@ public class OpenstackSwitchingRulePopulator {
63 private FlowObjectiveService flowObjectiveService; 64 private FlowObjectiveService flowObjectiveService;
64 private DriverService driverService; 65 private DriverService driverService;
65 private DeviceService deviceService; 66 private DeviceService deviceService;
66 - private OpenstackRestHandler restHandler;
67 private ApplicationId appId; 67 private ApplicationId appId;
68 68
69 private Collection<OpenstackNetwork> openstackNetworkList; 69 private Collection<OpenstackNetwork> openstackNetworkList;
...@@ -75,22 +75,20 @@ public class OpenstackSwitchingRulePopulator { ...@@ -75,22 +75,20 @@ public class OpenstackSwitchingRulePopulator {
75 * @param appId application id 75 * @param appId application id
76 * @param flowObjectiveService FlowObjectiveService reference 76 * @param flowObjectiveService FlowObjectiveService reference
77 * @param deviceService DeviceService reference 77 * @param deviceService DeviceService reference
78 - * @param restHandler OpenstackRestHandler reference
79 * @param driverService DriverService reference 78 * @param driverService DriverService reference
80 */ 79 */
81 public OpenstackSwitchingRulePopulator(ApplicationId appId, 80 public OpenstackSwitchingRulePopulator(ApplicationId appId,
82 FlowObjectiveService flowObjectiveService, 81 FlowObjectiveService flowObjectiveService,
83 DeviceService deviceService, 82 DeviceService deviceService,
84 - OpenstackRestHandler restHandler, 83 + OpenstackNetworkingService openstackService,
85 DriverService driverService) { 84 DriverService driverService) {
86 this.flowObjectiveService = flowObjectiveService; 85 this.flowObjectiveService = flowObjectiveService;
87 this.deviceService = deviceService; 86 this.deviceService = deviceService;
88 this.driverService = driverService; 87 this.driverService = driverService;
89 - this.restHandler = restHandler;
90 this.appId = appId; 88 this.appId = appId;
91 89
92 - openstackNetworkList = restHandler.getNetworks(); 90 + openstackNetworkList = openstackService.networks();
93 - openstackPortList = restHandler.getPorts(); 91 + openstackPortList = openstackService.ports();
94 } 92 }
95 93
96 94
......
...@@ -17,4 +17,4 @@ ...@@ -17,4 +17,4 @@
17 /** 17 /**
18 * OpenStack switch implementation. 18 * OpenStack switch implementation.
19 */ 19 */
20 -package org.onosproject.openstackswitching.impl; 20 +package org.onosproject.openstacknetworking.switching;
......
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!--
3 + ~ Copyright 2016 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/xsd/maven-4.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.5.0-SNAPSHOT</version>
26 + <relativePath>../pom.xml</relativePath>
27 + </parent>
28 +
29 + <artifactId>onos-app-openstacknetworking</artifactId>
30 + <packaging>pom</packaging>
31 +
32 + <modules>
33 + <module>app</module>
34 + <module>web</module>
35 + <module>api</module>
36 + <module>openstackswitching</module>
37 + <module>openstackrouting</module>
38 + </modules>
39 +
40 +
41 + <description>SONA Openstack Networking XXXX Application</description>
42 +
43 + <dependencies>
44 + </dependencies>
45 +</project>
1 +<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2 +<!--
3 + ~ Copyright 2015-16 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 + <bundle>mvn:${project.groupId}/onos-app-openstacknetworking-api/${project.version}</bundle>
22 + <bundle>mvn:${project.groupId}/onos-app-openstacknetworking-web/${project.version}</bundle>
23 + <bundle>mvn:com.sun.jersey/jersey-client/1.19</bundle>
24 + </feature>
25 +</features>
...@@ -21,31 +21,28 @@ ...@@ -21,31 +21,28 @@
21 21
22 <parent> 22 <parent>
23 <groupId>org.onosproject</groupId> 23 <groupId>org.onosproject</groupId>
24 - <artifactId>onos-openstackswitching</artifactId> 24 + <artifactId>onos-app-openstacknetworking</artifactId>
25 <version>1.5.0-SNAPSHOT</version> 25 <version>1.5.0-SNAPSHOT</version>
26 <relativePath>../pom.xml</relativePath> 26 <relativePath>../pom.xml</relativePath>
27 </parent> 27 </parent>
28 28
29 - <artifactId>onos-app-openstackswitching</artifactId> 29 + <artifactId>onos-app-openstacknetworking-web</artifactId>
30 <packaging>bundle</packaging> 30 <packaging>bundle</packaging>
31 31
32 - <description>SONA Openstack Switching applications</description>
33 <properties> 32 <properties>
34 <web.context>/onos/openstackswitching</web.context> 33 <web.context>/onos/openstackswitching</web.context>
35 <api.version>1.0.0</api.version> 34 <api.version>1.0.0</api.version>
36 - <api.title>ONOS OpenStack Switching REST API</api.title> 35 + <api.title>ONOS Openstack Networking REST API</api.title>
37 <api.description> 36 <api.description>
38 - APIs for receiving Neutron information. 37 + APIs for interacting with Openstack Neutron Plugin.
39 </api.description> 38 </api.description>
40 - <api.package>org.onosproject.openstackswitching.web</api.package> 39 + <api.package>org.onosproject.openstacknetworking.web</api.package>
41 - <onos.app.origin>SKT, Inc.</onos.app.origin>
42 </properties> 40 </properties>
43 41
44 -
45 <dependencies> 42 <dependencies>
46 <dependency> 43 <dependency>
47 <groupId>org.onosproject</groupId> 44 <groupId>org.onosproject</groupId>
48 - <artifactId>onos-app-openstackswitching-api</artifactId> 45 + <artifactId>onos-app-openstacknetworking-api</artifactId>
49 <version>${project.version}</version> 46 <version>${project.version}</version>
50 </dependency> 47 </dependency>
51 <dependency> 48 <dependency>
......
...@@ -13,13 +13,13 @@ ...@@ -13,13 +13,13 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import com.fasterxml.jackson.databind.ObjectMapper; 18 import com.fasterxml.jackson.databind.ObjectMapper;
19 import com.fasterxml.jackson.databind.node.ObjectNode; 19 import com.fasterxml.jackson.databind.node.ObjectNode;
20 -import org.onosproject.openstackrouting.OpenstackRouter; 20 +import org.onosproject.openstacknetworking.OpenstackRouter;
21 -import org.onosproject.openstackrouting.OpenstackRouterInterface; 21 +import org.onosproject.openstacknetworking.OpenstackRouterInterface;
22 -import org.onosproject.openstackswitching.OpenstackSwitchingService; 22 +import org.onosproject.openstacknetworking.OpenstackRoutingService;
23 import org.onosproject.rest.AbstractWebResource; 23 import org.onosproject.rest.AbstractWebResource;
24 import org.slf4j.Logger; 24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory; 25 import org.slf4j.LoggerFactory;
...@@ -42,8 +42,7 @@ import static com.google.common.base.Preconditions.checkNotNull; ...@@ -42,8 +42,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
42 42
43 @Path("routers") 43 @Path("routers")
44 public class OpensatckRouterWebResource extends AbstractWebResource { 44 public class OpensatckRouterWebResource extends AbstractWebResource {
45 - protected static final Logger log = LoggerFactory 45 + private final Logger log = LoggerFactory.getLogger(getClass());
46 - .getLogger(OpenstackNetworkWebResource.class);
47 46
48 private static final OpenstackRouterInterfaceCodec ROUTER_INTERFACE_CODEC 47 private static final OpenstackRouterInterfaceCodec ROUTER_INTERFACE_CODEC
49 = new OpenstackRouterInterfaceCodec(); 48 = new OpenstackRouterInterfaceCodec();
...@@ -62,9 +61,9 @@ public class OpensatckRouterWebResource extends AbstractWebResource { ...@@ -62,9 +61,9 @@ public class OpensatckRouterWebResource extends AbstractWebResource {
62 OpenstackRouter openstackRouter 61 OpenstackRouter openstackRouter
63 = ROUTER_CODEC.decode(routerNode, this); 62 = ROUTER_CODEC.decode(routerNode, this);
64 63
65 - OpenstackSwitchingService switchingService 64 + OpenstackRoutingService routingService
66 - = getService(OpenstackSwitchingService.class); 65 + = getService(OpenstackRoutingService.class);
67 - switchingService.createRouter(openstackRouter); 66 + routingService.createRouter(openstackRouter);
68 67
69 log.debug("REST API CREATE router is called {}", input.toString()); 68 log.debug("REST API CREATE router is called {}", input.toString());
70 return Response.status(Response.Status.OK).build(); 69 return Response.status(Response.Status.OK).build();
...@@ -80,14 +79,20 @@ public class OpensatckRouterWebResource extends AbstractWebResource { ...@@ -80,14 +79,20 @@ public class OpensatckRouterWebResource extends AbstractWebResource {
80 @Path("{id}") 79 @Path("{id}")
81 @Consumes(MediaType.APPLICATION_JSON) 80 @Consumes(MediaType.APPLICATION_JSON)
82 @Produces(MediaType.APPLICATION_JSON) 81 @Produces(MediaType.APPLICATION_JSON)
83 - public Response updateRouter(@PathParam("id") String id) { 82 + public Response updateRouter(InputStream input) {
84 - checkNotNull(id); 83 + checkNotNull(input);
85 try { 84 try {
86 - OpenstackSwitchingService switchingService 85 + ObjectMapper mapper = new ObjectMapper();
87 - = getService(OpenstackSwitchingService.class); 86 + ObjectNode routerNode = (ObjectNode) mapper.readTree(input);
88 - switchingService.updateRouter(id);
89 87
90 - log.debug("REST API UPDATE router is called from router {}", id); 88 + OpenstackRouter openstackRouter
89 + = ROUTER_CODEC.decode(routerNode, this);
90 +
91 + OpenstackRoutingService routingService
92 + = getService(OpenstackRoutingService.class);
93 + routingService.updateRouter(openstackRouter);
94 +
95 + log.debug("REST API UPDATE router is called from router {}", input.toString());
91 return Response.status(Response.Status.OK).build(); 96 return Response.status(Response.Status.OK).build();
92 } catch (Exception e) { 97 } catch (Exception e) {
93 log.error("Updates Router failed because of exception {}", 98 log.error("Updates Router failed because of exception {}",
...@@ -110,9 +115,9 @@ public class OpensatckRouterWebResource extends AbstractWebResource { ...@@ -110,9 +115,9 @@ public class OpensatckRouterWebResource extends AbstractWebResource {
110 OpenstackRouterInterface openstackRouterInterface 115 OpenstackRouterInterface openstackRouterInterface
111 = ROUTER_INTERFACE_CODEC.decode(routerIfNode, this); 116 = ROUTER_INTERFACE_CODEC.decode(routerIfNode, this);
112 117
113 - OpenstackSwitchingService switchingService 118 + OpenstackRoutingService routingService
114 - = getService(OpenstackSwitchingService.class); 119 + = getService(OpenstackRoutingService.class);
115 - switchingService.updateRouterInterface(openstackRouterInterface); 120 + routingService.updateRouterInterface(openstackRouterInterface);
116 121
117 log.debug("REST API AddRouterInterface is called from router {} portId: {}, subnetId: {}, tenantId: {}", 122 log.debug("REST API AddRouterInterface is called from router {} portId: {}, subnetId: {}, tenantId: {}",
118 openstackRouterInterface.id(), openstackRouterInterface.portId(), 123 openstackRouterInterface.id(), openstackRouterInterface.portId(),
...@@ -129,11 +134,12 @@ public class OpensatckRouterWebResource extends AbstractWebResource { ...@@ -129,11 +134,12 @@ public class OpensatckRouterWebResource extends AbstractWebResource {
129 134
130 @DELETE 135 @DELETE
131 @Path("{id}") 136 @Path("{id}")
137 + @Produces(MediaType.APPLICATION_JSON)
132 public Response deleteRouter(@PathParam("id") String id) { 138 public Response deleteRouter(@PathParam("id") String id) {
133 checkNotNull(id); 139 checkNotNull(id);
134 - OpenstackSwitchingService switchingService = 140 + OpenstackRoutingService routingService
135 - getService(OpenstackSwitchingService.class); 141 + = getService(OpenstackRoutingService.class);
136 - switchingService.deleteRouter(id); 142 + routingService.deleteRouter(id);
137 143
138 log.debug("REST API DELETE routers is called {}", id); 144 log.debug("REST API DELETE routers is called {}", id);
139 return Response.status(Response.Status.OK).build(); 145 return Response.status(Response.Status.OK).build();
...@@ -153,9 +159,9 @@ public class OpensatckRouterWebResource extends AbstractWebResource { ...@@ -153,9 +159,9 @@ public class OpensatckRouterWebResource extends AbstractWebResource {
153 OpenstackRouterInterface openstackRouterInterface 159 OpenstackRouterInterface openstackRouterInterface
154 = ROUTER_INTERFACE_CODEC.decode(routerIfNode, this); 160 = ROUTER_INTERFACE_CODEC.decode(routerIfNode, this);
155 161
156 - OpenstackSwitchingService switchingService 162 + OpenstackRoutingService routingService
157 - = getService(OpenstackSwitchingService.class); 163 + = getService(OpenstackRoutingService.class);
158 - switchingService.removeRouterInterface(openstackRouterInterface); 164 + routingService.removeRouterInterface(openstackRouterInterface);
159 165
160 log.debug("REST API RemoveRouterInterface is called from router {} portId: {}, subnetId: {}," + 166 log.debug("REST API RemoveRouterInterface is called from router {} portId: {}, subnetId: {}," +
161 "tenantId: {}", openstackRouterInterface.id(), openstackRouterInterface.portId(), 167 "tenantId: {}", openstackRouterInterface.id(), openstackRouterInterface.portId(),
......
...@@ -13,13 +13,13 @@ ...@@ -13,13 +13,13 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import com.fasterxml.jackson.databind.JsonNode; 18 import com.fasterxml.jackson.databind.JsonNode;
19 import com.fasterxml.jackson.databind.node.ObjectNode; 19 import com.fasterxml.jackson.databind.node.ObjectNode;
20 import org.onosproject.codec.CodecContext; 20 import org.onosproject.codec.CodecContext;
21 import org.onosproject.codec.JsonCodec; 21 import org.onosproject.codec.JsonCodec;
22 -import org.onosproject.openstackswitching.OpenstackNetwork; 22 +import org.onosproject.openstacknetworking.OpenstackNetwork;
23 import org.slf4j.Logger; 23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory; 24 import org.slf4j.LoggerFactory;
25 25
...@@ -29,8 +29,7 @@ import org.slf4j.LoggerFactory; ...@@ -29,8 +29,7 @@ import org.slf4j.LoggerFactory;
29 */ 29 */
30 public class OpenstackNetworkCodec extends JsonCodec<OpenstackNetwork> { 30 public class OpenstackNetworkCodec extends JsonCodec<OpenstackNetwork> {
31 31
32 - protected static final Logger log = LoggerFactory 32 + private final Logger log = LoggerFactory.getLogger(getClass());
33 - .getLogger(OpenstackNetworkCodec.class);
34 33
35 private static final String NETWORK = "network"; 34 private static final String NETWORK = "network";
36 private static final String NAME = "name"; 35 private static final String NAME = "name";
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import org.onosproject.rest.AbstractWebResource; 18 import org.onosproject.rest.AbstractWebResource;
19 import org.slf4j.Logger; 19 import org.slf4j.Logger;
...@@ -35,8 +35,7 @@ import java.io.InputStream; ...@@ -35,8 +35,7 @@ import java.io.InputStream;
35 @Path("networks") 35 @Path("networks")
36 public class OpenstackNetworkWebResource extends AbstractWebResource { 36 public class OpenstackNetworkWebResource extends AbstractWebResource {
37 37
38 - protected static final Logger log = LoggerFactory 38 + private final Logger log = LoggerFactory.getLogger(getClass());
39 - .getLogger(OpenstackNetworkWebResource.class);
40 39
41 @POST 40 @POST
42 @Consumes(MediaType.APPLICATION_JSON) 41 @Consumes(MediaType.APPLICATION_JSON)
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.impl; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import com.fasterxml.jackson.databind.ObjectMapper; 18 import com.fasterxml.jackson.databind.ObjectMapper;
19 import com.fasterxml.jackson.databind.node.ArrayNode; 19 import com.fasterxml.jackson.databind.node.ArrayNode;
...@@ -21,21 +21,32 @@ import com.fasterxml.jackson.databind.node.ObjectNode; ...@@ -21,21 +21,32 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
21 import com.google.common.collect.Lists; 21 import com.google.common.collect.Lists;
22 import com.sun.jersey.api.client.Client; 22 import com.sun.jersey.api.client.Client;
23 import com.sun.jersey.api.client.WebResource; 23 import com.sun.jersey.api.client.WebResource;
24 -import org.onosproject.openstackrouting.OpenstackRouter; 24 +import org.apache.felix.scr.annotations.Activate;
25 -import org.onosproject.openstackswitching.OpenstackNetwork; 25 +import org.apache.felix.scr.annotations.Component;
26 -import org.onosproject.openstackswitching.OpenstackPort; 26 +import org.apache.felix.scr.annotations.Deactivate;
27 -import org.onosproject.openstackswitching.OpenstackSubnet; 27 +import org.apache.felix.scr.annotations.Reference;
28 -import org.onosproject.openstackswitching.web.OpenstackNetworkCodec; 28 +import org.apache.felix.scr.annotations.ReferenceCardinality;
29 -import org.onosproject.openstackswitching.web.OpenstackPortCodec; 29 +import org.apache.felix.scr.annotations.Service;
30 -import org.onosproject.openstackswitching.web.OpenstackSecurityGroupCodec; 30 +import org.onosproject.core.ApplicationId;
31 -import org.onosproject.openstackswitching.web.OpenstackRouterCodec; 31 +import org.onosproject.core.CoreService;
32 -import org.onosproject.openstackswitching.web.OpenstackSubnetCodec; 32 +import org.onosproject.net.Port;
33 +import org.onosproject.net.driver.DriverService;
34 +import org.onosproject.openstacknetworking.OpenstackNetwork;
35 +import org.onosproject.openstacknetworking.OpenstackNetworkingService;
36 +import org.onosproject.openstacknetworking.OpenstackPort;
37 +import org.onosproject.openstacknetworking.OpenstackPortInfo;
38 +import org.onosproject.openstacknetworking.OpenstackRouter;
39 +import org.onosproject.openstacknetworking.OpenstackSecurityGroup;
40 +import org.onosproject.openstacknetworking.OpenstackSubnet;
41 +import org.onosproject.openstacknetworking.OpenstackSwitchingService;
33 import org.slf4j.Logger; 42 import org.slf4j.Logger;
34 import javax.ws.rs.core.MediaType; 43 import javax.ws.rs.core.MediaType;
35 import java.io.IOException; 44 import java.io.IOException;
36 import java.util.Collection; 45 import java.util.Collection;
37 import java.util.Collections; 46 import java.util.Collections;
38 import java.util.List; 47 import java.util.List;
48 +import java.util.Map;
49 +import java.util.stream.Collectors;
39 50
40 import static com.google.common.base.Preconditions.checkNotNull; 51 import static com.google.common.base.Preconditions.checkNotNull;
41 import static com.google.common.net.MediaType.JSON_UTF_8; 52 import static com.google.common.net.MediaType.JSON_UTF_8;
...@@ -45,7 +56,9 @@ import static org.slf4j.LoggerFactory.getLogger; ...@@ -45,7 +56,9 @@ import static org.slf4j.LoggerFactory.getLogger;
45 * Handles REST Calls to Openstack Neutron. 56 * Handles REST Calls to Openstack Neutron.
46 * 57 *
47 */ 58 */
48 -public class OpenstackRestHandler { 59 +@Service
60 +@Component(immediate = true)
61 +public class OpenstackNetworkingManager implements OpenstackNetworkingService {
49 62
50 private static final String URI_NETWORKS = "networks"; 63 private static final String URI_NETWORKS = "networks";
51 private static final String URI_PORTS = "ports"; 64 private static final String URI_PORTS = "ports";
...@@ -70,16 +83,29 @@ public class OpenstackRestHandler { ...@@ -70,16 +83,29 @@ public class OpenstackRestHandler {
70 private String userName; 83 private String userName;
71 private String pass; 84 private String pass;
72 85
73 - /** 86 + private static final String PORT_NAME = "portName";
74 - * Creates OpenstackRestHandler instance. 87 +
75 - * 88 + private ApplicationId appId;
76 - * @param cfg OpenstackSwitchingConfig reference 89 +
77 - */ 90 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
78 - public OpenstackRestHandler(OpenstackSwitchingConfig cfg) { 91 + protected CoreService coreService;
79 - this.neutronUrl = checkNotNull(cfg.neutronServer()); 92 +
80 - this.keystoneUrl = checkNotNull(cfg.keystoneServer()); 93 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
81 - this.userName = checkNotNull(cfg.userName()); 94 + protected DriverService driverService;
82 - this.pass = checkNotNull(cfg.password()); 95 +
96 + protected OpenstackSwitchingService openstackSwitchingService;
97 +
98 + @Activate
99 + protected void activate() {
100 + appId = coreService
101 + .registerApplication("org.onosproject.openstacknetworking");
102 +
103 + log.info("started");
104 + }
105 +
106 + @Deactivate
107 + protected void deactivate() {
108 + log.info("stopped");
83 } 109 }
84 110
85 /** 111 /**
...@@ -249,4 +275,79 @@ public class OpenstackRestHandler { ...@@ -249,4 +275,79 @@ public class OpenstackRestHandler {
249 return true; 275 return true;
250 } 276 }
251 277
252 -} 278 + @Override
279 + public Collection<OpenstackPort> ports(String networkId) {
280 + return getPorts().stream()
281 + .filter(port -> port.networkId().equals(networkId))
282 + .collect(Collectors.toList());
283 + }
284 +
285 + @Override
286 + public Collection<OpenstackPort> ports() {
287 + return getPorts();
288 + }
289 +
290 + @Override
291 + public OpenstackPort port(Port port) {
292 + String uuid = port.annotations().value(PORT_NAME).substring(3);
293 + return getPorts().stream()
294 + .filter(p -> p.id().startsWith(uuid))
295 + .findAny().orElse(null);
296 + }
297 +
298 + @Override
299 + public OpenstackPort port(String portId) {
300 + return getPorts().stream()
301 + .filter(p -> p.id().equals(portId))
302 + .findAny().orElse(null);
303 + }
304 +
305 + @Override
306 + public OpenstackNetwork network(String networkId) {
307 + return getNetworks().stream()
308 + .filter(n -> n.id().equals(networkId))
309 + .findAny().orElse(null);
310 + }
311 +
312 + @Override
313 + public Collection<OpenstackNetwork> networks() {
314 + return getNetworks();
315 + }
316 +
317 + @Override
318 + public OpenstackSubnet subnet(String subnetId) {
319 + return getSubnets().stream()
320 + .filter(subnet -> subnet.id().equals(subnetId))
321 + .findAny().orElse(null);
322 + }
323 +
324 + @Override
325 + public Collection<OpenstackSubnet> subnets() {
326 + return getSubnets();
327 + }
328 +
329 + @Override
330 + public Collection<OpenstackRouter> routers() {
331 + return getRouters();
332 + }
333 +
334 + @Override
335 + public OpenstackRouter router(String routerId) {
336 + return getRouters().stream()
337 + .filter(router -> router.id().equals(routerId))
338 + .findAny().orElse(null);
339 + }
340 +
341 + @Override
342 + public Map<String, OpenstackPortInfo> openstackPortInfo() {
343 + return openstackSwitchingService.openstackPortInfo();
344 + }
345 +
346 + @Override
347 + public void setConfigurations(String neutronUrl, String keystoneUrl, String userName, String pass) {
348 + this.neutronUrl = checkNotNull(neutronUrl);
349 + this.keystoneUrl = checkNotNull(keystoneUrl);
350 + this.userName = checkNotNull(userName);
351 + this.pass = checkNotNull(pass);
352 + }
353 +}
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import com.fasterxml.jackson.databind.JsonNode; 18 import com.fasterxml.jackson.databind.JsonNode;
19 import com.fasterxml.jackson.databind.node.ArrayNode; 19 import com.fasterxml.jackson.databind.node.ArrayNode;
...@@ -25,7 +25,7 @@ import org.onlab.packet.IpAddress; ...@@ -25,7 +25,7 @@ import org.onlab.packet.IpAddress;
25 import org.onlab.packet.MacAddress; 25 import org.onlab.packet.MacAddress;
26 import org.onosproject.codec.CodecContext; 26 import org.onosproject.codec.CodecContext;
27 import org.onosproject.codec.JsonCodec; 27 import org.onosproject.codec.JsonCodec;
28 -import org.onosproject.openstackswitching.OpenstackPort; 28 +import org.onosproject.openstacknetworking.OpenstackPort;
29 import org.slf4j.Logger; 29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory; 30 import org.slf4j.LoggerFactory;
31 31
...@@ -33,13 +33,14 @@ import java.util.Collection; ...@@ -33,13 +33,14 @@ import java.util.Collection;
33 import java.util.HashMap; 33 import java.util.HashMap;
34 import java.util.Map; 34 import java.util.Map;
35 35
36 +import static com.google.common.base.Preconditions.checkNotNull;
37 +
36 /** 38 /**
37 * Encodes and decodes the OpenstackPort. 39 * Encodes and decodes the OpenstackPort.
38 */ 40 */
39 public class OpenstackPortCodec extends JsonCodec<OpenstackPort> { 41 public class OpenstackPortCodec extends JsonCodec<OpenstackPort> {
40 42
41 - private static Logger log = LoggerFactory 43 + private final Logger log = LoggerFactory.getLogger(getClass());
42 - .getLogger(OpenstackPortCodec.class);
43 44
44 // JSON field names 45 // JSON field names
45 private static final String PORT = "port"; 46 private static final String PORT = "port";
...@@ -62,6 +63,7 @@ public class OpenstackPortCodec extends JsonCodec<OpenstackPort> { ...@@ -62,6 +63,7 @@ public class OpenstackPortCodec extends JsonCodec<OpenstackPort> {
62 @Override 63 @Override
63 public OpenstackPort decode(ObjectNode json, CodecContext context) { 64 public OpenstackPort decode(ObjectNode json, CodecContext context) {
64 65
66 + checkNotNull(json);
65 HashMap<String, Ip4Address> fixedIpMap = new HashMap<>(); 67 HashMap<String, Ip4Address> fixedIpMap = new HashMap<>();
66 JsonNode portInfo = json.get(PORT); 68 JsonNode portInfo = json.get(PORT);
67 if (portInfo == null) { 69 if (portInfo == null) {
......
...@@ -13,12 +13,12 @@ ...@@ -13,12 +13,12 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import com.fasterxml.jackson.databind.ObjectMapper; 18 import com.fasterxml.jackson.databind.ObjectMapper;
19 import com.fasterxml.jackson.databind.node.ObjectNode; 19 import com.fasterxml.jackson.databind.node.ObjectNode;
20 -import org.onosproject.openstackswitching.OpenstackPort; 20 +import org.onosproject.openstacknetworking.OpenstackPort;
21 -import org.onosproject.openstackswitching.OpenstackSwitchingService; 21 +import org.onosproject.openstacknetworking.OpenstackSwitchingService;
22 import org.onosproject.rest.AbstractWebResource; 22 import org.onosproject.rest.AbstractWebResource;
23 import org.slf4j.Logger; 23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory; 24 import org.slf4j.LoggerFactory;
...@@ -40,8 +40,7 @@ import java.io.InputStream; ...@@ -40,8 +40,7 @@ import java.io.InputStream;
40 @Path("ports") 40 @Path("ports")
41 public class OpenstackPortWebResource extends AbstractWebResource { 41 public class OpenstackPortWebResource extends AbstractWebResource {
42 42
43 - protected static final Logger log = LoggerFactory 43 + private final Logger log = LoggerFactory.getLogger(getClass());
44 - .getLogger(OpenstackPortWebResource.class);
45 44
46 private static final OpenstackPortCodec PORT_CODEC = new OpenstackPortCodec(); 45 private static final OpenstackPortCodec PORT_CODEC = new OpenstackPortCodec();
47 46
...@@ -70,11 +69,12 @@ public class OpenstackPortWebResource extends AbstractWebResource { ...@@ -70,11 +69,12 @@ public class OpenstackPortWebResource extends AbstractWebResource {
70 } 69 }
71 70
72 @Path("{portUUID}") 71 @Path("{portUUID}")
72 + @Produces(MediaType.APPLICATION_JSON)
73 @DELETE 73 @DELETE
74 public Response deletePorts(@PathParam("portUUID") String id) { 74 public Response deletePorts(@PathParam("portUUID") String id) {
75 OpenstackSwitchingService switchingService = 75 OpenstackSwitchingService switchingService =
76 getService(OpenstackSwitchingService.class); 76 getService(OpenstackSwitchingService.class);
77 - switchingService.deletePort(id); 77 + switchingService.removePort(id);
78 return Response.status(Response.Status.OK).build(); 78 return Response.status(Response.Status.OK).build();
79 } 79 }
80 80
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import com.fasterxml.jackson.databind.JsonNode; 18 import com.fasterxml.jackson.databind.JsonNode;
19 import com.fasterxml.jackson.databind.node.ArrayNode; 19 import com.fasterxml.jackson.databind.node.ArrayNode;
...@@ -22,8 +22,8 @@ import com.google.common.collect.Maps; ...@@ -22,8 +22,8 @@ import com.google.common.collect.Maps;
22 import org.onlab.packet.Ip4Address; 22 import org.onlab.packet.Ip4Address;
23 import org.onosproject.codec.CodecContext; 23 import org.onosproject.codec.CodecContext;
24 import org.onosproject.codec.JsonCodec; 24 import org.onosproject.codec.JsonCodec;
25 -import org.onosproject.openstackrouting.OpenstackExternalGateway; 25 +import org.onosproject.openstacknetworking.OpenstackExternalGateway;
26 -import org.onosproject.openstackrouting.OpenstackRouter; 26 +import org.onosproject.openstacknetworking.OpenstackRouter;
27 import org.slf4j.Logger; 27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory; 28 import org.slf4j.LoggerFactory;
29 import static com.google.common.base.Preconditions.checkNotNull; 29 import static com.google.common.base.Preconditions.checkNotNull;
...@@ -33,8 +33,7 @@ import java.util.Map; ...@@ -33,8 +33,7 @@ import java.util.Map;
33 * Implementation of the OpenstackRouter Codec. 33 * Implementation of the OpenstackRouter Codec.
34 */ 34 */
35 public class OpenstackRouterCodec extends JsonCodec<OpenstackRouter> { 35 public class OpenstackRouterCodec extends JsonCodec<OpenstackRouter> {
36 - protected static final Logger log = LoggerFactory 36 + private final Logger log = LoggerFactory.getLogger(getClass());
37 - .getLogger(OpenstackNetworkCodec.class);
38 37
39 private static final String ROUTER = "router"; 38 private static final String ROUTER = "router";
40 private static final String TENANT_ID = "tenant_id"; 39 private static final String TENANT_ID = "tenant_id";
...@@ -72,7 +71,7 @@ public class OpenstackRouterCodec extends JsonCodec<OpenstackRouter> { ...@@ -72,7 +71,7 @@ public class OpenstackRouterCodec extends JsonCodec<OpenstackRouter> {
72 String status = checkNotNull(routerInfo.path(STATUS).asText()); 71 String status = checkNotNull(routerInfo.path(STATUS).asText());
73 String adminStateUp = checkNotNull(routerInfo.path(ADMIN_STATE_UP).asText()); 72 String adminStateUp = checkNotNull(routerInfo.path(ADMIN_STATE_UP).asText());
74 73
75 - OpenstackExternalGateway.Builder osExtBuiler = OpenstackExternalGateway.builder(); 74 + OpenstackExternalGateway.Builder osExtBuiler = new OpenstackExternalGateway.Builder();
76 75
77 if (!routerInfo.path(EXTERNAL_GW_INFO).isMissingNode()) { 76 if (!routerInfo.path(EXTERNAL_GW_INFO).isMissingNode()) {
78 String externalGatewayNetId = checkNotNull(routerInfo.path(EXTERNAL_GW_INFO).path(NETWORK_ID).asText()); 77 String externalGatewayNetId = checkNotNull(routerInfo.path(EXTERNAL_GW_INFO).path(NETWORK_ID).asText());
......
...@@ -13,13 +13,13 @@ ...@@ -13,13 +13,13 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import com.fasterxml.jackson.databind.JsonNode; 18 import com.fasterxml.jackson.databind.JsonNode;
19 import com.fasterxml.jackson.databind.node.ObjectNode; 19 import com.fasterxml.jackson.databind.node.ObjectNode;
20 import org.onosproject.codec.CodecContext; 20 import org.onosproject.codec.CodecContext;
21 import org.onosproject.codec.JsonCodec; 21 import org.onosproject.codec.JsonCodec;
22 -import org.onosproject.openstackrouting.OpenstackRouterInterface; 22 +import org.onosproject.openstacknetworking.OpenstackRouterInterface;
23 import org.slf4j.Logger; 23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory; 24 import org.slf4j.LoggerFactory;
25 import static com.google.common.base.Preconditions.checkNotNull; 25 import static com.google.common.base.Preconditions.checkNotNull;
...@@ -27,8 +27,7 @@ import static com.google.common.base.Preconditions.checkNotNull; ...@@ -27,8 +27,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
27 * Implementation of the OpenstackRouterInterface Codec. 27 * Implementation of the OpenstackRouterInterface Codec.
28 */ 28 */
29 public class OpenstackRouterInterfaceCodec extends JsonCodec<OpenstackRouterInterface> { 29 public class OpenstackRouterInterfaceCodec extends JsonCodec<OpenstackRouterInterface> {
30 - protected static final Logger log = LoggerFactory 30 + private final Logger log = LoggerFactory.getLogger(getClass());
31 - .getLogger(OpenstackNetworkCodec.class);
32 31
33 private static final String ID = "id"; 32 private static final String ID = "id";
34 private static final String TENANT_ID = "tenant_id"; 33 private static final String TENANT_ID = "tenant_id";
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import com.fasterxml.jackson.databind.JsonNode; 18 import com.fasterxml.jackson.databind.JsonNode;
19 import com.fasterxml.jackson.databind.node.ArrayNode; 19 import com.fasterxml.jackson.databind.node.ArrayNode;
...@@ -21,8 +21,8 @@ import com.fasterxml.jackson.databind.node.ObjectNode; ...@@ -21,8 +21,8 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
21 import com.google.common.collect.Lists; 21 import com.google.common.collect.Lists;
22 import org.onosproject.codec.CodecContext; 22 import org.onosproject.codec.CodecContext;
23 import org.onosproject.codec.JsonCodec; 23 import org.onosproject.codec.JsonCodec;
24 -import org.onosproject.openstackswitching.impl.OpenstackSecurityGroup; 24 +import org.onosproject.openstacknetworking.OpenstackSecurityGroup;
25 -import org.onosproject.openstackswitching.impl.OpenstackSecurityGroupRule; 25 +import org.onosproject.openstacknetworking.OpenstackSecurityGroupRule;
26 import org.slf4j.Logger; 26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory; 27 import org.slf4j.LoggerFactory;
28 28
...@@ -33,8 +33,7 @@ import java.util.Collection; ...@@ -33,8 +33,7 @@ import java.util.Collection;
33 */ 33 */
34 public class OpenstackSecurityGroupCodec extends JsonCodec<OpenstackSecurityGroup> { 34 public class OpenstackSecurityGroupCodec extends JsonCodec<OpenstackSecurityGroup> {
35 35
36 - private static Logger log = LoggerFactory 36 + private final Logger log = LoggerFactory.getLogger(getClass());
37 - .getLogger(OpenstackSecurityGroupCodec.class);
38 37
39 private static final String SECURITY_GROUP = "security_group"; 38 private static final String SECURITY_GROUP = "security_group";
40 private static final String DESCRIPTION = "description"; 39 private static final String DESCRIPTION = "description";
...@@ -66,7 +65,7 @@ public class OpenstackSecurityGroupCodec extends JsonCodec<OpenstackSecurityGrou ...@@ -66,7 +65,7 @@ public class OpenstackSecurityGroupCodec extends JsonCodec<OpenstackSecurityGrou
66 Collection<OpenstackSecurityGroupRule> rules = Lists.newArrayList(); 65 Collection<OpenstackSecurityGroupRule> rules = Lists.newArrayList();
67 for (JsonNode ruleInfo: ruleInfoList) { 66 for (JsonNode ruleInfo: ruleInfoList) {
68 OpenstackSecurityGroupRule openstackSecurityGroupRule = 67 OpenstackSecurityGroupRule openstackSecurityGroupRule =
69 - OpenstackSecurityGroupRule.builder() 68 + new OpenstackSecurityGroupRule.Builder()
70 .direction(ruleInfo.path(DIRECTION).asText()) 69 .direction(ruleInfo.path(DIRECTION).asText())
71 .etherType(ruleInfo.path(EHTERTYPE).asText()) 70 .etherType(ruleInfo.path(EHTERTYPE).asText())
72 .id(ruleInfo.path(ID).asText()) 71 .id(ruleInfo.path(ID).asText())
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 import com.fasterxml.jackson.databind.JsonNode; 18 import com.fasterxml.jackson.databind.JsonNode;
19 19
...@@ -24,18 +24,19 @@ import com.google.common.collect.Lists; ...@@ -24,18 +24,19 @@ import com.google.common.collect.Lists;
24 import org.onlab.packet.Ip4Address; 24 import org.onlab.packet.Ip4Address;
25 import org.onosproject.codec.CodecContext; 25 import org.onosproject.codec.CodecContext;
26 import org.onosproject.codec.JsonCodec; 26 import org.onosproject.codec.JsonCodec;
27 -import org.onosproject.openstackswitching.OpenstackSubnet; 27 +import org.onosproject.openstacknetworking.OpenstackSubnet;
28 import org.slf4j.Logger; 28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory; 29 import org.slf4j.LoggerFactory;
30 30
31 import java.util.List; 31 import java.util.List;
32 32
33 +import static com.google.common.base.Preconditions.checkNotNull;
34 +
33 /** 35 /**
34 * Encodes and decodes the OpenstackSubnet. 36 * Encodes and decodes the OpenstackSubnet.
35 */ 37 */
36 public class OpenstackSubnetCodec extends JsonCodec<OpenstackSubnet> { 38 public class OpenstackSubnetCodec extends JsonCodec<OpenstackSubnet> {
37 - private static Logger log = LoggerFactory 39 + private final Logger log = LoggerFactory.getLogger(getClass());
38 - .getLogger(OpenstackSubnetCodec.class);
39 40
40 // JSON Field names 41 // JSON Field names
41 private static final String SUBNET = "subnet"; 42 private static final String SUBNET = "subnet";
...@@ -50,6 +51,7 @@ public class OpenstackSubnetCodec extends JsonCodec<OpenstackSubnet> { ...@@ -50,6 +51,7 @@ public class OpenstackSubnetCodec extends JsonCodec<OpenstackSubnet> {
50 51
51 @Override 52 @Override
52 public OpenstackSubnet decode(ObjectNode json, CodecContext context) { 53 public OpenstackSubnet decode(ObjectNode json, CodecContext context) {
54 + checkNotNull(json);
53 JsonNode subnetInfo = json.get(SUBNET); 55 JsonNode subnetInfo = json.get(SUBNET);
54 if (subnetInfo == null) { 56 if (subnetInfo == null) {
55 subnetInfo = json; 57 subnetInfo = json;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 * See the License for the specific language governing permissions and 13 * See the License for the specific language governing permissions and
14 * limitations under the License. 14 * limitations under the License.
15 */ 15 */
16 -package org.onosproject.openstackswitching.web; 16 +package org.onosproject.openstacknetworking.web;
17 17
18 /** 18 /**
19 * Handles Rest API call from Neutron ML2 plugin. 19 * Handles Rest API call from Neutron ML2 plugin.
...@@ -47,21 +47,18 @@ public class OpenstackSubnetWebResource extends AbstractWebResource { ...@@ -47,21 +47,18 @@ public class OpenstackSubnetWebResource extends AbstractWebResource {
47 47
48 48
49 @PUT 49 @PUT
50 - @Path("{subnetUUID}") 50 + @Path("{subnetId}")
51 @Produces(MediaType.APPLICATION_JSON) 51 @Produces(MediaType.APPLICATION_JSON)
52 @Consumes(MediaType.APPLICATION_JSON) 52 @Consumes(MediaType.APPLICATION_JSON)
53 - public Response updateSubnet(@PathParam("id") String id, 53 + public Response updateSubnet(@PathParam("subnetId") String id,
54 final InputStream input) { 54 final InputStream input) {
55 return Response.status(Response.Status.OK).build(); 55 return Response.status(Response.Status.OK).build();
56 -
57 } 56 }
58 57
59 @DELETE 58 @DELETE
60 - @Path("{subnetUUID}") 59 + @Path("{subnetId}")
61 @Produces(MediaType.APPLICATION_JSON) 60 @Produces(MediaType.APPLICATION_JSON)
62 - @Consumes(MediaType.APPLICATION_JSON) 61 + public Response deleteSubnet(@PathParam("subnetId") String id) {
63 - public Response deleteSubnet(@PathParam("id") String id,
64 - final InputStream input) {
65 return Response.status(Response.Status.OK).build(); 62 return Response.status(Response.Status.OK).build();
66 } 63 }
67 64
......
...@@ -15,6 +15,6 @@ ...@@ -15,6 +15,6 @@
15 */ 15 */
16 16
17 /** 17 /**
18 - * OpenStack switch API. 18 + * OpenStack networking implementation.
19 */ 19 */
20 -package org.onosproject.openstackswitching; 20 +package org.onosproject.openstacknetworking.web;
......
...@@ -30,10 +30,10 @@ ...@@ -30,10 +30,10 @@
30 <init-param> 30 <init-param>
31 <param-name>com.sun.jersey.config.property.classnames</param-name> 31 <param-name>com.sun.jersey.config.property.classnames</param-name>
32 <param-value> 32 <param-value>
33 - org.onosproject.openstackswitching.web.OpenstackPortWebResource, 33 + org.onosproject.openstacknetworking.web.OpenstackPortWebResource,
34 - org.onosproject.openstackswitching.web.OpenstackNetworkWebResource, 34 + org.onosproject.openstacknetworking.web.OpenstackNetworkWebResource,
35 - org.onosproject.openstackswitching.web.OpenstackSubnetWebResource, 35 + org.onosproject.openstacknetworking.web.OpenstackSubnetWebResource,
36 - org.onosproject.openstackswitching.web.OpensatckRouterWebResource 36 + org.onosproject.openstacknetworking.web.OpensatckRouterWebResource
37 </param-value> 37 </param-value>
38 </init-param> 38 </init-param>
39 <load-on-startup>1</load-on-startup> 39 <load-on-startup>1</load-on-startup>
......
...@@ -59,16 +59,15 @@ ...@@ -59,16 +59,15 @@
59 <module>igmp</module> 59 <module>igmp</module>
60 <module>pim</module> 60 <module>pim</module>
61 <module>mlb</module> 61 <module>mlb</module>
62 - <module>openstackswitching</module>
63 <module>pathpainter</module> 62 <module>pathpainter</module>
64 <module>drivermatrix</module> 63 <module>drivermatrix</module>
65 <module>cpman</module> 64 <module>cpman</module>
66 <module>events</module> 65 <module>events</module>
67 <module>vrouter</module> 66 <module>vrouter</module>
68 - <module>openstackrouting</module>
69 <module>cordmcast</module> 67 <module>cordmcast</module>
70 <module>vpls</module> 68 <module>vpls</module>
71 <module>openstacknode</module> 69 <module>openstacknode</module>
70 + <module>openstacknetworking</module>
72 </modules> 71 </modules>
73 72
74 <properties> 73 <properties>
......