From 64d936304c22c749edb4a1b7a0d93e6e961380ac Mon Sep 17 00:00:00 2001 From: Martin Sunal Date: Mon, 11 Apr 2016 13:07:14 +0200 Subject: [PATCH] Introduced renderer yang API renderer.yang Change-Id: I5ff655a9e0b5d9b98fcbcbbed34614672b8302d6 Signed-off-by: Martin Sunal --- .../src/main/yang/model/base-endpoint.yang | 62 +++--- .../model/endpoint-location-provider.yang | 14 +- .../src/main/yang/model/forwarding.yang | 50 +++-- .../src/main/yang/model/l2-l3-forwarding.yang | 2 +- .../src/main/yang/model/renderer.yang | 206 ++++++++++++++++-- .../mapper/impl/SxpMapperProviderImpl.java | 2 +- .../sxp/mapper/impl/SxpMapperReactorImpl.java | 44 ++-- .../mapper/impl/SxpMapperReactorImplTest.java | 11 +- 8 files changed, 281 insertions(+), 110 deletions(-) diff --git a/groupbasedpolicy/src/main/yang/model/base-endpoint.yang b/groupbasedpolicy/src/main/yang/model/base-endpoint.yang index 6936a2978..b297b0e97 100644 --- a/groupbasedpolicy/src/main/yang/model/base-endpoint.yang +++ b/groupbasedpolicy/src/main/yang/model/base-endpoint.yang @@ -9,7 +9,7 @@ module base-endpoint { yang-version 1; - namespace "urn:opendaylight:groupbasedpolicy:endpoints"; + namespace "urn:opendaylight:groupbasedpolicy:base_endpoint"; prefix "base-endpoint"; import gbp-common { prefix gbp-common; revision-date 2014-04-21; } @@ -21,6 +21,7 @@ module base-endpoint { } grouping address-endpoint-key { + uses forwarding:context-key; uses forwarding:has-address-type; leaf address { type string; @@ -28,15 +29,10 @@ module base-endpoint { } } - grouping endpoint-key { - uses forwarding:context-key; - uses address-endpoint-key; - } - grouping has-child-endpoints { list child-endpoint { key "context-type context-id address-type address"; - uses endpoint-key; + uses address-endpoint-key; } } @@ -51,7 +47,7 @@ module base-endpoint { case parent-endpoint-case { list parent-endpoint { key "context-type context-id address-type address"; - uses endpoint-key; + uses address-endpoint-key; } } } @@ -91,6 +87,18 @@ module base-endpoint { } } + grouping address-endpoint-fields { + uses address-endpoint-key; + uses parent-child-endpoints; + uses common-endpoint-fields; + } + + grouping containment-endpoint-fields { + uses forwarding:context-key; + uses has-child-endpoints; + uses common-endpoint-fields; + } + grouping has-endpoint-group-conditions { description "Base type for object with endpoint group to condition mappings."; @@ -162,33 +170,25 @@ module base-endpoint { for policy resolution."; config false; - list address-endpoints-by-containment { - key "context-type context-id"; - uses forwarding:context-key; - + container address-endpoints { list address-endpoint { - key "address-type address"; - uses address-endpoint-key; - - uses parent-child-endpoints; - uses common-endpoint-fields; - min-elements 1; + key "context-type context-id address-type address"; + uses address-endpoint-fields; } } - list containment-endpoint { - key "context-type context-id"; - uses forwarding:context-key; - - uses has-child-endpoints; - uses common-endpoint-fields; + container containment-endpoints { + list containment-endpoint { + key "context-type context-id"; + uses containment-endpoint-fields; + } } } container endpoint-locations { list address-endpoint-location { key "context-type context-id address-type address"; - uses endpoint-key; + uses address-endpoint-key; uses has-location; } @@ -208,18 +208,12 @@ module base-endpoint { input { list address-endpoint-reg { key "context-type context-id address-type address"; - uses endpoint-key; - - uses parent-child-endpoints; - uses common-endpoint-fields; + uses address-endpoint-fields; uses has-location; } list containment-endpoint-reg { key "context-type context-id"; - uses forwarding:context-key; - - uses has-child-endpoints; - uses common-endpoint-fields; + uses containment-endpoint-fields; uses has-location; } } @@ -231,7 +225,7 @@ module base-endpoint { input { list address-endpoint-unreg { key "context-type context-id address-type address"; - uses endpoint-key; + uses address-endpoint-key; } list containment-endpoint-unreg { key "context-type context-id"; diff --git a/groupbasedpolicy/src/main/yang/model/endpoint-location-provider.yang b/groupbasedpolicy/src/main/yang/model/endpoint-location-provider.yang index 0eeacff2f..9e1f19b39 100644 --- a/groupbasedpolicy/src/main/yang/model/endpoint-location-provider.yang +++ b/groupbasedpolicy/src/main/yang/model/endpoint-location-provider.yang @@ -6,11 +6,11 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ -module endpoint-locations { +module endpoint-location-provider { yang-version 1; - namespace "urn:opendaylight:groupbasedpolicy:endpoint:location"; - prefix "endpoints-location"; + namespace "urn:opendaylight:groupbasedpolicy:endpoint_location_provider"; + prefix "ep-loc-provider"; import base-endpoint { prefix base-endpoint; revision-date 2016-04-27; } import forwarding { prefix forwarding; revision-date 2016-04-27; } @@ -27,18 +27,18 @@ module endpoint-locations { type string; } - container endpoint-locations { + container location-providers { list location-provider { key "provider"; leaf provider { type provider-name; } - list endpoint-location { + list provider-address-endpoint-location { key "context-type context-id address-type address"; - uses base-endpoint:endpoint-key; + uses base-endpoint:address-endpoint-key; uses base-endpoint:has-location; } - list containment-endpoint-location { + list provider-containment-endpoint-location { key "context-type context-id"; uses forwarding:context-key; uses base-endpoint:has-location; diff --git a/groupbasedpolicy/src/main/yang/model/forwarding.yang b/groupbasedpolicy/src/main/yang/model/forwarding.yang index a191cc11d..d39e0e4a4 100644 --- a/groupbasedpolicy/src/main/yang/model/forwarding.yang +++ b/groupbasedpolicy/src/main/yang/model/forwarding.yang @@ -82,35 +82,39 @@ module forwarding { } } - container forwarding { - list forwarding-by-tenant { - key tenant-id; - leaf tenant-id { - type gbp-common:tenant-id; - description - "The tenant with which forwarding-context is associated"; - } + grouping forwarding-with-tenant-fields { + leaf tenant-id { + type gbp-common:tenant-id; + description + "The tenant with which forwarding-context is associated"; + } - list forwarding-context { - key "context-type context-id"; - uses context-key; + list forwarding-context { + key "context-type context-id"; + uses context-key; - uses has-address-type; - container parent { - uses context-key; - } + uses has-address-type; + container parent { + uses context-key; } + } - list network-domain { - key "network-domain-type network-domain-id"; - uses network-domain-key; - - container parent { - uses context-key; - } + list network-domain { + key "network-domain-type network-domain-id"; + uses network-domain-key; - description "Network domain can be augmented with further information."; + container parent { + uses context-key; } + + description "Network domain can be augmented with further information."; + } + } + + container forwarding { + list forwarding-by-tenant { + key tenant-id; + uses forwarding-with-tenant-fields; } } diff --git a/groupbasedpolicy/src/main/yang/model/l2-l3-forwarding.yang b/groupbasedpolicy/src/main/yang/model/l2-l3-forwarding.yang index 9f2537686..8be4874cf 100644 --- a/groupbasedpolicy/src/main/yang/model/l2-l3-forwarding.yang +++ b/groupbasedpolicy/src/main/yang/model/l2-l3-forwarding.yang @@ -44,7 +44,7 @@ module l2-l3-forwarding { } identity ip-prefix-type { - description "Values by IP prefix type MUST be compatible with type ietf-inet-types:ipv-prefix. + description "Values by IP prefix type MUST be compatible with type ietf-inet-types:ip-prefix. This address type can be used only if forwarding:context-type is l3-context."; base forwarding:address-type; } diff --git a/groupbasedpolicy/src/main/yang/model/renderer.yang b/groupbasedpolicy/src/main/yang/model/renderer.yang index 7acec2149..e66fc1f37 100755 --- a/groupbasedpolicy/src/main/yang/model/renderer.yang +++ b/groupbasedpolicy/src/main/yang/model/renderer.yang @@ -12,18 +12,12 @@ module renderer { namespace "urn:opendaylight:groupbasedpolicy:renderer"; prefix "gbp-renderer"; - import gbp-common { - prefix gbp-common; - revision-date 2014-04-21; - } - import policy { - prefix policy; - revision-date 2014-04-21; - } - import ietf-inet-types { - prefix inet; - revision-date 2010-09-24; - } + import gbp-common { prefix gbp-common; revision-date 2014-04-21; } + import policy { prefix policy; revision-date 2014-04-21; } + import resolved-policy { prefix resolved-policy; revision-date 2015-08-28; } + import base-endpoint { prefix base-endpoint; revision-date 2016-04-27; } + import forwarding { prefix forwarding; revision-date 2016-04-27; } + import ietf-inet-types { prefix inet; revision-date 2010-09-24; } description "This module defines renderer capabilities."; @@ -38,6 +32,17 @@ module renderer { description "A name for a renderer"; } + typedef policy-name { + type string; + } + + typedef endpoint-policy-participation { + type enumeration { + enum PROVIDER; + enum CONSUMER; + } + } + grouping supported-string-value-fields { list supported-string-value { description "String value has to be identical."; @@ -95,25 +100,190 @@ module renderer { } } + grouping has-peer-endpoints { + list peer-endpoint { + key "context-type context-id address-type address"; + uses base-endpoint:address-endpoint-key; + } + } + + grouping has-peer-containment-endpoints { + list peer-containment-endpoint { + key "context-type context-id"; + uses forwarding:context-key; + } + } + + grouping has-peer-external-endpoints { + list peer-external-endpoint { + key "context-type context-id address-type address"; + uses base-endpoint:address-endpoint-key; + } + } + + grouping has-peer-external-containment-endpoints { + list peer-external-containment-endpoint { + key "context-type context-id"; + uses forwarding:context-key; + } + } + + grouping has-renderer-name { + leaf renderer-name { + type renderer-name; + mandatory true; + } + } + container renderers { description "Leaf containing all renderers' description."; - config false; - list renderer { description - "A renderer provides a list of capabilities."; + "A renderer provides a list of capabilities and status about configured policy. + The renderer must store data only to OPER!"; key name; - leaf name { description "A user-visible name for the renderer."; type renderer-name; } + container renderer-nodes { + description "Contains location of nodes (network elements) which are configured by the renderer."; + + config false; + + list renderer-node { + key "node-path"; + leaf node-path { + description "Path to the node where policy needs to be enforced."; + type instance-identifier; + } + } + } + + container renderer-policy { + description "Policy is named by version and describes desired vs real state. + Desired state of policy described by /renderers/renderer/renderer-policy/configuration and version are stored in CONF. + The real state of policy described by /renderers/renderer/renderer-policy/status and version are stored in OPER."; + + leaf version { + description + "Version in CONF represents desired state of policy while version in OPER means real state."; + type uint32; + mandatory true; + } + + container configuration { + description "Renderer tries to apply given policy on devices."; + container endpoint-resolved-policies { + list endpoint-resolved-policy { + description "Policy between renderer-endpoints and peer-endpoints."; + key policy-name; + leaf policy-name { + description "Key is here only as workaround for bugs around unkeyed list. It can be removed anytime."; + type policy-name; + } + + container resolved-policy { + list rule-group-with-renderer-endpoint-participation { + description "A specific policy rule group that apply to pair of endpoints. + Entire rule-group is located on /renderers/renderer/renderer-policy/configuration/rule-groups/rule-group"; + key "tenant-id contract-id subject-name renderer-endpoint-participation"; + uses resolved-policy:has-subject-key; + leaf renderer-endpoint-participation { + type endpoint-policy-participation; + } + } + } + + container renderer-endpoints-and-peers { + description "Every renderer-endpoint has the same set of peer-endpoints. + A renderer should not configure a policy when renderer-endpoint is peer-endpoint."; + list renderer-endpoint { + key "context-type context-id address-type address"; + uses base-endpoint:address-endpoint-key; + } + uses has-peer-endpoints; + uses has-peer-external-endpoints; + uses has-peer-external-containment-endpoints; + } + } + } + + container rule-groups { + list rule-group { + description "A specific policy rule group that apply to pair of endpoints. + The policy rule group represents the subject with resolved rules."; + key "tenant-id contract-id subject-name"; + uses resolved-policy:has-subject-key; + + uses policy:has-order; + uses resolved-policy:has-resolved-rules; + } + } + + container endpoints { + list address-endpoint-with-location { + key "context-type context-id address-type address"; + uses base-endpoint:address-endpoint-fields; + uses base-endpoint:has-location; + uses has-renderer-name; + } + + list containment-endpoint-with-location { + key "context-type context-id"; + uses base-endpoint:address-endpoint-fields; + uses base-endpoint:has-location; + } + } + + container forwarding-contexts { + list forwarding-context-by-tenant { + key tenant-id; + uses forwarding:forwarding-with-tenant-fields; + } + } + } + + container status { + description "The renderer exposes status of policy here."; + config false; + + list unconfigured-rule { + key "tenant-id contract-id subject-name renderer-endpoint-participation rule-name"; + uses resolved-policy:has-subject-key; + leaf renderer-endpoint-participation { + type endpoint-policy-participation; + } + leaf rule-name { + type gbp-common:rule-name; + } + + container renderer-endpoints-with-peers { + list renderer-endpoint-with-peers { + key "context-type context-id address-type address"; + uses base-endpoint:address-endpoint-key; + + uses has-peer-endpoints; + uses has-peer-external-endpoints; + uses has-peer-external-containment-endpoints; + } + } + } + } + } + + // TODO remove - does not make sense anymore container interests { + + status deprecated; + + config false; + description "Represents interests of the renderer."; container followed-tenants { @@ -141,8 +311,10 @@ module renderer { } } - container capabilities { + + config false; + description "Capabilities this renderer provides."; list supported-classifier-definition { diff --git a/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperProviderImpl.java b/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperProviderImpl.java index 0a2fa3830..8cd816c87 100644 --- a/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperProviderImpl.java +++ b/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperProviderImpl.java @@ -23,7 +23,7 @@ import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.listen.EPForwardingTemp import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.listen.EPPolicyTemplateListenerImpl; import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.listen.MasterDatabaseBindingListenerImpl; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.BaseEndpointService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointForwardingTemplateBySubnet; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointPolicyTemplateBySgt; import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.Sgt; diff --git a/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperReactorImpl.java b/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperReactorImpl.java index 1aa20ed4f..89bc8f48c 100644 --- a/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperReactorImpl.java +++ b/sxp-mapper/src/main/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperReactorImpl.java @@ -8,14 +8,8 @@ package org.opendaylight.groupbasedpolicy.sxp.mapper.impl; -import com.google.common.base.Optional; -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.JdkFutureAdapters; -import com.google.common.util.concurrent.ListenableFuture; import java.util.Collections; + import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; @@ -23,19 +17,18 @@ import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.groupbasedpolicy.sxp.mapper.api.SxpMapperReactor; import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.util.SxpListenerUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.Endpoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInputBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainment; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainmentBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.AddressEndpoints; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpointKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointRegBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.BaseEndpointService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.Endpoints; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.RegisterEndpointInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.RegisterEndpointInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.common.endpoint.fields.NetworkContainment; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.common.endpoint.fields.NetworkContainmentBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.endpoints.AddressEndpointsByContainment; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.endpoints.AddressEndpointsByContainmentKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.endpoints.address.endpoints.by.containment.AddressEndpoint; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.endpoints.address.endpoints.by.containment.AddressEndpointKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.register.endpoint.input.AddressEndpointReg; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.register.endpoint.input.AddressEndpointRegBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType; import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L3Context; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointForwardingTemplateBySubnet; @@ -47,6 +40,14 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Optional; +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.JdkFutureAdapters; +import com.google.common.util.concurrent.ListenableFuture; + /** * Purpose: exclusively processes sxp master database changes and EGP templates changes */ @@ -95,9 +96,8 @@ public class SxpMapperReactorImpl implements SxpMapperReactor { private CheckedFuture, ReadFailedException> findExistingEndPoint(final ContextId containment, final String address) { KeyedInstanceIdentifier addressEndpointPath = - InstanceIdentifier.create(Endpoints.class) - .child(AddressEndpointsByContainment.class, new AddressEndpointsByContainmentKey(containment, L3Context.class)) - .child(AddressEndpoint.class, new AddressEndpointKey(address, IpPrefixType.class)); + InstanceIdentifier.create(Endpoints.class).child(AddressEndpoints.class).child(AddressEndpoint.class, + new AddressEndpointKey(address, IpPrefixType.class, containment, L3Context.class)); final ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction(); final CheckedFuture, ReadFailedException> read = rTx.read( LogicalDatastoreType.OPERATIONAL, addressEndpointPath); diff --git a/sxp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperReactorImplTest.java b/sxp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperReactorImplTest.java index 87188df3f..738883cd8 100644 --- a/sxp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperReactorImplTest.java +++ b/sxp-mapper/src/test/java/org/opendaylight/groupbasedpolicy/sxp/mapper/impl/SxpMapperReactorImplTest.java @@ -7,8 +7,6 @@ */ package org.opendaylight.groupbasedpolicy.sxp.mapper.impl; -import com.google.common.base.Optional; -import com.google.common.util.concurrent.Futures; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -22,9 +20,9 @@ import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.BaseEndpointService; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.RegisterEndpointInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoints.rev160427.endpoints.address.endpoints.by.containment.AddressEndpoint; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoints.address.endpoints.AddressEndpoint; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointForwardingTemplateBySubnet; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointPolicyTemplateBySgt; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.endpoint.forwarding.template.by.subnet.NetworkContainment; @@ -32,6 +30,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.mast import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; +import com.google.common.base.Optional; +import com.google.common.util.concurrent.Futures; + /** * Test for {@link SxpMapperReactorImpl}. */ -- 2.36.6