<feature name='odl-groupbasedpolicy-ios-xe' version='${project.version}' description='OpenDaylight :: groupbasedpolicy :: ios-xe renderer'>
<feature version="${project.version}">odl-groupbasedpolicy-base</feature>
<feature version="${project.version}">odl-groupbasedpolicy-sxp-ep-provider</feature>
+ <feature version="${project.version}">odl-groupbasedpolicy-ip-sgt-distribution-service</feature>
<feature version="${sfc.version}">odl-sfc-provider</feature>
<feature version="${sxp.version}">odl-sxp-core</feature>
<feature version="${netconf.version}">odl-netconf-topology</feature>
<groupId>org.opendaylight.groupbasedpolicy</groupId>
<artifactId>sxp-ep-provider</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.groupbasedpolicy</groupId>
+ <artifactId>ip-sgt-distribution-service</artifactId>
+ </dependency>
<dependency>
<groupId>org.opendaylight.sfc</groupId>
<artifactId>sfc-provider</artifactId>
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedActionDefinitionBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedClassifierDefinition;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.SupportedClassifierDefinitionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.IpSgtDistributionService;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final SxpEpProviderProvider sxpEpProvider;
private RendererConfigurationListenerImpl rendererConfigurationListener;
private IosXeCapableNodeListenerImpl iosXeCapableNodeListener;
+ private final IpSgtDistributionService ipSgtDistributor;
public IosXeRendererProviderImpl(final DataBroker dataBroker, final BindingAwareBroker broker,
- final SxpEpProviderProvider sxpEpProvider) {
+ final SxpEpProviderProvider sxpEpProvider,
+ final IpSgtDistributionService ipSgtDistributor) {
LOG.debug("ios-xe renderer bootstrap");
this.dataBroker = Preconditions.checkNotNull(dataBroker, "missing dataBroker dependency");
this.sxpEpProvider = Preconditions.checkNotNull(sxpEpProvider, "missing sxpEpProvider param");
+ this.ipSgtDistributor = Preconditions.checkNotNull(ipSgtDistributor, "missing ipSgtDistributor param");
broker.registerProvider(this);
}
iosXeCapableNodeListener = new IosXeCapableNodeListenerImpl(dataBroker, nodeManager);
// policy-manager and delegates
- final PolicyManager policyManager = new PolicyManagerImpl(dataBroker, nodeManager, sxpEpProvider.getEPToSgtMapper());
+ final PolicyManager policyManager = new PolicyManagerImpl(dataBroker, nodeManager, sxpEpProvider.getEPToSgtMapper(), ipSgtDistributor);
final PolicyManager policyManagerZip = new PolicyManagerZipImpl(policyManager);
// renderer-configuration endpoints
private void writeRendererCapabilities() {
final Optional<WriteTransaction> optionalWriteTransaction =
NetconfTransactionCreator.netconfWriteOnlyTransaction(dataBroker);
- if (!optionalWriteTransaction.isPresent()) {
+ if (! optionalWriteTransaction.isPresent()) {
LOG.warn("Failed to create transaction, mountpoint: {}", dataBroker);
return;
}
import org.opendaylight.controller.config.yang.config.groupbasedpolicy.GroupbasedpolicyInstance;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.IosXeRendererProviderImpl;
import org.opendaylight.groupbasedpolicy.sxp.ep.provider.spi.SxpEpProviderProvider;
import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.IpSgtDistributionService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final BindingAwareBroker bindingAwareBroker;
private final ClusterSingletonServiceProvider clusterSingletonService;
private final SxpEpProviderProvider sxpEpProvider;
+ private final IpSgtDistributionService ipSgtDistributor;
private ClusterSingletonServiceRegistration singletonServiceRegistration;
private IosXeRendererProviderImpl renderer;
public IosXeProviderInstance(final DataBroker dataBroker,
final BindingAwareBroker broker,
final ClusterSingletonServiceProvider clusterSingletonService,
- final SxpEpProviderProvider sxpEpProvider) {
+ final SxpEpProviderProvider sxpEpProvider,
+ final RpcProviderRegistry rpcProviderRegistry) {
this.dataBroker = Preconditions.checkNotNull(dataBroker);
this.bindingAwareBroker = Preconditions.checkNotNull(broker);
this.clusterSingletonService = Preconditions.checkNotNull(clusterSingletonService);
this.sxpEpProvider = Preconditions.checkNotNull(sxpEpProvider);
+ this.ipSgtDistributor = Preconditions.checkNotNull(rpcProviderRegistry.getRpcService(IpSgtDistributionService.class));
}
public void initialize() {
@Override
public void instantiateServiceInstance() {
LOG.info("Instantiating {}", this.getClass().getSimpleName());
- renderer = new IosXeRendererProviderImpl(dataBroker, bindingAwareBroker, sxpEpProvider);
+ renderer = new IosXeRendererProviderImpl(dataBroker, bindingAwareBroker, sxpEpProvider, ipSgtDistributor);
}
@Override
import static org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl.DsAction.Create;
import static org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager.PolicyManagerImpl.DsAction.Delete;
-import java.util.concurrent.TimeUnit;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import java.util.List;
-import java.util.Optional;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.util.concurrent.CheckedFuture;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.api.manager.PolicyManager;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.PolicyManagerUtil;
+import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.RendererPolicyUtil;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.StatusUtil;
import org.opendaylight.groupbasedpolicy.sxp.ep.provider.api.EPToSgtMapper;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.RendererName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.renderer.endpoint.PeerEndpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.status.UnconfiguredEndpointsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.IpSgtDistributionService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.SendIpSgtBindingToPeerInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
private final DataBroker dataBroker;
private final NodeManager nodeManager;
private final EPToSgtMapper epToSgtMapper;
+ private final IpSgtDistributionService ipSgtDistributor;
public PolicyManagerImpl(final DataBroker dataBroker,
- final NodeManager nodeManager, final EPToSgtMapper epToSgtMapper) {
+ final NodeManager nodeManager, final EPToSgtMapper epToSgtMapper,
+ final IpSgtDistributionService ipSgtDistributor) {
this.dataBroker = Preconditions.checkNotNull(dataBroker);
this.nodeManager = Preconditions.checkNotNull(nodeManager);
this.epToSgtMapper = Preconditions.checkNotNull(epToSgtMapper);
+ this.ipSgtDistributor = Preconditions.checkNotNull(ipSgtDistributor);
}
@Override
continue;
}
final Optional<String> optionalManagementIpAddress = nodeManager.getNodeManagementIpByMountPointIid(mountpointIid);
- if (!optionalManagementIpAddress.isPresent()) {
+ if (! optionalManagementIpAddress.isPresent()) {
final String info = String.format("Can not create policyWriter, managementIpAddress for mountpoint %s is null",
mountpointIid);
context.appendUnconfiguredRendererEP(StatusUtil.assembleFullyNotConfigurableRendererEP(context, info));
final long TIMEOUT = 10;
final TimeUnit UNIT = TimeUnit.SECONDS;
+ final SendIpSgtBindingToPeerInputBuilder ipSgtBindings = new SendIpSgtBindingToPeerInputBuilder();
+ ipSgtBindings.setBinding(new ArrayList<>());
+
final Sgt sourceSgt = PolicyManagerUtil.findSgtTag(epToSgtMapper, rendererEndpoint, dataAfter.getEndpoints()
.getAddressEndpointWithLocation(), TIMEOUT, UNIT);
+ final AddressEndpointWithLocation sourceEPAddressWithLocation = RendererPolicyUtil.lookupEndpoint(
+ rendererEndpoint, dataAfter.getEndpoints().getAddressEndpointWithLocation());
+
+ PolicyManagerUtil.createIpSgtBindingItem(sourceSgt, sourceEPAddressWithLocation).ifPresent(ipSgtBindings.getBinding()::add);
+
// Peer Endpoint
for (PeerEndpoint peerEndpoint : rendererEndpoint.getPeerEndpoint()) {
final Sgt destinationSgt = PolicyManagerUtil.findSgtTag(epToSgtMapper, peerEndpoint, dataAfter.getEndpoints()
.getAddressEndpointWithLocation(), TIMEOUT, UNIT);
+ final AddressEndpointWithLocation destinationEPAddressWithLocation = RendererPolicyUtil.lookupEndpoint(
+ peerEndpoint, dataAfter.getEndpoints().getAddressEndpointWithLocation());
+ PolicyManagerUtil.createIpSgtBindingItem(destinationSgt, destinationEPAddressWithLocation)
+ .ifPresent(ipSgtBindings.getBinding()::add);
+
if (sourceSgt == null || destinationSgt == null) {
final String info = String.format("Endpoint-policy: missing sgt value(sourceSgt=%s, destinationSgt=%s)",
sourceSgt, destinationSgt);
peerEndpoint);
}
}
+
+ ipSgtDistributor.sendIpSgtBindingToPeer(ipSgtBindings.build());
}
final ListenableFuture<List<Boolean>> cumulativeResult = context.getCumulativeResult();
return Futures.transform(cumulativeResult, new Function<List<Boolean>, Optional<Status>>() {
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.writer.PolicyWriterUtil;
import org.opendaylight.groupbasedpolicy.sxp.ep.provider.api.EPToSgtMapper;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.rsp.rev140701.rendered.service.paths.RenderedServicePath;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.ios.rev160308.ClassNameType;
import org.opendaylight.yang.gen.v1.urn.ios.rev160308.PolicyActionType;
import org.opendaylight.yang.gen.v1.urn.ios.rev160308._class.map.match.grouping.SecurityGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.RuleName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubjectName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.rule.group.with.renderer.endpoint.participation.RuleGroupWithRendererEndpointParticipation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.actions.Action;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.classifiers.Classifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.rpc.fields.Binding;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.rpc.fields.BindingBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.rpc.fields.binding.PeerNodeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
final PolicyConfigurationContext context, final Configuration data,
final PeerEndpoint peerEndpoint, final DataBroker dataBroker) {
// Create appropriate policy map
- if (!PolicyManagerUtil.constructEmptyPolicyMapWithInterface(context)) {
+ if (! PolicyManagerUtil.constructEmptyPolicyMapWithInterface(context)) {
final String policyMapName = context.getPolicyMapLocation().getPolicyMapName();
final String interfaceName = context.getPolicyMapLocation().getInterfaceName();
final String info = String.format("Unable to create policy-map %s on interface %s", policyMapName, interfaceName);
}
// Remove policy-map if empty
- if (!deleteEmptyPolicyMapWithInterface(context.getPolicyMapLocation())) {
+ if (! deleteEmptyPolicyMapWithInterface(context.getPolicyMapLocation())) {
final PolicyManagerImpl.PolicyMapLocation location = context.getPolicyMapLocation();
final String info = String.format("Unable to remove policy-map %s and interface %s", location.getPolicyMapName(),
location.getInterfaceName());
final ContractId contractId = ruleGroupWithParticipation.getContractId();
final SubjectName subjectName = ruleGroupWithParticipation.getSubjectName();
for (RuleGroup ruleGroup : data.getRuleGroups().getRuleGroup()) {
- if (!ruleGroup.getTenantId().equals(tenantId)) {
+ if (! ruleGroup.getTenantId().equals(tenantId)) {
continue;
}
- if (!ruleGroup.getContractId().equals(contractId)) {
+ if (! ruleGroup.getContractId().equals(contractId)) {
continue;
}
if (ruleGroup.getSubjectName().equals(subjectName)) {
return "srcTag" + sourceTag + "_dstTag" + destinationTag;
}
+ public static Optional<Binding> createIpSgtBindingItem(final Sgt sgt, final AddressEndpointWithLocation addressEndpointWithLocation) {
+ final Optional<Binding> result;
+ final LocationType locationType = addressEndpointWithLocation.getAbsoluteLocation().getLocationType();
+
+ if (IpPrefixType.class == addressEndpointWithLocation.getAddressType() &&
+ locationType instanceof ExternalLocationCase &&
+ sgt != null) {
+ final Binding binding = new BindingBuilder()
+ .setSgt(sgt)
+ .setIpPrefix(new IpPrefix(addressEndpointWithLocation.getAddress().toCharArray()))
+ .setPeerNode(Collections.singletonList(new PeerNodeBuilder()
+ .setNodeIid(((ExternalLocationCase) locationType).getExternalNodeMountPoint())
+ .build()))
+ .build();
+
+ result = Optional.ofNullable(binding);
+ } else {
+ result = Optional.empty();
+ }
+ return result;
+ }
+
/**
* Action in Direction - wrapper class
*/
<reference id="clusterSingletonService" interface="org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider"/>
<reference id="sxpEpProvider"
interface="org.opendaylight.groupbasedpolicy.sxp.ep.provider.spi.SxpEpProviderProvider"/>
+ <reference id="rpcRegistry" interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"/>
<bean id="iosXeRenderer" class="org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.config.IosXeProviderInstance"
- init-method="initialize" destroy-method="close">
+ init-method="initialize" destroy-method="close">
<argument ref="dataBroker"/>
<argument ref="broker"/>
- <argument ref="clusterSingletonService" />
+ <argument ref="clusterSingletonService"/>
<argument ref="sxpEpProvider"/>
+ <argument ref="rpcRegistry"/>
</bean>
</blueprint>
\ No newline at end of file
*/
package org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.manager;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction.Out;
+import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation.PROVIDER;
+import static org.powermock.api.support.membermodification.MemberMatcher.method;
+import static org.powermock.api.support.membermodification.MemberModifier.stub;
+
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.groupbasedpolicy.renderer.ios_xe_provider.impl.util.PolicyManagerUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.has.resolved.rules.ResolvedRuleBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ep.provider.model.rev160302.AddressEndpointWithLocationAug;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ep.provider.model.rev160302.AddressEndpointWithLocationAugBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.IpSgtDistributionService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.HasDirection.Direction.Out;
-import static org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.EndpointPolicyParticipation.PROVIDER;
-import static org.powermock.api.support.membermodification.MemberMatcher.method;
-import static org.powermock.api.support.membermodification.MemberModifier.stub;
-
@RunWith(PowerMockRunner.class)
@PrepareForTest({RendererPolicyUtil.class, PolicyManagerUtil.class, SfcProviderServiceForwarderAPI.class})
public class PolicyManagerImplTest {
- private final String address = "address";
+ private final String address = "10.11.12.42/32";
private final String connector = "connector";
private final SfpName servicePath = new SfpName("service-path");
private final RspName renderedPath = new RspName("rendered-path");
private DataBroker mountpoint;
private NodeManager nodeManager;
private EPToSgtMapper epToSgtMapper;
+ @Mock
+ private IpSgtDistributionService ipSgtDistributor;
@Before
public void init() {
ReadWriteTransaction readWriteTransaction = mock(ReadWriteTransaction.class);
nodeManager = mock(NodeManager.class);
epToSgtMapper = mock(EPToSgtMapper.class);
- policyManager = new PolicyManagerImpl(mountpoint, nodeManager, epToSgtMapper);
+ policyManager = new PolicyManagerImpl(mountpoint, nodeManager, epToSgtMapper, ipSgtDistributor);
when(mountpoint.newReadWriteTransaction()).thenReturn(readWriteTransaction);
when(readWriteTransaction.submit()).thenReturn(Futures.immediateCheckedFuture(null));
}
import static org.junit.Assert.assertNotNull;
-import java.util.Collections;
import com.google.common.base.Optional;
import com.google.common.util.concurrent.Futures;
+import java.util.Collections;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.ServiceFunctionPathsBuilder;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPathBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native.ClassMap;
import org.opendaylight.yang.gen.v1.urn.ios.rev160308._native._class.map.Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.AbsoluteLocationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.has.absolute.location.absolute.location.location.type.ExternalLocationCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValueBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.endpoints.AddressEndpointWithLocationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.rpc.fields.Binding;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.rpc.fields.binding.PeerNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.rpc.fields.binding.PeerNodeBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
/**
Match result = PolicyManagerUtil.createSecurityGroupMatch(10, 20);
assertNotNull(result);
}
-}
\ No newline at end of file
+
+ @Test
+ public void createIpSgtBindingItem() throws Exception {
+ final Sgt sgt = new Sgt(42);
+ final IpPrefix ipPrefix = new IpPrefix("10.11.12.42/32".toCharArray());
+ final InstanceIdentifier<Node> nodeII = InstanceIdentifier.create(NetworkTopology.class)
+ .child(Topology.class, new TopologyKey(new TopologyId("dummy-topology")))
+ .child(Node.class, new NodeKey(new NodeId("dummy-node-1")));
+ final PeerNode peerNode = new PeerNodeBuilder()
+ .setNodeIid(nodeII)
+ .build();
+ final AddressEndpointWithLocation addressEndpointWithLocation = new AddressEndpointWithLocationBuilder()
+ .setAddressType(IpPrefixType.class)
+ .setAddress(ipPrefix.getIpv4Prefix().getValue())
+ .setAbsoluteLocation(new AbsoluteLocationBuilder()
+ .setLocationType(new ExternalLocationCaseBuilder()
+ .setExternalNodeMountPoint(nodeII)
+ .build())
+ .build())
+ .build();
+
+ final java.util.Optional<Binding> ipSgtBindingItem = PolicyManagerUtil.createIpSgtBindingItem(sgt, addressEndpointWithLocation);
+
+ Assert.assertTrue(ipSgtBindingItem.isPresent());
+ final Binding binding = ipSgtBindingItem.get();
+ Assert.assertEquals(sgt, binding.getSgt());
+ Assert.assertEquals(ipPrefix, binding.getIpPrefix());
+ Assert.assertEquals(1, binding.getPeerNode().size());
+ Assert.assertEquals(peerNode, binding.getPeerNode().get(0));
+ }
+}