From 98cd358b8208b177534c483dec94b5ac5c0cdd72 Mon Sep 17 00:00:00 2001 From: Brent Salisbury Date: Fri, 23 May 2014 14:33:50 -0400 Subject: [PATCH] Adding neutron api v2.0 security group/rules handlers Patch3: -Verified with merged patches and rolled back whitespace formatting on Activator and Tenantmanager. -Removed the comments Sam wanted removed. -Only dependancy is commit 7410 that registers the service in networkconfig.neutron. https://git.opendaylight.org/gerrit/#/c/7410/ Patch2: Pulled the TenantManager adds since it was just for a usage preview. Added NeutronPortSecurityHandler parent handler for NeutronSecurityGroup and NeutronSecurityRule. Still depends on NBAPI merges and OF merges. Change-Id: Idbdfcd4e0accba1f98951d052318a1aba9a337f8 Signed-off-by: Brent Salisbury --- .../opendaylight/ovsdb/neutron/Activator.java | 17 +++ .../ovsdb/neutron/BaseHandler.java | 12 ++ .../ovsdb/neutron/PortSecurityHandler.java | 118 ++++++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 neutron/src/main/java/org/opendaylight/ovsdb/neutron/PortSecurityHandler.java diff --git a/neutron/src/main/java/org/opendaylight/ovsdb/neutron/Activator.java b/neutron/src/main/java/org/opendaylight/ovsdb/neutron/Activator.java index 2d6151fcbf..c814e0a715 100644 --- a/neutron/src/main/java/org/opendaylight/ovsdb/neutron/Activator.java +++ b/neutron/src/main/java/org/opendaylight/ovsdb/neutron/Activator.java @@ -17,6 +17,10 @@ import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware; import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD; import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware; import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD; +import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware; +import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupCRUD; +import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware; +import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleCRUD; import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware; import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; @@ -67,6 +71,7 @@ public class Activator extends ComponentActivatorAbstractBase { SubnetHandler.class, PortHandler.class, SouthboundHandler.class, + PortSecurityHandler.class, MDSALConsumer.class, ProviderNetworkManager.class}; return res; @@ -140,6 +145,10 @@ public class Activator extends ComponentActivatorAbstractBase { .setService(ITenantNetworkManager.class) .setRequired(true)); } + if (imp.equals(PortSecurityHandler.class)) { + c.setInterface(INeutronSecurityRuleAware.class.getName(), null); + c.setInterface(INeutronSecurityGroupAware.class.getName(), null); + } //ToDo: DT: We don't need these dependencies for every implementation... //ToDo: DT: Callbacks are only required when behaviour is more complex than simple set/unset operation @@ -180,5 +189,13 @@ public class Activator extends ComponentActivatorAbstractBase { setService(INeutronPortCRUD.class). setCallbacks("setNeutronPortCRUD", "unsetNeutronPortCRUD"). setRequired(true)); + c.add(createServiceDependency(). + setService(INeutronSecurityRuleCRUD.class). + setCallbacks("setNeutronSecurityRuleCRUD", "unsetNeutronSecurityRuleCRUD"). + setRequired(true)); + c.add(createServiceDependency(). + setService(INeutronSecurityGroupCRUD.class). + setCallbacks("setNeutronSecurityGroupCRUD", "unsetNeutronSecurityGroupCRUD"). + setRequired(true)); } } diff --git a/neutron/src/main/java/org/opendaylight/ovsdb/neutron/BaseHandler.java b/neutron/src/main/java/org/opendaylight/ovsdb/neutron/BaseHandler.java index 51d3e20db3..9bee8fa157 100644 --- a/neutron/src/main/java/org/opendaylight/ovsdb/neutron/BaseHandler.java +++ b/neutron/src/main/java/org/opendaylight/ovsdb/neutron/BaseHandler.java @@ -16,6 +16,8 @@ import org.opendaylight.controller.containermanager.IContainerManager; import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager; import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD; import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD; +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.utils.Status; import org.opendaylight.controller.sal.utils.StatusCode; @@ -373,4 +375,14 @@ public class BaseHandler { public void setNeutronNetworkCRUD(INeutronNetworkCRUD s) { this.neutronNetworkCache = s; } + + protected INeutronSecurityRuleCRUD neutronSecurityRuleCache; + public void setNeutronSecurityRuleCache(INeutronSecurityRuleCRUD s) { + this.neutronSecurityRuleCache = s; + } + + protected INeutronSecurityGroupCRUD neutronSecurityGroupCache; + public void setNeutronSecurityGroupCache(INeutronSecurityGroupCRUD s) { + this.neutronSecurityGroupCache = s; + } } diff --git a/neutron/src/main/java/org/opendaylight/ovsdb/neutron/PortSecurityHandler.java b/neutron/src/main/java/org/opendaylight/ovsdb/neutron/PortSecurityHandler.java new file mode 100644 index 0000000000..888eac7e88 --- /dev/null +++ b/neutron/src/main/java/org/opendaylight/ovsdb/neutron/PortSecurityHandler.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2013 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 + * + * Authors : Brent Salisbury, Madhu Venugopal + */ + +package org.opendaylight.ovsdb.neutron; + +import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware; +import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware; +import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityGroup; +import org.opendaylight.controller.networkconfig.neutron.NeutronSecurityRule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.HttpURLConnection; + +/** + * Handle requests for OpenStack Neutron v2.0 Port Security API calls. + */ +public class PortSecurityHandler extends BaseHandler + implements INeutronSecurityGroupAware, INeutronSecurityRuleAware{ + + static final Logger logger = LoggerFactory.getLogger(PortSecurityHandler.class); + + @Override + public int canCreateNeutronSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) { + return HttpURLConnection.HTTP_CREATED; + } + + @Override + public void neutronSecurityGroupCreated(NeutronSecurityGroup neutronSecurityGroup) { + int result = HttpURLConnection.HTTP_BAD_REQUEST; + + result = canCreateNeutronSecurityGroup(neutronSecurityGroup); + if (result != HttpURLConnection.HTTP_CREATED) { + logger.debug("Neutron Security Group creation failed {} ", result); + return; + } + } + + @Override + public int canUpdateNeutronSecurityGroup(NeutronSecurityGroup delta, NeutronSecurityGroup original) { + return HttpURLConnection.HTTP_OK; + } + + @Override + public void neutronSecurityGroupUpdated(NeutronSecurityGroup neutronSecurityGroup) { + return; + } + + @Override + public int canDeleteNeutronSecurityGroup(NeutronSecurityGroup neutronSecurityGroup) { + return HttpURLConnection.HTTP_OK; + } + + @Override + public void neutronSecurityGroupDeleted(NeutronSecurityGroup neutronSecurityGroup) { + //TODO: Trigger flowmod removals + int result = canDeleteNeutronSecurityGroup(neutronSecurityGroup); + if (result != HttpURLConnection.HTTP_OK) { + logger.error(" delete Neutron Security Rule validation failed for result - {} ", result); + return; + } + } + + /** + * Invoked when a Security Rules creation is requested + * to indicate if the specified Rule can be created. + * + * @param neutronSecurityRule An instance of proposed new Neutron Security Rule object. + * @return A HTTP status code to the creation request. + */ + + @Override + public int canCreateNeutronSecurityRule(NeutronSecurityRule neutronSecurityRule) { + return HttpURLConnection.HTTP_CREATED; + } + + @Override + public void neutronSecurityRuleCreated(NeutronSecurityRule neutronSecurityRule) { + int result = HttpURLConnection.HTTP_BAD_REQUEST; + + result = canCreateNeutronSecurityRule(neutronSecurityRule); + if (result != HttpURLConnection.HTTP_CREATED) { + logger.debug("Neutron Security Group creation failed {} ", result); + return; + } + } + + @Override + public int canUpdateNeutronSecurityRule(NeutronSecurityRule delta, NeutronSecurityRule original) { + return HttpURLConnection.HTTP_OK; + } + + @Override + public void neutronSecurityRuleUpdated(NeutronSecurityRule neutronSecurityRule) { + return; + } + + @Override + public int canDeleteNeutronSecurityRule(NeutronSecurityRule neutronSecurityRule) { + return HttpURLConnection.HTTP_OK; + } + + @Override + public void neutronSecurityRuleDeleted(NeutronSecurityRule neutronSecurityRule) { + int result = canDeleteNeutronSecurityRule(neutronSecurityRule); + if (result != HttpURLConnection.HTTP_OK) { + logger.error(" delete Neutron Security Rule validation failed for result - {} ", result); + return; + } + } +} \ No newline at end of file -- 2.36.6