diff options
Diffstat (limited to 'routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java')
-rw-r--r-- | routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java | 85 |
1 files changed, 43 insertions, 42 deletions
diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java index 9d784e693..e30c38fae 100644 --- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java +++ b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java @@ -34,25 +34,23 @@ import io.fd.honeycomb.translate.write.WriteContext; import io.fd.honeycomb.translate.write.WriteFailedException; import io.fd.vpp.jvpp.core.dto.IpAddDelRoute; import io.fd.vpp.jvpp.core.future.FutureJVppCore; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.Ipv6; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv6.Route; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv6.RouteKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv6.route.next.hop.options.NextHopList; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv6.route.next.hop.options.SimpleNextHop; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv6.route.next.hop.options.SpecialNextHop; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv6.route.next.hop.options.TableLookup; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv6.route.next.hop.options.next.hop.list.next.hop.list.NextHop; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocol; - - +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; +import javax.annotation.Nonnull; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev180313.routing.control.plane.protocols.control.plane.protocol._static.routes.Ipv6; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev180313.routing.control.plane.protocols.control.plane.protocol._static.routes.ipv6.Route; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv6.unicast.routing.rev180313.routing.control.plane.protocols.control.plane.protocol._static.routes.ipv6.RouteKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.next.hop.content.next.hop.options.NextHopList; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.next.hop.content.next.hop.options.SimpleNextHop; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.next.hop.content.next.hop.options.SpecialNextHop; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.next.hop.content.next.hop.options.TableLookupCase; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.next.hop.content.next.hop.options.next.hop.list.next.hop.list.NextHop; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev180313.routing.control.plane.protocols.ControlPlaneProtocol; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nonnull; -import java.util.List; -import java.util.stream.Collectors; - /** * Customizer for handling write operations for {@link Ipv6} according to ietf-ipv6-unicast-routing.yang */ @@ -76,12 +74,12 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer */ private final Ipv6RouteNamesFactory namesFactory; - public Ipv6RouteCustomizer(@Nonnull final FutureJVppCore futureJVppCore, - @Nonnull final NamingContext interfaceContext, - @Nonnull final NamingContext routesContext, - @Nonnull final NamingContext routingProtocolContext, - @Nonnull final MultiNamingContext routesHopsContext, - @Nonnull final VppClassifierContextManager classifierContextManager) { + Ipv6RouteCustomizer(@Nonnull final FutureJVppCore futureJVppCore, + @Nonnull final NamingContext interfaceContext, + @Nonnull final NamingContext routesContext, + @Nonnull final NamingContext routingProtocolContext, + @Nonnull final MultiNamingContext routesHopsContext, + @Nonnull final VppClassifierContextManager classifierContextManager) { super(futureJVppCore); this.routesContext = routesContext; @@ -90,9 +88,11 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer SimpleHopRequestFactory.forContexts(classifierContextManager, interfaceContext, routingProtocolContext); multipathHopRequestFactory = MultipathHopRequestFactory .forContexts(classifierContextManager, interfaceContext, routingProtocolContext); - specialNextHopRequestFactory = SpecialNextHopRequestFactory.forContexts(classifierContextManager, interfaceContext, - routingProtocolContext); - tableLookupRequestFactory = new TableLookupRequestFactory(classifierContextManager, interfaceContext, routingProtocolContext); + specialNextHopRequestFactory = + SpecialNextHopRequestFactory.forContexts(classifierContextManager, interfaceContext, + routingProtocolContext); + tableLookupRequestFactory = + new TableLookupRequestFactory(classifierContextManager, interfaceContext, routingProtocolContext); namesFactory = new Ipv6RouteNamesFactory(interfaceContext, routingProtocolContext); } @@ -100,7 +100,7 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<Route> instanceIdentifier, @Nonnull final Route route, @Nonnull final WriteContext writeContext) throws WriteFailedException { - final String parentProtocolName = instanceIdentifier.firstKeyOf(RoutingProtocol.class).getName(); + final String parentProtocolName = instanceIdentifier.firstKeyOf(ControlPlaneProtocol.class).getName(); final String routeName = namesFactory.uniqueRouteName(parentProtocolName, route); writeRoute(instanceIdentifier, parentProtocolName, routeName, route, writeContext, true); @@ -112,7 +112,7 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<Route> instanceIdentifier, @Nonnull final Route route, @Nonnull final WriteContext writeContext) throws WriteFailedException { - final String parentProtocolName = instanceIdentifier.firstKeyOf(RoutingProtocol.class).getName(); + final String parentProtocolName = instanceIdentifier.firstKeyOf(ControlPlaneProtocol.class).getName(); final String routeName = namesFactory.uniqueRouteName(parentProtocolName, route); writeRoute(instanceIdentifier, parentProtocolName, routeName, route, writeContext, false); routesContext.removeName(routeName, writeContext.getMappingContext()); @@ -124,12 +124,12 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer @Nonnull final Route route, @Nonnull final WriteContext writeContext, final boolean isAdd) throws WriteFailedException { - if (route.getNextHopOptions() instanceof SimpleNextHop) { + if (route.getNextHop().getNextHopOptions() instanceof SimpleNextHop) { writeRoute( simpleHopRequestFactory.createIpv6SimpleHopRequest(isAdd, parentProtocolName, route, writeContext.getMappingContext()), identifier); - } else if (route.getNextHopOptions() instanceof NextHopList) { + } else if (route.getNextHop().getNextHopOptions() instanceof NextHopList) { final List<NextHop> createdHops = writeMultihopRoute(identifier, parentProtocolName, route, writeContext, isAdd); @@ -139,10 +139,12 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer } else { removeMappingForEachHop(routeName, writeContext, createdHops); } - } else if (route.getNextHopOptions() instanceof SpecialNextHop) { + } else if (route.getNextHop().getNextHopOptions() instanceof SpecialNextHop) { writeSpecialHopRoute(identifier, route, parentProtocolName, writeContext, isAdd); - } else if (route.getNextHopOptions() instanceof TableLookup) { - writeRoute(tableLookupRequestFactory.createV6TableLookupRouteRequest(isAdd, parentProtocolName, route, writeContext.getMappingContext()), identifier); + } else if (route.getNextHop().getNextHopOptions() instanceof TableLookupCase) { + writeRoute(tableLookupRequestFactory.createV6TableLookupRouteRequest(isAdd, parentProtocolName, route, + writeContext.getMappingContext()), + identifier); } else { throw new IllegalArgumentException("Unsupported next-hop type"); } @@ -154,14 +156,13 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer final WriteContext writeContext, final boolean isAdd) throws WriteFailedException { // list of next hops - final NextHopList hopList = NextHopList.class.cast(route.getNextHopOptions()); + final NextHopList hopList = NextHopList.class.cast(route.getNextHop().getNextHopOptions()); final MappingContext mappingContext = writeContext.getMappingContext(); LOG.debug("Writing hop list {} for route {}", hopList, identifier); // order hops to preserve order by ids(even that model is not ordered) - final List<NextHop> orderedHops = hopList.getNextHopList().getNextHop() - .stream() - .sorted((left, right) -> (int) (left.getId() - right.getId())) + final List<NextHop> orderedHops = hopList.getNextHopList().getNextHop().stream() + .sorted(Comparator.comparing(NextHop::getIndex)) .collect(Collectors.toList()); for (NextHop hop : orderedHops) { @@ -176,16 +177,16 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer return orderedHops; } - private void writeSpecialHopRoute(final @Nonnull InstanceIdentifier<Route> identifier, final @Nonnull Route route, - final @Nonnull String parentProtocolName, final @Nonnull WriteContext writeContext, - final boolean isAdd) + final @Nonnull String parentProtocolName, + final @Nonnull WriteContext writeContext, final boolean isAdd) throws WriteFailedException { - final SpecialNextHop hop = SpecialNextHop.class.cast(route.getNextHopOptions()); + final SpecialNextHop hop = SpecialNextHop.class.cast(route.getNextHop().getNextHopOptions()); final MappingContext mappingContext = writeContext.getMappingContext(); - final IpAddDelRoute request = specialNextHopRequestFactory - .createIpv6SpecialHopRequest(isAdd, parentProtocolName, route, mappingContext, hop.getSpecialNextHop()); + final IpAddDelRoute request = + specialNextHopRequestFactory.createIpv6SpecialHopRequest(isAdd, parentProtocolName, route, mappingContext, + hop.getSpecialNextHopEnum()); writeRoute(request, identifier); } @@ -206,7 +207,7 @@ public class Ipv6RouteCustomizer extends FutureJVppCustomizer private void addMappingForEachHop(final @Nonnull String routeName, final @Nonnull WriteContext writeContext, final List<NextHop> createdHops) { createdHops.forEach(nextHop -> routesHopsContext.addChild(routeName, - nextHop.getId().intValue(), + Integer.valueOf(nextHop.getIndex()), namesFactory.uniqueRouteHopName(nextHop), writeContext.getMappingContext())); } |