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/Ipv4RouteCustomizer.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/Ipv4RouteCustomizer.java')
-rw-r--r-- | routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java | 88 |
1 files changed, 44 insertions, 44 deletions
diff --git a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java index 72254d1f6..1eb249f04 100644 --- a/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java +++ b/routing/routing-impl/src/main/java/io/fd/hc2vpp/routing/write/Ipv4RouteCustomizer.java @@ -33,24 +33,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.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.Ipv4; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.Route; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.RouteKey; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.route.next.hop.options.NextHopList; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.route.next.hop.options.SimpleNextHop; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.route.next.hop.options.SpecialNextHop; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.route.next.hop.options.TableLookup; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.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.ipv4.unicast.routing.rev180313.routing.control.plane.protocols.control.plane.protocol._static.routes.Ipv4; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev180313.routing.control.plane.protocols.control.plane.protocol._static.routes.ipv4.Route; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev180313.routing.control.plane.protocols.control.plane.protocol._static.routes.ipv4.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 Ipv4} according to ietf-ipv4-unicast-routing.yang */ @@ -59,7 +58,6 @@ public class Ipv4RouteCustomizer extends FutureJVppCustomizer private static final Logger LOG = LoggerFactory.getLogger(Ipv4RouteCustomizer.class); - private final NamingContext routesContext; private final MultiNamingContext routesHopsContext; /** @@ -75,12 +73,12 @@ public class Ipv4RouteCustomizer extends FutureJVppCustomizer */ private final Ipv4RouteNamesFactory routeNamesFactory; - public Ipv4RouteCustomizer(@Nonnull final FutureJVppCore futureJVppCore, - @Nonnull final NamingContext interfaceContext, - @Nonnull final NamingContext routesContext, - @Nonnull final NamingContext routingProtocolContext, - @Nonnull final MultiNamingContext routesHopsContext, - @Nonnull final VppClassifierContextManager classifierContextManager) { + Ipv4RouteCustomizer(@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; @@ -92,14 +90,15 @@ public class Ipv4RouteCustomizer extends FutureJVppCustomizer specialNextHopRequestFactory = SpecialNextHopRequestFactory.forContexts(classifierContextManager, interfaceContext, routingProtocolContext); routeNamesFactory = new Ipv4RouteNamesFactory(interfaceContext, routingProtocolContext); - tableLookupRequestFactory = new TableLookupRequestFactory(classifierContextManager, interfaceContext, routingProtocolContext); + tableLookupRequestFactory = + new TableLookupRequestFactory(classifierContextManager, interfaceContext, routingProtocolContext); } @Override 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 = routeNamesFactory.uniqueRouteName(parentProtocolName, route); writeRoute(instanceIdentifier, parentProtocolName, routeName, route, writeContext, true); @@ -120,7 +119,7 @@ public class Ipv4RouteCustomizer 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 = routeNamesFactory.uniqueRouteName(parentProtocolName, route); writeRoute(instanceIdentifier, parentProtocolName, routeName, route, writeContext, false); routesContext.removeName(routeName, writeContext.getMappingContext()); @@ -132,12 +131,12 @@ public class Ipv4RouteCustomizer 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.createIpv4SimpleHopRequest(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); @@ -147,10 +146,14 @@ public class Ipv4RouteCustomizer 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.createV4TableLookupRouteRequest(isAdd, parentProtocolName, route, writeContext.getMappingContext()), identifier); + } else if (route.getNextHop().getNextHopOptions() instanceof TableLookupCase) { + writeRoute(tableLookupRequestFactory.createV4TableLookupRouteRequest(isAdd, + parentProtocolName, + route, + writeContext.getMappingContext()), + identifier); } else { throw new IllegalArgumentException("Unsupported next-hop type"); } @@ -166,26 +169,23 @@ public class Ipv4RouteCustomizer 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()), routeNamesFactory.uniqueRouteHopName(nextHop), writeContext.getMappingContext())); } private List<NextHop> writeMultihopRoute(@Nonnull final InstanceIdentifier<Route> identifier, - @Nonnull final String parentProtocolName, - @Nonnull final Route route, - @Nonnull final WriteContext writeContext, - final boolean isAdd) + @Nonnull final String parentProtocolName, @Nonnull final Route route, + @Nonnull 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) { @@ -200,16 +200,16 @@ public class Ipv4RouteCustomizer 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 - .createIpv4SpecialHopRequest(isAdd, parentProtocolName, route, mappingContext, hop.getSpecialNextHop()); + final IpAddDelRoute request = + specialNextHopRequestFactory.createIpv4SpecialHopRequest(isAdd, parentProtocolName, route, mappingContext, + hop.getSpecialNextHopEnum()); writeRoute(request, identifier); } |