Rework MVPN Routes Model as workaround for MDSAL-310 47/72247/2
authorClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Thu, 24 May 2018 12:23:37 +0000 (14:23 +0200)
committerClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Fri, 25 May 2018 06:41:24 +0000 (08:41 +0200)
JIRA: BGPCEP-396
Change-Id: Ia56252bf08593b35bcda56580baef6293ceb3d84
Signed-off-by: Claudio D. Gasparini <claudio.gasparini@pantheon.tech>
19 files changed:
bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/AbstractMvpnRIBSupport.java
bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/BGPActivator.java
bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv4RIBSupport.java
bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupport.java
bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/attributes/PEDistinguisherLabelsAttributeHandler.java
bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/MvpnIpv4NlriHandler.java [moved from bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/MvpnNlriHandler.java with 64% similarity]
bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/MvpnIpv6NlriHandler.java [new file with mode: 0644]
bgp/mvpn/src/main/yang/bgp-mvpn-ipv4.yang
bgp/mvpn/src/main/yang/bgp-mvpn-ipv6.yang
bgp/mvpn/src/main/yang/bgp-mvpn.yang
bgp/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv4RIBSupportTest.java
bgp/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/MvpnIpv6RIBSupportTest.java
bgp/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/attributes/PMSITunnelAttributeHandlerTestUtil.java
bgp/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/InterASIPmsiADHandlerTest.java
bgp/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/IntraAsIPmsiADHandlerTest.java
bgp/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/LeafADHandlerTest.java
bgp/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/SPmsiADHandlerTest.java
bgp/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/SharedTreeJoinHandlerTest.java
bgp/mvpn/src/test/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/SourceActiveADHandlerTest.java

index 0b6dbe0417493978b7417f325f3e2982338d0703..e30079b281a8066b134dbd10e82f2c9fc8371719 100644 (file)
@@ -18,10 +18,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.McastVpnSubsequentAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.MvpnChoice;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.mvpn.routes.MvpnRoute;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.mvpn.routes.MvpnRouteBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.mvpn.routes.MvpnRouteKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoute;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRouteBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRouteKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AddressFamily;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -43,8 +42,8 @@ import org.slf4j.LoggerFactory;
  *
  * @author Claudio D. Gasparini
  */
