package org.opendaylight.controller.networkconfig.neutron.implementation;
-import java.util.Hashtable;
-import java.util.Dictionary;
-
import org.apache.felix.dm.Component;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.opendaylight.controller.clustering.services.IClusterContainerServices;
import org.opendaylight.controller.configuration.IConfigurationContainerAware;
import org.opendaylight.controller.configuration.IConfigurationContainerService;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallCRUD;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyCRUD;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleCRUD;
import org.opendaylight.controller.networkconfig.neutron.INeutronFloatingIPCRUD;
import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
import org.opendaylight.controller.networkconfig.neutron.INeutronRouterCRUD;
-import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupCRUD;
import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleCRUD;
+import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
public class Activator extends ComponentActivatorAbstractBase {
protected static final Logger logger = LoggerFactory
NeutronSubnetInterface.class,
NeutronNetworkInterface.class,
NeutronSecurityGroupInterface.class,
- NeutronSecurityRuleInterface.class};
+ NeutronSecurityRuleInterface.class,
+ NeutronFirewallInterface.class,
+ NeutronFirewallPolicyInterface.class,
+ NeutronFirewallRuleInterface.class};
return res;
}
"setConfigurationContainerService",
"unsetConfigurationContainerService").setRequired(true));
}
+ if (imp.equals(NeutronFirewallInterface.class)) {
+ // export the service
+ c.setInterface(
+ new String[] { INeutronFirewallCRUD.class.getName(),
+ IConfigurationContainerAware.class.getName()}, null);
+ Dictionary<String, String> props = new Hashtable<String, String>();
+ props.put("salListenerName", "neutron");
+ c.add(createContainerServiceDependency(containerName)
+ .setService(IClusterContainerServices.class)
+ .setCallbacks("setClusterContainerService",
+ "unsetClusterContainerService").setRequired(true));
+ c.add(createContainerServiceDependency(containerName).setService(
+ IConfigurationContainerService.class).setCallbacks(
+ "setConfigurationContainerService",
+ "unsetConfigurationContainerService").setRequired(true));
+ }
+ if (imp.equals(NeutronFirewallPolicyInterface.class)) {
+ // export the service
+ c.setInterface(
+ new String[] { INeutronFirewallPolicyCRUD.class.getName(),
+ IConfigurationContainerAware.class.getName()}, null);
+ Dictionary<String, String> props = new Hashtable<String, String>();
+ props.put("salListenerName", "neutron");
+ c.add(createContainerServiceDependency(containerName)
+ .setService(IClusterContainerServices.class)
+ .setCallbacks("setClusterContainerService",
+ "unsetClusterContainerService").setRequired(true));
+ c.add(createContainerServiceDependency(containerName).setService(
+ IConfigurationContainerService.class).setCallbacks(
+ "setConfigurationContainerService",
+ "unsetConfigurationContainerService").setRequired(true));
+ }
+ if (imp.equals(NeutronFirewallRuleInterface.class)) {
+ // export the service
+ c.setInterface(
+ new String[] { INeutronFirewallRuleCRUD.class.getName(),
+ IConfigurationContainerAware.class.getName()}, null);
+ Dictionary<String, String> props = new Hashtable<String, String>();
+ props.put("salListenerName", "neutron");
+ c.add(createContainerServiceDependency(containerName)
+ .setService(IClusterContainerServices.class)
+ .setCallbacks("setClusterContainerService",
+ "unsetClusterContainerService").setRequired(true));
+ c.add(createContainerServiceDependency(containerName).setService(
+ IConfigurationContainerService.class).setCallbacks(
+ "setConfigurationContainerService",
+ "unsetConfigurationContainerService").setRequired(true));
+ }
}
}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron.implementation;
+
+import org.apache.felix.dm.Component;
+import org.opendaylight.controller.clustering.services.CacheConfigException;
+import org.opendaylight.controller.clustering.services.CacheExistException;
+import org.opendaylight.controller.clustering.services.IClusterContainerServices;
+import org.opendaylight.controller.clustering.services.IClusterServices;
+import org.opendaylight.controller.configuration.ConfigurationObject;
+import org.opendaylight.controller.configuration.IConfigurationContainerAware;
+import org.opendaylight.controller.configuration.IConfigurationContainerService;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallCRUD;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewall;
+import org.opendaylight.controller.sal.utils.IObjectReader;
+import org.opendaylight.controller.sal.utils.Status;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+
+public class NeutronFirewallInterface implements INeutronFirewallCRUD, IConfigurationContainerAware, IObjectReader {
+ private static final Logger logger = LoggerFactory.getLogger(NeutronFirewallInterface.class);
+ private static final String FILE_NAME = "neutron.firewall.conf";
+ private String containerName = null;
+
+ private IClusterContainerServices clusterContainerService = null;
+ private IConfigurationContainerService configurationService;
+ private ConcurrentMap<String, NeutronFirewall> firewallDB;
+
+ // methods needed for creating caches
+ void setClusterContainerService(IClusterContainerServices s) {
+ logger.debug("Cluster Service set");
+ clusterContainerService = s;
+ }
+
+ void unsetClusterContainerService(IClusterContainerServices s) {
+ if (clusterContainerService == s) {
+ logger.debug("Cluster Service removed!");
+ clusterContainerService = null;
+ }
+ }
+
+ public void setConfigurationContainerService(IConfigurationContainerService service) {
+ logger.trace("Configuration service set: {}", service);
+ configurationService = service;
+ }
+
+ public void unsetConfigurationContainerService(IConfigurationContainerService service) {
+ logger.trace("Configuration service removed: {}", service);
+ configurationService = null;
+ }
+
+ private void allocateCache() {
+ if (this.clusterContainerService == null) {
+ logger.error("un-initialized clusterContainerService, can't create cache");
+ return;
+ }
+ logger.debug("Creating Cache for Neutron Firewall");
+ try {
+ // neutron caches
+ this.clusterContainerService.createCache("neutronFirewalls",
+ EnumSet.of(IClusterServices.cacheMode.NON_TRANSACTIONAL));
+ } catch (CacheConfigException cce) {
+ logger.error("Cache couldn't be created for Neutron Firewall - check cache mode");
+ } catch (CacheExistException cce) {
+ logger.error("Cache for Neutron Firewall already exists, destroy and recreate");
+ }
+ logger.debug("Cache successfully created for Neutron Firewall");
+ }
+
+ @SuppressWarnings ({"unchecked"})
+ private void retrieveCache() {
+ if (clusterContainerService == null) {
+ logger.error("un-initialized clusterContainerService, can't retrieve cache");
+ return;
+ }
+
+ logger.debug("Retrieving cache for Neutron Firewall");
+ firewallDB = (ConcurrentMap<String, NeutronFirewall>) clusterContainerService
+ .getCache("neutronFirewalls");
+ if (firewallDB == null) {
+ logger.error("Cache couldn't be retrieved for Neutron Firewall");
+ }
+ logger.debug("Cache was successfully retrieved for Neutron Firewall");
+ }
+
+ private void destroyCache() {
+ if (clusterContainerService == null) {
+ logger.error("un-initialized clusterMger, can't destroy cache");
+ return;
+ }
+ logger.debug("Destroying Cache for HostTracker");
+ clusterContainerService.destroyCache("neutronFirewalls");
+ }
+
+ private void startUp() {
+ allocateCache();
+ retrieveCache();
+ loadConfiguration();
+ }
+
+ /**
+ * Function called by the dependency manager when all the required
+ * dependencies are satisfied
+ */
+ void init(Component c) {
+ Dictionary<?, ?> props = c.getServiceProperties();
+ if (props != null) {
+ this.containerName = (String) props.get("containerName");
+ logger.debug("Running containerName: {}", this.containerName);
+ } else {
+ // In the Global instance case the containerName is empty
+ this.containerName = "";
+ }
+ startUp();
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ */
+ void destroy() {
+ destroyCache();
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ */
+ void stop() {
+ }
+
+ // this method uses reflection to update an object from it's delta.
+
+ private boolean overwrite(Object target, Object delta) {
+ Method[] methods = target.getClass().getMethods();
+
+ for (Method toMethod : methods) {
+ if (toMethod.getDeclaringClass().equals(target.getClass())
+ && toMethod.getName().startsWith("set")) {
+
+ String toName = toMethod.getName();
+ String fromName = toName.replace("set", "get");
+
+ try {
+ Method fromMethod = delta.getClass().getMethod(fromName);
+ Object value = fromMethod.invoke(delta, (Object[]) null);
+ if (value != null) {
+ toMethod.invoke(target, value);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean neutronFirewallExists(String uuid) {
+ return firewallDB.containsKey(uuid);
+ }
+
+ @Override
+ public NeutronFirewall getNeutronFirewall(String uuid) {
+ if (!neutronFirewallExists(uuid)) {
+ logger.debug("No Firewall Have Been Defined");
+ return null;
+ }
+ return firewallDB.get(uuid);
+ }
+
+ @Override
+ public List<NeutronFirewall> getAllNeutronFirewalls() {
+ Set<NeutronFirewall> allFirewalls = new HashSet<NeutronFirewall>();
+ for (Entry<String, NeutronFirewall> entry : firewallDB.entrySet()) {
+ NeutronFirewall firewall = entry.getValue();
+ allFirewalls.add(firewall);
+ }
+ logger.debug("Exiting getFirewalls, Found {} OpenStackFirewall", allFirewalls.size());
+ List<NeutronFirewall> ans = new ArrayList<NeutronFirewall>();
+ ans.addAll(allFirewalls);
+ return ans;
+ }
+
+ @Override
+ public boolean addNeutronFirewall(NeutronFirewall input) {
+ if (neutronFirewallExists(input.getFirewallUUID())) {
+ return false;
+ }
+ firewallDB.putIfAbsent(input.getFirewallUUID(), input);
+ return true;
+ }
+
+ @Override
+ public boolean removeNeutronFirewall(String uuid) {
+ if (!neutronFirewallExists(uuid)) {
+ return false;
+ }
+ firewallDB.remove(uuid);
+ return true;
+ }
+
+ @Override
+ public boolean updateNeutronFirewall(String uuid, NeutronFirewall delta) {
+ if (!neutronFirewallExists(uuid)) {
+ return false;
+ }
+ NeutronFirewall target = firewallDB.get(uuid);
+ return overwrite(target, delta);
+ }
+
+ @Override
+ public boolean neutronFirewallInUse(String firewallUUID) {
+ return !neutronFirewallExists(firewallUUID);
+ }
+
+ private void loadConfiguration() {
+ for (ConfigurationObject conf : configurationService.retrieveConfiguration(this, FILE_NAME)) {
+ NeutronFirewall nn = (NeutronFirewall) conf;
+ firewallDB.put(nn.getFirewallUUID(), nn);
+ }
+ }
+
+ @Override
+ public Status saveConfiguration() {
+ return configurationService.persistConfiguration(new ArrayList<ConfigurationObject>(firewallDB.values()),
+ FILE_NAME);
+ }
+
+ @Override
+ public Object readObject(ObjectInputStream ois) throws FileNotFoundException, IOException, ClassNotFoundException {
+ return ois.readObject();
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron.implementation;
+
+import org.apache.felix.dm.Component;
+import org.opendaylight.controller.clustering.services.CacheConfigException;
+import org.opendaylight.controller.clustering.services.CacheExistException;
+import org.opendaylight.controller.clustering.services.IClusterContainerServices;
+import org.opendaylight.controller.clustering.services.IClusterServices;
+import org.opendaylight.controller.configuration.ConfigurationObject;
+import org.opendaylight.controller.configuration.IConfigurationContainerAware;
+import org.opendaylight.controller.configuration.IConfigurationContainerService;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyCRUD;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewallPolicy;
+import org.opendaylight.controller.sal.utils.IObjectReader;
+import org.opendaylight.controller.sal.utils.Status;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+
+public class NeutronFirewallPolicyInterface implements INeutronFirewallPolicyCRUD, IConfigurationContainerAware, IObjectReader {
+ private static final Logger logger = LoggerFactory.getLogger(NeutronFirewallPolicyInterface.class);
+ private static final String FILE_NAME ="neutron.firewallpolicy.conf";
+ private String containerName = null;
+
+ private IClusterContainerServices clusterContainerService = null;
+ private IConfigurationContainerService configurationService;
+ private ConcurrentMap<String, NeutronFirewallPolicy> firewallPolicyDB;
+
+ // methods needed for creating caches
+ void setClusterContainerService(IClusterContainerServices s) {
+ logger.debug("Cluster Service set");
+ clusterContainerService = s;
+ }
+
+ void unsetClusterContainerService(IClusterContainerServices s) {
+ if (clusterContainerService == s) {
+ logger.debug("Cluster Service removed!");
+ clusterContainerService = null;
+ }
+ }
+
+ public void setConfigurationContainerService(IConfigurationContainerService service) {
+ logger.trace("Configuration service set: {}", service);
+ configurationService = service;
+ }
+
+ public void unsetConfigurationContainerService(IConfigurationContainerService service) {
+ logger.trace("Configuration service removed: {}", service);
+ configurationService = null;
+ }
+
+ private void allocateCache() {
+ if (this.clusterContainerService == null) {
+ logger.error("un-initialized clusterContainerService, can't create cache");
+ return;
+ }
+ logger.debug("Creating Cache for Neutron Firewall Rule");
+ try {
+ // neutron caches
+ this.clusterContainerService.createCache("neutronFirewallPolicies",
+ EnumSet.of(IClusterServices.cacheMode.NON_TRANSACTIONAL));
+ } catch (CacheConfigException cce) {
+ logger.error("Cache couldn't be created for Neutron Firewall Rule - check cache mode");
+ } catch (CacheExistException cce) {
+ logger.error("Cache for Neutron Firewall Rule already exists, destroy and recreate");
+ }
+ logger.debug("Cache successfully created for Neutron Firewall Rule");
+ }
+
+ @SuppressWarnings({ "unchecked" })
+ private void retrieveCache() {
+ if (clusterContainerService == null) {
+ logger.error("un-initialized clusterContainerService, can't retrieve cache");
+ return;
+ }
+
+ logger.debug("Retrieving cache for Neutron Firewall Rule");
+ firewallPolicyDB = (ConcurrentMap<String, NeutronFirewallPolicy>) clusterContainerService
+ .getCache("neutronFirewallPolicies");
+ if (firewallPolicyDB == null) {
+ logger.error("Cache couldn't be retrieved for Neutron Firewall Rule");
+ }
+ logger.debug("Cache was successfully retrieved for Neutron Firewall Rule");
+ }
+
+ private void destroyCache() {
+ if (clusterContainerService == null) {
+ logger.error("un-initialized clusterMger, can't destroy cache");
+ return;
+ }
+ logger.debug("Destroying Cache for HostTracker");
+ clusterContainerService.destroyCache("neutronFirewallPolicies");
+ }
+
+ private void startUp() {
+ allocateCache();
+ retrieveCache();
+ loadConfiguration();
+ }
+
+ /**
+ * Function called by the dependency manager when all the required
+ * dependencies are satisfied
+ *
+ */
+ void init(Component c) {
+ Dictionary<?, ?> props = c.getServiceProperties();
+ if (props != null) {
+ this.containerName = (String) props.get("containerName");
+ logger.debug("Running containerName: {}", this.containerName);
+ } else {
+ // In the Global instance case the containerName is empty
+ this.containerName = "";
+ }
+ startUp();
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ *
+ */
+ void destroy() {
+ destroyCache();
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ *
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ *
+ */
+ void stop() {
+ }
+
+ // this method uses reflection to update an object from it's delta.
+
+ private boolean overwrite(Object target, Object delta) {
+ Method[] methods = target.getClass().getMethods();
+
+ for(Method toMethod: methods){
+ if(toMethod.getDeclaringClass().equals(target.getClass())
+ && toMethod.getName().startsWith("set")){
+
+ String toName = toMethod.getName();
+ String fromName = toName.replace("set", "get");
+
+ try {
+ Method fromMethod = delta.getClass().getMethod(fromName);
+ Object value = fromMethod.invoke(delta, (Object[])null);
+ if(value != null){
+ toMethod.invoke(target, value);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean neutronFirewallPolicyExists(String uuid) {
+ return firewallPolicyDB.containsKey(uuid);
+ }
+
+ @Override
+ public NeutronFirewallPolicy getNeutronFirewallPolicy(String uuid) {
+ if (!neutronFirewallPolicyExists(uuid)) {
+ logger.debug("No Firewall Rule Have Been Defined");
+ return null;
+ }
+ return firewallPolicyDB.get(uuid);
+ }
+
+ @Override
+ public List<NeutronFirewallPolicy> getAllNeutronFirewallPolicies() {
+ Set<NeutronFirewallPolicy> allFirewallPolicies = new HashSet<NeutronFirewallPolicy>();
+ for (Entry<String, NeutronFirewallPolicy> entry : firewallPolicyDB.entrySet()) {
+ NeutronFirewallPolicy firewallPolicy = entry.getValue();
+ allFirewallPolicies.add(firewallPolicy);
+ }
+ logger.debug("Exiting getFirewallPolicies, Found {} OpenStackFirewallPolicy", allFirewallPolicies.size());
+ List<NeutronFirewallPolicy> ans = new ArrayList<NeutronFirewallPolicy>();
+ ans.addAll(allFirewallPolicies);
+ return ans;
+ }
+
+ @Override
+ public boolean addNeutronFirewallPolicy(NeutronFirewallPolicy input) {
+ if (neutronFirewallPolicyExists(input.getFirewallPolicyUUID())) {
+ return false;
+ }
+ firewallPolicyDB.putIfAbsent(input.getFirewallPolicyUUID(), input);
+ return true;
+ }
+
+ @Override
+ public boolean removeNeutronFirewallPolicy(String uuid) {
+ if (!neutronFirewallPolicyExists(uuid)) {
+ return false;
+ }
+ firewallPolicyDB.remove(uuid);
+ return true;
+ }
+
+ @Override
+ public boolean updateNeutronFirewallPolicy(String uuid, NeutronFirewallPolicy delta) {
+ if (!neutronFirewallPolicyExists(uuid)) {
+ return false;
+ }
+ NeutronFirewallPolicy target = firewallPolicyDB.get(uuid);
+ return overwrite(target, delta);
+ }
+
+ @Override
+ public boolean neutronFirewallPolicyInUse(String firewallPolicyUUID) {
+ return !neutronFirewallPolicyExists(firewallPolicyUUID);
+ }
+
+ private void loadConfiguration() {
+ for (ConfigurationObject conf : configurationService.retrieveConfiguration(this, FILE_NAME)) {
+ NeutronFirewallPolicy nn = (NeutronFirewallPolicy) conf;
+ firewallPolicyDB.put(nn.getFirewallPolicyUUID(), nn);
+ }
+ }
+
+ @Override
+ public Status saveConfiguration() {
+ return configurationService.persistConfiguration(new ArrayList<ConfigurationObject>(firewallPolicyDB.values()),
+ FILE_NAME);
+ }
+
+ @Override
+ public Object readObject(ObjectInputStream ois) throws FileNotFoundException, IOException, ClassNotFoundException {
+ return ois.readObject();
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron.implementation;
+
+import org.apache.felix.dm.Component;
+import org.opendaylight.controller.clustering.services.CacheConfigException;
+import org.opendaylight.controller.clustering.services.CacheExistException;
+import org.opendaylight.controller.clustering.services.IClusterContainerServices;
+import org.opendaylight.controller.clustering.services.IClusterServices;
+import org.opendaylight.controller.configuration.ConfigurationObject;
+import org.opendaylight.controller.configuration.IConfigurationContainerAware;
+import org.opendaylight.controller.configuration.IConfigurationContainerService;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleCRUD;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewallRule;
+import org.opendaylight.controller.sal.utils.IObjectReader;
+import org.opendaylight.controller.sal.utils.Status;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+
+public class NeutronFirewallRuleInterface implements INeutronFirewallRuleCRUD, IConfigurationContainerAware, IObjectReader {
+ private static final Logger logger = LoggerFactory.getLogger(NeutronFirewallRuleInterface.class);
+ private static final String FILE_NAME ="neutron.firewallrules.conf";
+ private String containerName = null;
+
+ private IClusterContainerServices clusterContainerService = null;
+ private IConfigurationContainerService configurationService;
+ private ConcurrentMap<String, NeutronFirewallRule> firewallRuleDB;
+
+ // methods needed for creating caches
+ void setClusterContainerService(IClusterContainerServices s) {
+ logger.debug("Cluster Service set");
+ clusterContainerService = s;
+ }
+
+ void unsetClusterContainerService(IClusterContainerServices s) {
+ if (clusterContainerService == s) {
+ logger.debug("Cluster Service removed!");
+ clusterContainerService = null;
+ }
+ }
+
+ public void setConfigurationContainerService(IConfigurationContainerService service) {
+ logger.trace("Configuration service set: {}", service);
+ configurationService = service;
+ }
+
+ public void unsetConfigurationContainerService(IConfigurationContainerService service) {
+ logger.trace("Configuration service removed: {}", service);
+ configurationService = null;
+ }
+
+ private void allocateCache() {
+ if (this.clusterContainerService == null) {
+ logger.error("un-initialized clusterContainerService, can't create cache");
+ return;
+ }
+ logger.debug("Creating Cache for Neutron Firewall Rule");
+ try {
+ // neutron caches
+ this.clusterContainerService.createCache("neutronFirewallRules",
+ EnumSet.of(IClusterServices.cacheMode.NON_TRANSACTIONAL));
+ } catch (CacheConfigException cce) {
+ logger.error("Cache couldn't be created for Neutron Firewall Rule - check cache mode");
+ } catch (CacheExistException cce) {
+ logger.error("Cache for Neutron Firewall Rule already exists, destroy and recreate");
+ }
+ logger.debug("Cache successfully created for Neutron Firewall Rule");
+ }
+
+ @SuppressWarnings({ "unchecked" })
+ private void retrieveCache() {
+ if (clusterContainerService == null) {
+ logger.error("un-initialized clusterContainerService, can't retrieve cache");
+ return;
+ }
+
+ logger.debug("Retrieving cache for Neutron Firewall Rule");
+ firewallRuleDB = (ConcurrentMap<String, NeutronFirewallRule>) clusterContainerService
+ .getCache("neutronFirewallRules");
+ if (firewallRuleDB == null) {
+ logger.error("Cache couldn't be retrieved for Neutron Firewall Rule");
+ }
+ logger.debug("Cache was successfully retrieved for Neutron Firewall Rule");
+ }
+
+ private void destroyCache() {
+ if (clusterContainerService == null) {
+ logger.error("un-initialized clusterMger, can't destroy cache");
+ return;
+ }
+ logger.debug("Destroying Cache for HostTracker");
+ clusterContainerService.destroyCache("neutronFirewallRules");
+ }
+
+ private void startUp() {
+ allocateCache();
+ retrieveCache();
+ loadConfiguration();
+ }
+
+ /**
+ * Function called by the dependency manager when all the required
+ * dependencies are satisfied
+ *
+ */
+ void init(Component c) {
+ Dictionary<?, ?> props = c.getServiceProperties();
+ if (props != null) {
+ this.containerName = (String) props.get("containerName");
+ logger.debug("Running containerName: {}", this.containerName);
+ } else {
+ // In the Global instance case the containerName is empty
+ this.containerName = "";
+ }
+ startUp();
+ }
+
+ /**
+ * Function called by the dependency manager when at least one dependency
+ * become unsatisfied or when the component is shutting down because for
+ * example bundle is being stopped.
+ *
+ */
+ void destroy() {
+ destroyCache();
+ }
+
+ /**
+ * Function called by dependency manager after "init ()" is called and after
+ * the services provided by the class are registered in the service registry
+ *
+ */
+ void start() {
+ }
+
+ /**
+ * Function called by the dependency manager before the services exported by
+ * the component are unregistered, this will be followed by a "destroy ()"
+ * calls
+ *
+ */
+ void stop() {
+ }
+
+ // this method uses reflection to update an object from it's delta.
+
+ private boolean overwrite(Object target, Object delta) {
+ Method[] methods = target.getClass().getMethods();
+
+ for(Method toMethod: methods){
+ if(toMethod.getDeclaringClass().equals(target.getClass())
+ && toMethod.getName().startsWith("set")){
+
+ String toName = toMethod.getName();
+ String fromName = toName.replace("set", "get");
+
+ try {
+ Method fromMethod = delta.getClass().getMethod(fromName);
+ Object value = fromMethod.invoke(delta, (Object[])null);
+ if(value != null){
+ toMethod.invoke(target, value);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean neutronFirewallRuleExists(String uuid) {
+ return firewallRuleDB.containsKey(uuid);
+ }
+
+ @Override
+ public NeutronFirewallRule getNeutronFirewallRule(String uuid) {
+ if (!neutronFirewallRuleExists(uuid)) {
+ logger.debug("No Firewall Rule Have Been Defined");
+ return null;
+ }
+ return firewallRuleDB.get(uuid);
+ }
+
+ @Override
+ public List<NeutronFirewallRule> getAllNeutronFirewallRules() {
+ Set<NeutronFirewallRule> allFirewallRules = new HashSet<NeutronFirewallRule>();
+ for (Entry<String, NeutronFirewallRule> entry : firewallRuleDB.entrySet()) {
+ NeutronFirewallRule firewallRule = entry.getValue();
+ allFirewallRules.add(firewallRule);
+ }
+ logger.debug("Exiting getFirewallRules, Found {} OpenStackFirewallRule", allFirewallRules.size());
+ List<NeutronFirewallRule> ans = new ArrayList<NeutronFirewallRule>();
+ ans.addAll(allFirewallRules);
+ return ans;
+ }
+
+ @Override
+ public boolean addNeutronFirewallRule(NeutronFirewallRule input) {
+ if (neutronFirewallRuleExists(input.getFirewallRuleUUID())) {
+ return false;
+ }
+ firewallRuleDB.putIfAbsent(input.getFirewallRuleUUID(), input);
+ return true;
+ }
+
+ @Override
+ public boolean removeNeutronFirewallRule(String uuid) {
+ if (!neutronFirewallRuleExists(uuid)) {
+ return false;
+ }
+ firewallRuleDB.remove(uuid);
+ return true;
+ }
+
+ @Override
+ public boolean updateNeutronFirewallRule(String uuid, NeutronFirewallRule delta) {
+ if (!neutronFirewallRuleExists(uuid)) {
+ return false;
+ }
+ NeutronFirewallRule target = firewallRuleDB.get(uuid);
+ return overwrite(target, delta);
+ }
+
+ @Override
+ public boolean neutronFirewallRuleInUse(String firewallRuleUUID) {
+ return !neutronFirewallRuleExists(firewallRuleUUID);
+ }
+
+ private void loadConfiguration() {
+ for (ConfigurationObject conf : configurationService.retrieveConfiguration(this, FILE_NAME)) {
+ NeutronFirewallRule nn = (NeutronFirewallRule) conf;
+ firewallRuleDB.put(nn.getFirewallRuleUUID(), nn);
+ }
+ }
+
+ @Override
+ public Status saveConfiguration() {
+ return configurationService.persistConfiguration(new ArrayList<ConfigurationObject>(firewallRuleDB.values()),
+ FILE_NAME);
+ }
+
+ @Override
+ public Object readObject(ObjectInputStream ois) throws FileNotFoundException, IOException, ClassNotFoundException {
+ return ois.readObject();
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron;
+
+/**
+ * This interface defines the methods a service that wishes to be aware of Firewall Rules needs to implement
+ *
+ */
+
+public interface INeutronFirewallAware {
+
+ /**
+ * Services provide this interface method to indicate if the specified firewall can be created
+ *
+ * @param firewall
+ * instance of proposed new Firewall object
+ * @return integer
+ * the return value is understood to be a HTTP status code. A return value outside of 200 through 299
+ * results in the create operation being interrupted and the returned status value reflected in the
+ * HTTP response.
+ */
+ public int canCreateNeutronFirewall(NeutronFirewall firewall);
+
+ /**
+ * Services provide this interface method for taking action after a firewall has been created
+ *
+ * @param firewall
+ * instance of new Firewall object
+ * @return void
+ */
+ public void neutronFirewallCreated(NeutronFirewall firewall);
+
+ /**
+ * Services provide this interface method to indicate if the specified firewall can be changed using the specified
+ * delta
+ *
+ * @param delta
+ * updates to the firewall object using patch semantics
+ * @param original
+ * instance of the Firewall object to be updated
+ * @return integer
+ * the return value is understood to be a HTTP status code. A return value outside of 200 through 299
+ * results in the update operation being interrupted and the returned status value reflected in the
+ * HTTP response.
+ */
+ public int canUpdateNeutronFirewall(NeutronFirewall delta, NeutronFirewall original);
+
+ /**
+ * Services provide this interface method for taking action after a firewall has been updated
+ *
+ * @param firewall
+ * instance of modified Firewall object
+ * @return void
+ */
+ public void neutronFirewallUpdated(NeutronFirewall firewall);
+
+ /**
+ * Services provide this interface method to indicate if the specified firewall can be deleted
+ *
+ * @param firewall
+ * instance of the Firewall object to be deleted
+ * @return integer
+ * the return value is understood to be a HTTP status code. A return value outside of 200 through 299
+ * results in the delete operation being interrupted and the returned status value reflected in the
+ * HTTP response.
+ */
+ public int canDeleteNeutronFirewall(NeutronFirewall firewall);
+
+ /**
+ * Services provide this interface method for taking action after a firewall has been deleted
+ *
+ * @param firewall
+ * instance of deleted Firewall object
+ * @return void
+ */
+ public void neutronFirewallDeleted(NeutronFirewall firewall);
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron;
+
+import java.util.List;
+
+/**
+ * This interface defines the methods for CRUD of NB OpenStack Firewall objects
+ *
+ */
+
+public interface INeutronFirewallCRUD {
+ /**
+ * Applications call this interface method to determine if a particular
+ *Firewall object exists
+ *
+ * @param uuid
+ * UUID of the Firewall object
+ * @return boolean
+ */
+
+ public boolean neutronFirewallExists(String uuid);
+
+ /**
+ * Applications call this interface method to return if a particular
+ * Firewall object exists
+ *
+ * @param uuid
+ * UUID of the Firewall object
+ * @return {@link org.opendaylight.controller.networkconfig.neutron.NeutronFirewall}
+ * OpenStackFirewall class
+ */
+
+ public NeutronFirewall getNeutronFirewall(String uuid);
+
+ /**
+ * Applications call this interface method to return all Firewall objects
+ *
+ * @return List of OpenStackNetworks objects
+ */
+
+ public List<NeutronFirewall> getAllNeutronFirewalls();
+
+ /**
+ * Applications call this interface method to add a Firewall object to the
+ * concurrent map
+ *
+ * @param input
+ * OpenStackNetwork object
+ * @return boolean on whether the object was added or not
+ */
+
+ public boolean addNeutronFirewall(NeutronFirewall input);
+
+ /**
+ * Applications call this interface method to remove a Neutron Firewall object to the
+ * concurrent map
+ *
+ * @param uuid
+ * identifier for the Firewall object
+ * @return boolean on whether the object was removed or not
+ */
+
+ public boolean removeNeutronFirewall(String uuid);
+
+ /**
+ * Applications call this interface method to edit a Firewall object
+ *
+ * @param uuid
+ * identifier of the Firewall object
+ * @param delta
+ * OpenStackFirewall object containing changes to apply
+ * @return boolean on whether the object was updated or not
+ */
+
+ public boolean updateNeutronFirewall(String uuid, NeutronFirewall delta);
+
+ /**
+ * Applications call this interface method to see if a MAC address is in use
+ *
+ * @param uuid
+ * identifier of the Firewall object
+ * @return boolean on whether the macAddress is already associated with a
+ * port or not
+ */
+
+ public boolean neutronFirewallInUse(String uuid);
+
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron;
+
+/**
+ * This interface defines the methods a service that wishes to be aware of Firewall Policys needs to implement
+ *
+ */
+
+public interface INeutronFirewallPolicyAware {
+
+ /**
+ * Services provide this interface method to indicate if the specified firewallPolicy can be created
+ *
+ * @param firewallPolicy
+ * instance of proposed new Firewall Policy object
+ * @return integer
+ * the return value is understood to be a HTTP status code. A return value outside of 200 through 299
+ * results in the create operation being interrupted and the returned status value reflected in the
+ * HTTP response.
+ */
+ public int canCreateNeutronFirewallPolicy(NeutronFirewallPolicy firewallPolicy);
+
+ /**
+ * Services provide this interface method for taking action after a firewallPolicy has been created
+ *
+ * @param firewallPolicy
+ * instance of new Firewall Policy object
+ * @return void
+ */
+ public void neutronFirewallPolicyCreated(NeutronFirewallPolicy firewallPolicy);
+
+ /**
+ * Services provide this interface method to indicate if the specified firewallPolicy can be changed using the specified
+ * delta
+ *
+ * @param delta
+ * updates to the firewallPolicy object using patch semantics
+ * @param original
+ * instance of the Firewall Policy object to be updated
+ * @return integer
+ * the return value is understood to be a HTTP status code. A return value outside of 200 through 299
+ * results in the update operation being interrupted and the returned status value reflected in the
+ * HTTP response.
+ */
+ public int canUpdateNeutronFirewallPolicy(NeutronFirewallPolicy delta, NeutronFirewallPolicy original);
+
+ /**
+ * Services provide this interface method for taking action after a firewallPolicy has been updated
+ *
+ * @param firewallPolicy
+ * instance of modified Firewall Policy object
+ * @return void
+ */
+ public void neutronFirewallPolicyUpdated(NeutronFirewallPolicy firewallPolicy);
+
+ /**
+ * Services provide this interface method to indicate if the specified firewallPolicy can be deleted
+ *
+ * @param firewallPolicy
+ * instance of the Firewall Policy object to be deleted
+ * @return integer
+ * the return value is understood to be a HTTP status code. A return value outside of 200 through 299
+ * results in the delete operation being interrupted and the returned status value reflected in the
+ * HTTP response.
+ */
+ public int canDeleteNeutronFirewallPolicy(NeutronFirewallPolicy firewallPolicy);
+
+ /**
+ * Services provide this interface method for taking action after a firewallPolicy has been deleted
+ *
+ * @param firewallPolicy
+ * instance of deleted Firewall Policy object
+ * @return void
+ */
+ public void neutronFirewallPolicyDeleted(NeutronFirewallPolicy firewallPolicy);
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron;
+
+import java.util.List;
+
+/**
+ * This interface defines the methods for CRUD of NB OpenStack Firewall Policy objects
+ *
+ */
+
+public interface INeutronFirewallPolicyCRUD {
+ /**
+ * Applications call this interface method to determine if a particular
+ *FirewallPolicy object exists
+ *
+ * @param uuid
+ * UUID of the Firewall Policy object
+ * @return boolean
+ */
+
+ public boolean neutronFirewallPolicyExists(String uuid);
+
+ /**
+ * Applications call this interface method to return if a particular
+ * FirewallPolicy object exists
+ *
+ * @param uuid
+ * UUID of the Firewall Policy object
+ * @return {@link NeutronFirewallPolicy}
+ * OpenStackFirewallPolicy class
+ */
+
+ public NeutronFirewallPolicy getNeutronFirewallPolicy(String uuid);
+
+ /**
+ * Applications call this interface method to return all Firewall Policy objects
+ *
+ * @return List of OpenStack Firewall Policy objects
+ */
+
+ public List<NeutronFirewallPolicy> getAllNeutronFirewallPolicies();
+
+ /**
+ * Applications call this interface method to add a Firewall Policy object to the
+ * concurrent map
+ *
+ * @param input
+ * OpenStackNetwork object
+ * @return boolean on whether the object was added or not
+ */
+
+ public boolean addNeutronFirewallPolicy(NeutronFirewallPolicy input);
+
+ /**
+ * Applications call this interface method to remove a Neutron FirewallPolicy object to the
+ * concurrent map
+ *
+ * @param uuid
+ * identifier for the Firewall Policy object
+ * @return boolean on whether the object was removed or not
+ */
+
+ public boolean removeNeutronFirewallPolicy(String uuid);
+
+ /**
+ * Applications call this interface method to edit a FirewallPolicy object
+ *
+ * @param uuid
+ * identifier of the Firewall Policy object
+ * @param delta
+ * OpenStackFirewallPolicy object containing changes to apply
+ * @return boolean on whether the object was updated or not
+ */
+
+ public boolean updateNeutronFirewallPolicy(String uuid, NeutronFirewallPolicy delta);
+
+ /**
+ * Applications call this interface method to see if a MAC address is in use
+ *
+ * @param uuid
+ * identifier of the Firewall Policy object
+ * @return boolean on whether the macAddress is already associated with a
+ * port or not
+ */
+
+ public boolean neutronFirewallPolicyInUse(String uuid);
+
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron;
+
+/**
+ * This interface defines the methods a service that wishes to be aware of Firewall Rules needs to implement
+ *
+ */
+
+public interface INeutronFirewallRuleAware {
+
+ /**
+ * Services provide this interface method to indicate if the specified firewallRule can be created
+ *
+ * @param firewallRule
+ * instance of proposed new Firewall Rule object
+ * @return integer
+ * the return value is understood to be a HTTP status code. A return value outside of 200 through 299
+ * results in the create operation being interrupted and the returned status value reflected in the
+ * HTTP response.
+ */
+ public int canCreateNeutronFirewallRule(NeutronFirewallRule firewallRule);
+
+ /**
+ * Services provide this interface method for taking action after a firewallRule has been created
+ *
+ * @param firewallRule
+ * instance of new Firewall Rule object
+ * @return void
+ */
+ public void neutronFirewallRuleCreated(NeutronFirewallRule firewallRule);
+
+ /**
+ * Services provide this interface method to indicate if the specified firewallRule can be changed using the specified
+ * delta
+ *
+ * @param delta
+ * updates to the firewallRule object using patch semantics
+ * @param original
+ * instance of the Firewall Rule object to be updated
+ * @return integer
+ * the return value is understood to be a HTTP status code. A return value outside of 200 through 299
+ * results in the update operation being interrupted and the returned status value reflected in the
+ * HTTP response.
+ */
+ public int canUpdateNeutronFirewallRule(NeutronFirewallRule delta, NeutronFirewallRule original);
+
+ /**
+ * Services provide this interface method for taking action after a firewallRule has been updated
+ *
+ * @param firewallRule
+ * instance of modified Firewall Rule object
+ * @return void
+ */
+ public void neutronFirewallRuleUpdated(NeutronFirewallRule firewallRule);
+
+ /**
+ * Services provide this interface method to indicate if the specified firewallRule can be deleted
+ *
+ * @param firewallRule
+ * instance of the Firewall Rule object to be deleted
+ * @return integer
+ * the return value is understood to be a HTTP status code. A return value outside of 200 through 299
+ * results in the delete operation being interrupted and the returned status value reflected in the
+ * HTTP response.
+ */
+ public int canDeleteNeutronFirewallRule(NeutronFirewallRule firewallRule);
+
+ /**
+ * Services provide this interface method for taking action after a firewallRule has been deleted
+ *
+ * @param firewallRule
+ * instance of deleted Firewall Rule object
+ * @return void
+ */
+ public void neutronFirewallRuleDeleted(NeutronFirewallRule firewallRule);
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron;
+
+import java.util.List;
+
+/**
+ * This interface defines the methods for CRUD of NB OpenStack Firewall Rule objects
+ *
+ */
+
+public interface INeutronFirewallRuleCRUD {
+ /**
+ * Applications call this interface method to determine if a particular
+ *FirewallRule object exists
+ *
+ * @param uuid
+ * UUID of the Firewall Rule object
+ * @return boolean
+ */
+
+ public boolean neutronFirewallRuleExists(String uuid);
+
+ /**
+ * Applications call this interface method to return if a particular
+ * FirewallRule object exists
+ *
+ * @param uuid
+ * UUID of the Firewall Rule object
+ * @return {@link NeutronFirewallRule}
+ * OpenStackFirewall Rule class
+ */
+
+ public NeutronFirewallRule getNeutronFirewallRule(String uuid);
+
+ /**
+ * Applications call this interface method to return all Firewall Rule objects
+ *
+ * @return List of OpenStackNetworks objects
+ */
+
+ public List<NeutronFirewallRule> getAllNeutronFirewallRules();
+
+ /**
+ * Applications call this interface method to add a Firewall Rule object to the
+ * concurrent map
+ *
+ * @param input
+ * OpenStackNetwork object
+ * @return boolean on whether the object was added or not
+ */
+
+ public boolean addNeutronFirewallRule(NeutronFirewallRule input);
+
+ /**
+ * Applications call this interface method to remove a Neutron FirewallRule object to the
+ * concurrent map
+ *
+ * @param uuid
+ * identifier for the Firewall Rule object
+ * @return boolean on whether the object was removed or not
+ */
+
+ public boolean removeNeutronFirewallRule(String uuid);
+
+ /**
+ * Applications call this interface method to edit a FirewallRule object
+ *
+ * @param uuid
+ * identifier of the Firewall Rule object
+ * @param delta
+ * OpenStackFirewallRule object containing changes to apply
+ * @return boolean on whether the object was updated or not
+ */
+
+ public boolean updateNeutronFirewallRule(String uuid, NeutronFirewallRule delta);
+
+ /**
+ * Applications call this interface method to see if a MAC address is in use
+ *
+ * @param uuid
+ * identifier of the Firewall Rule object
+ * @return boolean on whether the macAddress is already associated with a
+ * port or not
+ */
+
+ public boolean neutronFirewallRuleInUse(String uuid);
+
+}
INeutronSecurityRuleCRUD answer = (INeutronSecurityRuleCRUD) ServiceHelper.getGlobalInstance(INeutronSecurityRuleCRUD.class, o);
return answer;
}
+
+ public static INeutronFirewallCRUD getINeutronFirewallCRUD(Object o) {
+ INeutronFirewallCRUD answer = (INeutronFirewallCRUD) ServiceHelper.getGlobalInstance(INeutronFirewallCRUD.class, o);
+ return answer;
+ }
+
+ public static INeutronFirewallPolicyCRUD getINeutronFirewallPolicyCRUD(Object o) {
+ INeutronFirewallPolicyCRUD answer = (INeutronFirewallPolicyCRUD) ServiceHelper.getGlobalInstance(INeutronFirewallPolicyCRUD.class, o);
+ return answer;
+ }
+
+ public static INeutronFirewallRuleCRUD getINeutronFirewallRuleCRUD(Object o) {
+ INeutronFirewallRuleCRUD answer = (INeutronFirewallRuleCRUD) ServiceHelper.getGlobalInstance(INeutronFirewallRuleCRUD.class, o);
+ return answer;
+ }
}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron;
+
+import org.opendaylight.controller.configuration.ConfigurationObject;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * OpenStack Neutron v2.0 Firewall as a service
+ * (FWaaS) bindings. See OpenStack Network API
+ * v2.0 Reference for description of the fields:
+ * Implemented fields are as follows:
+ *
+ * id uuid-str
+ * tenant_id uuid-str
+ * name String
+ * description String
+ * admin_state_up Bool
+ * status String
+ * shared Bool
+ * firewall_policy_id uuid-str
+ * http://docs.openstack.org/api/openstack-network/2.0/openstack-network.pdf
+ */
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+
+public class NeutronFirewall extends ConfigurationObject implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @XmlElement(name="id")
+ String firewallUUID;
+
+ @XmlElement (name="tenant_id")
+ String firewallTenantID;
+
+ @XmlElement (name="name")
+ String firewallName;
+
+ @XmlElement (name="description")
+ String firewallDescription;
+
+ @XmlElement (defaultValue="true", name="admin_state_up")
+ Boolean firewallAdminStateIsUp;
+
+ @XmlElement (name="status")
+ String firewallStatus;
+
+ @XmlElement (defaultValue="false", name="shared")
+ Boolean firewallIsShared;
+
+ @XmlElement (name="firewall_policy_id")
+ String neutronFirewallPolicyID;
+
+ public String getFirewallUUID() {
+ return firewallUUID;
+ }
+
+ public void setFirewallUUID(String firewallUUID) {
+ this.firewallUUID = firewallUUID;
+ }
+
+ public String getFirewallTenantID() {
+ return firewallTenantID;
+ }
+
+ public void setFirewallTenantID(String firewallTenantID) {
+ this.firewallTenantID = firewallTenantID;
+ }
+
+ public String getFirewallName() {
+ return firewallName;
+ }
+
+ public void setFirewallName(String firewallName) {
+ this.firewallName = firewallName;
+ }
+
+ public String getFirewallDescription() {
+ return firewallDescription;
+ }
+
+ public void setFirewallDescription(String firewallDescription) {
+ this.firewallDescription = firewallDescription;
+ }
+
+ public Boolean getFirewallAdminStateIsUp() {
+ return firewallAdminStateIsUp;
+ }
+
+ public void setFirewallAdminStateIsUp(Boolean firewallAdminStateIsUp) {
+ this.firewallAdminStateIsUp = firewallAdminStateIsUp;
+ }
+
+ public String getFirewallStatus() {
+ return firewallStatus;
+ }
+
+ public void setFirewallStatus(String firewallStatus) {
+ this.firewallStatus = firewallStatus;
+ }
+
+ public Boolean getFirewallIsShared() {
+ return firewallIsShared;
+ }
+
+ public void setFirewallIsShared(Boolean firewallIsShared) {
+ this.firewallIsShared = firewallIsShared;
+ }
+
+ public String getFirewallPolicyID() {
+ return neutronFirewallPolicyID;
+ }
+
+ public void setNeutronFirewallPolicyID(String firewallPolicy) {
+ this.neutronFirewallPolicyID = firewallPolicy;
+ }
+
+ public NeutronFirewall extractFields(List<String> fields) {
+ NeutronFirewall ans = new NeutronFirewall();
+ Iterator<String> i = fields.iterator();
+ while (i.hasNext()) {
+ String s = i.next();
+ if (s.equals("id")) {
+ ans.setFirewallUUID(this.getFirewallUUID());
+ }
+ if (s.equals("tenant_id")) {
+ ans.setFirewallTenantID(this.getFirewallTenantID());
+ }
+ if (s.equals("name")) {
+ ans.setFirewallName(this.getFirewallName());
+ }
+ if(s.equals("description")) {
+ ans.setFirewallDescription(this.getFirewallDescription());
+ }
+ if (s.equals("admin_state_up")) {
+ ans.setFirewallAdminStateIsUp(firewallAdminStateIsUp);
+ }
+ if (s.equals("status")) {
+ ans.setFirewallStatus(this.getFirewallStatus());
+ }
+ if (s.equals("shared")) {
+ ans.setFirewallIsShared(firewallIsShared);
+ }
+ if (s.equals("firewall_policy_id")) {
+ ans.setNeutronFirewallPolicyID(this.getFirewallPolicyID());
+ }
+ }
+ return ans;
+ }
+
+ @Override
+ public String toString() {
+ return "NeutronFirewall{" +
+ "firewallUUID='" + firewallUUID + '\'' +
+ ", firewallTenantID='" + firewallTenantID + '\'' +
+ ", firewallName='" + firewallName + '\'' +
+ ", firewallDescription='" + firewallDescription + '\'' +
+ ", firewallAdminStateIsUp=" + firewallAdminStateIsUp +
+ ", firewallStatus='" + firewallStatus + '\'' +
+ ", firewallIsShared=" + firewallIsShared +
+ ", firewallRulePolicyID=" + neutronFirewallPolicyID +
+ '}';
+ }
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron;
+
+import org.opendaylight.controller.configuration.ConfigurationObject;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * OpenStack Neutron v2.0 Firewall as a service
+ * (FWaaS) bindings. See OpenStack Network API
+ * v2.0 Reference for description of the fields.
+ * The implemented fields are as follows:
+ *
+ * id uuid-str
+ * tenant_id uuid-str
+ * name String
+ * description String
+ * shared Boolean
+ * firewall_rules List
+ * audited Boolean
+ * http://docs.openstack.org/api/openstack-network/2.0/openstack-network.pdf
+ */
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+
+public class NeutronFirewallPolicy extends ConfigurationObject implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @XmlElement(name="id")
+ String firewallPolicyUUID;
+
+ @XmlElement (name="tenant_id")
+ String firewallPolicyTenantID;
+
+ @XmlElement (name="name")
+ String firewallPolicyName;
+
+ @XmlElement (name="description")
+ String firewallPolicyDescription;
+
+ @XmlElement (defaultValue="false", name="shared")
+ Boolean firewallPolicyIsShared;
+
+ @XmlElement (name="firewall_rules")
+ List<String> firewallPolicyRules;
+
+ @XmlElement (defaultValue="false", name="audited")
+ String firewallPolicyIsAudited;
+
+ public String getFirewallPolicyIsAudited() {
+ return firewallPolicyIsAudited;
+ }
+
+ public void setFirewallPolicyIsAudited(String firewallPolicyIsAudited) {
+ this.firewallPolicyIsAudited = firewallPolicyIsAudited;
+ }
+
+ public void setFirewallPolicyRules(List<String> firewallPolicyRules) {
+ this.firewallPolicyRules = firewallPolicyRules;
+ }
+
+ public List<String> getFirewallPolicyRules() {
+ return firewallPolicyRules;
+ }
+
+ public Boolean getFirewallPolicyIsShared() {
+ return firewallPolicyIsShared;
+ }
+
+ public void setFirewallPolicyIsShared(Boolean firewallPolicyIsShared) {
+ this.firewallPolicyIsShared = firewallPolicyIsShared;
+ }
+
+ public String getFirewallPolicyDescription() {
+ return firewallPolicyDescription;
+ }
+
+ public void setFirewallPolicyDescription(String firewallPolicyDescription) {
+ this.firewallPolicyDescription = firewallPolicyDescription;
+ }
+
+ public String getFirewallPolicyName() {
+ return firewallPolicyName;
+ }
+
+ public void setFirewallPolicyName(String firewallPolicyName) {
+ this.firewallPolicyName = firewallPolicyName;
+ }
+
+ public String getFirewallPolicyTenantID() {
+ return firewallPolicyTenantID;
+ }
+
+ public void setFirewallPolicyTenantID(String firewallPolicyTenantID) {
+ this.firewallPolicyTenantID = firewallPolicyTenantID;
+ }
+
+ public String getFirewallPolicyUUID() {
+ return firewallPolicyUUID;
+ }
+
+ public void setFirewallPolicyUUID(String firewallPolicyUUID) {
+ this.firewallPolicyUUID = firewallPolicyUUID;
+ }
+
+ public NeutronFirewallPolicy extractFields(List<String> fields) {
+ NeutronFirewallPolicy ans = new NeutronFirewallPolicy();
+ Iterator<String> i = fields.iterator();
+ while (i.hasNext()) {
+ String s = i.next();
+ if (s.equals("id")) {
+ ans.setFirewallPolicyUUID(this.getFirewallPolicyUUID());
+ }
+ if (s.equals("tenant_id")) {
+ ans.setFirewallPolicyTenantID(this.getFirewallPolicyTenantID());
+ }
+ if (s.equals("name")) {
+ ans.setFirewallPolicyName(this.getFirewallPolicyName());
+ }
+ if(s.equals("description")) {
+ ans.setFirewallPolicyDescription(this.getFirewallPolicyDescription());
+ }
+ if (s.equals("shared")) {
+ ans.setFirewallPolicyIsShared(firewallPolicyIsShared);
+ }
+ if (s.equals("firewall_rules")) {
+ List<String> firewallRuleList = new ArrayList<String>();
+ firewallRuleList.addAll(this.getFirewallPolicyRules());
+ ans.setFirewallPolicyRules(firewallRuleList);
+ }
+ if (s.equals("audited")) {
+ ans.setFirewallPolicyIsAudited(firewallPolicyIsAudited);
+ }
+ }
+ return ans;
+ }
+
+ @Override
+ public String toString() {
+ return "NeutronFirewallPolicy{" +
+ "firewallPolicyUUID='" + firewallPolicyUUID + '\'' +
+ ", firewallPolicyTenantID='" + firewallPolicyTenantID + '\'' +
+ ", firewallPolicyName='" + firewallPolicyName + '\'' +
+ ", firewallPolicyDescription='" + firewallPolicyDescription + '\'' +
+ ", firewallPolicyIsShared=" + firewallPolicyIsShared +
+ ", firewallPolicyRules=" + firewallPolicyRules +
+ ", firewallPolicyIsAudited='" + firewallPolicyIsAudited + '\'' +
+ '}';
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron;
+
+import org.opendaylight.controller.configuration.ConfigurationObject;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * OpenStack Neutron v2.0 Firewall as a service
+ * (FWaaS) bindings. See OpenStack Network API
+ * v2.0 Reference for description of the fields.
+ * The implemented fields are as follows:
+ *
+ * tenant_id uuid-str
+ * name String
+ * description String
+ * admin_state_up Bool
+ * status String
+ * shared Bool
+ * firewall_policy_id uuid-str
+ * protocol String
+ * ip_version Integer
+ * source_ip_address String (IP addr or CIDR)
+ * destination_ip_address String (IP addr or CIDR)
+ * source_port Integer
+ * destination_port Integer
+ * position Integer
+ * action String
+ * enabled Bool
+ * id uuid-str
+ * http://docs.openstack.org/api/openstack-network/2.0/openstack-network.pdf
+ */
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+
+public class NeutronFirewallRule extends ConfigurationObject implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @XmlElement(name = "id")
+ String firewallRuleUUID;
+
+ @XmlElement(name = "tenant_id")
+ String firewallRuleTenantID;
+
+ @XmlElement(name = "name")
+ String firewallRuleName;
+
+ @XmlElement(name = "description")
+ String firewallRuleDescription;
+
+ @XmlElement(defaultValue = "true", name = "admin_state_up")
+ Boolean firewallRuleAdminStateIsUp;
+
+ @XmlElement(name = "status")
+ String firewallRuleStatus;
+
+ @XmlElement(defaultValue = "false", name = "shared")
+ Boolean firewallRuleIsShared;
+
+ @XmlElement(name = "firewall_policy_id")
+ String firewallRulePolicyID;
+
+ @XmlElement(name = "protocol")
+ String firewallRuleProtocol;
+
+ @XmlElement(name = "ip_version")
+ Integer firewallRuleIpVer;
+
+ @XmlElement(name = "source_ip_address")
+ String firewallRuleSrcIpAddr;
+
+ @XmlElement(name = "destination_ip_address")
+ String firewallRuleDstIpAddr;
+
+ @XmlElement(name = "source_port")
+ Integer firewallRuleSrcPort;
+
+ @XmlElement(name = "destination_port")
+ Integer firewallRuleDstPort;
+
+ @XmlElement(name = "position")
+ Integer firewallRulePosition;
+
+ @XmlElement(name = "action")
+ String firewallRuleAction;
+
+ @XmlElement(name = "enabled")
+ Boolean firewallRuleIsEnabled;
+
+ public Boolean getFirewallRuleIsEnabled() {
+ return firewallRuleIsEnabled;
+ }
+
+ public void setFirewallRuleIsEnabled(Boolean firewallRuleIsEnabled) {
+ this.firewallRuleIsEnabled = firewallRuleIsEnabled;
+ }
+
+ public String getFirewallRuleAction() {
+ return firewallRuleAction;
+ }
+
+ public void setFirewallRuleAction(String firewallRuleAction) {
+ this.firewallRuleAction = firewallRuleAction;
+ }
+
+ public Integer getFirewallRulePosition() {
+ return firewallRulePosition;
+ }
+
+ public void setFirewallRulePosition(Integer firewallRulePosition) {
+ this.firewallRulePosition = firewallRulePosition;
+ }
+
+ public Integer getFirewallRuleDstPort() {
+ return firewallRuleDstPort;
+ }
+
+ public void setFirewallRuleDstPort(Integer firewallRuleDstPort) {
+ this.firewallRuleDstPort = firewallRuleDstPort;
+ }
+
+ public Integer getFirewallRuleSrcPort() {
+ return firewallRuleSrcPort;
+ }
+
+ public void setFirewallRuleSrcPort(Integer firewallRuleSrcPort) {
+ this.firewallRuleSrcPort = firewallRuleSrcPort;
+ }
+
+ public String getFirewallRuleDstIpAddr() {
+ return firewallRuleDstIpAddr;
+ }
+
+ public void setFirewallRuleDstIpAddr(String firewallRuleDstIpAddr) {
+ this.firewallRuleDstIpAddr = firewallRuleDstIpAddr;
+ }
+
+ public String getFirewallRuleSrcIpAddr() {
+ return firewallRuleSrcIpAddr;
+ }
+
+ public void setFirewallRuleSrcIpAddr(String firewallRuleSrcIpAddr) {
+ this.firewallRuleSrcIpAddr = firewallRuleSrcIpAddr;
+ }
+
+ public Integer getFirewallRuleIpVer() {
+ return firewallRuleIpVer;
+ }
+
+ public void setFirewallRuleIpVer(Integer firewallRuleIpVer) {
+ this.firewallRuleIpVer = firewallRuleIpVer;
+ }
+
+ public String getFirewallRuleProtocol() {
+ return firewallRuleProtocol;
+ }
+
+ public void setFirewallRuleProtocol(String firewallRuleProtocol) {
+ this.firewallRuleProtocol = firewallRuleProtocol;
+ }
+
+ public String getFirewallRulePolicyID() {
+ return firewallRulePolicyID;
+ }
+
+ public void setFirewallRulesPolicyID(String firewallRulePolicyID) {
+ this.firewallRulePolicyID = firewallRulePolicyID;
+ }
+
+ public Boolean getFirewallRuleIsShared() {
+ return firewallRuleIsShared;
+ }
+
+ public void setFirewallRuleIsShared(Boolean firewallRuleIsShared) {
+ this.firewallRuleIsShared = firewallRuleIsShared;
+ }
+
+ public String getFirewallRuleStatus() {
+ return firewallRuleStatus;
+ }
+
+ public void setFirewallRuleStatus(String firewallRuleStatus) {
+ this.firewallRuleStatus = firewallRuleStatus;
+ }
+
+ public Boolean getFirewallRuleAdminStateIsUp() {
+ return firewallRuleAdminStateIsUp;
+ }
+
+ public void setFirewallRuleAdminStateIsUp(Boolean firewallRuleAdminStateIsUp) {
+ this.firewallRuleAdminStateIsUp = firewallRuleAdminStateIsUp;
+ }
+
+ public String getFirewallRuleDescription() {
+ return firewallRuleDescription;
+ }
+
+ public void setFirewallRuleDescription(String firewallRuleDescription) {
+ this.firewallRuleDescription = firewallRuleDescription;
+ }
+
+ public String getFirewallRuleName() {
+ return firewallRuleName;
+ }
+
+ public void setFirewallRuleName(String firewallRuleName) {
+ this.firewallRuleName = firewallRuleName;
+ }
+
+ public String getFirewallRuleTenantID() {
+ return firewallRuleTenantID;
+ }
+
+ public void setFirewallRuleTenantID(String firewallRuleTenantID) {
+ this.firewallRuleTenantID = firewallRuleTenantID;
+ }
+
+ public String getFirewallRuleUUID() {
+ return firewallRuleUUID;
+ }
+
+ public void setFirewallRuleUUID(String firewallRuleUUID) {
+ this.firewallRuleUUID = firewallRuleUUID;
+ }
+
+ public NeutronFirewallRule extractFields(List<String> fields) {
+ NeutronFirewallRule ans = new NeutronFirewallRule();
+ Iterator<String> i = fields.iterator();
+ while (i.hasNext()) {
+ String s = i.next();
+ if (s.equals("id")) {
+ ans.setFirewallRuleUUID(this.getFirewallRuleUUID());
+ }
+ if (s.equals("tenant_id")) {
+ ans.setFirewallRuleTenantID(this.getFirewallRuleTenantID());
+ }
+ if (s.equals("name")) {
+ ans.setFirewallRuleName(this.getFirewallRuleName());
+ }
+ if (s.equals("description")) {
+ ans.setFirewallRuleDescription(this.getFirewallRuleDescription());
+ }
+ if (s.equals("admin_state_up")) {
+ ans.setFirewallRuleAdminStateIsUp(firewallRuleAdminStateIsUp);
+ }
+ if (s.equals("status")) {
+ ans.setFirewallRuleStatus(this.getFirewallRuleStatus());
+ }
+ if (s.equals("shared")) {
+ ans.setFirewallRuleIsShared(firewallRuleIsShared);
+ }
+ if (s.equals("firewall_policy_id")) {
+ ans.setFirewallRulesPolicyID(this.getFirewallRulePolicyID());
+ }
+ if (s.equals("protocol")) {
+ ans.setFirewallRuleProtocol(this.getFirewallRuleProtocol());
+ }
+ if (s.equals("source_ip_address")) {
+ ans.setFirewallRuleSrcIpAddr(this.getFirewallRuleSrcIpAddr());
+ }
+ if (s.equals("destination_ip_address")) {
+ ans.setFirewallRuleDstIpAddr(this.getFirewallRuleDstIpAddr());
+ }
+ if (s.equals("source_port")) {
+ ans.setFirewallRuleSrcPort(this.getFirewallRuleSrcPort());
+ }
+ if (s.equals("destination_port")) {
+ ans.setFirewallRuleDstPort(this.getFirewallRuleDstPort());
+ }
+ if (s.equals("position")) {
+ ans.setFirewallRulePosition(this.getFirewallRulePosition());
+ }
+ if (s.equals("action")) {
+ ans.setFirewallRuleAction(this.getFirewallRuleAction());
+ }
+ if (s.equals("enabled")) {
+ ans.setFirewallRuleIsEnabled(firewallRuleIsEnabled);
+ }
+
+ }
+ return ans;
+ }
+
+ @Override
+ public String toString() {
+ return "firewallPolicyRules{" +
+ "firewallRuleUUID='" + firewallRuleUUID + '\'' +
+ ", firewallRuleTenantID='" + firewallRuleTenantID + '\'' +
+ ", firewallRuleName='" + firewallRuleName + '\'' +
+ ", firewallRuleDescription='" + firewallRuleDescription + '\'' +
+ ", firewallRuleAdminStateIsUp=" + firewallRuleAdminStateIsUp +
+ ", firewallRuleStatus='" + firewallRuleStatus + '\'' +
+ ", firewallRuleIsShared=" + firewallRuleIsShared +
+ ", firewallRulePolicyID=" + firewallRulePolicyID +
+ ", firewallRuleProtocol='" + firewallRuleProtocol + '\'' +
+ ", firewallRuleIpVer=" + firewallRuleIpVer +
+ ", firewallRuleSrcIpAddr='" + firewallRuleSrcIpAddr + '\'' +
+ ", firewallRuleDstIpAddr='" + firewallRuleDstIpAddr + '\'' +
+ ", firewallRuleSrcPort=" + firewallRuleSrcPort +
+ ", firewallRuleDstPort=" + firewallRuleDstPort +
+ ", firewallRulePosition=" + firewallRulePosition +
+ ", firewallRuleAction='" + firewallRuleAction + '\'' +
+ ", firewallRuleIsEnabled=" + firewallRuleIsEnabled +
+ '}';
+ }
+
+ public void initDefaults() {
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron.northbound;
+
+
+import org.codehaus.enunciate.jaxrs.ResponseCode;
+import org.codehaus.enunciate.jaxrs.StatusCodes;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallCRUD;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleCRUD;
+import org.opendaylight.controller.networkconfig.neutron.NeutronCRUDInterfaces;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewall;
+import org.opendaylight.controller.northbound.commons.RestMessages;
+import org.opendaylight.controller.northbound.commons.exception.BadRequestException;
+import org.opendaylight.controller.northbound.commons.exception.ResourceNotFoundException;
+import org.opendaylight.controller.northbound.commons.exception.ServiceUnavailableException;
+import org.opendaylight.controller.sal.utils.ServiceHelper;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Neutron Northbound REST APIs for Firewall.<br>
+ * This class provides REST APIs for managing neutron Firewall
+ *
+ * <br>
+ * <br>
+ * Authentication scheme : <b>HTTP Basic</b><br>
+ * Authentication realm : <b>opendaylight</b><br>
+ * Transport : <b>HTTP and HTTPS</b><br>
+ * <br>
+ * HTTPS Authentication is disabled by default. Administrator can enable it in
+ * tomcat-server.xml after adding a proper keystore / SSL certificate from a
+ * trusted authority.<br>
+ * More info :
+ * http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html#Configuration
+ *
+ */
+@Path("/fw/firewalls")
+public class NeutronFirewallNorthbound {
+
+ private NeutronFirewall extractFields(NeutronFirewall o, List<String> fields) {
+ return o.extractFields(fields);
+ }
+
+ /**
+ * Returns a list of all Firewalls */
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON })
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+
+ public Response listGroups(
+ // return fields
+ @QueryParam("fields") List<String> fields,
+ // OpenStack firewall attributes
+ @QueryParam("id") String queryFirewallUUID,
+ @QueryParam("tenant_id") String queryFirewallTenantID,
+ @QueryParam("name") String queryFirewallName,
+ @QueryParam("description") String queryFirewallDescription,
+ @QueryParam("shared") Boolean queryFirewallAdminStateIsUp,
+ @QueryParam("status") String queryFirewallStatus,
+ @QueryParam("shared") Boolean queryFirewallIsShared,
+ @QueryParam("firewall_policy_id") String queryFirewallPolicyID,
+ // pagination
+ @QueryParam("limit") String limit,
+ @QueryParam("marker") String marker,
+ @QueryParam("page_reverse") String pageReverse
+ // sorting not supported
+ ) {
+ INeutronFirewallCRUD firewallInterface = NeutronCRUDInterfaces.getINeutronFirewallCRUD(this);
+ INeutronFirewallRuleCRUD firewallRuleInterface = NeutronCRUDInterfaces.getINeutronFirewallRuleCRUD(this);
+
+ if (firewallInterface == null) {
+ throw new ServiceUnavailableException("Firewall CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ List<NeutronFirewall> allFirewalls = firewallInterface.getAllNeutronFirewalls();
+ List<NeutronFirewall> ans = new ArrayList<NeutronFirewall>();
+ Iterator<NeutronFirewall> i = allFirewalls.iterator();
+ while (i.hasNext()) {
+ NeutronFirewall nsg = i.next();
+ if ((queryFirewallUUID == null ||
+ queryFirewallUUID.equals(nsg.getFirewallUUID())) &&
+ (queryFirewallTenantID == null ||
+ queryFirewallTenantID.equals(nsg.getFirewallTenantID())) &&
+ (queryFirewallName == null ||
+ queryFirewallName.equals(nsg.getFirewallName())) &&
+ (queryFirewallDescription == null ||
+ queryFirewallDescription.equals(nsg.getFirewallDescription())) &&
+ (queryFirewallAdminStateIsUp == null ||
+ queryFirewallAdminStateIsUp.equals(nsg.getFirewallAdminStateIsUp())) &&
+ (queryFirewallStatus == null ||
+ queryFirewallStatus.equals(nsg.getFirewallStatus())) &&
+ (queryFirewallIsShared == null ||
+ queryFirewallIsShared.equals(nsg.getFirewallIsShared())) &&
+ (queryFirewallPolicyID == null ||
+ queryFirewallPolicyID.equals(nsg.getFirewallPolicyID()))) {
+ if (fields.size() > 0) {
+ ans.add(extractFields(nsg,fields));
+ } else {
+ ans.add(nsg);
+ }
+ }
+ }
+ //TODO: apply pagination to results
+ return Response.status(200).entity(
+ new NeutronFirewallRequest(ans)).build();
+ }
+
+ /**
+ * Returns a specific Firewall */
+
+ @Path("{firewallUUID}")
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON })
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+ public Response showFirewall(@PathParam("firewallUUID") String firewallUUID,
+ // return fields
+ @QueryParam("fields") List<String> fields) {
+ INeutronFirewallCRUD firewallInterface = NeutronCRUDInterfaces.getINeutronFirewallCRUD(this);
+ if (firewallInterface == null) {
+ throw new ServiceUnavailableException("Firewall CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ if (!firewallInterface.neutronFirewallExists(firewallUUID)) {
+ throw new ResourceNotFoundException("Firewall UUID does not exist.");
+ }
+ if (fields.size() > 0) {
+ NeutronFirewall ans = firewallInterface.getNeutronFirewall(firewallUUID);
+ return Response.status(200).entity(
+ new NeutronFirewallRequest(extractFields(ans, fields))).build();
+ } else {
+ return Response.status(200).entity(new NeutronFirewallRequest(firewallInterface.getNeutronFirewall(firewallUUID))).build();
+ }
+ }
+
+ /**
+ * Creates new Firewall */
+
+ @POST
+ @Produces({ MediaType.APPLICATION_JSON })
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @StatusCodes({
+ @ResponseCode(code = 201, condition = "Created"),
+ @ResponseCode(code = 400, condition = "Bad Request"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 403, condition = "Forbidden"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 409, condition = "Conflict"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+ public Response createFirewalls(final NeutronFirewallRequest input) {
+ INeutronFirewallCRUD firewallInterface = NeutronCRUDInterfaces.getINeutronFirewallCRUD(this);
+ if (firewallInterface == null) {
+ throw new ServiceUnavailableException("Firewall CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ if (input.isSingleton()) {
+ NeutronFirewall singleton = input.getSingleton();
+
+ /*
+ * Verify that the Firewall doesn't already exist.
+ */
+ if (firewallInterface.neutronFirewallExists(singleton.getFirewallUUID())) {
+ throw new BadRequestException("Firewall UUID already exists");
+ }
+ firewallInterface.addNeutronFirewall(singleton);
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallAware.class, this, null);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallAware service = (INeutronFirewallAware) instance;
+ int status = service.canCreateNeutronFirewall(singleton);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+ firewallInterface.addNeutronFirewall(singleton);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallAware service = (INeutronFirewallAware) instance;
+ service.neutronFirewallCreated(singleton);
+ }
+ }
+ } else {
+ List<NeutronFirewall> bulk = input.getBulk();
+ Iterator<NeutronFirewall> i = bulk.iterator();
+ HashMap<String, NeutronFirewall> testMap = new HashMap<String, NeutronFirewall>();
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallAware.class, this, null);
+ while (i.hasNext()) {
+ NeutronFirewall test = i.next();
+
+ /*
+ * Verify that the secruity group doesn't already exist
+ */
+ if (firewallInterface.neutronFirewallExists(test.getFirewallUUID())) {
+ throw new BadRequestException("Firewall UUID already is already created");
+ }
+ if (testMap.containsKey(test.getFirewallUUID())) {
+ throw new BadRequestException("Firewall UUID already exists");
+ }
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallAware service = (INeutronFirewallAware) instance;
+ int status = service.canCreateNeutronFirewall(test);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+ }
+
+ /*
+ * now, each element of the bulk request can be added to the cache
+ */
+ i = bulk.iterator();
+ while (i.hasNext()) {
+ NeutronFirewall test = i.next();
+ firewallInterface.addNeutronFirewall(test);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallAware service = (INeutronFirewallAware) instance;
+ service.neutronFirewallCreated(test);
+ }
+ }
+ }
+ }
+ return Response.status(201).entity(input).build();
+ }
+
+ /**
+ * Updates a Firewall */
+
+ @Path("{firewallUUID}")
+ @PUT
+ @Produces({ MediaType.APPLICATION_JSON })
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 400, condition = "Bad Request"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 403, condition = "Forbidden"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+ public Response updateFirewall(
+ @PathParam("firewallUUID") String firewallUUID, final NeutronFirewallRequest input) {
+ INeutronFirewallCRUD firewallInterface = NeutronCRUDInterfaces.getINeutronFirewallCRUD(this);
+ if (firewallInterface == null) {
+ throw new ServiceUnavailableException("Firewall CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+
+ /*
+ * verify the Firewall exists and there is only one delta provided
+ */
+ if (!firewallInterface.neutronFirewallExists(firewallUUID)) {
+ throw new ResourceNotFoundException("Firewall UUID does not exist.");
+ }
+ if (!input.isSingleton()) {
+ throw new BadRequestException("Only singleton edit supported");
+ }
+ NeutronFirewall delta = input.getSingleton();
+ NeutronFirewall original = firewallInterface.getNeutronFirewall(firewallUUID);
+
+ /*
+ * updates restricted by Neutron
+ */
+ if (delta.getFirewallUUID() != null ||
+ delta.getFirewallTenantID() != null ||
+ delta.getFirewallName() != null ||
+ delta.getFirewallDescription() != null ||
+ delta.getFirewallAdminStateIsUp() != null ||
+ delta.getFirewallStatus() != null ||
+ delta.getFirewallIsShared() != null ||
+ delta.getFirewallPolicyID() != null) {
+ throw new BadRequestException("Attribute edit blocked by Neutron");
+ }
+
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallAware.class, this, null);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallAware service = (INeutronFirewallAware) instance;
+ int status = service.canUpdateNeutronFirewall(delta, original);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+
+ /*
+ * update the object and return it
+ */
+ firewallInterface.updateNeutronFirewall(firewallUUID, delta);
+ NeutronFirewall updatedFirewall = firewallInterface.getNeutronFirewall(firewallUUID);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallAware service = (INeutronFirewallAware) instance;
+ service.neutronFirewallUpdated(updatedFirewall);
+ }
+ }
+ return Response.status(200).entity(new NeutronFirewallRequest(firewallInterface.getNeutronFirewall(firewallUUID))).build();
+ }
+
+ /**
+ * Deletes a Firewall */
+
+ @Path("{firewallUUID}")
+ @DELETE
+ @StatusCodes({
+ @ResponseCode(code = 204, condition = "No Content"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 409, condition = "Conflict"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+ public Response deleteFirewall(
+ @PathParam("firewallUUID") String firewallUUID) {
+ INeutronFirewallCRUD firewallInterface = NeutronCRUDInterfaces.getINeutronFirewallCRUD(this);
+ if (firewallInterface == null) {
+ throw new ServiceUnavailableException("Firewall CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+
+ /*
+ * verify the Firewall exists and it isn't currently in use
+ */
+ if (!firewallInterface.neutronFirewallExists(firewallUUID)) {
+ throw new ResourceNotFoundException("Firewall UUID does not exist.");
+ }
+ if (firewallInterface.neutronFirewallInUse(firewallUUID)) {
+ return Response.status(409).build();
+ }
+ NeutronFirewall singleton = firewallInterface.getNeutronFirewall(firewallUUID);
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallAware.class, this, null);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallAware service = (INeutronFirewallAware) instance;
+ int status = service.canDeleteNeutronFirewall(singleton);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+
+ /*
+ * remove it and return 204 status
+ */
+ firewallInterface.removeNeutronFirewall(firewallUUID);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallAware service = (INeutronFirewallAware) instance;
+ service.neutronFirewallDeleted(singleton);
+ }
+ }
+ return Response.status(204).build();
+ }
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron.northbound;
+
+
+import org.codehaus.enunciate.jaxrs.ResponseCode;
+import org.codehaus.enunciate.jaxrs.StatusCodes;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyCRUD;
+import org.opendaylight.controller.networkconfig.neutron.NeutronCRUDInterfaces;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewallPolicy;
+import org.opendaylight.controller.northbound.commons.RestMessages;
+import org.opendaylight.controller.northbound.commons.exception.BadRequestException;
+import org.opendaylight.controller.northbound.commons.exception.ResourceNotFoundException;
+import org.opendaylight.controller.northbound.commons.exception.ServiceUnavailableException;
+import org.opendaylight.controller.sal.utils.ServiceHelper;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Neutron Northbound REST APIs for Firewall Policies.<br>
+ * This class provides REST APIs for managing neutron Firewall Policies
+ *
+ * <br>
+ * <br>
+ * Authentication scheme : <b>HTTP Basic</b><br>
+ * Authentication realm : <b>opendaylight</b><br>
+ * Transport : <b>HTTP and HTTPS</b><br>
+ * <br>
+ * HTTPS Authentication is disabled by default. Administrator can enable it in
+ * tomcat-server.xml after adding a proper keystore / SSL certificate from a
+ * trusted authority.<br>
+ * More info :
+ * http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html#Configuration
+ *
+ */
+@Path("/fw/firewalls_policies")
+public class NeutronFirewallPolicyNorthbound {
+
+ private NeutronFirewallPolicy extractFields(NeutronFirewallPolicy o, List<String> fields) {
+ return o.extractFields(fields);
+ }
+
+ /**
+ * Returns a list of all Firewall Policies */
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON })
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+
+ public Response listGroups(
+ // return fields
+ @QueryParam("fields") List<String> fields,
+ // OpenStack Firewall Policy attributes
+ @QueryParam("id") String queryFirewallPolicyUUID,
+ @QueryParam("tenant_id") String queryFirewallPolicyTenantID,
+ @QueryParam("name") String queryFirewallPolicyName,
+ @QueryParam("description") String querySecurityPolicyDescription,
+ @QueryParam("shared") String querySecurityPolicyIsShared,
+ @QueryParam("firewall_rules") List querySecurityPolicyFirewallRules,
+ @QueryParam("audited") Boolean querySecurityPolicyIsAudited,
+ // pagination
+ @QueryParam("limit") String limit,
+ @QueryParam("marker") String marker,
+ @QueryParam("page_reverse") String pageReverse
+ // sorting not supported
+ ) {
+ INeutronFirewallPolicyCRUD firewallPolicyInterface = NeutronCRUDInterfaces.getINeutronFirewallPolicyCRUD(this);
+
+ if (firewallPolicyInterface == null) {
+ throw new ServiceUnavailableException("Firewall Policy CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ List<NeutronFirewallPolicy> allFirewallPolicies = firewallPolicyInterface.getAllNeutronFirewallPolicies();
+ List<NeutronFirewallPolicy> ans = new ArrayList<NeutronFirewallPolicy>();
+ Iterator<NeutronFirewallPolicy> i = allFirewallPolicies.iterator();
+ while (i.hasNext()) {
+ NeutronFirewallPolicy nsg = i.next();
+ if ((queryFirewallPolicyUUID == null ||
+ queryFirewallPolicyUUID.equals(nsg.getFirewallPolicyUUID())) &&
+ (queryFirewallPolicyTenantID == null ||
+ queryFirewallPolicyTenantID.equals(nsg.getFirewallPolicyTenantID())) &&
+ (queryFirewallPolicyName == null ||
+ queryFirewallPolicyName.equals(nsg.getFirewallPolicyName())) &&
+ (querySecurityPolicyDescription == null ||
+ querySecurityPolicyDescription.equals(nsg.getFirewallPolicyDescription())) &&
+ (querySecurityPolicyIsShared == null ||
+ querySecurityPolicyIsShared.equals(nsg.getFirewallPolicyIsShared())) &&
+ (querySecurityPolicyFirewallRules.size() == 0 ||
+ querySecurityPolicyFirewallRules.equals(nsg.getFirewallPolicyRules())) &&
+ (querySecurityPolicyIsAudited == null ||
+ querySecurityPolicyIsAudited.equals(nsg.getFirewallPolicyIsAudited()))) {
+ if (fields.size() > 0) {
+ ans.add(extractFields(nsg,fields));
+ } else {
+ ans.add(nsg);
+ }
+ }
+ } // ans.add((NeutronFirewallPolicy) rules);
+ //TODO: apply pagination to results
+ return Response.status(200).entity(
+ new NeutronFirewallPolicyRequest(ans)).build();
+ }
+
+ /**
+ * Returns a specific Firewall Policy */
+
+ @Path("{firewallPolicyUUID}")
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON })
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+ public Response showFirewallPolicy(@PathParam("firewallPolicyUUID") String firewallPolicyUUID,
+ // return fields
+ @QueryParam("fields") List<String> fields) {
+ INeutronFirewallPolicyCRUD firewallPolicyInterface = NeutronCRUDInterfaces.getINeutronFirewallPolicyCRUD(this);
+ if (firewallPolicyInterface == null) {
+ throw new ServiceUnavailableException("Firewall Policy CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ if (!firewallPolicyInterface.neutronFirewallPolicyExists(firewallPolicyUUID)) {
+ throw new ResourceNotFoundException("Firewall Policy UUID does not exist.");
+ }
+ if (fields.size() > 0) {
+ NeutronFirewallPolicy ans = firewallPolicyInterface.getNeutronFirewallPolicy(firewallPolicyUUID);
+ return Response.status(200).entity(
+ new NeutronFirewallPolicyRequest(extractFields(ans, fields))).build();
+ } else {
+ return Response.status(200).entity(new NeutronFirewallPolicyRequest(firewallPolicyInterface.getNeutronFirewallPolicy(firewallPolicyUUID))).build();
+ }
+ }
+
+ /**
+ * Creates new Firewall Policy
+ * */
+ @POST
+ @Produces({ MediaType.APPLICATION_JSON })
+ @Consumes({ MediaType.APPLICATION_JSON })
+ @StatusCodes({
+ @ResponseCode(code = 201, condition = "Created"),
+ @ResponseCode(code = 400, condition = "Bad Request"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 403, condition = "Forbidden"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 409, condition = "Conflict"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+ public Response createFirewallPolicies(final NeutronFirewallPolicyRequest input) {
+ INeutronFirewallPolicyCRUD firewallPolicyInterface = NeutronCRUDInterfaces.getINeutronFirewallPolicyCRUD(this);
+ if (firewallPolicyInterface == null) {
+ throw new ServiceUnavailableException("Firewall Policy CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ if (input.isSingleton()) {
+ NeutronFirewallPolicy singleton = input.getSingleton();
+
+ /*
+ * Verify that the Firewall Policy doesn't already exist.
+ */
+ if (firewallPolicyInterface.neutronFirewallPolicyExists(singleton.getFirewallPolicyUUID())) {
+ throw new BadRequestException("Firewall Policy UUID already exists");
+ }
+ firewallPolicyInterface.addNeutronFirewallPolicy(singleton);
+
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallPolicyAware.class, this, null);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallPolicyAware service = (INeutronFirewallPolicyAware) instance;
+ int status = service.canCreateNeutronFirewallPolicy(singleton);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+ firewallPolicyInterface.addNeutronFirewallPolicy(singleton);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallPolicyAware service = (INeutronFirewallPolicyAware) instance;
+ service.neutronFirewallPolicyCreated(singleton);
+ }
+ }
+ } else {
+ List<NeutronFirewallPolicy> bulk = input.getBulk();
+ Iterator<NeutronFirewallPolicy> i = bulk.iterator();
+ HashMap<String, NeutronFirewallPolicy> testMap = new HashMap<String, NeutronFirewallPolicy>();
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallPolicyAware.class, this, null);
+ while (i.hasNext()) {
+ NeutronFirewallPolicy test = i.next();
+
+ /*
+ * Verify that the firewall policy doesn't already exist
+ */
+
+ if (firewallPolicyInterface.neutronFirewallPolicyExists(test.getFirewallPolicyUUID())) {
+ throw new BadRequestException("Firewall Policy UUID already is already created");
+ }
+ if (testMap.containsKey(test.getFirewallPolicyUUID())) {
+ throw new BadRequestException("Firewall Policy UUID already exists");
+ }
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallPolicyAware service = (INeutronFirewallPolicyAware) instance;
+ int status = service.canCreateNeutronFirewallPolicy(test);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+ }
+ /*
+ * now, each element of the bulk request can be added to the cache
+ */
+ i = bulk.iterator();
+ while (i.hasNext()) {
+ NeutronFirewallPolicy test = i.next();
+ firewallPolicyInterface.addNeutronFirewallPolicy(test);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallPolicyAware service = (INeutronFirewallPolicyAware) instance;
+ service.neutronFirewallPolicyCreated(test);
+ }
+ }
+ }
+ }
+ return Response.status(201).entity(input).build();
+ }
+
+ /**
+ * Updates a Firewall Policy
+ */
+ @Path("{firewallPolicyUUID}")
+ @PUT
+ @Produces({ MediaType.APPLICATION_JSON })
+ @Consumes({ MediaType.APPLICATION_JSON })
+ //@TypeHint(OpenStackSubnets.class)
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 400, condition = "Bad Request"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 403, condition = "Forbidden"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+ public Response updateFirewallPolicy(
+ @PathParam("firewallPolicyUUID") String firewallPolicyUUID, final NeutronFirewallPolicyRequest input) {
+ INeutronFirewallPolicyCRUD firewallPolicyInterface = NeutronCRUDInterfaces.getINeutronFirewallPolicyCRUD(this);
+ if (firewallPolicyInterface == null) {
+ throw new ServiceUnavailableException("Firewall Policy CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+
+ /*
+ * verify the Firewall Policy exists and there is only one delta provided
+ */
+ if (!firewallPolicyInterface.neutronFirewallPolicyExists(firewallPolicyUUID)) {
+ throw new ResourceNotFoundException("Firewall Policy UUID does not exist.");
+ }
+ if (!input.isSingleton()) {
+ throw new BadRequestException("Only singleton edit supported");
+ }
+ NeutronFirewallPolicy delta = input.getSingleton();
+ NeutronFirewallPolicy original = firewallPolicyInterface.getNeutronFirewallPolicy(firewallPolicyUUID);
+
+ /*
+ * updates restricted by Neutron
+ */
+ if (delta.getFirewallPolicyUUID() != null ||
+ delta.getFirewallPolicyTenantID() != null ||
+ delta.getFirewallPolicyName() != null ||
+ delta.getFirewallPolicyDescription() != null ||
+ delta.getFirewallPolicyIsShared() != null ||
+ delta.getFirewallPolicyRules().size() > 0 ||
+ delta.getFirewallPolicyIsAudited() != null) {
+ throw new BadRequestException("Attribute edit blocked by Neutron");
+ }
+
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallPolicyAware.class, this, null);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallPolicyAware service = (INeutronFirewallPolicyAware) instance;
+ int status = service.canUpdateNeutronFirewallPolicy(delta, original);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+
+ /*
+ * update the object and return it
+ */
+ firewallPolicyInterface.updateNeutronFirewallPolicy(firewallPolicyUUID, delta);
+ NeutronFirewallPolicy updatedFirewallPolicy = firewallPolicyInterface.getNeutronFirewallPolicy(firewallPolicyUUID);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallPolicyAware service = (INeutronFirewallPolicyAware) instance;
+ service.neutronFirewallPolicyUpdated(updatedFirewallPolicy);
+ }
+ }
+ return Response.status(200).entity(new NeutronFirewallPolicyRequest(firewallPolicyInterface.getNeutronFirewallPolicy(firewallPolicyUUID))).build();
+ }
+
+ /**
+ * Deletes a Firewall Policy */
+
+ @Path("{firewallPolicyUUID}")
+ @DELETE
+ @StatusCodes({
+ @ResponseCode(code = 204, condition = "No Content"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 409, condition = "Conflict"),
+ @ResponseCode(code = 501, condition = "Not Implemented") })
+ public Response deleteFirewallPolicy(
+ @PathParam("firewallPolicyUUID") String firewallPolicyUUID) {
+ INeutronFirewallPolicyCRUD firewallPolicyInterface = NeutronCRUDInterfaces.getINeutronFirewallPolicyCRUD(this);
+ if (firewallPolicyInterface == null) {
+ throw new ServiceUnavailableException("Firewall Policy CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+
+ /*
+ * verify the Firewall Policy exists and it isn't currently in use
+ */
+ if (!firewallPolicyInterface.neutronFirewallPolicyExists(firewallPolicyUUID)) {
+ throw new ResourceNotFoundException("Firewall Policy UUID does not exist.");
+ }
+ if (firewallPolicyInterface.neutronFirewallPolicyInUse(firewallPolicyUUID)) {
+ return Response.status(409).build();
+ }
+ NeutronFirewallPolicy singleton = firewallPolicyInterface.getNeutronFirewallPolicy(firewallPolicyUUID);
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallPolicyAware.class, this, null);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallPolicyAware service = (INeutronFirewallPolicyAware) instance;
+ int status = service.canDeleteNeutronFirewallPolicy(singleton);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+
+ firewallPolicyInterface.removeNeutronFirewallPolicy(firewallPolicyUUID);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallPolicyAware service = (INeutronFirewallPolicyAware) instance;
+ service.neutronFirewallPolicyDeleted(singleton);
+ }
+ }
+ return Response.status(204).build();
+ }
+}
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron.northbound;
+
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewallPolicy;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+
+public class NeutronFirewallPolicyRequest {
+ /**
+ * See OpenStack Network API v2.0 Reference for description of
+ * http://docs.openstack.org/api/openstack-network/2.0/content/
+ */
+
+ @XmlElement(name="firewall_policy")
+ NeutronFirewallPolicy singletonFirewallPolicy;
+
+ @XmlElement(name="firewall_policies")
+ List<NeutronFirewallPolicy> bulkRequest;
+
+ NeutronFirewallPolicyRequest() {
+ }
+
+ NeutronFirewallPolicyRequest(List<NeutronFirewallPolicy> bulk) {
+ bulkRequest = bulk;
+ singletonFirewallPolicy = null;
+ }
+
+ NeutronFirewallPolicyRequest(NeutronFirewallPolicy group) {
+ singletonFirewallPolicy = group;
+ }
+
+ public List<NeutronFirewallPolicy> getBulk() {
+ return bulkRequest;
+ }
+
+ public NeutronFirewallPolicy getSingleton() {
+ return singletonFirewallPolicy;
+ }
+
+ public boolean isSingleton() {
+ return (singletonFirewallPolicy != null);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron.northbound;
+
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewall;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+
+public class NeutronFirewallRequest {
+ /**
+ * See OpenStack Network API v2.0 Reference for description of
+ * http://docs.openstack.org/api/openstack-network/2.0/content/
+ */
+
+ @XmlElement(name="firewall")
+ NeutronFirewall singletonFirewall;
+
+ @XmlElement(name="firewalls")
+ List<NeutronFirewall> bulkRequest;
+
+ NeutronFirewallRequest() {
+ }
+
+ NeutronFirewallRequest(List<NeutronFirewall> bulk) {
+ bulkRequest = bulk;
+ singletonFirewall = null;
+ }
+
+ NeutronFirewallRequest(NeutronFirewall group) {
+ singletonFirewall = group;
+ }
+
+ public List<NeutronFirewall> getBulk() {
+ return bulkRequest;
+ }
+
+ public NeutronFirewall getSingleton() {
+ return singletonFirewall;
+ }
+
+ public boolean isSingleton() {
+ return (singletonFirewall != null);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron.northbound;
+
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewallRule;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.util.List;
+
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+
+public class NeutronFirewallRuleRequest {
+ /**
+ * See OpenStack Network API v2.0 Reference for description of
+ * http://docs.openstack.org/api/openstack-network/2.0/content/
+ */
+
+ @XmlElement(name="firewall_rule")
+ NeutronFirewallRule singletonFirewallRule;
+
+ @XmlElement(name="firewall_rules")
+ List<NeutronFirewallRule> bulkRequest;
+
+ NeutronFirewallRuleRequest() {
+ }
+
+ NeutronFirewallRuleRequest(List<NeutronFirewallRule> bulk) {
+ bulkRequest = bulk;
+ singletonFirewallRule = null;
+ }
+
+ NeutronFirewallRuleRequest(NeutronFirewallRule group) {
+ singletonFirewallRule = group;
+ }
+
+ public List<NeutronFirewallRule> getBulk() {
+ return bulkRequest;
+ }
+
+ public NeutronFirewallRule getSingleton() {
+ return singletonFirewallRule;
+ }
+
+ public boolean isSingleton() {
+ return (singletonFirewallRule != null);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.networkconfig.neutron.northbound;
+
+
+import org.codehaus.enunciate.jaxrs.ResponseCode;
+import org.codehaus.enunciate.jaxrs.StatusCodes;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyCRUD;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleAware;
+import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleCRUD;
+import org.opendaylight.controller.networkconfig.neutron.NeutronCRUDInterfaces;
+import org.opendaylight.controller.networkconfig.neutron.NeutronFirewallRule;
+import org.opendaylight.controller.northbound.commons.RestMessages;
+import org.opendaylight.controller.northbound.commons.exception.BadRequestException;
+import org.opendaylight.controller.northbound.commons.exception.ResourceNotFoundException;
+import org.opendaylight.controller.northbound.commons.exception.ServiceUnavailableException;
+import org.opendaylight.controller.sal.utils.ServiceHelper;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Neutron Northbound REST APIs for Firewall Rule.<br>
+ * This class provides REST APIs for managing neutron Firewall Rule
+ *
+ * <br>
+ * <br>
+ * Authentication scheme : <b>HTTP Basic</b><br>
+ * Authentication realm : <b>opendaylight</b><br>
+ * Transport : <b>HTTP and HTTPS</b><br>
+ * <br>
+ * HTTPS Authentication is disabled by default. Administrator can enable it in
+ * tomcat-server.xml after adding a proper keystore / SSL certificate from a
+ * trusted authority.<br>
+ * More info :
+ * http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html#Configuration
+ */
+
+@Path("fw/firewalls_rules")
+public class NeutronFirewallRulesNorthbound {
+
+ private NeutronFirewallRule extractFields(NeutronFirewallRule o, List<String> fields) {
+ return o.extractFields(fields);
+ }
+
+ /**
+ * Returns a list of all Firewall Rules
+ */
+ @GET
+ @Produces({MediaType.APPLICATION_JSON})
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 501, condition = "Not Implemented")})
+ public Response listRules(
+ // return fields
+ @QueryParam("fields") List<String> fields,
+ // OpenStack firewall rule attributes
+ @QueryParam("id") String queryFirewallRuleUUID,
+ @QueryParam("tenant_id") String queryFirewallRuleTenantID,
+ @QueryParam("name") String queryFirewallRuleName,
+ @QueryParam("description") String queryFirewallRuleDescription,
+ @QueryParam("admin_state_up") Boolean queryFirewallRuleAdminStateIsUp,
+ @QueryParam("status") String queryFirewallRuleStatus,
+ @QueryParam("shared") Boolean queryFirewallRuleIsShared,
+ @QueryParam("firewall_policy_id") String queryFirewallRulePolicyID,
+ @QueryParam("protocol") String queryFirewallRuleProtocol,
+ @QueryParam("ip_version") Integer queryFirewallRuleIpVer,
+ @QueryParam("source_ip_address") String queryFirewallRuleSrcIpAddr,
+ @QueryParam("destination_ip_address") String queryFirewallRuleDstIpAddr,
+ @QueryParam("source_port") Integer queryFirewallRuleSrcPort,
+ @QueryParam("destination_port") Integer queryFirewallRuleDstPort,
+ @QueryParam("position") Integer queryFirewallRulePosition,
+ @QueryParam("action") String queryFirewallRuleAction,
+ @QueryParam("enabled") Boolean queryFirewallRuleIsEnabled,
+ // pagination
+ @QueryParam("limit") String limit,
+ @QueryParam("marker") String marker,
+ @QueryParam("page_reverse") String pageReverse
+ // sorting not supported
+ ) {
+ INeutronFirewallRuleCRUD firewallRuleInterface = NeutronCRUDInterfaces.getINeutronFirewallRuleCRUD(this);
+ if (firewallRuleInterface == null) {
+ throw new ServiceUnavailableException("Firewall Rule CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ List<NeutronFirewallRule> allFirewallRules = firewallRuleInterface.getAllNeutronFirewallRules();
+ List<NeutronFirewallRule> ans = new ArrayList<NeutronFirewallRule>();
+ Iterator<NeutronFirewallRule> i = allFirewallRules.iterator();
+ while (i.hasNext()) {
+ NeutronFirewallRule nsr = i.next();
+ if ((queryFirewallRuleUUID == null ||
+ queryFirewallRuleUUID.equals(nsr.getFirewallRuleUUID())) &&
+ (queryFirewallRuleTenantID == null ||
+ queryFirewallRuleTenantID.equals(nsr.getFirewallRuleTenantID())) &&
+ (queryFirewallRuleName == null ||
+ queryFirewallRuleName.equals(nsr.getFirewallRuleName())) &&
+ (queryFirewallRuleDescription == null ||
+ queryFirewallRuleDescription.equals(nsr.getFirewallRuleDescription())) &&
+ (queryFirewallRuleAdminStateIsUp == null ||
+ queryFirewallRuleAdminStateIsUp.equals(nsr.getFirewallRuleAdminStateIsUp())) &&
+ (queryFirewallRuleStatus == null ||
+ queryFirewallRuleStatus.equals(nsr.getFirewallRuleStatus())) &&
+ (queryFirewallRuleIsShared == null ||
+ queryFirewallRuleIsShared.equals(nsr.getFirewallRuleIsShared())) &&
+ (queryFirewallRulePolicyID == null ||
+ queryFirewallRulePolicyID.equals(nsr.getFirewallRulePolicyID())) &&
+ (queryFirewallRuleProtocol == null ||
+ queryFirewallRuleProtocol.equals(nsr.getFirewallRuleProtocol())) &&
+ (queryFirewallRuleIpVer == null ||
+ queryFirewallRuleIpVer.equals(nsr.getFirewallRuleIpVer())) &&
+ (queryFirewallRuleSrcIpAddr == null ||
+ queryFirewallRuleSrcIpAddr.equals(nsr.getFirewallRuleSrcIpAddr())) &&
+ (queryFirewallRuleDstIpAddr == null ||
+ queryFirewallRuleDstIpAddr.equals(nsr.getFirewallRuleDstIpAddr())) &&
+ (queryFirewallRuleSrcPort == null ||
+ queryFirewallRuleSrcPort.equals(nsr.getFirewallRuleSrcPort())) &&
+ (queryFirewallRuleDstPort == null ||
+ queryFirewallRuleDstPort.equals(nsr.getFirewallRuleDstPort())) &&
+ (queryFirewallRulePosition == null ||
+ queryFirewallRulePosition.equals(nsr.getFirewallRulePosition())) &&
+ (queryFirewallRuleAction == null ||
+ queryFirewallRuleAction.equals(nsr.getFirewallRuleAction())) &&
+ (queryFirewallRuleIsEnabled == null ||
+ queryFirewallRuleIsEnabled.equals(nsr.getFirewallRuleIsEnabled()))) {
+ if (fields.size() > 0) {
+ ans.add(extractFields(nsr, fields));
+ } else {
+ ans.add(nsr);
+ }
+ }
+ }
+ //TODO: apply pagination to results
+ return Response.status(200).entity(
+ new NeutronFirewallRuleRequest(ans)).build();
+ }
+
+ /**
+ * Returns a specific Firewall Rule
+ */
+
+ @Path("{firewallRuleUUID}")
+ @GET
+ @Produces({MediaType.APPLICATION_JSON})
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 501, condition = "Not Implemented")})
+ public Response showFirewallRule(@PathParam("firewallRuleUUID") String firewallRuleUUID,
+ // return fields
+ @QueryParam("fields") List<String> fields) {
+ INeutronFirewallRuleCRUD firewallRuleInterface = NeutronCRUDInterfaces.getINeutronFirewallRuleCRUD(this);
+ if (firewallRuleInterface == null) {
+ throw new ServiceUnavailableException("Firewall Rule CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ if (!firewallRuleInterface.neutronFirewallRuleExists(firewallRuleUUID)) {
+ throw new ResourceNotFoundException("Firewall Rule UUID does not exist.");
+ }
+ if (fields.size() > 0) {
+ NeutronFirewallRule ans = firewallRuleInterface.getNeutronFirewallRule(firewallRuleUUID);
+ return Response.status(200).entity(
+ new NeutronFirewallRuleRequest(extractFields(ans, fields))).build();
+ } else {
+ return Response.status(200)
+ .entity(new NeutronFirewallRuleRequest(
+ firewallRuleInterface.getNeutronFirewallRule(firewallRuleUUID)))
+ .build();
+ }
+ }
+
+ /**
+ * Creates new Firewall Rule
+ */
+
+ @POST
+ @Produces({MediaType.APPLICATION_JSON})
+ @Consumes({MediaType.APPLICATION_JSON})
+ @StatusCodes({
+ @ResponseCode(code = 201, condition = "Created"),
+ @ResponseCode(code = 400, condition = "Bad Request"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 403, condition = "Forbidden"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 409, condition = "Conflict"),
+ @ResponseCode(code = 501, condition = "Not Implemented")})
+ public Response createFirewallRules(final NeutronFirewallRuleRequest input) {
+ INeutronFirewallRuleCRUD firewallRuleInterface = NeutronCRUDInterfaces.getINeutronFirewallRuleCRUD(this);
+ if (firewallRuleInterface == null) {
+ throw new ServiceUnavailableException("Firewall Rule CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ INeutronFirewallPolicyCRUD firewallPolicyInterface = NeutronCRUDInterfaces.getINeutronFirewallPolicyCRUD(this);
+ if (firewallPolicyInterface == null) {
+ throw new ServiceUnavailableException("Firewall Policy CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+
+ if (input.isSingleton()) {
+ NeutronFirewallRule singleton = input.getSingleton();
+ if (firewallRuleInterface.neutronFirewallRuleExists(singleton.getFirewallRuleUUID())) {
+ throw new BadRequestException("Firewall Rule UUID already exists");
+ }
+ firewallRuleInterface.addNeutronFirewallRule(singleton);
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallRuleAware.class, this, null);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallRuleAware service = (INeutronFirewallRuleAware) instance;
+ int status = service.canCreateNeutronFirewallRule(singleton);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+ // add rule to cache
+ singleton.initDefaults();
+ firewallRuleInterface.addNeutronFirewallRule(singleton);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallRuleAware service = (INeutronFirewallRuleAware) instance;
+ service.neutronFirewallRuleCreated(singleton);
+ }
+ }
+ } else {
+ List<NeutronFirewallRule> bulk = input.getBulk();
+ Iterator<NeutronFirewallRule> i = bulk.iterator();
+ HashMap<String, NeutronFirewallRule> testMap = new HashMap<String, NeutronFirewallRule>();
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallRuleAware.class, this, null);
+ while (i.hasNext()) {
+ NeutronFirewallRule test = i.next();
+
+ /*
+ * Verify that the Firewall rule doesn't already exist
+ */
+
+ if (firewallRuleInterface.neutronFirewallRuleExists(test.getFirewallRuleUUID())) {
+ throw new BadRequestException("Firewall Rule UUID already exists");
+ }
+ if (testMap.containsKey(test.getFirewallRuleUUID())) {
+ throw new BadRequestException("Firewall Rule UUID already exists");
+ }
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallRuleAware service = (INeutronFirewallRuleAware) instance;
+ int status = service.canCreateNeutronFirewallRule(test);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+ }
+ /*
+ * now, each element of the bulk request can be added to the cache
+ */
+ i = bulk.iterator();
+ while (i.hasNext()) {
+ NeutronFirewallRule test = i.next();
+ firewallRuleInterface.addNeutronFirewallRule(test);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallRuleAware service = (INeutronFirewallRuleAware) instance;
+ service.neutronFirewallRuleCreated(test);
+ }
+ }
+ }
+ }
+ return Response.status(201).entity(input).build();
+ }
+
+ /**
+ * Updates a Firewall Rule
+ */
+ @Path("{firewallRuleUUID}")
+ @PUT
+ @Produces({MediaType.APPLICATION_JSON})
+ @Consumes({MediaType.APPLICATION_JSON})
+ @StatusCodes({
+ @ResponseCode(code = 200, condition = "Operation successful"),
+ @ResponseCode(code = 400, condition = "Bad Request"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 403, condition = "Forbidden"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 501, condition = "Not Implemented")})
+ public Response updateFirewallRule(
+ @PathParam("firewallRuleUUID") String firewallRuleUUID, final NeutronFirewallRuleRequest input) {
+ INeutronFirewallRuleCRUD firewallRuleInterface = NeutronCRUDInterfaces.getINeutronFirewallRuleCRUD(this);
+ if (firewallRuleInterface == null) {
+ throw new ServiceUnavailableException("Firewall Rule CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+ /*
+ * verify the Firewall Rule exists
+ */
+ if (!firewallRuleInterface.neutronFirewallRuleExists(firewallRuleUUID)) {
+ throw new ResourceNotFoundException("Firewall Rule UUID does not exist.");
+ }
+ if (!input.isSingleton()) {
+ throw new BadRequestException("Only singleton edit supported");
+ }
+ NeutronFirewallRule delta = input.getSingleton();
+ NeutronFirewallRule original = firewallRuleInterface.getNeutronFirewallRule(firewallRuleUUID);
+
+ /*
+ * updates restricted by Neutron
+ *
+ */
+ if (delta.getFirewallRuleUUID() != null ||
+ delta.getFirewallRuleTenantID() != null ||
+ delta.getFirewallRuleName() != null ||
+ delta.getFirewallRuleDescription() != null ||
+ delta.getFirewallRuleAdminStateIsUp() != null ||
+ delta.getFirewallRuleStatus() != null ||
+ delta.getFirewallRuleIsShared() != null ||
+ delta.getFirewallRulePolicyID() != null ||
+ delta.getFirewallRuleProtocol() != null ||
+ delta.getFirewallRuleIpVer() != null ||
+ delta.getFirewallRuleSrcIpAddr() != null ||
+ delta.getFirewallRuleDstIpAddr() != null ||
+ delta.getFirewallRuleSrcPort() != null ||
+ delta.getFirewallRuleDstPort() != null ||
+ delta.getFirewallRulePosition() != null ||
+ delta.getFirewallRuleAction() != null ||
+ delta.getFirewallRuleIsEnabled() != null) {
+ throw new BadRequestException("Attribute edit blocked by Neutron");
+ }
+
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallRuleAware.class, this, null);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallRuleAware service = (INeutronFirewallRuleAware) instance;
+ int status = service.canUpdateNeutronFirewallRule(delta, original);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+
+ /*
+ * update the object and return it
+ */
+ firewallRuleInterface.updateNeutronFirewallRule(firewallRuleUUID, delta);
+ NeutronFirewallRule updatedFirewallRule = firewallRuleInterface.getNeutronFirewallRule(firewallRuleUUID);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallRuleAware service = (INeutronFirewallRuleAware) instance;
+ service.neutronFirewallRuleUpdated(updatedFirewallRule);
+ }
+ }
+ return Response.status(200)
+ .entity(new NeutronFirewallRuleRequest(firewallRuleInterface.getNeutronFirewallRule(firewallRuleUUID)))
+ .build();
+ }
+
+ /**
+ * Deletes a Firewall Rule
+ */
+
+ @Path("{firewallRuleUUID}")
+ @DELETE
+ @StatusCodes({
+ @ResponseCode(code = 204, condition = "No Content"),
+ @ResponseCode(code = 401, condition = "Unauthorized"),
+ @ResponseCode(code = 404, condition = "Not Found"),
+ @ResponseCode(code = 409, condition = "Conflict"),
+ @ResponseCode(code = 501, condition = "Not Implemented")})
+ public Response deleteFirewallRule(
+ @PathParam("firewallRuleUUID") String firewallRuleUUID) {
+ INeutronFirewallRuleCRUD firewallRuleInterface = NeutronCRUDInterfaces.getINeutronFirewallRuleCRUD(this);
+ if (firewallRuleInterface == null) {
+ throw new ServiceUnavailableException("Firewall Rule CRUD Interface "
+ + RestMessages.SERVICEUNAVAILABLE.toString());
+ }
+
+ /*
+ * verify the Firewall Rule exists and it isn't currently in use
+ */
+ if (!firewallRuleInterface.neutronFirewallRuleExists(firewallRuleUUID)) {
+ throw new ResourceNotFoundException("Firewall Rule UUID does not exist.");
+ }
+ if (firewallRuleInterface.neutronFirewallRuleInUse(firewallRuleUUID)) {
+ return Response.status(409).build();
+ }
+ NeutronFirewallRule singleton = firewallRuleInterface.getNeutronFirewallRule(firewallRuleUUID);
+ Object[] instances = ServiceHelper.getGlobalInstances(INeutronFirewallRuleAware.class, this, null);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallRuleAware service = (INeutronFirewallRuleAware) instance;
+ int status = service.canDeleteNeutronFirewallRule(singleton);
+ if (status < 200 || status > 299) {
+ return Response.status(status).build();
+ }
+ }
+ }
+
+ /*
+ * remove it and return 204 status
+ */
+ firewallRuleInterface.removeNeutronFirewallRule(firewallRuleUUID);
+ if (instances != null) {
+ for (Object instance : instances) {
+ INeutronFirewallRuleAware service = (INeutronFirewallRuleAware) instance;
+ service.neutronFirewallRuleDeleted(singleton);
+ }
+ }
+ return Response.status(204).build();
+ }
+}
package org.opendaylight.controller.networkconfig.neutron.northbound;
+import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
+
+import javax.ws.rs.core.Application;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import javax.ws.rs.core.Application;
-import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
/**
classes.add(NeutronFloatingIPsNorthbound.class);
classes.add(NeutronSecurityGroupsNorthbound.class);
classes.add(NeutronSecurityRulesNorthbound.class);
+ classes.add(NeutronFirewallNorthbound.class);
+ classes.add(NeutronFirewallPolicyNorthbound.class);
+ classes.add(NeutronFirewallRulesNorthbound.class);
return classes;
}