e0c49f5b161a2a93af3cb758e53cd38267c06d82
[onosfw.git] /
1 /*\r
2  * Copyright 2015 Open Networking Laboratory\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 package org.onosproject.vtnrsc.virtualport.impl;\r
17 \r
18 import org.apache.felix.scr.annotations.Activate;\r
19 import org.apache.felix.scr.annotations.Component;\r
20 import org.apache.felix.scr.annotations.Deactivate;\r
21 import org.apache.felix.scr.annotations.Reference;\r
22 import org.apache.felix.scr.annotations.ReferenceCardinality;\r
23 import org.apache.felix.scr.annotations.Service;\r
24 import org.onlab.packet.IpAddress;\r
25 import org.onosproject.core.ApplicationId;\r
26 import org.onosproject.core.CoreService;\r
27 import org.onosproject.net.DeviceId;\r
28 import org.onosproject.store.serializers.KryoNamespaces;\r
29 import org.onosproject.store.service.Serializer;\r
30 import org.onosproject.store.service.StorageService;\r
31 import org.onosproject.vtnrsc.AllowedAddressPair;\r
32 import org.onosproject.vtnrsc.BindingHostId;\r
33 import org.onosproject.vtnrsc.DefaultVirtualPort;\r
34 import org.onosproject.vtnrsc.FixedIp;\r
35 import org.onosproject.vtnrsc.SecurityGroup;\r
36 import org.onosproject.vtnrsc.SubnetId;\r
37 import org.onosproject.vtnrsc.TenantId;\r
38 import org.onosproject.vtnrsc.TenantNetworkId;\r
39 import org.onosproject.vtnrsc.VirtualPort;\r
40 import org.onosproject.vtnrsc.VirtualPortId;\r
41 import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;\r
42 import org.onosproject.vtnrsc.virtualport.VirtualPortService;\r
43 import org.slf4j.Logger;\r
44 import org.slf4j.LoggerFactory;\r
45 \r
46 import java.util.Arrays;\r
47 import java.util.Collection;\r
48 import java.util.Collections;\r
49 import java.util.Map;\r
50 \r
51 import static com.google.common.base.Preconditions.checkNotNull;\r
52 \r
53 /**\r
54  * Provides implementation of the VirtualPort APIs.\r
55  */\r
56 @Component(immediate = true)\r
57 @Service\r
58 public class VirtualPortManager implements VirtualPortService {\r
59 \r
60     private final Logger log = LoggerFactory.getLogger(getClass());\r
61 \r
62     private static final String VIRTUALPORT = "vtn-virtual-port";\r
63     private static final String VTNRSC_APP = "org.onosproject.vtnrsc";\r
64 \r
65     private static final String VIRTUALPORT_ID_NULL = "VirtualPort ID cannot be null";\r
66     private static final String VIRTUALPORT_NOT_NULL = "VirtualPort  cannot be null";\r
67     private static final String TENANTID_NOT_NULL = "TenantId  cannot be null";\r
68     private static final String NETWORKID_NOT_NULL = "NetworkId  cannot be null";\r
69     private static final String DEVICEID_NOT_NULL = "DeviceId  cannot be null";\r
70 \r
71     protected Map<VirtualPortId, VirtualPort> vPortStore;\r
72     protected ApplicationId appId;\r
73 \r
74     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)\r
75     protected StorageService storageService;\r
76 \r
77     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)\r
78     protected TenantNetworkService networkService;\r
79 \r
80     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)\r
81     protected CoreService coreService;\r
82 \r
83     @Activate\r
84     public void activate() {\r
85 \r
86         appId = coreService.registerApplication(VTNRSC_APP);\r
87 \r
88         vPortStore = storageService.<VirtualPortId, VirtualPort>consistentMapBuilder()\r
89                 .withName(VIRTUALPORT)\r
90                 .withApplicationId(appId)\r
91                 .withPurgeOnUninstall()\r
92                 .withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),\r
93                                                  VirtualPortId.class,\r
94                                                  TenantNetworkId.class,\r
95                                                  VirtualPort.State.class,\r
96                                                  TenantId.class,\r
97                                                  AllowedAddressPair.class,\r
98                                                  FixedIp.class,\r
99                                                  BindingHostId.class,\r
100                                                  SecurityGroup.class,\r
101                                                  SubnetId.class,\r
102                                                  IpAddress.class,\r
103                                                  DefaultVirtualPort.class))\r
104                 .build().asJavaMap();\r
105         log.info("Started");\r
106     }\r
107 \r
108     @Deactivate\r
109     public void deactivate() {\r
110         vPortStore.clear();\r
111         log.info("Stoppped");\r
112     }\r
113 \r
114     @Override\r
115     public boolean exists(VirtualPortId vPortId) {\r
116         checkNotNull(vPortId, VIRTUALPORT_ID_NULL);\r
117         return vPortStore.containsKey(vPortId);\r
118     }\r
119 \r
120     @Override\r
121     public VirtualPort getPort(VirtualPortId vPortId) {\r
122         checkNotNull(vPortId, VIRTUALPORT_ID_NULL);\r
123         return vPortStore.get(vPortId);\r
124     }\r
125 \r
126     @Override\r
127     public Collection<VirtualPort> getPorts() {\r
128         return Collections.unmodifiableCollection(vPortStore.values());\r
129     }\r
130 \r
131     @Override\r
132     public Collection<VirtualPort> getPorts(TenantNetworkId networkId) {\r
133         checkNotNull(networkId, NETWORKID_NOT_NULL);\r
134         Collection<VirtualPort> vPortWithNetworkIds = vPortStore.values();\r
135         for (VirtualPort vPort : vPortWithNetworkIds) {\r
136             if (!vPort.networkId().equals(networkId)) {\r
137                 vPortWithNetworkIds.remove(vPort);\r
138             }\r
139         }\r
140         return vPortWithNetworkIds;\r
141     }\r
142 \r
143     @Override\r
144     public Collection<VirtualPort> getPorts(TenantId tenantId) {\r
145         checkNotNull(tenantId, TENANTID_NOT_NULL);\r
146         Collection<VirtualPort> vPortWithTenantIds = vPortStore.values();\r
147         for (VirtualPort vPort : vPortWithTenantIds) {\r
148             if (!vPort.tenantId().equals(tenantId)) {\r
149                 vPortWithTenantIds.remove(vPort);\r
150             }\r
151         }\r
152         return vPortWithTenantIds;\r
153     }\r
154 \r
155     @Override\r
156     public Collection<VirtualPort> getPorts(DeviceId deviceId) {\r
157         checkNotNull(deviceId, DEVICEID_NOT_NULL);\r
158         Collection<VirtualPort> vPortWithDeviceIds = vPortStore.values();\r
159         for (VirtualPort vPort : vPortWithDeviceIds) {\r
160             if (!vPort.deviceId().equals(deviceId)) {\r
161                 vPortWithDeviceIds.remove(vPort);\r
162             }\r
163         }\r
164         return vPortWithDeviceIds;\r
165     }\r
166 \r
167     @Override\r
168     public boolean createPorts(Iterable<VirtualPort> vPorts) {\r
169         checkNotNull(vPorts, VIRTUALPORT_NOT_NULL);\r
170         for (VirtualPort vPort : vPorts) {\r
171             log.debug("vPortId is  {} ", vPort.portId().toString());\r
172             vPortStore.put(vPort.portId(), vPort);\r
173             if (!vPortStore.containsKey(vPort.portId())) {\r
174                 log.debug("The virtualPort is created failed whose identifier is {} ",\r
175                           vPort.portId().toString());\r
176                 return false;\r
177             }\r
178         }\r
179         return true;\r
180     }\r
181 \r
182     @Override\r
183     public boolean updatePorts(Iterable<VirtualPort> vPorts) {\r
184         checkNotNull(vPorts, VIRTUALPORT_NOT_NULL);\r
185         if (vPorts != null) {\r
186             for (VirtualPort vPort : vPorts) {\r
187                 vPortStore.put(vPort.portId(), vPort);\r
188                 if (!vPortStore.containsKey(vPort.portId())) {\r
189                     log.debug("The virtualPort is not exist whose identifier is {}",\r
190                               vPort.portId().toString());\r
191                     return false;\r
192                 }\r
193 \r
194                 vPortStore.put(vPort.portId(), vPort);\r
195 \r
196                 if (!vPort.equals(vPortStore.get(vPort.portId()))) {\r
197                     log.debug("The virtualPort is updated failed whose  identifier is {}",\r
198                               vPort.portId().toString());\r
199                     return false;\r
200                 }\r
201             }\r
202         }\r
203         return true;\r
204     }\r
205 \r
206     @Override\r
207     public boolean removePorts(Iterable<VirtualPortId> vPortIds) {\r
208         checkNotNull(vPortIds, VIRTUALPORT_ID_NULL);\r
209         if (vPortIds != null) {\r
210             for (VirtualPortId vPortId : vPortIds) {\r
211                 vPortStore.remove(vPortId);\r
212                 if (vPortStore.containsKey(vPortId)) {\r
213                     log.debug("The virtualPort is removed failed whose identifier is {}",\r
214                               vPortId.toString());\r
215                     return false;\r
216                 }\r
217             }\r
218         }\r
219         return true;\r
220     }\r
221 \r
222 }\r