-public abstract class AbstractMvpnRIBSupport<C extends Routes & DataObject>
-        extends AbstractRIBSupport<C, MvpnRoutes, MvpnRoute, MvpnRouteKey> {
+abstract class AbstractMvpnRIBSupport<C extends Routes & DataObject, S extends DataObject>
+        extends AbstractRIBSupport<C, S, MvpnRoute, MvpnRouteKey> {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractMvpnRIBSupport.class);
     private final NodeIdentifier nlriRoutesList;
     private final ImmutableCollection<Class<? extends DataObject>> cacheableNlriObjects;
@@ -64,10 +63,11 @@ public abstract class AbstractMvpnRIBSupport<C extends Routes & DataObject>
     AbstractMvpnRIBSupport(
             final BindingNormalizedNodeSerializer mappingService,
             final Class<C> cazeClass,
+            final Class<S> containerClass,
             final Class<? extends AddressFamily> afiClass,
             final QName destContainerQname,
             final QName destListQname) {
-        super(mappingService, cazeClass, MvpnRoutes.class, MvpnRoute.class, afiClass,
+        super(mappingService, cazeClass, containerClass, MvpnRoute.class, afiClass,
                 McastVpnSubsequentAddressFamily.class, destContainerQname);
         this.nlriRoutesList = NodeIdentifier.create(destListQname);
         this.cacheableNlriObjects = ImmutableSet.of(cazeClass);
index 9e05f76054c7a971d2c8c8d22ab6730307a26899..0c4b6deae424fd4703ebdfca31edb9d312c86a57 100644 (file)
@@ -18,13 +18,15 @@ import org.opendaylight.protocol.bgp.mvpn.impl.attributes.PMSITunnelAttributeHan
 import org.opendaylight.protocol.bgp.mvpn.impl.attributes.extended.community.SourceAS4OctectHandler;
 import org.opendaylight.protocol.bgp.mvpn.impl.attributes.extended.community.SourceASHandler;
 import org.opendaylight.protocol.bgp.mvpn.impl.attributes.extended.community.VrfRouteImportHandler;
-import org.opendaylight.protocol.bgp.mvpn.impl.nlri.MvpnNlriHandler;
+import org.opendaylight.protocol.bgp.mvpn.impl.nlri.MvpnIpv4NlriHandler;
+import org.opendaylight.protocol.bgp.mvpn.impl.nlri.MvpnIpv6NlriHandler;
 import org.opendaylight.protocol.bgp.parser.spi.AbstractBGPExtensionProviderActivator;
 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.routes.ipv4.MvpnRoutesIpv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.routes.ipv6.MvpnRoutesIpv6;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.McastVpnSubsequentAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.bgp.rib.route.attributes.extended.communities.extended.community.SourceAs4ExtendedCommunityCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.bgp.rib.route.attributes.extended.communities.extended.community.SourceAsExtendedCommunityCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv4AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv6AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.c.next.hop.Ipv4NextHopCase;
@@ -55,15 +57,18 @@ public final class BGPActivator extends AbstractBGPExtensionProviderActivator {
     private static void registerNlri(
             final BGPExtensionProviderContext context,
             final List<AutoCloseable> regs) {
-        final MvpnNlriHandler mvpnNlriHandler = new MvpnNlriHandler();
+        final MvpnIpv4NlriHandler mvpnIpv4NlriHandler = new MvpnIpv4NlriHandler();
         final Ipv4NextHopParserSerializer ipv4NextHopParser = new Ipv4NextHopParserSerializer();
-        final Ipv6NextHopParserSerializer ipv6NextHopParser = new Ipv6NextHopParserSerializer();
         regs.add(context.registerNlriParser(Ipv4AddressFamily.class, McastVpnSubsequentAddressFamily.class,
-                mvpnNlriHandler, ipv4NextHopParser, Ipv4NextHopCase.class));
-        regs.add(context.registerNlriParser(Ipv6AddressFamily.class, McastVpnSubsequentAddressFamily.class,
-                mvpnNlriHandler, ipv6NextHopParser, Ipv6NextHopCase.class));
-        regs.add(context.registerNlriSerializer(MvpnRoutes.class, mvpnNlriHandler));
+                mvpnIpv4NlriHandler, ipv4NextHopParser, Ipv4NextHopCase.class));
+        regs.add(context.registerNlriSerializer(MvpnRoutesIpv4.class, mvpnIpv4NlriHandler));
+
 
+        final MvpnIpv6NlriHandler mvpnIpv6NlriHandler = new MvpnIpv6NlriHandler();
+        final Ipv6NextHopParserSerializer ipv6NextHopParser = new Ipv6NextHopParserSerializer();
+        regs.add(context.registerNlriParser(Ipv6AddressFamily.class, McastVpnSubsequentAddressFamily.class,
+                mvpnIpv6NlriHandler, ipv6NextHopParser, Ipv6NextHopCase.class));
+        regs.add(context.registerNlriSerializer(MvpnRoutesIpv6.class, mvpnIpv6NlriHandler));
     }
 
     private static void registerExtendedCommunities(final BGPExtensionProviderContext context,
index e4e382ce4337c83d992dbdb2b408671ce18b6157..538e50df492074f0d5d5a6352cb9760708a26681 100644 (file)
@@ -24,12 +24,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.bgp.rib.rib.loc.rib.tables.routes.MvpnRoutesIpv4Case;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.bgp.rib.rib.loc.rib.tables.routes.MvpnRoutesIpv4CaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.destination.MvpnDestinationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.routes.ipv4.MvpnRoutesIpv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.routes.ipv4.MvpnRoutesIpv4Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv4AdvertizedCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.mvpn.ipv4.advertized._case.DestinationMvpn;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.mvpn.ipv4.advertized._case.DestinationMvpnBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv4WithdrawnCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv4AddressFamily;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
@@ -43,16 +43,17 @@ import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
  *
  * @author Claudio D. Gasparini
  */
-public final class MvpnIpv4RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesIpv4Case> {
-    private static final MvpnRoutes EMPTY_CONTAINER
-            = new MvpnRoutesBuilder().setMvpnRoute(Collections.emptyList()).build();
+final class MvpnIpv4RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesIpv4Case, MvpnRoutesIpv4> {
+    private static final MvpnRoutesIpv4 EMPTY_CONTAINER
+            = new MvpnRoutesIpv4Builder().setMvpnRoute(Collections.emptyList()).build();
     private static final MvpnRoutesIpv4Case EMPTY_CASE
-            = new MvpnRoutesIpv4CaseBuilder().setMvpnRoutes(EMPTY_CONTAINER).build();
+            = new MvpnRoutesIpv4CaseBuilder().setMvpnRoutesIpv4(EMPTY_CONTAINER).build();
     private static MvpnIpv4RIBSupport SINGLETON;
 
     private MvpnIpv4RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
         super(mappingService,
                 MvpnRoutesIpv4Case.class,
+                MvpnRoutesIpv4.class,
                 Ipv4AddressFamily.class,
                 DestinationMvpn.QNAME,
                 MvpnDestination.QNAME);
@@ -78,7 +79,6 @@ public final class MvpnIpv4RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesI
                 .build();
     }
 
-
     @Override
     protected DestinationType buildDestination(final Collection<MapEntryNode> routes) {
         return new DestinationMvpnIpv4AdvertizedCaseBuilder().setDestinationMvpn(
@@ -99,7 +99,7 @@ public final class MvpnIpv4RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesI
     }
 
     @Override
-    public MvpnRoutes emptyRoutesContainer() {
+    public MvpnRoutesIpv4 emptyRoutesContainer() {
         return EMPTY_CONTAINER;
     }
 
index 6afa7bee58dee7d9426fe2d0232110c527928676..e7766a319c782a9df2b25ee5faf3be76c7ae34de 100644 (file)
@@ -24,12 +24,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.bgp.rib.rib.loc.rib.tables.routes.MvpnRoutesIpv6Case;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.bgp.rib.rib.loc.rib.tables.routes.MvpnRoutesIpv6CaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.destination.MvpnDestinationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.routes.ipv6.MvpnRoutesIpv6;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.routes.ipv6.MvpnRoutesIpv6Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv6AdvertizedCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.mvpn.ipv6.advertized._case.DestinationMvpn;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.mvpn.ipv6.advertized._case.DestinationMvpnBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv6WithdrawnCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv6AddressFamily;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
@@ -43,16 +43,17 @@ import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
  *
  * @author Claudio D. Gasparini
  */
-public final class MvpnIpv6RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesIpv6Case> {
-    private static final MvpnRoutes EMPTY_CONTAINER = new MvpnRoutesBuilder()
+final class MvpnIpv6RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesIpv6Case, MvpnRoutesIpv6> {
+    private static final MvpnRoutesIpv6 EMPTY_CONTAINER = new MvpnRoutesIpv6Builder()
             .setMvpnRoute(Collections.emptyList()).build();
     private static final MvpnRoutesIpv6Case EMPTY_CASE =
-            new MvpnRoutesIpv6CaseBuilder().setMvpnRoutes(EMPTY_CONTAINER).build();
+            new MvpnRoutesIpv6CaseBuilder().setMvpnRoutesIpv6(EMPTY_CONTAINER).build();
     private static MvpnIpv6RIBSupport SINGLETON;
 
     private MvpnIpv6RIBSupport(final BindingNormalizedNodeSerializer mappingService) {
         super(mappingService,
                 MvpnRoutesIpv6Case.class,
+                MvpnRoutesIpv6.class,
                 Ipv6AddressFamily.class,
                 DestinationMvpn.QNAME,
                 MvpnDestination.QNAME);
@@ -99,7 +100,7 @@ public final class MvpnIpv6RIBSupport extends AbstractMvpnRIBSupport<MvpnRoutesI
     }
 
     @Override
-    public MvpnRoutes emptyRoutesContainer() {
+    public MvpnRoutesIpv6 emptyRoutesContainer() {
         return EMPTY_CONTAINER;
     }
 
index f9308038ab0862ae8389f2512a24aa82f74822ec..27d4799a75ec7ff7e0d9c3b0b53648154177bb1f 100644 (file)
@@ -40,7 +40,7 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
  */
 public final class PEDistinguisherLabelsAttributeHandler implements AttributeParser, AttributeSerializer {
 
-    private static int TYPE = 27;
+    private static final int TYPE = 27;
 
     public PEDistinguisherLabelsAttributeHandler() {
     }
similarity index 64%
rename from bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/MvpnNlriHandler.java
rename to bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/MvpnIpv4NlriHandler.java
index b1e8d5676ef1a6061d6b82001814948d2fdc11aa..f86124749ff1249e6693568a5b4cb02c66db23f2 100644 (file)
@@ -19,7 +19,6 @@ import org.opendaylight.protocol.bgp.parser.spi.PeerSpecificParserConstraint;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes2;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.destination.DestinationType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.MpReachNlriBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.MpUnreachNlriBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.reach.nlri.AdvertizedRoutes;
@@ -28,11 +27,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.unreach.nlri.WithdrawnRoutesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv4AdvertizedCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv4WithdrawnCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv6AdvertizedCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv6WithdrawnCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv4AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv6AddressFamily;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 
 /**
@@ -40,7 +34,7 @@ import org.opendaylight.yangtools.yang.binding.DataObject;
  *
  * @author Claudio D. Gasparini
  */
-public final class MvpnNlriHandler implements NlriParser, NlriSerializer {
+public final class MvpnIpv4NlriHandler implements NlriParser, NlriSerializer {
     @Override
     public void parseNlri(
             final ByteBuf nlri,
@@ -49,18 +43,10 @@ public final class MvpnNlriHandler implements NlriParser, NlriSerializer {
         if (!nlri.isReadable()) {
             return;
         }
-        final Class<? extends AddressFamily> afi = builder.getAfi();
         final boolean mPathSupported = MultiPathSupportUtil.isTableTypeSupported(constraint,
                 new BgpTableTypeImpl(builder.getAfi(), builder.getSafi()));
-
-        DestinationType dst = null;
-        if (afi == Ipv4AddressFamily.class) {
-            dst = Ipv4NlriHandler.parseIpv4ReachNlri(nlri, mPathSupported);
-        } else if (afi == Ipv6AddressFamily.class) {
-            dst = Ipv6NlriHandler.parseIpv6ReachNlri(nlri, mPathSupported);
-        }
-
-        builder.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(dst).build());
+        builder.setAdvertizedRoutes(new AdvertizedRoutesBuilder()
+                .setDestinationType(Ipv4NlriHandler.parseIpv4ReachNlri(nlri, mPathSupported)).build());
     }
 
 
@@ -72,18 +58,10 @@ public final class MvpnNlriHandler implements NlriParser, NlriSerializer {
         if (!nlri.isReadable()) {
             return;
         }
-        final Class<? extends AddressFamily> afi = builder.getAfi();
         final boolean mPathSupported = MultiPathSupportUtil.isTableTypeSupported(constraint,
                 new BgpTableTypeImpl(builder.getAfi(), builder.getSafi()));
-
-        DestinationType dst = null;
-        if (afi == Ipv4AddressFamily.class) {
-            dst = Ipv4NlriHandler.parseIpv4UnreachNlri(nlri, mPathSupported);
-        } else if (afi == Ipv6AddressFamily.class) {
-            dst = Ipv6NlriHandler.parseIpv6UnreachNlri(nlri, mPathSupported);
-        }
-
-        builder.setWithdrawnRoutes(new WithdrawnRoutesBuilder().setDestinationType(dst).build());
+        builder.setWithdrawnRoutes(new WithdrawnRoutesBuilder()
+                .setDestinationType(Ipv4NlriHandler.parseIpv4UnreachNlri(nlri, mPathSupported)).build());
     }
 
     @Override
@@ -100,26 +78,15 @@ public final class MvpnNlriHandler implements NlriParser, NlriSerializer {
                         = (DestinationMvpnIpv4AdvertizedCase) routes.getDestinationType();
                 Ipv4NlriHandler.serializeNlri(reach.getDestinationMvpn().getMvpnDestination(),
                         byteAggregator);
-            } else if (routes != null && routes.getDestinationType() instanceof DestinationMvpnIpv6AdvertizedCase) {
-                final DestinationMvpnIpv6AdvertizedCase reach
-                        = (DestinationMvpnIpv6AdvertizedCase) routes.getDestinationType();
-                Ipv6NlriHandler.serializeNlri(reach.getDestinationMvpn().getMvpnDestination(),
-                        byteAggregator);
             }
         } else if (pathAttributes2 != null) {
             final WithdrawnRoutes withdrawnRoutes = pathAttributes2.getMpUnreachNlri().getWithdrawnRoutes();
-            if (withdrawnRoutes != null && withdrawnRoutes.getDestinationType()
-                    instanceof DestinationMvpnIpv4WithdrawnCase) {
+            if (withdrawnRoutes != null
+                    && withdrawnRoutes.getDestinationType() instanceof DestinationMvpnIpv4WithdrawnCase) {
                 final DestinationMvpnIpv4WithdrawnCase reach
                         = (DestinationMvpnIpv4WithdrawnCase) withdrawnRoutes.getDestinationType();
                 Ipv4NlriHandler.serializeNlri(reach.getDestinationMvpn().getMvpnDestination(),
                         byteAggregator);
-            } else if (withdrawnRoutes != null && withdrawnRoutes.getDestinationType()
-                    instanceof DestinationMvpnIpv6WithdrawnCase) {
-                final DestinationMvpnIpv6WithdrawnCase reach
-                        = (DestinationMvpnIpv6WithdrawnCase) withdrawnRoutes.getDestinationType();
-                Ipv6NlriHandler.serializeNlri(reach.getDestinationMvpn().getMvpnDestination(),
-                        byteAggregator);
             }
         }
     }
diff --git a/bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/MvpnIpv6NlriHandler.java b/bgp/mvpn/src/main/java/org/opendaylight/protocol/bgp/mvpn/impl/nlri/MvpnIpv6NlriHandler.java
new file mode 100644 (file)
index 0000000..729e07b
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2018 AT&T Intellectual Property. 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.protocol.bgp.mvpn.impl.nlri;
+
+import com.google.common.base.Preconditions;
+import io.netty.buffer.ByteBuf;
+import org.opendaylight.protocol.bgp.parser.BGPParsingException;
+import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
+import org.opendaylight.protocol.bgp.parser.spi.MultiPathSupportUtil;
+import org.opendaylight.protocol.bgp.parser.spi.NlriParser;
+import org.opendaylight.protocol.bgp.parser.spi.NlriSerializer;
+import org.opendaylight.protocol.bgp.parser.spi.PeerSpecificParserConstraint;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.Attributes2;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.MpReachNlriBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.MpUnreachNlriBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.reach.nlri.AdvertizedRoutes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.reach.nlri.AdvertizedRoutesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.unreach.nlri.WithdrawnRoutes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.update.attributes.mp.unreach.nlri.WithdrawnRoutesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv6AdvertizedCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationMvpnIpv6WithdrawnCase;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+/**
+ * https://tools.ietf.org/html/rfc6514#section-4.
+ *
+ * @author Claudio D. Gasparini
+ */
+public final class MvpnIpv6NlriHandler implements NlriParser, NlriSerializer {
+    @Override
+    public void parseNlri(
+            final ByteBuf nlri,
+            final MpReachNlriBuilder builder,
+            final PeerSpecificParserConstraint constraint) throws BGPParsingException {
+        if (!nlri.isReadable()) {
+            return;
+        }
+        final boolean mPathSupported = MultiPathSupportUtil.isTableTypeSupported(constraint,
+                new BgpTableTypeImpl(builder.getAfi(), builder.getSafi()));
+
+        builder.setAdvertizedRoutes(new AdvertizedRoutesBuilder()
+                .setDestinationType(Ipv6NlriHandler.parseIpv6ReachNlri(nlri, mPathSupported)).build());
+    }
+
+
+    @Override
+    public void parseNlri(
+            final ByteBuf nlri,
+            final MpUnreachNlriBuilder builder,
+            final PeerSpecificParserConstraint constraint) throws BGPParsingException {
+        if (!nlri.isReadable()) {
+            return;
+        }
+        final boolean mPathSupported = MultiPathSupportUtil.isTableTypeSupported(constraint,
+                new BgpTableTypeImpl(builder.getAfi(), builder.getSafi()));
+        builder.setWithdrawnRoutes(new WithdrawnRoutesBuilder()
+                .setDestinationType(Ipv6NlriHandler.parseIpv6UnreachNlri(nlri, mPathSupported)).build());
+    }
+
+    @Override
+    public void serializeAttribute(final DataObject attribute, final ByteBuf byteAggregator) {
+        Preconditions.checkArgument(attribute instanceof Attributes,
+                "Attribute parameter is not a Attributes object");
+        final Attributes pathAttributes = (Attributes) attribute;
+        final Attributes1 pathAttributes1 = pathAttributes.getAugmentation(Attributes1.class);
+        final Attributes2 pathAttributes2 = pathAttributes.getAugmentation(Attributes2.class);
+        if (pathAttributes1 != null) {
+            final AdvertizedRoutes routes = pathAttributes1.getMpReachNlri().getAdvertizedRoutes();
+            if (routes != null && routes.getDestinationType() instanceof DestinationMvpnIpv6AdvertizedCase) {
+                final DestinationMvpnIpv6AdvertizedCase reach
+                        = (DestinationMvpnIpv6AdvertizedCase) routes.getDestinationType();
+                Ipv6NlriHandler.serializeNlri(reach.getDestinationMvpn().getMvpnDestination(),
+                        byteAggregator);
+            }
+        } else if (pathAttributes2 != null) {
+            final WithdrawnRoutes withdrawnRoutes = pathAttributes2.getMpUnreachNlri().getWithdrawnRoutes();
+            if (withdrawnRoutes != null
+                    && withdrawnRoutes.getDestinationType() instanceof DestinationMvpnIpv6WithdrawnCase) {
+                final DestinationMvpnIpv6WithdrawnCase reach
+                        = (DestinationMvpnIpv6WithdrawnCase) withdrawnRoutes.getDestinationType();
+                Ipv6NlriHandler.serializeNlri(reach.getDestinationMvpn().getMvpnDestination(),
+                        byteAggregator);
+            }
+        }
+    }
+}
index d5425aab2dc534bffa20bb097ed460ee85efa0a0..3e10e1d8eb105de4c0bdb0db0502e0a7a80bc50a 100644 (file)
@@ -20,6 +20,12 @@ module bgp-mvpn-ipv4 {
         }
     }
 
+    grouping mvpn-routes-ipv4 {
+        container mvpn-routes-ipv4 {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
     augment "/bgp-msg:update/bgp-msg:attributes/bgp-mp:mp-reach-nlri/bgp-mp:advertized-routes/bgp-mp:destination-type" {
         case destination-mvpn-ipv4-advertized-case {
             container destination-mvpn {
@@ -38,43 +44,43 @@ module bgp-mvpn-ipv4 {
 
     augment "/bgp-rib:application-rib/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv4-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv4;
         }
     }
 
     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:loc-rib/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv4-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv4;
         }
     }
 
     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-in/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv4-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv4;
         }
     }
 
     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:effective-rib-in/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv4-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv4;
         }
     }
 
     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-out/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv4-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv4;
         }
     }
 
     augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:pre-policy-rib/bmp-mon:tables/bmp-mon:routes" {
         case mvpn-routes-ipv4-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv4;
         }
     }
 
     augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:post-policy-rib/bmp-mon:tables/bmp-mon:routes" {
         case mvpn-routes-ipv4-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv4;
         }
     }
 }
\ No newline at end of file
index b6ddebd2a65378345376cc41976451231aa2f0e8..b0c619550736e73681e2033f11daaba6a262a768 100644 (file)
@@ -20,6 +20,12 @@ module bgp-mvpn-ipv6 {
         }
     }
 
