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
8 package org.opendaylight.neutron.transcriber;
10 import com.google.common.collect.ImmutableBiMap;
11 import java.util.List;
12 import javax.inject.Inject;
13 import javax.inject.Singleton;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.neutron.northbound.api.BadRequestException;
16 import org.opendaylight.neutron.spi.INeutronFirewallRuleCRUD;
17 import org.opendaylight.neutron.spi.NeutronFirewallRule;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionBase;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV4;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.IpVersionV6;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev150712.NeutronUtils.FwProtocolMapper;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionAllow;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionBase;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.ActionDeny;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.FirewallRuleAttributes.Protocol;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.FirewallRuleAttributesProtocolBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.FirewallRules;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRule;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRuleBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev150712.rules.attributes.firewall.rules.FirewallRuleKey;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.types.rev160517.IpPrefixOrAddress;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.types.rev160517.IpPrefixOrAddressBuilder;
33 import org.ops4j.pax.cdi.api.OsgiServiceProvider;
36 @OsgiServiceProvider(classes = INeutronFirewallRuleCRUD.class)
37 public final class NeutronFirewallRuleInterface
38 extends AbstractNeutronInterface<FirewallRule, FirewallRules, FirewallRuleKey, NeutronFirewallRule>
39 implements INeutronFirewallRuleCRUD {
41 private static final ImmutableBiMap<Class<? extends ActionBase>,
42 String> ACTION_MAP = new ImmutableBiMap.Builder<Class<? extends ActionBase>, String>()
43 .put(ActionAllow.class, "allow").put(ActionDeny.class, "deny").build();
45 private static final ImmutableBiMap<Class<? extends IpVersionBase>,
46 Integer> IP_VERSION_MAP = new ImmutableBiMap.Builder<Class<? extends IpVersionBase>, Integer>()
47 .put(IpVersionV4.class, Integer.valueOf(4)).put(IpVersionV6.class, Integer.valueOf(6)).build();
50 public NeutronFirewallRuleInterface(DataBroker db) {
51 super(FirewallRuleBuilder.class, db);
55 protected List<FirewallRule> getDataObjectList(FirewallRules rules) {
56 return rules.getFirewallRule();
60 protected NeutronFirewallRule fromMd(FirewallRule rule) {
61 final NeutronFirewallRule answer = new NeutronFirewallRule();
62 fromMdBaseAttributes(rule, answer);
63 if (rule.isShared() != null) {
64 answer.setFirewallRuleIsShared(rule.isShared());
66 if (rule.isEnabled() != null) {
67 answer.setFirewallRuleIsEnabled(rule.isEnabled());
69 if (rule.getFirewallPolicyId() != null) {
70 answer.setFirewallRulePolicyID(rule.getFirewallPolicyId().getValue());
72 if (rule.getProtocol() != null) {
73 final Protocol protocol = rule.getProtocol();
74 if (protocol.getUint8() != null) {
76 answer.setFirewallRuleProtocol(protocol.getUint8().toString());
78 // symbolic protocol name
79 answer.setFirewallRuleProtocol(FwProtocolMapper.getName(protocol.getIdentityref()));
82 if (rule.getIpVersion() != null) {
83 answer.setFirewallRuleIpVer(IP_VERSION_MAP.get(rule.getIpVersion()));
85 if (rule.getSourceIpAddr() != null) {
86 answer.setFirewallRuleSrcIpAddr(rule.getSourceIpAddr().stringValue());
88 if (rule.getDestinationIpAddr() != null) {
89 answer.setFirewallRuleDstIpAddr(rule.getDestinationIpAddr().stringValue());
91 if (rule.getSourcePortRangeMin() != null) {
92 answer.setFirewallRuleSrcPortRangeMin(rule.getSourcePortRangeMin());
94 if (rule.getSourcePortRangeMax() != null) {
95 answer.setFirewallRuleSrcPortRangeMax(rule.getSourcePortRangeMax());
97 if (rule.getDestinationPortRangeMin() != null) {
98 answer.setFirewallRuleDstPortRangeMin(rule.getDestinationPortRangeMin());
100 if (rule.getDestinationPortRangeMax() != null) {
101 answer.setFirewallRuleDstPortRangeMax(rule.getDestinationPortRangeMax());
103 if (rule.getPosition() != null) {
104 answer.setFirewallRulePosition(Integer.valueOf(rule.getPosition().intValue()));
106 if (rule.getAction() != null) {
107 answer.setFirewallRuleAction(ACTION_MAP.get(rule.getAction()));
113 @SuppressWarnings("checkstyle:AvoidHidingCauseException")
114 protected FirewallRule toMd(NeutronFirewallRule rule) {
115 final FirewallRuleBuilder ruleBuilder = new FirewallRuleBuilder();
116 toMdBaseAttributes(rule, ruleBuilder);
117 if (rule.getFirewallRuleIsShared() != null) {
118 ruleBuilder.setShared(rule.getFirewallRuleIsShared());
120 if (rule.getFirewallRuleIsEnabled() != null) {
121 ruleBuilder.setEnabled(rule.getFirewallRuleIsEnabled());
123 if (rule.getFirewallRulePolicyID() != null) {
124 ruleBuilder.setFirewallPolicyId(toUuid(rule.getFirewallRulePolicyID()));
126 if (rule.getFirewallRuleProtocol() != null) {
127 final String protocolString = rule.getFirewallRuleProtocol();
129 final Protocol protocol = FirewallRuleAttributesProtocolBuilder.getDefaultInstance(protocolString);
130 ruleBuilder.setProtocol(protocol);
131 } catch (NumberFormatException e) {
132 throw new BadRequestException("Protocol {" + rule.getFirewallRuleProtocol() + "} is not supported");
135 if (rule.getFirewallRuleIpVer() != null) {
136 final ImmutableBiMap<Integer, Class<? extends IpVersionBase>> mapper = IP_VERSION_MAP.inverse();
137 ruleBuilder.setIpVersion(mapper.get(rule.getFirewallRuleIpVer()));
139 if (rule.getFirewallRuleSrcIpAddr() != null) {
140 final IpPrefixOrAddress ipAddress = IpPrefixOrAddressBuilder.getDefaultInstance(
141 rule.getFirewallRuleSrcIpAddr());
142 ruleBuilder.setSourceIpAddr(ipAddress);
144 if (rule.getFirewallRuleDstIpAddr() != null) {
145 final IpPrefixOrAddress ipAddress = IpPrefixOrAddressBuilder.getDefaultInstance(
146 rule.getFirewallRuleDstIpAddr());
147 ruleBuilder.setDestinationIpAddr(ipAddress);
149 if (rule.getFirewallRuleSrcPortRangeMin() != null) {
150 ruleBuilder.setSourcePortRangeMin(rule.getFirewallRuleSrcPortRangeMin());
152 if (rule.getFirewallRuleSrcPortRangeMax() != null) {
153 ruleBuilder.setSourcePortRangeMax(rule.getFirewallRuleSrcPortRangeMax());
155 if (rule.getFirewallRuleDstPortRangeMin() != null) {
156 ruleBuilder.setDestinationPortRangeMin(rule.getFirewallRuleDstPortRangeMin());
158 if (rule.getFirewallRuleDstPortRangeMax() != null) {
159 ruleBuilder.setDestinationPortRangeMax(rule.getFirewallRuleDstPortRangeMax());
161 if (rule.getFirewallRulePosition() != null) {
162 ruleBuilder.setPosition(rule.getFirewallRulePosition().shortValue());
164 if (rule.getFirewallRuleAction() != null) {
165 final ImmutableBiMap<String, Class<? extends ActionBase>> mapper = ACTION_MAP.inverse();
166 ruleBuilder.setAction(mapper.get(rule.getFirewallRuleAction()));
168 return ruleBuilder.build();