2 * Copyright (c) 2014, 2015 Red Hat, Inc. 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.List;
13 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
14 import org.opendaylight.neutron.spi.INeutronFirewallRuleCRUD;
15 import org.opendaylight.neutron.spi.NeutronFirewallRule;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionBase;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV4;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV6;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.NeutronUtils.FwProtocolMapper;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionAllow;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionBase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionDeny;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.FirewallRuleAttributes.Protocol;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.FirewallRules;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRule;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRuleBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.types.rev160517.IpPrefixOrAddress;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
33 import com.google.common.collect.ImmutableBiMap;
34 import org.osgi.framework.BundleContext;
35 import org.osgi.framework.ServiceRegistration;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
39 public class NeutronFirewallRuleInterface extends AbstractNeutronInterface<FirewallRule, FirewallRules, NeutronFirewallRule> implements INeutronFirewallRuleCRUD {
40 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronFirewallRuleInterface.class);
42 private static final ImmutableBiMap<Class<? extends ActionBase>, String> ACTION_MAP
43 = new ImmutableBiMap.Builder<Class<? extends ActionBase>, String>()
44 .put(ActionAllow.class, "allow")
45 .put(ActionDeny.class, "deny")
48 private static final ImmutableBiMap<Class<? extends IpVersionBase>, Integer> IP_VERSION_MAP
49 = new ImmutableBiMap.Builder<Class<? extends IpVersionBase>, Integer>()
50 .put(IpVersionV4.class, Integer.valueOf(4))
51 .put(IpVersionV6.class, Integer.valueOf(6))
54 NeutronFirewallRuleInterface(ProviderContext providerContext) {
55 super(providerContext);
59 public boolean neutronFirewallRuleExists(String uuid) {
64 public NeutronFirewallRule getNeutronFirewallRule(String uuid) {
69 protected List<FirewallRule> getDataObjectList(FirewallRules rules) {
70 return rules.getFirewallRule();
74 public List<NeutronFirewallRule> getAllNeutronFirewallRules() {
79 public boolean addNeutronFirewallRule(NeutronFirewallRule input) {
84 public boolean removeNeutronFirewallRule(String uuid) {
89 public boolean updateNeutronFirewallRule(String uuid, NeutronFirewallRule delta) {
90 return update(uuid, delta);
94 public boolean neutronFirewallRuleInUse(String firewallRuleUUID) {
95 return !exists(firewallRuleUUID);
99 protected InstanceIdentifier<FirewallRule> createInstanceIdentifier(FirewallRule item) {
100 return InstanceIdentifier.create(Neutron.class)
101 .child(FirewallRules.class)
102 .child(FirewallRule.class, item.getKey());
106 protected InstanceIdentifier<FirewallRules> createInstanceIdentifier() {
107 return InstanceIdentifier.create(Neutron.class)
108 .child(FirewallRules.class);
111 protected NeutronFirewallRule fromMd(FirewallRule rule) {
112 final NeutronFirewallRule answer = new NeutronFirewallRule();
113 if (rule.getUuid() != null) {
114 answer.setID(rule.getUuid().getValue());
116 if (rule.getName() != null) {
117 answer.setFirewallRuleName(rule.getName());
119 if (rule.getTenantId() != null) {
120 answer.setTenantID(rule.getTenantId());
122 if (rule.isShared() != null) {
123 answer.setFirewallRuleIsShared(rule.isShared());
125 if (rule.isEnabled() != null) {
126 answer.setFirewallRuleIsEnabled(rule.isEnabled());
128 if (rule.getFirewallPolicyId() != null) {
129 answer.setFirewallRulePolicyID(rule.getFirewallPolicyId().getValue());
131 if (rule.getProtocol() != null) {
132 final Protocol protocol = rule.getProtocol();
133 if (protocol.getUint8() != null) {
135 answer.setFirewallRuleProtocol(protocol.getUint8().toString());
137 // symbolic protocol name
138 answer.setFirewallRuleProtocol(FwProtocolMapper.getName(protocol.getIdentityref()));
141 if (rule.getIpVersion() != null) {
142 answer.setFirewallRuleIpVer(IP_VERSION_MAP.get(rule.getIpVersion()));
144 if (rule.getSourceIpAddr() != null) {
145 answer.setFirewallRuleSrcIpAddr(String.valueOf(rule.getSourceIpAddr().getValue()));
147 if (rule.getDestinationIpAddr() != null) {
148 answer.setFirewallRuleDstIpAddr(String.valueOf(rule.getDestinationIpAddr().getValue()));
150 if (rule.getSourcePortRangeMin() != null) {
151 answer.setFirewallRuleSrcPortRangeMin(rule.getSourcePortRangeMin());
153 if (rule.getSourcePortRangeMax() != null) {
154 answer.setFirewallRuleSrcPortRangeMax(rule.getSourcePortRangeMax());
156 if (rule.getDestinationPortRangeMin() != null) {
157 answer.setFirewallRuleDstPortRangeMin(rule.getDestinationPortRangeMin());
159 if (rule.getDestinationPortRangeMax() != null) {
160 answer.setFirewallRuleDstPortRangeMax(rule.getDestinationPortRangeMax());
162 if (rule.getPosition() != null) {
163 answer.setFirewallRulePosition(Integer.valueOf(rule.getPosition().intValue()));
165 if (rule.getAction() != null) {
166 answer.setFirewallRuleAction(ACTION_MAP.get(rule.getAction()));
172 protected FirewallRule toMd(NeutronFirewallRule rule) {
173 final FirewallRuleBuilder ruleBuilder = new FirewallRuleBuilder();
174 if (rule.getID() != null) {
175 ruleBuilder.setUuid(toUuid(rule.getID()));
177 if (rule.getFirewallRuleName() != null) {
178 ruleBuilder.setName(rule.getFirewallRuleName());
180 if (rule.getTenantID() != null) {
181 ruleBuilder.setTenantId(toUuid(rule.getTenantID()));
183 if (rule.getFirewallRuleIsShared() != null) {
184 ruleBuilder.setShared(rule.getFirewallRuleIsShared());
186 if (rule.getFirewallRuleIsEnabled() != null) {
187 ruleBuilder.setEnabled(rule.getFirewallRuleIsEnabled());
189 if (rule.getFirewallRulePolicyID() != null) {
190 ruleBuilder.setFirewallPolicyId(toUuid(rule.getFirewallRulePolicyID()));
192 if (rule.getFirewallRuleProtocol() != null) {
193 final String protocolString = rule.getFirewallRuleProtocol();
194 final Protocol protocol = new Protocol(protocolString.toCharArray());
195 ruleBuilder.setProtocol(protocol);
197 if (rule.getFirewallRuleIpVer() != null) {
198 final ImmutableBiMap<Integer, Class<? extends IpVersionBase>> mapper = IP_VERSION_MAP.inverse();
199 ruleBuilder.setIpVersion(mapper.get(rule.getFirewallRuleIpVer()));
201 if (rule.getFirewallRuleSrcIpAddr() != null) {
202 final IpPrefixOrAddress ipAddress = new IpPrefixOrAddress(rule.getFirewallRuleSrcIpAddr().toCharArray());
203 ruleBuilder.setSourceIpAddr(ipAddress);
205 if (rule.getFirewallRuleDstIpAddr() != null) {
206 final IpPrefixOrAddress ipAddress = new IpPrefixOrAddress(rule.getFirewallRuleDstIpAddr().toCharArray());
207 ruleBuilder.setDestinationIpAddr(ipAddress);
209 if (rule.getFirewallRuleSrcPortRangeMin() != null) {
210 ruleBuilder.setSourcePortRangeMin(rule.getFirewallRuleSrcPortRangeMin());
212 if (rule.getFirewallRuleSrcPortRangeMax() != null) {
213 ruleBuilder.setSourcePortRangeMax(rule.getFirewallRuleSrcPortRangeMax());
215 if (rule.getFirewallRuleDstPortRangeMin() != null) {
216 ruleBuilder.setDestinationPortRangeMin(rule.getFirewallRuleDstPortRangeMin());
218 if (rule.getFirewallRuleDstPortRangeMax() != null) {
219 ruleBuilder.setDestinationPortRangeMax(rule.getFirewallRuleDstPortRangeMax());
221 if (rule.getFirewallRulePosition() != null) {
222 ruleBuilder.setPosition(rule.getFirewallRulePosition().shortValue());
224 if (rule.getFirewallRuleAction() != null) {
225 final ImmutableBiMap<String, Class<? extends ActionBase>> mapper = ACTION_MAP.inverse();
226 ruleBuilder.setAction(mapper.get(rule.getFirewallRuleAction()));
228 return ruleBuilder.build();
232 protected FirewallRule toMd(String uuid) {
233 final FirewallRuleBuilder ruleBuilder = new FirewallRuleBuilder();
234 ruleBuilder.setUuid(toUuid(uuid));
235 return ruleBuilder.build();
238 public static void registerNewInterface(BundleContext context,
239 ProviderContext providerContext,
240 List<ServiceRegistration<?>> registrations) {
241 final NeutronFirewallRuleInterface neutronFirewallRuleInterface = new NeutronFirewallRuleInterface(providerContext);
242 final ServiceRegistration<INeutronFirewallRuleCRUD> neutronFirewallRuleInterfaceRegistration = context.registerService(INeutronFirewallRuleCRUD.class, neutronFirewallRuleInterface, null);
243 if(neutronFirewallRuleInterfaceRegistration != null) {
244 registrations.add(neutronFirewallRuleInterfaceRegistration);