*/
package org.opendaylight.protocol.bgp.rib.impl;
+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.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;
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 routeKeyKeaf = new NodeIdentifier(PREFIX_QNAME);
+ private final NodeIdentifier routeKeyLeaf = new NodeIdentifier(PREFIX_QNAME);
private IPv6RIBSupport() {
super(Ipv6RoutesCase.class, Ipv6Routes.class, Ipv6Route.class);
@Override
protected NodeIdentifier routeKeyLeafIdentifier() {
- return routeKeyKeaf;
+ return this.routeKeyLeaf;
}
@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();
+ }
}