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;
*
* @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;
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);
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;
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,
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;
*
* @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);
.build();
}
-
@Override
protected DestinationType buildDestination(final Collection<MapEntryNode> routes) {
return new DestinationMvpnIpv4AdvertizedCaseBuilder().setDestinationMvpn(
}
@Override
- public MvpnRoutes emptyRoutesContainer() {
+ public MvpnRoutesIpv4 emptyRoutesContainer() {
return EMPTY_CONTAINER;
}
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;
*
* @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);
}
@Override
- public MvpnRoutes emptyRoutesContainer() {
+ public MvpnRoutesIpv6 emptyRoutesContainer() {
return EMPTY_CONTAINER;
}
*/
public final class PEDistinguisherLabelsAttributeHandler implements AttributeParser, AttributeSerializer {
- private static int TYPE = 27;
+ private static final int TYPE = 27;
public PEDistinguisherLabelsAttributeHandler() {
}
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;
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;
/**
*
* @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,
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());
}
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
= (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);
}
}
}
--- /dev/null
+/*
+ * 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);
+ }
+ }
+ }
+}
}
}
+ 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 {
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
}
}
+ 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 {
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
}
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
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;
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;
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;
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)
.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
@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());
@Test
public void testRoutesContainerClass() {
- assertEquals(MvpnRoutes.class, this.ribSupport.routesContainerClass());
+ assertEquals(MvpnRoutesIpv4.class, this.ribSupport.routesContainerClass());
}
@Test
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());
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;
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;
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;
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)
.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
@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());
@Test
public void testRoutesContainerClass() {
- assertEquals(MvpnRoutes.class, this.ribSupport.routesContainerClass());
+ assertEquals(MvpnRoutesIpv6.class, this.ribSupport.routesContainerClass());
}
@Test
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());
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);
private interface NonSupportedAddressFamily extends AddressFamily {
}
-
- static class MockTunnelIdentifier implements TunnelIdentifier, DataObject {
- @Override
- public Class<? extends DataContainer> getImplementedInterface() {
- return MockTunnelIdentifier.class;
- }
- }
}
.setRouteDistinguisher(new RouteDistinguisher(new RdIpv4("1.2.3.4:258")))
.build()
).build();
- private InterASIPmsiADHandler handler = new InterASIPmsiADHandler();
+ private final InterASIPmsiADHandler handler = new InterASIPmsiADHandler();
@Test
.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() {
).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() {
.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() {
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() {
.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() {