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.multiprotocol.rev130919.update.attributes.mp.unreach.nlri.WithdrawnRoutesBuilder;
import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// FIXME: BUG-2571 : create human-readable route key, e.g : "all packets to 10.0.1/24 from 192/8 and port {range [137, 139] or 8080}"
return "";
}
+
+ public static Flowspec extractFlowspec(final MapEntryNode route) {
+ // FIXME: BUG-2571 : finish this
+ return new FlowspecBuilder().build();
+ }
}
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableSet;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.List;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBSupport;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.FlowspecRoutes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.FlowspecSubsequentAddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.bgp.rib.rib.loc.rib.tables.routes.FlowspecRoutesCase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.flowspec.destination.Flowspec;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.flowspec.routes.flowspec.routes.FlowspecRoute;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.update.attributes.mp.reach.nlri.advertized.routes.destination.type.DestinationFlowspecCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.flowspec._case.DestinationFlowspec;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.update.attributes.mp.reach.nlri.advertized.routes.destination.type.destination.flowspec._case.DestinationFlowspecBuilder;
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.multiprotocol.rev130919.update.attributes.mp.unreach.nlri.WithdrawnRoutesBuilder;
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.Ipv4AddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.CNextHop;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.common.QName;
}
@Override
- protected MpReachNlri buildReach(final Collection<MapEntryNode> route, final CNextHop hop) {
- // TODO Auto-generated method stub
- return null;
+ protected MpReachNlri buildReach(final Collection<MapEntryNode> routes, final CNextHop hop) {
+ final MpReachNlriBuilder mb = new MpReachNlriBuilder();
+ mb.setAfi(Ipv4AddressFamily.class);
+ mb.setSafi(FlowspecSubsequentAddressFamily.class);
+ mb.setCNextHop(hop);
+
+ final List<Flowspec> dests = new ArrayList<>(routes.size());
+ for (final MapEntryNode route : routes) {
+ dests.add(FSNlriParser.extractFlowspec(route));
+ }
+ mb.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(
+ new DestinationFlowspecCaseBuilder().setDestinationFlowspec(
+ new DestinationFlowspecBuilder().setFlowspec(dests).build()).build()).build());
+ return mb.build();
}
@Override
protected MpUnreachNlri buildUnreach(final Collection<MapEntryNode> routes) {
- // TODO Auto-generated method stub
- return null;
+ final MpUnreachNlriBuilder mb = new MpUnreachNlriBuilder();
+ mb.setAfi(Ipv4AddressFamily.class);
+ mb.setSafi(FlowspecSubsequentAddressFamily.class);
+
+ final List<Flowspec> dests = new ArrayList<>(routes.size());
+ for (final MapEntryNode route : routes) {
+ dests.add(FSNlriParser.extractFlowspec(route));
+ }
+ mb.setWithdrawnRoutes(new WithdrawnRoutesBuilder().setDestinationType(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationFlowspecCaseBuilder().setDestinationFlowspec(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.destination.flowspec._case.DestinationFlowspecBuilder().setFlowspec(dests).build()).build()).build());
+ return mb.build();
}
}
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.multiprotocol.rev130919.update.attributes.mp.unreach.nlri.WithdrawnRoutesBuilder;
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.next.hop.CNextHop;
import org.opendaylight.yangtools.yang.binding.DataObject;
mb.setCNextHop(hop);
final List<CLinkstateDestination> dests = new ArrayList<>(routes.size());
- for (MapEntryNode route : routes) {
- dests.add(LinkstateNlriParser.setLinkstateDestination(route));
+ for (final MapEntryNode route : routes) {
+ dests.add(LinkstateNlriParser.extractLinkstateDestination(route));
}
-
mb.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(
new DestinationLinkstateCaseBuilder().setDestinationLinkstate(
new DestinationLinkstateBuilder().setCLinkstateDestination(dests).build()).build()).build());
@Override
protected MpUnreachNlri buildUnreach(final Collection<MapEntryNode> routes) {
- // TODO Auto-generated method stub
- return null;
+ final MpUnreachNlriBuilder mb = new MpUnreachNlriBuilder();
+ mb.setAfi(LinkstateAddressFamily.class);
+ mb.setSafi(LinkstateSubsequentAddressFamily.class);
+
+ final List<CLinkstateDestination> dests = new ArrayList<>(routes.size());
+ for (final MapEntryNode route : routes) {
+ dests.add(LinkstateNlriParser.extractLinkstateDestination(route));
+ }
+ mb.setWithdrawnRoutes(new WithdrawnRoutesBuilder().setDestinationType(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationLinkstateCaseBuilder().setDestinationLinkstate(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.destination.linkstate._case.DestinationLinkstateBuilder().setCLinkstateDestination(dests).build()).build()).build());
+ return mb.build();
}
}
TlvUtil.writeTLV(nlriType.getIntValue(), nlriByteBuf, buffer);
}
- public static CLinkstateDestination setLinkstateDestination(final MapEntryNode route) {
+ public static CLinkstateDestination extractLinkstateDestination(final MapEntryNode route) {
// FIXME: BUG-3012 - finish this
return new CLinkstateDestinationBuilder().build();
}
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.multiprotocol.rev130919.update.attributes.mp.unreach.nlri.WithdrawnRoutesBuilder;
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.Ipv4AddressFamily;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
return Ipv4Route.QNAME;
}
- @Override
- protected MpReachNlri buildReach(final Collection<MapEntryNode> routes, final CNextHop hop) {
+ private List<Ipv4Prefixes> extractPrefixes(final Collection<MapEntryNode> routes) {
final List<Ipv4Prefixes> prefs = new ArrayList<>(routes.size());
- for (MapEntryNode route : routes) {
+ for (final MapEntryNode route : routes) {
final String prefix = (String) route.getChild(this.routeKeyLeaf).get().getValue();
prefs.add(new Ipv4PrefixesBuilder().setPrefix(new Ipv4Prefix(prefix)).build());
}
+ return prefs;
+ }
+ @Override
+ protected MpReachNlri buildReach(final Collection<MapEntryNode> routes, final CNextHop hop) {
final MpReachNlriBuilder mb = new MpReachNlriBuilder();
mb.setAfi(Ipv4AddressFamily.class);
mb.setSafi(UnicastSubsequentAddressFamily.class);
mb.setCNextHop(hop);
mb.setAdvertizedRoutes(new AdvertizedRoutesBuilder().setDestinationType(
new DestinationIpv4CaseBuilder().setDestinationIpv4(
- new DestinationIpv4Builder().setIpv4Prefixes(prefs).build()).build()).build());
+ new DestinationIpv4Builder().setIpv4Prefixes(extractPrefixes(routes)).build()).build()).build());
return mb.build();
}
@Override
protected MpUnreachNlri buildUnreach(final Collection<MapEntryNode> routes) {
- // TODO Auto-generated method stub
- return null;
+ final MpUnreachNlriBuilder mb = new MpUnreachNlriBuilder();
+ mb.setAfi(Ipv4AddressFamily.class);
+ mb.setSafi(UnicastSubsequentAddressFamily.class);
+ mb.setWithdrawnRoutes(new WithdrawnRoutesBuilder().setDestinationType(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationIpv4CaseBuilder().setDestinationIpv4(
+ new DestinationIpv4Builder().setIpv4Prefixes(extractPrefixes(routes)).build()).build()).build());
+ return mb.build();
}
}
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.multiprotocol.rev130919.update.attributes.mp.unreach.nlri.WithdrawnRoutesBuilder;
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;
return Ipv6Route.QNAME;
}
- private List<Ipv6Prefixes> buildPrefixes(final Collection<MapEntryNode> routes) {
- final List<Ipv6Prefixes> ret = new ArrayList<>(routes.size());
- for (MapEntryNode route : routes) {
+ private List<Ipv6Prefixes> extractPrefixes(final Collection<MapEntryNode> routes) {
+ final List<Ipv6Prefixes> prefs = new ArrayList<>(routes.size());
+ for (final MapEntryNode route : routes) {
final String prefix = (String) route.getChild(this.routeKeyLeaf).get().getValue();
- ret.add(new Ipv6PrefixesBuilder().setPrefix(new Ipv6Prefix(prefix)).build());
+ prefs.add(new Ipv6PrefixesBuilder().setPrefix(new Ipv6Prefix(prefix)).build());
}
- return ret;
+ return prefs;
}
@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());
+ new DestinationIpv6Builder().setIpv6Prefixes(extractPrefixes(routes)).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
+ mb.setWithdrawnRoutes(new WithdrawnRoutesBuilder().setDestinationType(
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.update.attributes.mp.unreach.nlri.withdrawn.routes.destination.type.DestinationIpv6CaseBuilder().setDestinationIpv6(
+ new DestinationIpv6Builder().setIpv6Prefixes(extractPrefixes(routes)).build()).build()).build());
return mb.build();
}
}