2 * Copyright Tata Consultancy Services, 2015. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.neutron.transcriber;
10 import java.util.ArrayList;
11 import java.util.HashSet;
12 import java.util.List;
13 import java.util.Map.Entry;
15 import java.util.concurrent.ConcurrentHashMap;
16 import java.util.concurrent.ConcurrentMap;
18 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
19 import org.opendaylight.neutron.spi.INeutronVPNIPSECSiteConnectionsCRUD;
20 import org.opendaylight.neutron.spi.NeutronVPNDeadPeerDetection;
21 import org.opendaylight.neutron.spi.NeutronVPNIPSECSiteConnection;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.ipsecconnection.attrs.DpdBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.IpsecSiteConnections;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.ipsec.site.connections.IpsecSiteConnection;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.ipsec.site.connections.IpsecSiteConnectionBuilder;
26 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
27 import org.osgi.framework.BundleContext;
28 import org.osgi.framework.ServiceRegistration;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
32 public class NeutronVPNIPSECSiteConnectionsInterface extends AbstractNeutronInterface<IpsecSiteConnection, NeutronVPNIPSECSiteConnection> implements INeutronVPNIPSECSiteConnectionsCRUD {
33 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronVPNIKEPolicyInterface.class);
34 private ConcurrentMap<String, NeutronVPNIPSECSiteConnection> neutronVPNIPSECSiteConnectionDB = new ConcurrentHashMap<String, NeutronVPNIPSECSiteConnection>();
37 NeutronVPNIPSECSiteConnectionsInterface(ProviderContext providerContext) {
38 super(providerContext);
41 // INeutronVPNIPSECSiteConnectionsCRUD methods
44 public boolean neutronVPNIPSECSiteConnectionsExists(String policyID) {
45 return neutronVPNIPSECSiteConnectionDB.containsKey(policyID);
49 public NeutronVPNIPSECSiteConnection getNeutronVPNIPSECSiteConnections(String policyID) {
50 if (!neutronVPNIPSECSiteConnectionsExists(policyID)) {
53 return neutronVPNIPSECSiteConnectionDB.get(policyID);
57 public List<NeutronVPNIPSECSiteConnection> getAllNeutronVPNIPSECSiteConnections() {
58 Set<NeutronVPNIPSECSiteConnection> allNeutronVPNIPSECSiteConnections = new HashSet<NeutronVPNIPSECSiteConnection>();
59 for (Entry<String, NeutronVPNIPSECSiteConnection> entry : neutronVPNIPSECSiteConnectionDB.entrySet()) {
60 NeutronVPNIPSECSiteConnection meteringLabelRule = entry.getValue();
61 allNeutronVPNIPSECSiteConnections.add(meteringLabelRule);
63 LOGGER.debug("Exiting getAllNeutronVPNIPSECSiteConnections, Found {} OpenStackVPNIPSECSiteConnections", allNeutronVPNIPSECSiteConnections.size());
64 List<NeutronVPNIPSECSiteConnection> ans = new ArrayList<NeutronVPNIPSECSiteConnection>();
65 ans.addAll(allNeutronVPNIPSECSiteConnections);
70 public boolean addNeutronVPNIPSECSiteConnections(NeutronVPNIPSECSiteConnection input) {
71 if (neutronVPNIPSECSiteConnectionsExists(input.getID())) {
74 neutronVPNIPSECSiteConnectionDB.putIfAbsent(input.getID(), input);
80 public boolean removeNeutronVPNIPSECSiteConnections(String policyID) {
81 if (!neutronVPNIPSECSiteConnectionsExists(policyID)) {
84 neutronVPNIPSECSiteConnectionDB.remove(policyID);
85 removeMd(toMd(policyID));
90 public boolean updateNeutronVPNIPSECSiteConnections(String policyID, NeutronVPNIPSECSiteConnection delta) {
91 if (!neutronVPNIPSECSiteConnectionsExists(policyID)) {
94 NeutronVPNIPSECSiteConnection target = neutronVPNIPSECSiteConnectionDB.get(policyID);
95 boolean rc = overwrite(target, delta);
97 updateMd(neutronVPNIPSECSiteConnectionDB.get(policyID));
103 public boolean neutronVPNIPSECSiteConnectionsInUse(String policyID) {
104 if (!neutronVPNIPSECSiteConnectionsExists(policyID)) {
111 protected IpsecSiteConnection toMd(NeutronVPNIPSECSiteConnection ipsecSiteConnection) {
112 IpsecSiteConnectionBuilder ipsecSiteConnectionBuilder = new IpsecSiteConnectionBuilder();
113 if (ipsecSiteConnection.getName() != null) {
114 ipsecSiteConnectionBuilder.setName(ipsecSiteConnection.getName());
116 if (ipsecSiteConnection.getTenantID() != null) {
117 ipsecSiteConnectionBuilder.setTenantId(toUuid(ipsecSiteConnection.getTenantID()));
119 ipsecSiteConnectionBuilder.setStatus(ipsecSiteConnection.getStatus());
120 if (ipsecSiteConnection.getAdminStateUp() != null) {
121 ipsecSiteConnectionBuilder.setAdminStateUp(ipsecSiteConnection.getAdminStateUp());
123 if (ipsecSiteConnection.getDescription() != null) {
124 ipsecSiteConnectionBuilder.setDescr(ipsecSiteConnection.getDescription());
126 if (ipsecSiteConnection.getPeerAddress() != null) {
127 ipsecSiteConnectionBuilder.setPeerAddress(ipsecSiteConnection.getPeerAddress());
129 if (ipsecSiteConnection.getPeerCidrs() != null) {
130 List<String> peerCidrs = new ArrayList<String>();
131 for( String peerCidr : ipsecSiteConnection.getPeerCidrs()) {
132 peerCidrs.add(peerCidr);
134 ipsecSiteConnectionBuilder.setPeerCidrs(peerCidrs);
136 if (ipsecSiteConnection.getPeerID() != null) {
137 ipsecSiteConnectionBuilder.setPeerId(ipsecSiteConnection.getPeerID());
139 if (ipsecSiteConnection.getRouteMode() != null) {
140 ipsecSiteConnectionBuilder.setRouteMode(ipsecSiteConnection.getRouteMode());
142 if (ipsecSiteConnection.getMtu() != null) {
143 ipsecSiteConnectionBuilder.setMtu((ipsecSiteConnection.getMtu()).shortValue());
145 if (ipsecSiteConnection.getAuthMode() != null) {
146 ipsecSiteConnectionBuilder.setAuthMode(ipsecSiteConnection.getAuthMode());
148 if (ipsecSiteConnection.getPreSharedKey() != null) {
149 ipsecSiteConnectionBuilder.setPsk(ipsecSiteConnection.getPreSharedKey());
151 if (ipsecSiteConnection.getInitiator() != null) {
152 ipsecSiteConnectionBuilder.setInitiator(ipsecSiteConnection.getInitiator());
154 if (ipsecSiteConnection.getIkePolicyID() != null) {
155 ipsecSiteConnectionBuilder.setIkepolicyId(toUuid(ipsecSiteConnection.getIkePolicyID()));
157 if (ipsecSiteConnection.getIpsecPolicyID() != null) {
158 ipsecSiteConnectionBuilder.setIpsecpolicyId(toUuid(ipsecSiteConnection.getIpsecPolicyID()));
160 if (ipsecSiteConnection.getVpnServiceID() != null) {
161 ipsecSiteConnectionBuilder.setVpnserviceId(toUuid(ipsecSiteConnection.getVpnServiceID()));
163 if (ipsecSiteConnection.getDeadPeerDetection() != null) {
164 NeutronVPNDeadPeerDetection deadPeerDetection = ipsecSiteConnection.getDeadPeerDetection();
165 DpdBuilder dpdBuilder = new DpdBuilder();
166 dpdBuilder.setAction(deadPeerDetection.getAction());
167 dpdBuilder.setInterval(deadPeerDetection.getInterval());
168 dpdBuilder.setTimeout(deadPeerDetection.getTimeout());
169 ipsecSiteConnectionBuilder.setDpd(dpdBuilder.build());
171 if (ipsecSiteConnection.getID() != null) {
172 ipsecSiteConnectionBuilder.setUuid(toUuid(ipsecSiteConnection.getID()));
174 LOGGER.warn("Attempting to write neutron vpnIPSECSiteConnection without UUID");
176 return ipsecSiteConnectionBuilder.build();
180 protected InstanceIdentifier<IpsecSiteConnection> createInstanceIdentifier(IpsecSiteConnection ipsecSiteConnection) {
181 return InstanceIdentifier.create(IpsecSiteConnections.class).child(IpsecSiteConnection.class, ipsecSiteConnection.getKey());
185 protected IpsecSiteConnection toMd(String uuid) {
186 IpsecSiteConnectionBuilder ipsecSiteConnectionBuilder = new IpsecSiteConnectionBuilder();
187 ipsecSiteConnectionBuilder.setUuid(toUuid(uuid));
188 return ipsecSiteConnectionBuilder.build();
191 public static void registerNewInterface(BundleContext context,
192 ProviderContext providerContext,
193 List<ServiceRegistration<?>> registrations) throws Exception {
194 NeutronVPNIPSECSiteConnectionsInterface neutronVPNIPSECSiteConnectionsInterface = new NeutronVPNIPSECSiteConnectionsInterface(providerContext);
195 ServiceRegistration<INeutronVPNIPSECSiteConnectionsCRUD> neutronVPNIPSECSiteConnectionsInterfaceRegistration = context.registerService(INeutronVPNIPSECSiteConnectionsCRUD.class, neutronVPNIPSECSiteConnectionsInterface, null);
196 if (neutronVPNIPSECSiteConnectionsInterfaceRegistration != null) {
197 registrations.add(neutronVPNIPSECSiteConnectionsInterfaceRegistration);