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