2 * Copyright IBM Corporation, 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
9 package org.opendaylight.neutron.transcriber;
11 import java.lang.reflect.Method;
12 import java.util.ArrayList;
13 import java.util.HashSet;
14 import java.util.List;
15 import java.util.Map.Entry;
17 import java.util.concurrent.ConcurrentHashMap;
18 import java.util.concurrent.ConcurrentMap;
20 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
21 import org.opendaylight.neutron.spi.INeutronVPNIPSECPolicyCRUD;
22 import org.opendaylight.neutron.spi.NeutronVPNIPSECPolicy;
23 import org.opendaylight.neutron.spi.NeutronVPNLifetime;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.ipsecpolicy.attrs.LifetimeBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.IpsecPolicies;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.ipsec.policies.IpsecPolicy;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.vpnaas.rev141002.vpnaas.attributes.ipsec.policies.IpsecPolicyBuilder;
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
32 public class NeutronVPNIPSECPolicyInterface extends AbstractNeutronInterface<IpsecPolicy, NeutronVPNIPSECPolicy> implements INeutronVPNIPSECPolicyCRUD {
33 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronVPNIPSECPolicyInterface.class);
34 private ConcurrentMap<String, NeutronVPNIPSECPolicy> meteringLabelRuleDB = new ConcurrentHashMap<String, NeutronVPNIPSECPolicy>();
37 NeutronVPNIPSECPolicyInterface(ProviderContext providerContext) {
38 super(providerContext);
42 // this method uses reflection to update an object from it's delta.
44 private boolean overwrite(Object target, Object delta) {
45 Method[] methods = target.getClass().getMethods();
47 for(Method toMethod: methods){
48 if(toMethod.getDeclaringClass().equals(target.getClass())
49 && toMethod.getName().startsWith("set")){
51 String toName = toMethod.getName();
52 String fromName = toName.replace("set", "get");
55 Method fromMethod = delta.getClass().getMethod(fromName);
56 Object value = fromMethod.invoke(delta, (Object[])null);
58 toMethod.invoke(target, value);
60 } catch (Exception e) {
61 LOGGER.error(e.getMessage());
69 // IfNBVPNIPSECPolicyCRUD methods
72 public boolean neutronVPNIPSECPolicyExists(String uuid) {
73 return meteringLabelRuleDB.containsKey(uuid);
77 public NeutronVPNIPSECPolicy getNeutronVPNIPSECPolicy(String uuid) {
78 if (!neutronVPNIPSECPolicyExists(uuid)) {
81 return meteringLabelRuleDB.get(uuid);
85 public List<NeutronVPNIPSECPolicy> getAllNeutronVPNIPSECPolicies() {
86 Set<NeutronVPNIPSECPolicy> allVPNIPSECPolicies = new HashSet<NeutronVPNIPSECPolicy>();
87 for (Entry<String, NeutronVPNIPSECPolicy> entry : meteringLabelRuleDB.entrySet()) {
88 NeutronVPNIPSECPolicy meteringLabelRule = entry.getValue();
89 allVPNIPSECPolicies.add(meteringLabelRule);
91 LOGGER.debug("Exiting getAllVPNIPSECPolicies, Found {} OpenStackVPNIPSECPolicies", allVPNIPSECPolicies.size());
92 List<NeutronVPNIPSECPolicy> ans = new ArrayList<NeutronVPNIPSECPolicy>();
93 ans.addAll(allVPNIPSECPolicies);
98 public boolean addNeutronVPNIPSECPolicy(NeutronVPNIPSECPolicy input) {
99 if (neutronVPNIPSECPolicyExists(input.getID())) {
102 meteringLabelRuleDB.putIfAbsent(input.getID(), input);
104 //TODO: add code to find INeutronVPNIPSECPolicyAware services and call newtorkCreated on them
109 public boolean removeNeutronVPNIPSECPolicy(String uuid) {
110 if (!neutronVPNIPSECPolicyExists(uuid)) {
113 meteringLabelRuleDB.remove(uuid);
114 removeMd(toMd(uuid));
115 //TODO: add code to find INeutronVPNIPSECPolicyAware services and call newtorkDeleted on them
120 public boolean updateNeutronVPNIPSECPolicy(String uuid, NeutronVPNIPSECPolicy delta) {
121 if (!neutronVPNIPSECPolicyExists(uuid)) {
124 NeutronVPNIPSECPolicy target = meteringLabelRuleDB.get(uuid);
125 boolean rc = overwrite(target, delta);
127 updateMd(meteringLabelRuleDB.get(uuid));
133 public boolean neutronVPNIPSECPolicyInUse(String netUUID) {
134 if (!neutronVPNIPSECPolicyExists(netUUID)) {
142 protected IpsecPolicy toMd(NeutronVPNIPSECPolicy ipsecPolicy) {
143 IpsecPolicyBuilder ipsecPolicyBuilder = new IpsecPolicyBuilder();
144 if (ipsecPolicy.getName() != null) {
145 ipsecPolicyBuilder.setName(ipsecPolicy.getName());
147 if (ipsecPolicy.getTenantID() != null) {
148 ipsecPolicyBuilder.setTenantId(toUuid(ipsecPolicy.getTenantID()));
150 if (ipsecPolicy.getDescription() != null) {
151 ipsecPolicyBuilder.setDescr(ipsecPolicy.getDescription());
153 if (ipsecPolicy.getAuthAlgorithm() != null) {
154 ipsecPolicyBuilder.setAuthAlgorithm(ipsecPolicy.getAuthAlgorithm());
156 if (ipsecPolicy.getEncryptionAlgorithm() != null) {
157 ipsecPolicyBuilder.setEncryptionAlgorithm(ipsecPolicy.getEncryptionAlgorithm());
159 if (ipsecPolicy.getTransformProtocol() != null) {
160 ipsecPolicyBuilder.setTransformProtocol(ipsecPolicy.getTransformProtocol());
162 if (ipsecPolicy.getEncapsulationMode() != null) {
163 ipsecPolicyBuilder.setEncapsulationMode(ipsecPolicy.getEncapsulationMode());
165 if (ipsecPolicy.getPerfectForwardSecrecy() != null) {
166 ipsecPolicyBuilder.setPfs(ipsecPolicy.getPerfectForwardSecrecy());
168 if (ipsecPolicy.getLifetime() !=null) {
169 NeutronVPNLifetime vpnLifetime = ipsecPolicy.getLifetime();
170 LifetimeBuilder lifetimeBuilder = new LifetimeBuilder();
171 lifetimeBuilder.setUnits(vpnLifetime.getUnits());
172 lifetimeBuilder.setValue(vpnLifetime.getValue());
173 ipsecPolicyBuilder.setLifetime(lifetimeBuilder.build());
175 if (ipsecPolicy.getID() != null) {
176 ipsecPolicyBuilder.setUuid(toUuid(ipsecPolicy.getID()));
178 LOGGER.warn("Attempting to write neutron vpnIPSECPolicy without UUID");
180 return ipsecPolicyBuilder.build();
185 protected InstanceIdentifier<IpsecPolicy> createInstanceIdentifier(IpsecPolicy ipsecPolicy) {
186 return InstanceIdentifier.create(IpsecPolicies.class).child(IpsecPolicy.class, ipsecPolicy.getKey());
191 protected IpsecPolicy toMd(String uuid) {
192 IpsecPolicyBuilder ipsecPolicyBuilder = new IpsecPolicyBuilder();
193 ipsecPolicyBuilder.setUuid(toUuid(uuid));
194 return ipsecPolicyBuilder.build();