<type>test-jar</type>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.mdsal.model</groupId>
+ <artifactId>ietf-yang-types-20130715</artifactId>
+ </dependency>
</dependencies>
<build>
import java.util.List;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.NeutronFloatingIpAware;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.NeutronNetworkAware;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.NeutronSubnetAware;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.group.NeutronSecurityGroupAware;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.group.SecGroupDao;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.NeutronGbpMapperServiceImpl;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.NeutronSecurityRuleAware;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule.SecRuleDao;
import org.opendaylight.neutron.spi.INeutronFloatingIPAware;
import org.opendaylight.neutron.spi.INeutronSecurityRuleAware;
import org.opendaylight.neutron.spi.INeutronSubnetAware;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.NeutronGbpMapperService;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
public class NeutronMapper implements AutoCloseable {
private final List<ServiceRegistration<?>> registrations = new ArrayList<ServiceRegistration<?>>();
+ private final DataBroker dataProvider;
+ private final RpcProviderRegistry providerRegistry;
+ private final BundleContext context;
+ private final EndpointService epService;
+ private RpcRegistration<NeutronGbpMapperService> rpcRegistration;
public NeutronMapper(DataBroker dataProvider, RpcProviderRegistry rpcProvider, BundleContext context) {
- checkNotNull(dataProvider);
- checkNotNull(rpcProvider);
- checkNotNull(context);
- EndpointService epService = rpcProvider.getRpcService(EndpointService.class);
- registerAwareProviders(dataProvider, epService, context);
+ this.dataProvider = checkNotNull(dataProvider);
+ this.providerRegistry = checkNotNull(rpcProvider);
+ this.context = checkNotNull(context);
+ this.epService = rpcProvider.getRpcService(EndpointService.class);
+ registerAwareProviders();
}
- private void registerAwareProviders(DataBroker dataProvider, EndpointService epService, BundleContext context) {
+ private void registerAwareProviders() {
SecGroupDao secGroupDao = new SecGroupDao();
SecRuleDao secRuleDao = new SecRuleDao();
NeutronNetworkDao networkDao = new NeutronNetworkDao();
ServiceRegistration<INeutronFloatingIPAware> neutronFloatingIpAwareRegistration = context
.registerService(INeutronFloatingIPAware.class, new NeutronFloatingIpAware(dataProvider), null);
registrations.add(neutronFloatingIpAwareRegistration);
+
+ NeutronGbpMapperService neutronGbpMapperService = new NeutronGbpMapperServiceImpl(dataProvider, securityRuleAware);
+ rpcRegistration = providerRegistry.addRpcImplementation(NeutronGbpMapperService.class, neutronGbpMapperService);
}
/**
for (ServiceRegistration<?> registration : registrations) {
registration.unregister();
}
+ rpcRegistration.close();
}
}
return new SubnetBuilder(potentialSubnet.get()).setVirtualRouterIp(ipAddress).build();
}
- /**
- * @return {@code false} if illegal state occurred; {@code true} otherwise
- */
public boolean setNewL3ContextToEpsFromSubnet(TenantId tenantId, L3Context l3Context, Subnet subnet,
ReadWriteTransaction rwTx) {
if (subnet.getParent() == null) {
}
/**
- * @param id
+ * @param id {@link EndpointGroupId} EndpointGroupId
* @return {@code empty string} if security group with given ID does not exist; returns
* {@code name of security group} if has some; otherwise security group id
*/
--- /dev/null
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * 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.groupbasedpolicy.neutron.mapper.mapping.rule;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import java.util.List;
+import java.util.concurrent.Future;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.ChangeActionOfSecurityGroupRulesInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.NeutronGbpMapperService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.SecurityGroupRule;
+import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.util.concurrent.Futures;
+
+public class NeutronGbpMapperServiceImpl implements NeutronGbpMapperService {
+
+ private static final Logger LOG = LoggerFactory.getLogger(NeutronGbpMapperServiceImpl.class);
+ private NeutronSecurityRuleAware secRuleAware;
+ private DataBroker dataProvider;
+
+ public NeutronGbpMapperServiceImpl(DataBroker dataProvider, NeutronSecurityRuleAware secRuleAware) {
+ this.dataProvider = checkNotNull(dataProvider);
+ this.secRuleAware = checkNotNull(secRuleAware);
+ }
+
+ @Override
+ public Future<RpcResult<Void>> changeActionOfSecurityGroupRules(ChangeActionOfSecurityGroupRulesInput input) {
+ List<SecurityGroupRule> securityGroupRules = input.getSecurityGroupRule();
+ if (securityGroupRules == null || input.getAction() == null) {
+ LOG.debug("Missing params in request:\n{}", input);
+ return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+ .withError(ErrorType.PROTOCOL, "Missing params. Changing to action "
+ + input.getAction().getActionChoice() + " was not successful.")
+ .build());
+ }
+
+ ReadWriteTransaction rwTx = dataProvider.newReadWriteTransaction();
+ for (SecurityGroupRule secGrpRule : securityGroupRules) {
+ Uuid uuid = secGrpRule.getUuid();
+ LOG.trace("Changing action to {} in security group rule {}", input.getAction().getActionChoice(), uuid);
+ boolean isSuccessful =
+ secRuleAware.changeActionOfNeutronSecurityRule(uuid, input.getAction().getActionChoice(), rwTx);
+ if (!isSuccessful) {
+ rwTx.cancel();
+ LOG.warn("Changing action to {} in security group rule {} was not successful.",
+ input.getAction().getActionChoice(), uuid);
+ return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+ .withError(ErrorType.APPLICATION,
+ "Changing to action " + input.getAction().getActionChoice() + " was not successful.")
+ .build());
+ }
+ }
+ boolean isSubmittedToDs = DataStoreHelper.submitToDs(rwTx);
+ if (!isSubmittedToDs) {
+ LOG.warn("Changing action to {} in security group rules {} was not successful.",
+ input.getAction().getActionChoice(), input.getSecurityGroupRule());
+ return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+ .withError(ErrorType.APPLICATION, "Storing to datastore was not successful. Changing to action "
+ + input.getAction().getActionChoice() + " was not successful.")
+ .build());
+ }
+ return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());
+ }
+
+}
import static com.google.common.base.Preconditions.checkNotNull;
+import java.util.List;
import java.util.Set;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.groupbasedpolicy.api.sf.ChainActionDefinition;
import org.opendaylight.groupbasedpolicy.dto.EgKey;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.StatusCode;
import org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.group.SecGroupDao;
import org.opendaylight.groupbasedpolicy.util.IidFactory;
import org.opendaylight.neutron.spi.INeutronSecurityRuleAware;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClauseName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Description;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SelectorName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.ActionChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.action.choice.SfcActionCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRefBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ConsumerNamedSelectorBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.endpoint.group.ProviderNamedSelectorBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstance;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ActionInstanceBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.subject.feature.instances.ClassifierInstance;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
}
}
- /**
- * @param secRule this security group rule will be translate to single rule inside single
- * subject inside a contract
- * @param rwTx GBP entities are stored to this transaction. This method NEVER submits or cancel
- * the transaction.
- * @return {@code true} if operation was successful; {@code false} if an illegal state occurs -
- * the transaction may contain just partial result
- */
+ public boolean changeActionOfNeutronSecurityRule(Uuid secRuleId, ActionChoice action, ReadWriteTransaction rwTx) {
+ NeutronSecurityRule secRule = secRuleDao.getSecRuleByUuid(secRuleId);
+ List<ActionRef> actions = createActions(action, SecRuleEntityDecoder.getTenantId(secRule), rwTx);
+ LOG.trace("Changing to action {} for secuirity group rule {}", action, secRule);
+ return addNeutronSecurityRuleWithAction(secRule, actions, rwTx);
+ }
+
+ private List<ActionRef> createActions(ActionChoice action, TenantId tenantId, ReadWriteTransaction rwTx) {
+ if (action instanceof SfcActionCase) {
+ String sfcChainName = ((SfcActionCase) action).getSfcChainName();
+ ActionName actionName = addSfcChainActionInstance(sfcChainName, tenantId, rwTx);
+ return ImmutableList.of(new ActionRefBuilder().setName(actionName).setOrder(0).build());
+ }
+ return MappingUtils.ACTION_REF_ALLOW;
+ }
+
+ private ActionName addSfcChainActionInstance(String sfcChainName, TenantId tenantId, ReadWriteTransaction rwTx) {
+ ActionName actionName = new ActionName(sfcChainName);
+ ActionInstance sfcActionInstance = new ActionInstanceBuilder().setName(actionName)
+ .setActionDefinitionId(ChainActionDefinition.ID)
+ .setParameterValue(ImmutableList.of(new ParameterValueBuilder()
+ .setName(new ParameterName(ChainActionDefinition.SFC_CHAIN_NAME)).setStringValue(sfcChainName).build()))
+ .build();
+ rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.actionInstanceIid(tenantId, actionName),
+ sfcActionInstance, true);
+ return actionName;
+ }
+
public boolean addNeutronSecurityRule(NeutronSecurityRule secRule, ReadWriteTransaction rwTx) {
+ return addNeutronSecurityRuleWithAction(secRule, MappingUtils.ACTION_REF_ALLOW, rwTx);
+ }
+
+ public boolean addNeutronSecurityRuleWithAction(NeutronSecurityRule secRule, List<ActionRef> actions,
+ ReadWriteTransaction rwTx) {
TenantId tenantId = SecRuleEntityDecoder.getTenantId(secRule);
EndpointGroupId providerEpgId = SecRuleEntityDecoder.getProviderEpgId(secRule);
secRuleDao.addSecRule(secRule);
Description contractDescription = new Description(CONTRACT_PROVIDER
+ secGroupDao.getNameOrIdOfSecGroup(providerEpgId));
- SingleRuleContract singleRuleContract = createSingleRuleContract(secRule, contractDescription);
+ SingleRuleContract singleRuleContract = createSingleRuleContract(secRule, contractDescription, actions);
Contract contract = singleRuleContract.getContract();
rwTx.put(LogicalDatastoreType.CONFIGURATION, IidFactory.contractIid(tenantId, contract.getId()), contract, true);
SelectorName providerSelector = getSelectorNameWithConsumer(secRule);
}
@VisibleForTesting
- static SingleRuleContract createSingleRuleContract(NeutronSecurityRule secRule, Description contractDescription) {
+ static SingleRuleContract createSingleRuleContract(NeutronSecurityRule secRule, Description contractDescription,
+ List<ActionRef> actions) {
if (Strings.isNullOrEmpty(secRule.getSecurityRuleRemoteIpPrefix())) {
- return new SingleRuleContract(secRule, 0, contractDescription);
+ return new SingleRuleContract(secRule, 0, contractDescription, actions);
}
- return new SingleRuleContract(secRule, 1, contractDescription);
+ return new SingleRuleContract(secRule, 1, contractDescription, actions);
}
@VisibleForTesting
package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
import com.google.common.base.Preconditions;
private final SetMultimap<EndpointGroupId, NeutronSecurityRule> secRulesByOwnerSecGrpId = HashMultimap.create();
private final SetMultimap<OwnerAndRemoteOfSecRule, NeutronSecurityRule> secRulesByRemoteSecGrpId =
HashMultimap.create();
+ private final Map<Uuid, NeutronSecurityRule> secRuleByUuid = new HashMap<>();
public void addSecRule(NeutronSecurityRule secRule) {
Preconditions.checkNotNull(secRule);
EndpointGroupId remoteSecGrp = SecRuleEntityDecoder.getConsumerEpgId(secRule);
secRulesByOwnerSecGrpId.put(ownerSecGrp, secRule);
secRulesByRemoteSecGrpId.put(new OwnerAndRemoteOfSecRule(ownerSecGrp, remoteSecGrp), secRule);
+ secRuleByUuid.put(new Uuid(secRule.getID()), secRule);
}
public Set<NeutronSecurityRule> getSecRulesByOwnerSecGrpId(EndpointGroupId secGrpId) {
return secRulesByRemoteSecGrpId.get(new OwnerAndRemoteOfSecRule(ownerSecGrpId, null));
}
+ public NeutronSecurityRule getSecRuleByUuid(Uuid secRule) {
+ return secRuleByUuid.get(secRule);
+ }
+
public Set<EndpointGroupId> getAllOwnerSecGrps() {
return secRulesByOwnerSecGrpId.keySet();
}
EndpointGroupId remoteSecGrp = SecRuleEntityDecoder.getConsumerEpgId(secRule);
secRulesByOwnerSecGrpId.remove(ownerSecGrp, secRule);
secRulesByRemoteSecGrpId.remove(new OwnerAndRemoteOfSecRule(ownerSecGrp, remoteSecGrp), secRule);
+ secRuleByUuid.remove(new Uuid(secRule.getID()));
}
static class OwnerAndRemoteOfSecRule {
return new EndpointGroupId(Utils.normalizeUuid(secRule.getSecurityRuleGroupID()));\r
}\r
\r
- /**\r
- * @return {@code null} if {@link NeutronSecurityRule#getSecurityRemoteGroupID()} is null\r
- */\r
public static @Nullable EndpointGroupId getConsumerEpgId(NeutronSecurityRule secRule) {\r
if (Strings.isNullOrEmpty(secRule.getSecurityRemoteGroupID())) {\r
return null;\r
package org.opendaylight.groupbasedpolicy.neutron.mapper.mapping.rule;
+
+import java.util.List;
+
import javax.annotation.concurrent.Immutable;
-import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.Rule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.subject.RuleBuilder;
private final ClassifierRef classifierRef;
private final Rule rule;
- public SingleClassifierRule(NeutronSecurityRule secRule, int ruleOrder) {
+ public SingleClassifierRule(NeutronSecurityRule secRule, int ruleOrder, List<ActionRef> actions) {
classifierInstance = SecRuleEntityDecoder.getClassifierInstance(secRule);
classifierRef = SecRuleEntityDecoder.getClassifierRef(secRule);
- rule = createRule(ruleOrder, secRule);
+ rule = createRule(ruleOrder, secRule, actions);
}
- private Rule createRule(int order, NeutronSecurityRule secRule) {
+ private Rule createRule(int order, NeutronSecurityRule secRule, List<ActionRef> actions) {
return new RuleBuilder().setName(SecRuleNameDecoder.getRuleName(secRule))
.setOrder(order)
- .setActionRef(MappingUtils.ACTION_REF_ALLOW)
+ .setActionRef(actions)
.setClassifierRef(ImmutableList.of(classifierRef))
.build();
}
import static com.google.common.base.Preconditions.checkNotNull;
+import java.util.List;
+
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Description;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.neutron.gbp.mapper.rev150513.change.action.of.security.group.rules.input.action.ActionChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.action.refs.ActionRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.Contract;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.ContractBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.contract.Clause;
private final Clause clause;
private final Contract contract;
- public SingleRuleContract(NeutronSecurityRule secRule, int subjectAndRuleOrder, @Nullable Description contractDescription) {
- this(secRule, new SingleClassifierRule(secRule, subjectAndRuleOrder), subjectAndRuleOrder, contractDescription);
+ public SingleRuleContract(NeutronSecurityRule secRule, int subjectAndRuleOrder, @Nullable Description contractDescription, List<ActionRef> actions) {
+ this(secRule, new SingleClassifierRule(secRule, subjectAndRuleOrder, actions), subjectAndRuleOrder, contractDescription);
}
public SingleRuleContract(NeutronSecurityRule secRule, SingleClassifierRule singleClassifierRule,
namespace "urn:opendaylight:groupbasedpolicy:neutron-gbp-mapper";
prefix "neutron-gbp-mapper";
- import gbp-common {prefix gbp-common;}
- import endpoint {prefix gbp-endpoint;}
- import ietf-inet-types {
- prefix inet;
- revision-date 2010-09-24;
- }
+ import gbp-common { prefix gbp-common; }
+ import endpoint { prefix gbp-endpoint; }
+ import ietf-yang-types { prefix yang; revision-date 2013-07-15; }
+ import ietf-inet-types { prefix inet; revision-date 2010-09-24; }
+
description
"This module defines the mapping model between Neutron entities and GBP entities.";
}
}
}
+ }
+ rpc change-action-of-security-group-rules {
+ input {
+ list security-group-rule {
+ key uuid;
+ leaf uuid {
+ type yang:uuid;
+ description "UUID to index this neutron security group rule.";
+ }
+ }
+ container action {
+ choice action-choice {
+ case sfc-action-case {
+ leaf sfc-chain-name {
+ type string;
+ }
+ }
+ case allow-action-case {
+ container allow {
+ presence true;
+ }
+ }
+ }
+ }
+ }
}
}
import org.junit.Test;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronUtils;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.has.classifier.refs.ClassifierRef;
"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", NeutronUtils.IPv4,
NeutronUtils.INGRESS, NeutronUtils.TCP, 8010, 8020);
final int ruleOrder = 1;
- SingleClassifierRule singleClsfRule = new SingleClassifierRule(secRule, ruleOrder);
+ SingleClassifierRule singleClsfRule = new SingleClassifierRule(secRule, ruleOrder, MappingUtils.ACTION_REF_ALLOW);
ClassifierInstance clsfInstance = singleClsfRule.getClassifierInstance();
assertNotNull(clsfInstance);
import org.junit.Test;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.NeutronEntityFactory;
import org.opendaylight.groupbasedpolicy.neutron.mapper.test.PolicyAssert;
+import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
import org.opendaylight.groupbasedpolicy.neutron.mapper.util.NeutronUtils;
import org.opendaylight.neutron.spi.NeutronSecurityRule;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.Description;
NeutronUtils.INGRESS, NeutronUtils.TCP, 8010, 8020);
int subjectAndRuleOrder = 1;
SingleRuleContract singleRuleContract = new SingleRuleContract(secRule, subjectAndRuleOrder, new Description(
- "contractDescription"));
+ "contractDescription"), MappingUtils.ACTION_REF_ALLOW);
SingleClassifierRule singleClsfRule = singleRuleContract.getSingleClassifierRule();
assertNotNull(singleClsfRule);