*/
package org.opendaylight.protocol.bgp.rib.impl;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.destination.destination.type.DestinationIpv6Case;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.bgp.rib.rib.loc.rib.tables.routes.Ipv6RoutesCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv6.prefixes.DestinationIpv6;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv6.prefixes.DestinationIpv6Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv6.prefixes.destination.ipv6.Ipv6Prefixes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv6.prefixes.destination.ipv6.Ipv6PrefixesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv6.routes.Ipv6Routes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv6.routes.ipv6.routes.Ipv6Route;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationIpv6CaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlriBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlriBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.mp.reach.nlri.AdvertizedRoutesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.tables.Routes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.tables.routes.ipv6.routes._case.Ipv6Routes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.tables.routes.ipv6.routes._case.ipv6.routes.Ipv6Route;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.CNextHop;
+import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
* Class supporting IPv6 unicast RIBs.
*/
final class IPv6RIBSupport extends AbstractIPRIBSupport {
+ private final static QName PREFIX_QNAME = QName.cachedReference(QName.create(Ipv6Route.QNAME, "prefix"));
private static final IPv6RIBSupport SINGLETON = new IPv6RIBSupport();
private final ChoiceNode emptyRoutes = Builders.choiceBuilder()
.withNodeIdentifier(new NodeIdentifier(Routes.QNAME))
.addChild(Builders.containerBuilder()
.withNodeIdentifier(new NodeIdentifier(Ipv6Routes.QNAME))
.withChild(ImmutableNodes.mapNodeBuilder(Ipv6Route.QNAME).build()).build()).build();
- private final NodeIdentifier destination = new NodeIdentifier(DestinationIpv6Case.QNAME);
+ private final NodeIdentifier destination = new NodeIdentifier(DestinationIpv6.QNAME);
private final NodeIdentifier route = new NodeIdentifier(Ipv6Route.QNAME);
+ private final NodeIdentifier nlriRoutesList = new NodeIdentifier(Ipv6Prefixes.QNAME);
+ private final NodeIdentifier routeKeyLeaf = new NodeIdentifier(PREFIX_QNAME);
private IPv6RIBSupport() {
- super(Ipv6Routes.QNAME);
+ super(Ipv6RoutesCase.class, Ipv6Routes.class, Ipv6Route.class);
}
static IPv6RIBSupport getInstance() {
@Override
public ChoiceNode emptyRoutes() {
- return emptyRoutes;
+ return this.emptyRoutes;
}
@Override
protected NodeIdentifier destinationContainerIdentifier() {
- return destination;
+ return this.destination;
}
@Override
protected NodeIdentifier routeIdentifier() {
- return route;
+ return this.route;
+ }
+
+ @Override
+ protected NodeIdentifier routeKeyLeafIdentifier() {
+ return this.routeKeyLeaf;
+ }
+
+ @Override
+ protected NodeIdentifier nlriRoutesListIdentifier() {
+ return this.nlriRoutesList;
+ }
+
+ @Override
+ protected QName keyLeafQName() {
+ return PREFIX_QNAME;
+ }
+
+ @Override
+ protected QName routeQName() {
+ return Ipv6Route.QNAME;
+ }
+
+ private List<Ipv6Prefixes> buildPrefixes(final Collection<MapEntryNode> routes) {
+ final List<Ipv6Prefixes> ret = new ArrayList<>(routes.size());
+ for (MapEntryNode route : routes) {
+ final String prefix = (String) route.getChild(this.routeKeyLeaf).get().getValue();
+ ret.add(new Ipv6PrefixesBuilder().setPrefix(new Ipv6Prefix(prefix)).build());
+ }
+ return ret;
+ }
+
+ @Override
+ protected MpReachNlri buildReach(final Collection<MapEntryNode> routes, final CNextHop hop) {
+ final List<Ipv6Prefixes> prefs = buildPrefixes(routes);
+
+ final MpReachNlriBuilder mb = new MpReachNlriBuilder();
+ mb.setAfi(Ipv6AddressFamily.class);
+ mb.setSafi(UnicastSubsequentAddressFamily.class);
+ mb.setCNextHop(hop);
+ mb.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(
+ new DestinationIpv6CaseBuilder().setDestinationIpv6(
+ new DestinationIpv6Builder().setIpv6Prefixes(prefs).build()).build()).build());
+ return mb.build();
+ }
+
+ @Override
+ protected MpUnreachNlri buildUnreach(final Collection<MapEntryNode> routes) {
+ final List<Ipv6Prefixes> prefs = buildPrefixes(routes);
+
+ final MpUnreachNlriBuilder mb = new MpUnreachNlriBuilder();
+ mb.setAfi(Ipv6AddressFamily.class);
+ mb.setSafi(UnicastSubsequentAddressFamily.class);
+
+ // TODO Auto-generated method stub
+ return mb.build();
}
}