+    grouping mvpn-routes-ipv6 {
+        container mvpn-routes-ipv6 {
+            uses mvpn:mvpn-routes;
+        }
+    }
+
     augment "/bgp-msg:update/bgp-msg:attributes/bgp-mp:mp-reach-nlri/bgp-mp:advertized-routes/bgp-mp:destination-type" {
         case destination-mvpn-ipv6-advertized-case {
             container destination-mvpn {
@@ -38,43 +44,43 @@ module bgp-mvpn-ipv6 {
 
     augment "/bgp-rib:application-rib/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv6-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv6;
         }
     }
 
     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:loc-rib/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv6-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv6;
         }
     }
 
     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-in/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv6-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv6;
         }
     }
 
     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:effective-rib-in/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv6-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv6;
         }
     }
 
     augment "/bgp-rib:bgp-rib/bgp-rib:rib/bgp-rib:peer/bgp-rib:adj-rib-out/bgp-rib:tables/bgp-rib:routes" {
         case mvpn-routes-ipv6-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv6;
         }
     }
 
     augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:pre-policy-rib/bmp-mon:tables/bmp-mon:routes" {
         case mvpn-routes-ipv6-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv6;
         }
     }
 
     augment "/bmp-mon:bmp-monitor/bmp-mon:monitor/bmp-mon:router/bmp-mon:peer/bmp-mon:post-policy-rib/bmp-mon:tables/bmp-mon:routes" {
         case mvpn-routes-ipv6-case {
-            uses mvpn:mvpn-routes;
+            uses mvpn-routes-ipv6;
         }
     }
 }
