diff options
author | Michal Cmarada <michal.cmarada@pantheon.tech> | 2018-05-04 16:13:09 +0200 |
---|---|---|
committer | Michal Cmarada <michal.cmarada@pantheon.tech> | 2018-05-09 14:36:21 +0200 |
commit | 8f9fe3ca424abc56d212a96af4ec5750a29e7673 (patch) | |
tree | c3472885ef0fb57452b88b4ea76f2935f81ca39f /routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv6RouteCustomizer.java | |
parent | d5883157bff11ee89b95bc1abe7f62fca3509950 (diff) |
HC2VPP-253 - Bump routing models
This patch updates (for support of SRv6 and MPLS) routing models to:
- hc2vpp-ietf-routing@2018-03-13.yang
(RFC 8349, https://tools.ietf.org/html/rfc8349)
- hc2vpp-ietf-ipv4-unicast-routing@2018-03-13.yang (RFC 8349)
- hc2vpp-ietf-ipv6-unicast-routing@2018-03-13.yang (RFC 8349)
- hc2vpp-ietf-ipv6-router-advertisements@2018-03-13 (RFC 8349)
- hc2vpp-ietf-routing-types@2017-12-04
(RFC 8294 ,https://tools.ietf.org/html/rfc8294)
Due to odl bugs these models were changed,
see HC2VPP-298 for more details.
Significant changes in updated models:
- Routing instance was removed, we used vpp-routing-instance
as single instance before, which is no longer needed.
- Routing-protocol and Routing-protocols were refactored to
Control-plane-protocol/s. Control-protocol now uses type and name as key
- Route Key was changed from id to ipPrefix
- Next-hop and Next-Hop-list were refactored
See attached routing_postman_collection.json for updated data structures
and examples for both IPv4 and IPv6 routes.
For router advertisements see routing_advertisments_postman_collection.json
Another fixes in this patch:
- fixes in MPLS module due to Routing model updates
- fixes doc module due to changes in Routing model
Change-Id: I33704a50061aef97dfbd73a7701ff6fe5274d6f0
Signed-off-by: Michal Cmarada <michal.cmarada@pantheon.tech>
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())); } |