2 * Copyright (c) 2015 IBM Corporation and others. 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
9 package org.opendaylight.neutron.transcriber;
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map.Entry;
16 import java.util.concurrent.ConcurrentHashMap;
17 import java.util.concurrent.ConcurrentMap;
19 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
20 import org.opendaylight.neutron.spi.INeutronVPNIPSECPolicyCRUD;
21 import org.opendaylight.neutron.spi.NeutronVPNIPSECPolicy;
22 import org.opendaylight.neutron.spi.NeutronVPNLifetime;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.ipsecpolicy.attributes.LifetimeBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.IpsecPolicies;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.ipsec.policies.IpsecPolicy;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.ipsec.policies.IpsecPolicyBuilder;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.osgi.framework.BundleContext;
29 import org.osgi.framework.ServiceRegistration;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
33 public class NeutronVPNIPSECPolicyInterface extends AbstractNeutronInterface<IpsecPolicy, NeutronVPNIPSECPolicy> implements INeutronVPNIPSECPolicyCRUD {
34 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronVPNIPSECPolicyInterface.class);
35 private ConcurrentMap<String, NeutronVPNIPSECPolicy> meteringLabelRuleDB = new ConcurrentHashMap<String, NeutronVPNIPSECPolicy>();
38 NeutronVPNIPSECPolicyInterface(ProviderContext providerContext) {
39 super(providerContext);
42 // IfNBVPNIPSECPolicyCRUD methods
45 public boolean neutronVPNIPSECPolicyExists(String uuid) {
46 return meteringLabelRuleDB.containsKey(uuid);
50 public NeutronVPNIPSECPolicy getNeutronVPNIPSECPolicy(String uuid) {
51 if (!neutronVPNIPSECPolicyExists(uuid)) {
54 return meteringLabelRuleDB.get(uuid);
58 public List<NeutronVPNIPSECPolicy> getAllNeutronVPNIPSECPolicies() {
59 Set<NeutronVPNIPSECPolicy> allVPNIPSECPolicies = new HashSet<NeutronVPNIPSECPolicy>();
60 for (Entry<String, NeutronVPNIPSECPolicy> entry : meteringLabelRuleDB.entrySet()) {
61 NeutronVPNIPSECPolicy meteringLabelRule = entry.getValue();
62 allVPNIPSECPolicies.add(meteringLabelRule);
64 LOGGER.debug("Exiting getAllVPNIPSECPolicies, Found {} OpenStackVPNIPSECPolicies", allVPNIPSECPolicies.size());
65 List<NeutronVPNIPSECPolicy> ans = new ArrayList<NeutronVPNIPSECPolicy>();
66 ans.addAll(allVPNIPSECPolicies);
71 public boolean addNeutronVPNIPSECPolicy(NeutronVPNIPSECPolicy input) {
72 if (neutronVPNIPSECPolicyExists(input.getID())) {
75 meteringLabelRuleDB.putIfAbsent(input.getID(), input);
77 //TODO: add code to find INeutronVPNIPSECPolicyAware services and call newtorkCreated on them
82 public boolean removeNeutronVPNIPSECPolicy(String uuid) {
83 if (!neutronVPNIPSECPolicyExists(uuid)) {
86 meteringLabelRuleDB.remove(uuid);
88 //TODO: add code to find INeutronVPNIPSECPolicyAware services and call newtorkDeleted on them
93 public boolean updateNeutronVPNIPSECPolicy(String uuid, NeutronVPNIPSECPolicy delta) {
94 if (!neutronVPNIPSECPolicyExists(uuid)) {
97 NeutronVPNIPSECPolicy target = meteringLabelRuleDB.get(uuid);
98 boolean rc = overwrite(target, delta);
100 updateMd(meteringLabelRuleDB.get(uuid));
106 public boolean neutronVPNIPSECPolicyInUse(String netUUID) {
107 if (!neutronVPNIPSECPolicyExists(netUUID)) {
115 protected IpsecPolicy toMd(NeutronVPNIPSECPolicy ipsecPolicy) {
116 IpsecPolicyBuilder ipsecPolicyBuilder = new IpsecPolicyBuilder();
117 if (ipsecPolicy.getName() != null) {
118 ipsecPolicyBuilder.setName(ipsecPolicy.getName());
120 if (ipsecPolicy.getTenantID() != null) {
121 ipsecPolicyBuilder.setTenantId(toUuid(ipsecPolicy.getTenantID()));
123 if (ipsecPolicy.getDescription() != null) {
124 ipsecPolicyBuilder.setDescr(ipsecPolicy.getDescription());
126 if (ipsecPolicy.getAuthAlgorithm() != null) {
127 ipsecPolicyBuilder.setAuthAlgorithm(ipsecPolicy.getAuthAlgorithm());
129 if (ipsecPolicy.getEncryptionAlgorithm() != null) {
130 ipsecPolicyBuilder.setEncryptionAlgorithm(ipsecPolicy.getEncryptionAlgorithm());
132 if (ipsecPolicy.getTransformProtocol() != null) {
133 ipsecPolicyBuilder.setTransformProtocol(ipsecPolicy.getTransformProtocol());
135 if (ipsecPolicy.getEncapsulationMode() != null) {
136 ipsecPolicyBuilder.setEncapsulationMode(ipsecPolicy.getEncapsulationMode());
138 if (ipsecPolicy.getPerfectForwardSecrecy() != null) {
139 ipsecPolicyBuilder.setPfs(ipsecPolicy.getPerfectForwardSecrecy());
141 if (ipsecPolicy.getLifetime() !=null) {
142 NeutronVPNLifetime vpnLifetime = ipsecPolicy.getLifetime();
143 LifetimeBuilder lifetimeBuilder = new LifetimeBuilder();
144 lifetimeBuilder.setUnits(vpnLifetime.getUnits());
145 lifetimeBuilder.setValue(vpnLifetime.getValue());
146 ipsecPolicyBuilder.setLifetime(lifetimeBuilder.build());
148 if (ipsecPolicy.getID() != null) {
149 ipsecPolicyBuilder.setUuid(toUuid(ipsecPolicy.getID()));
151 LOGGER.warn("Attempting to write neutron vpnIPSECPolicy without UUID");
153 return ipsecPolicyBuilder.build();
158 protected InstanceIdentifier<IpsecPolicy> createInstanceIdentifier(IpsecPolicy ipsecPolicy) {
159 return InstanceIdentifier.create(IpsecPolicies.class).child(IpsecPolicy.class, ipsecPolicy.getKey());
164 protected IpsecPolicy toMd(String uuid) {
165 IpsecPolicyBuilder ipsecPolicyBuilder = new IpsecPolicyBuilder();
166 ipsecPolicyBuilder.setUuid(toUuid(uuid));
167 return ipsecPolicyBuilder.build();
170 public static void registerNewInterface(BundleContext context,
171 ProviderContext providerContext,
172 List<ServiceRegistration<?>> registrations) {
173 NeutronVPNIPSECPolicyInterface neutronVPNIPSECPolicyInterface = new NeutronVPNIPSECPolicyInterface(providerContext);
174 ServiceRegistration<INeutronVPNIPSECPolicyCRUD> neutronVPNIPSECPolicyInterfaceRegistration = context.registerService(INeutronVPNIPSECPolicyCRUD.class, neutronVPNIPSECPolicyInterface, null);
175 if(neutronVPNIPSECPolicyInterfaceRegistration != null) {
176 registrations.add(neutronVPNIPSECPolicyInterfaceRegistration);