\ No newline at end of file
index 6c3e9b9f2a8911f2909814bd826a1ce5221f8dcf..095e1eaeb8413f48dec2e59b96b654c6d567b431 100644 (file)
@@ -267,11 +267,9 @@ module bgp-mvpn {
     }
 
     grouping mvpn-routes {
-        container mvpn-routes {
-            list mvpn-route {
-                key "route-key path-id";
-                uses mvpn-bgp-rib-route;
-            }
+        list mvpn-route {
+            key "route-key path-id";
+            uses mvpn-bgp-rib-route;
         }
     }
 }
\ No newline at end of file
index 69cb37c1a71998252eae598a4729c895a64ea4d6..d60634d61ec028def6a39295bfe3cf2160143993 100644 (file)
@@ -17,7 +17,6 @@ import com.google.common.collect.ImmutableSet;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBSupportTest;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
@@ -29,6 +28,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.bgp.rib.rib.loc.rib.tables.routes.MvpnRoutesIpv4CaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.destination.MvpnDestination;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.destination.MvpnDestinationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.routes.ipv4.MvpnRoutesIpv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.mvpn.routes.ipv4.MvpnRoutesIpv4Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv4AdvertizedCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv4AdvertizedCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv4.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.mvpn.ipv4.advertized._case.DestinationMvpnBuilder;
@@ -37,11 +38,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.inter.as.i.pmsi.a.d.grouping.InterAsIPmsiADBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.MvpnChoice;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.mvpn.choice.InterAsIPmsiADCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.mvpn.routes.MvpnRoute;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.mvpn.routes.MvpnRouteBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.mvpn.routes.MvpnRouteKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoute;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRouteBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRouteKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Attributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RdIpv4;
@@ -55,18 +54,23 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
 
-@Ignore
 public class MvpnIpv4RIBSupportTest extends AbstractRIBSupportTest<MvpnRoute> {
-    private static final MvpnRouteKey ROUTE_KEY;
-    private static final MvpnRoute ROUTE;
-    private static final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn
-            .routes.MvpnRoutes MVPN_ROUTES;
+    private static final PathId PATH_ID = new PathId(0L);
     private static final MvpnChoice MVPN = new InterAsIPmsiADCaseBuilder().setInterAsIPmsiAD(
             new InterAsIPmsiADBuilder()
                     .setSourceAs(new AsNumber(1L))
                     .setRouteDistinguisher(new RouteDistinguisher(new RdIpv4("1.2.3.4:258")))
                     .build()).build();
-    private static final PathId PATH_ID = new PathId(0L);
+    private static final MvpnRouteKey ROUTE_KEY = new MvpnRouteKey(PATH_ID, "AgwAAQECAwQBAgAAAAE=");
+    private static final MvpnRoute ROUTE = new MvpnRouteBuilder()
+            .setRouteKey(ROUTE_KEY.getRouteKey())
+            .setPathId(ROUTE_KEY.getPathId())
+            .setAttributes(ATTRIBUTES)
+            .setMvpnChoice(MVPN)
+            .build();
+    private static final MvpnRoutesIpv4 MVPN_ROUTES
+            = new MvpnRoutesIpv4Builder().setMvpnRoute(Collections.singletonList(ROUTE)).build();
+
     private static final MvpnDestination MVPN_DESTINATION = new MvpnDestinationBuilder()
             .setMvpnChoice(MVPN)
             .setPathId(PATH_ID)
@@ -80,17 +84,6 @@ public class MvpnIpv4RIBSupportTest extends AbstractRIBSupportTest<MvpnRoute> {
                     .ipv4.withdrawn._case.DestinationMvpnBuilder()
                     .setMvpnDestination(Collections.singletonList(MVPN_DESTINATION)).build()).build();
 
-    static {
-        ROUTE_KEY = new MvpnRouteKey(PATH_ID, "AgwAAQECAwQBAgAAAAE=");
-        ROUTE = new MvpnRouteBuilder()
-                .setRouteKey(ROUTE_KEY.getRouteKey())
-                .setPathId(ROUTE_KEY.getPathId())
-                .setAttributes(ATTRIBUTES)
-                .setMvpnChoice(MVPN)
-                .build();
-        MVPN_ROUTES = new MvpnRoutesBuilder().setMvpnRoute(Collections.singletonList(ROUTE)).build();
-    }
-
     private MvpnIpv4RIBSupport ribSupport;
 
     @Override
@@ -119,7 +112,7 @@ public class MvpnIpv4RIBSupportTest extends AbstractRIBSupportTest<MvpnRoute> {
 
     @Test
     public void testEmptyRoute() {
-        final Routes empty = new MvpnRoutesIpv4CaseBuilder().setMvpnRoutes(new MvpnRoutesBuilder()
+        final Routes empty = new MvpnRoutesIpv4CaseBuilder().setMvpnRoutesIpv4(new MvpnRoutesIpv4Builder()
                 .setMvpnRoute(Collections.emptyList()).build()).build();
         final ChoiceNode expected = createRoutes(empty);
         assertEquals(expected, this.ribSupport.emptyRoutes());
@@ -181,7 +174,7 @@ public class MvpnIpv4RIBSupportTest extends AbstractRIBSupportTest<MvpnRoute> {
 
     @Test
     public void testRoutesContainerClass() {
-        assertEquals(MvpnRoutes.class, this.ribSupport.routesContainerClass());
+        assertEquals(MvpnRoutesIpv4.class, this.ribSupport.routesContainerClass());
     }
 
     @Test
@@ -197,11 +190,11 @@ public class MvpnIpv4RIBSupportTest extends AbstractRIBSupportTest<MvpnRoute> {
         assertTrue(this.ribSupport.changedRoutes(tree).isEmpty());
 
         final Routes emptyRoutes
-                = new MvpnRoutesIpv4CaseBuilder().setMvpnRoutes(new MvpnRoutesBuilder().build()).build();
+                = new MvpnRoutesIpv4CaseBuilder().setMvpnRoutesIpv4(new MvpnRoutesIpv4Builder().build()).build();
         tree = DataTreeCandidates.fromNormalizedNode(getRoutePath(), createRoutes(emptyRoutes)).getRootNode();
         assertTrue(this.ribSupport.changedRoutes(tree).isEmpty());
 
-        final Routes routes = new MvpnRoutesIpv4CaseBuilder().setMvpnRoutes(MVPN_ROUTES).build();
+        final Routes routes = new MvpnRoutesIpv4CaseBuilder().setMvpnRoutesIpv4(MVPN_ROUTES).build();
         tree = DataTreeCandidates.fromNormalizedNode(getRoutePath(), createRoutes(routes)).getRootNode();
         final Collection<DataTreeCandidateNode> result = this.ribSupport.changedRoutes(tree);
         assertFalse(result.isEmpty());
index a045d7cbbc307c04648946daa48cb3012a4d78ac..6d6ec87c07f3ddfe16266a282e8bf1871b4f2338 100644 (file)
@@ -14,14 +14,10 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import com.google.common.collect.ImmutableSet;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
 import java.util.Collection;
 import java.util.Collections;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBSupportTest;
-import org.opendaylight.protocol.util.ByteArray;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.PathId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.Update;
@@ -31,6 +27,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.bgp.rib.rib.loc.rib.tables.routes.MvpnRoutesIpv6CaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.destination.MvpnDestination;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.destination.MvpnDestinationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.routes.ipv6.MvpnRoutesIpv6;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.mvpn.routes.ipv6.MvpnRoutesIpv6Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv6AdvertizedCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationMvpnIpv6AdvertizedCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.ipv6.rev180417.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.mvpn.ipv6.advertized._case.DestinationMvpnBuilder;
@@ -39,11 +37,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.inter.as.i.pmsi.a.d.grouping.InterAsIPmsiADBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.MvpnChoice;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.mvpn.choice.InterAsIPmsiADCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoutesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.mvpn.routes.MvpnRoute;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.mvpn.routes.MvpnRouteBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.mvpn.routes.MvpnRouteKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRoute;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRouteBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn.routes.MvpnRouteKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Attributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RdIpv4;
@@ -59,18 +55,22 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates;
 
-@Ignore
 public final class MvpnIpv6RIBSupportTest extends AbstractRIBSupportTest<MvpnRoute> {
-    private static final MvpnRouteKey ROUTE_KEY;
-    private static final MvpnRoute ROUTE;
-    private static final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mvpn.rev180417.mvpn
-            .routes.MvpnRoutes MVPN_ROUTES;
+    private static final PathId PATH_ID = new PathId(0L);
     private static final MvpnChoice MVPN = new InterAsIPmsiADCaseBuilder().setInterAsIPmsiAD(
             new InterAsIPmsiADBuilder()
                     .setSourceAs(new AsNumber(1L))
                     .setRouteDistinguisher(new RouteDistinguisher(new RdIpv4("1.2.3.4:258")))
                     .build()).build();
-    private static final PathId PATH_ID = new PathId(0L);
+    private static final MvpnRouteKey ROUTE_KEY = new MvpnRouteKey(PATH_ID, "AgwAAQECAwQBAgAAAAE=");
+    private static final MvpnRoute ROUTE = new MvpnRouteBuilder()
+                .setRouteKey(ROUTE_KEY.getRouteKey())
+            .setPathId(ROUTE_KEY.getPathId())
+            .setAttributes(ATTRIBUTES)
+                .setMvpnChoice(MVPN)
+                .build();
+    private static final MvpnRoutesIpv6 MVPN_ROUTES
+            = new MvpnRoutesIpv6Builder().setMvpnRoute(Collections.singletonList(ROUTE)).build();
     private static final MvpnDestination MVPN_DESTINATION = new MvpnDestinationBuilder()
             .setMvpnChoice(MVPN)
             .setPathId(PATH_ID)
@@ -84,18 +84,6 @@ public final class MvpnIpv6RIBSupportTest extends AbstractRIBSupportTest<MvpnRou
                     .ipv6.withdrawn._case.DestinationMvpnBuilder()
                     .setMvpnDestination(Collections.singletonList(MVPN_DESTINATION)).build()).build();
 
-    static {
-        final ByteBuf buffer = Unpooled.buffer();
-        ROUTE_KEY = new MvpnRouteKey(PATH_ID, ByteArray.encodeBase64(buffer));
-        ROUTE = new MvpnRouteBuilder()
-                .setRouteKey(ROUTE_KEY.getRouteKey())
-                .setPathId(ROUTE_KEY.getPathId())
-                .setAttributes(ATTRIBUTES)
-                .setMvpnChoice(MVPN)
-                .build();
-        MVPN_ROUTES = new MvpnRoutesBuilder().setMvpnRoute(Collections.singletonList(ROUTE)).build();
-    }
-
     private MvpnIpv6RIBSupport ribSupport;
 
     @Override
@@ -123,7 +111,7 @@ public final class MvpnIpv6RIBSupportTest extends AbstractRIBSupportTest<MvpnRou
 
     @Test
     public void testEmptyRoute() {
-        final Routes empty = new MvpnRoutesIpv6CaseBuilder().setMvpnRoutes(new MvpnRoutesBuilder()
+        final Routes empty = new MvpnRoutesIpv6CaseBuilder().setMvpnRoutesIpv6(new MvpnRoutesIpv6Builder()
                 .setMvpnRoute(Collections.emptyList()).build()).build();
         final ChoiceNode expected = createRoutes(empty);
         assertEquals(expected, this.ribSupport.emptyRoutes());
@@ -185,7 +173,7 @@ public final class MvpnIpv6RIBSupportTest extends AbstractRIBSupportTest<MvpnRou
 
     @Test
     public void testRoutesContainerClass() {
-        assertEquals(MvpnRoutes.class, this.ribSupport.routesContainerClass());
+        assertEquals(MvpnRoutesIpv6.class, this.ribSupport.routesContainerClass());
     }
 
     @Test
@@ -201,11 +189,11 @@ public final class MvpnIpv6RIBSupportTest extends AbstractRIBSupportTest<MvpnRou
         assertTrue(this.ribSupport.changedRoutes(tree).isEmpty());
 
         final Routes emptyRoutes
-                = new MvpnRoutesIpv6CaseBuilder().setMvpnRoutes(new MvpnRoutesBuilder().build()).build();
+                = new MvpnRoutesIpv6CaseBuilder().setMvpnRoutesIpv6(new MvpnRoutesIpv6Builder().build()).build();
         tree = DataTreeCandidates.fromNormalizedNode(getRoutePath(), createRoutes(emptyRoutes)).getRootNode();
         assertTrue(this.ribSupport.changedRoutes(tree).isEmpty());
 
-        final Routes routes = new MvpnRoutesIpv6CaseBuilder().setMvpnRoutes(MVPN_ROUTES).build();
+        final Routes routes = new MvpnRoutesIpv6CaseBuilder().setMvpnRoutesIpv6(MVPN_ROUTES).build();
         tree = DataTreeCandidates.fromNormalizedNode(getRoutePath(), createRoutes(routes)).getRootNode();
         final Collection<DataTreeCandidateNode> result = this.ribSupport.changedRoutes(tree);
         assertFalse(result.isEmpty());
index 12bfe58ed6eaf71a41566362a00a60c42a59789d..4ae94ea46fbffeb74c0de311585f1e48c6d2d4ad 100644 (file)
@@ -37,8 +37,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pmsi.tun
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pmsi.tunnel.rev180329.pmsi.tunnel.pmsi.tunnel.tunnel.identifier.RsvpTeP2mpLspBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pmsi.tunnel.rev180329.pmsi.tunnel.pmsi.tunnel.tunnel.identifier.mldp.p2mp.lsp.mldp.p2mp.lsp.OpaqueValue;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pmsi.tunnel.rev180329.pmsi.tunnel.pmsi.tunnel.tunnel.identifier.mldp.p2mp.lsp.mldp.p2mp.lsp.OpaqueValueBuilder;
-import org.opendaylight.yangtools.yang.binding.DataContainer;
-import org.opendaylight.yangtools.yang.binding.DataObject;
 
 final class PMSITunnelAttributeHandlerTestUtil {
     private static final MplsLabel MPLS_LABEL = new MplsLabel(24001L);
@@ -411,11 +409,4 @@ final class PMSITunnelAttributeHandlerTestUtil {
     private interface NonSupportedAddressFamily extends AddressFamily {
 
     }
-
-    static class MockTunnelIdentifier implements TunnelIdentifier, DataObject {
-        @Override
-        public Class<? extends DataContainer> getImplementedInterface() {
-            return MockTunnelIdentifier.class;
-        }
-    }
 }
index 42c40dab54b6d07a6991a4dee08c6527521c883e..74c127f4f1e3008c97087f935250f8f9f5b2bc29 100644 (file)
@@ -42,7 +42,7 @@ public final class InterASIPmsiADHandlerTest {
                     .setRouteDistinguisher(new RouteDistinguisher(new RdIpv4("1.2.3.4:258")))
                     .build()
             ).build();
-    private InterASIPmsiADHandler handler = new InterASIPmsiADHandler();
+    private final InterASIPmsiADHandler handler = new InterASIPmsiADHandler();
 
 
     @Test
index bc174c128ecdc9c0f99f8b2d8405fa9b79f87165..cd6dcdc2030c9bdd01861c026d1c83d5ca97ba4f 100644 (file)
@@ -39,7 +39,7 @@ public class IntraAsIPmsiADHandlerTest {
                     .setRouteDistinguisher(new RouteDistinguisher(new RdIpv4("1.2.3.4:258")))
                     .setOrigRouteIp(new IpAddress(new Ipv4Address("1.0.0.1")))
                     .build()).build();
-    private IntraAsIPmsiADHandler handler = new IntraAsIPmsiADHandler();
+    private final IntraAsIPmsiADHandler handler = new IntraAsIPmsiADHandler();
 
     @Test
     public void testIntraASIPmsiADParser() {
index e08d614b0932f664f0e12c199b5fb443ee8f16ec..8073806b108d2d1bae0ee2772a399b82c063fc55 100644 (file)
@@ -57,7 +57,7 @@ public class LeafADHandlerTest {
                     ).build())
             .setOrigRouteIp(new IpAddress(new Ipv4Address("1.0.0.1"))).build())
             .build();
-    private LeafADHandler handler = new LeafADHandler();
+    private final LeafADHandler handler = new LeafADHandler();
 
     @Before
     public void setUp() {
index b4594d9ac7522ba205ca8b7ca49b12768e614129..c1c17d0059e5d0585d91bc21028cb8c2b92eecbb 100644 (file)
@@ -49,7 +49,7 @@ public final class SPmsiADHandlerTest {
                             .setCGAddress(new IpAddress(new Ipv4Address("12.0.0.12"))).build()).build())
                     .setOrigRouteIp(new IpAddress(new Ipv4Address("1.0.0.1")))
                     .build()).build();
-    private SPmsiADHandler handler = new SPmsiADHandler();
+    private final SPmsiADHandler handler = new SPmsiADHandler();
 
     @Test
     public void testIntraASIPmsiADParser() {
index 31040f069f50055f22473ebb1f772a6f00d1334e..a6df6917104b0715926bdf1dac64c00c371289cb 100644 (file)
@@ -53,7 +53,7 @@ public final class SharedTreeJoinHandlerTest {
                                     new CGAddressBuilder()
                                             .setCGAddress(new IpAddress(new Ipv4Address("2.0.0.2")))
                                             .build()).build()).build()).build()).build();
-    private SharedTreeJoinHandler handler = new SharedTreeJoinHandler();
+    private final SharedTreeJoinHandler handler = new SharedTreeJoinHandler();
 
     @Test
     public void testParser() {
index 21c774640f22ef215fc4394865c2b2f18d8caf9a..83aa6799fd08af3116b802cfcbe6ec304f2f2e8a 100644 (file)
@@ -44,7 +44,7 @@ public final class SourceActiveADHandlerTest {
                     .setMulticastGroup(new IpAddress(new Ipv4Address("2.0.0.2")))
                     .build())
             .build();
-    private SourceActiveADHandler handler = new SourceActiveADHandler();
+    private final SourceActiveADHandler handler = new SourceActiveADHandler();
 
     @Test
     public void testParser() {