Remove duplicated code 18/71218/3
authorClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Tue, 17 Apr 2018 12:27:40 +0000 (14:27 +0200)
committerClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Tue, 24 Apr 2018 06:53:43 +0000 (08:53 +0200)
- extension ribsupports should use
  provided routeKeyQname and routeQname
  method provided by abstract rib support.
- fix email contact address

Change-Id: I74200558d7bf1d8300c83e7c48e047b674908ba8
Signed-off-by: Claudio D. Gasparini <claudio.gasparini@pantheon.tech>
12 files changed:
bgp/evpn/src/main/java/org/opendaylight/protocol/bgp/evpn/impl/EvpnRibSupport.java
bgp/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/l3vpn/AbstractFlowspecL3vpnRIBSupport.java
bgp/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/AbstractVpnRIBSupport.java
bgp/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/ipv4/VpnIpv4RIBSupport.java
bgp/l3vpn/src/main/java/org/opendaylight/protocol/bgp/l3vpn/ipv6/VpnIpv6RIBSupport.java
bgp/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/AbstractLabeledUnicastRIBSupport.java
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/impl/LinkstateRIBSupport.java
bgp/openconfig-api/src/main/yang/odl-bgp-default-policy.yang
bgp/parser-spi/src/main/java/org/opendaylight/protocol/bgp/parser/spi/PathIdUtil.java
bgp/pom.xml
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/AbstractRIBSupport.java
bgp/rib-spi/src/test/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/bgp/inet/rev150305/ipv4/routes/ipv4/routes/RIBSupportTestImp.java

index 26bdc96352f7a26dc1399ad6f61d9526789cf7c4..7f5e6e7363e50f292804f90db8625333ce763a0c 100644 (file)
@@ -36,7 +36,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.destination.DestinationType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
@@ -52,7 +51,6 @@ import org.slf4j.LoggerFactory;
 final class EvpnRibSupport extends AbstractRIBSupport<EvpnRoute, EvpnRouteKey> {
     private static final EvpnRibSupport SINGLETON = new EvpnRibSupport();
     private static final Logger LOG = LoggerFactory.getLogger(EvpnRibSupport.class);
-    private static final QName ROUTE_KEY_QNAME = QName.create(EvpnRoute.QNAME, ROUTE_KEY).intern();
     private static final NodeIdentifier NLRI_ROUTES_LIST = NodeIdentifier.create(EvpnDestination.QNAME);
 
     private EvpnRibSupport() {
@@ -110,7 +108,7 @@ final class EvpnRibSupport extends AbstractRIBSupport<EvpnRoute, EvpnRouteKey> {
         EvpnNlriParser.serializeNlri(Collections.singletonList(dest), buffer);
         final Optional<DataContainerChild<? extends PathArgument, ?>> maybePathIdLeaf =
                 evpn.getChild(routePathIdNid());
-        return PathIdUtil.createNidKey(routeQName(), ROUTE_KEY_QNAME,
+        return PathIdUtil.createNidKey(routeQName(), routeKeyQName(),
                 pathIdQName(), ByteArray.encodeBase64(buffer), maybePathIdLeaf);
     }
 
index 6cde5635248928a4b072a00a40f46ccb1408b7e8..4babd12d357e4ce0c22a9503afd6e6046083687f 100644 (file)
@@ -7,12 +7,8 @@
  */
 package org.opendaylight.protocol.bgp.flowspec.l3vpn;
 
-import static org.opendaylight.bgp.concepts.RouteDistinguisherUtil.extractRouteDistinguisher;
-
 import com.google.common.collect.Iterables;
 import java.util.Collection;
-import javax.annotation.Nonnull;
-
 import org.opendaylight.protocol.bgp.flowspec.AbstractFlowspecRIBSupport;
 import org.opendaylight.protocol.bgp.parser.spi.PathIdUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev180329.FlowspecL3vpnSubsequentAddressFamily;
@@ -25,49 +21,43 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.Identifier;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 
 public abstract class AbstractFlowspecL3vpnRIBSupport
         <T extends AbstractFlowspecL3vpnNlriParser, R extends Route, S extends Identifier>
         extends AbstractFlowspecRIBSupport<T, R, S> {
-    private final NodeIdentifier routeDistinguisherNID;
 
     protected AbstractFlowspecL3vpnRIBSupport(
-        final Class<? extends Routes> cazeClass,
-        final Class<? extends DataObject> containerClass,
-        final Class<? extends Route> listClass,
-        final QName dstContainerClassQName,
-        final Class<? extends AddressFamily> afiClass,
-        final T flowspecNlriParser
+            final Class<? extends Routes> cazeClass,
+            final Class<? extends DataObject> containerClass,
+            final Class<? extends Route> listClass,
+            final QName dstContainerClassQName,
+            final Class<? extends AddressFamily> afiClass,
+            final T flowspecNlriParser
     ) {
         super(cazeClass, containerClass, listClass, afiClass, FlowspecL3vpnSubsequentAddressFamily.class,
                 dstContainerClassQName, flowspecNlriParser);
-        this.routeDistinguisherNID
-                = new NodeIdentifier(QName.create(routeQName(), "route-distinguisher").intern());
     }
 
-    @Nonnull
     @Override
-    protected DestinationType buildDestination(@Nonnull final Collection<MapEntryNode> routes) {
+    protected DestinationType buildDestination(final Collection<MapEntryNode> routes) {
         final MapEntryNode routesCont = Iterables.getOnlyElement(routes);
         final PathId pathId = PathIdUtil.buildPathId(routesCont, routePathIdNid());
-        final RouteDistinguisher rd = extractRouteDistinguisher(routesCont, this.routeDistinguisherNID);
+        final RouteDistinguisher rd = extractRouteDistinguisher(routesCont);
         return this.nlriParser.createAdvertizedRoutesDestinationType(
-            new Object[] {rd, this.nlriParser.extractFlowspec(routesCont)},
-            pathId
+                new Object[]{rd, this.nlriParser.extractFlowspec(routesCont)},
+                pathId
         );
     }
 
-    @Nonnull
     @Override
-    protected DestinationType buildWithdrawnDestination(@Nonnull final Collection<MapEntryNode> routes) {
+    protected DestinationType buildWithdrawnDestination(final Collection<MapEntryNode> routes) {
         final MapEntryNode routesCont = Iterables.getOnlyElement(routes);
         final PathId pathId = PathIdUtil.buildPathId(routesCont, routePathIdNid());
-            final RouteDistinguisher rd = extractRouteDistinguisher(routesCont, this.routeDistinguisherNID);
+        final RouteDistinguisher rd = extractRouteDistinguisher(routesCont);
         return this.nlriParser.createWithdrawnDestinationType(
-            new Object[] {rd, this.nlriParser.extractFlowspec(Iterables.getOnlyElement(routes))},
-            pathId
+                new Object[]{rd, this.nlriParser.extractFlowspec(Iterables.getOnlyElement(routes))},
+                pathId
         );
     }
 }
index 47cdd59dfe65290732bf1d8fd2a53ad2439fe1c4..eb1e2df24ad86fc0c018a9a9039ff93193c234ea 100644 (file)
@@ -30,8 +30,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.MplsLabeledVpnSubsequentAddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RouteDistinguisher;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RouteDistinguisherBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestination;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestinationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRoute;
@@ -56,11 +54,8 @@ import org.slf4j.LoggerFactory;
 public abstract class AbstractVpnRIBSupport extends AbstractRIBSupport<VpnRoute, VpnRouteKey> {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractVpnRIBSupport.class);
     private final NodeIdentifier nlriRoutesListNid;
-    private final NodeIdentifier prefixTypeNid;
     private final NodeIdentifier labelStackNid;
     private final NodeIdentifier lvNid;
-    private final NodeIdentifier rdNid;
-    private final QName routeKey;
 
     /**
      * Default constructor. Requires the QName of the container augmented under the routes choice
@@ -78,34 +73,22 @@ public abstract class AbstractVpnRIBSupport extends AbstractRIBSupport<VpnRoute,
         super(cazeClass, containerClass, listClass, afiClass,
                 MplsLabeledVpnSubsequentAddressFamily.class, vpnDstContainerClassQname);
         final QName classQname = BindingReflections.findQName(containerClass).intern();
-        this.routeKey = QName.create(routeQName(), ROUTE_KEY).intern();
         final QName vpnDstClassQname = QName.create(classQname, VpnDestination.QNAME.getLocalName());
         this.nlriRoutesListNid = NodeIdentifier.create(vpnDstClassQname);
-        this.prefixTypeNid = NodeIdentifier.create(QName.create(vpnDstClassQname, "prefix").intern());
         this.labelStackNid = NodeIdentifier.create(QName.create(vpnDstClassQname, "label-stack").intern());
         this.lvNid = NodeIdentifier.create(QName.create(vpnDstClassQname, "label-value").intern());
-        this.rdNid = NodeIdentifier.create(QName.create(vpnDstClassQname, "route-distinguisher").intern());
     }
 
     private VpnDestination extractVpnDestination(final DataContainerNode<? extends PathArgument> route) {
         final VpnDestination dst = new VpnDestinationBuilder()
-            .setPrefix(extractPrefix(route, this.prefixTypeNid))
+            .setPrefix(createPrefix(extractPrefix(route)))
             .setLabelStack(LabeledUnicastIpv4RIBSupport.extractLabel(route, this.labelStackNid, this.lvNid))
             .setRouteDistinguisher(extractRouteDistinguisher(route))
             .build();
         return dst;
     }
 
-    protected abstract IpPrefix extractPrefix(DataContainerNode<? extends PathArgument> route,
-            NodeIdentifier prefixTypeNid);
-
-    private RouteDistinguisher extractRouteDistinguisher(
-            final DataContainerNode<? extends YangInstanceIdentifier.PathArgument> route) {
-        if (route.getChild(this.rdNid).isPresent()) {
-            return RouteDistinguisherBuilder.getDefaultInstance((String) route.getChild(this.rdNid).get().getValue());
-        }
-        return null;
-    }
+    protected abstract IpPrefix createPrefix(String prefix);
 
     protected abstract DestinationType getAdvertisedDestinationType(List<VpnDestination> dests);
 
@@ -153,7 +136,7 @@ public abstract class AbstractVpnRIBSupport extends AbstractRIBSupport<VpnRoute,
 
     private NodeIdentifierWithPredicates createRouteKey(final UnkeyedListEntryNode l3vpn) {
         final ByteBuf buffer = Unpooled.buffer();
-        final VpnDestination dests = new VpnDestinationBuilder().setPrefix(extractPrefix(l3vpn, this.prefixTypeNid))
+        final VpnDestination dests = new VpnDestinationBuilder().setPrefix(createPrefix(extractPrefix(l3vpn)))
             .setRouteDistinguisher(extractRouteDistinguisher(l3vpn)).build();
         final ByteBuf nlriByteBuf = Unpooled.buffer();
 
@@ -170,7 +153,7 @@ public abstract class AbstractVpnRIBSupport extends AbstractRIBSupport<VpnRoute,
 
         final Optional<DataContainerChild<? extends PathArgument, ?>> maybePathIdLeaf =
                 l3vpn.getChild(routePathIdNid());
-        return PathIdUtil.createNidKey(routeQName(), this.routeKey,
+        return PathIdUtil.createNidKey(routeQName(), routeKeyQName(),
                 pathIdQName(), ByteArray.encodeBase64(buffer), maybePathIdLeaf);
     }
 
index b08385accd91b7d129119f29ba47386861e68e40..e5457458e9862f380b734df6bcace2b7705b90d9 100644 (file)
@@ -22,8 +22,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv4.rev180329.l3vpn.ipv4.routes.VpnIpv4RoutesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestination;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRoute;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
 
 final class VpnIpv4RIBSupport extends AbstractVpnRIBSupport {
     /**
@@ -38,13 +36,8 @@ final class VpnIpv4RIBSupport extends AbstractVpnRIBSupport {
     }
 
     @Override
-    protected IpPrefix extractPrefix(final DataContainerNode<? extends YangInstanceIdentifier.PathArgument> route,
-            final YangInstanceIdentifier.NodeIdentifier prefixTypeNid) {
-        if (route.getChild(prefixTypeNid).isPresent()) {
-            final String prefixType = (String) route.getChild(prefixTypeNid).get().getValue();
-            return new IpPrefix(new Ipv4Prefix(prefixType));
-        }
-        return null;
+    protected IpPrefix createPrefix(final String prefix) {
+        return new IpPrefix(new Ipv4Prefix(prefix));
     }
 
     @Override
index 8900d22dc16e49432debe075f136187baf1767f7..22000bcded23f9cd3e86236bd125c0b9e201b69d 100644 (file)
@@ -22,8 +22,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.ipv6.rev180329.l3vpn.ipv6.routes.VpnIpv6RoutesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.destination.type.VpnDestination;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.vpn.rev180329.l3vpn.ip.route.VpnRoute;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
 
 final class VpnIpv6RIBSupport extends AbstractVpnRIBSupport {
 
@@ -39,13 +37,8 @@ final class VpnIpv6RIBSupport extends AbstractVpnRIBSupport {
     }
 
     @Override
-    protected IpPrefix extractPrefix(final DataContainerNode<? extends YangInstanceIdentifier.PathArgument> route,
-            final YangInstanceIdentifier.NodeIdentifier prefixTypeNid) {
-        if (route.getChild(prefixTypeNid).isPresent()) {
-            final String prefixType = (String) route.getChild(prefixTypeNid).get().getValue();
-            return new IpPrefix(new Ipv6Prefix(prefixType));
-        }
-        return null;
+    protected IpPrefix createPrefix(final String prefix) {
+        return new IpPrefix(new Ipv6Prefix(prefix));
     }
 
     @Override
index 2e3b56f11ff33795072032af54216b695490be8e..bba522f616601c47f2bc50dc7b04a87107e9f916 100644 (file)
@@ -52,8 +52,6 @@ import org.slf4j.LoggerFactory;
 
 abstract class AbstractLabeledUnicastRIBSupport
         extends AbstractRIBSupport<LabeledUnicastRoute, LabeledUnicastRouteKey> {
-    private static final NodeIdentifier PREFIX_TYPE_NID
-            = NodeIdentifier.create(QName.create(CLabeledUnicastDestination.QNAME, "prefix").intern());
     private static final NodeIdentifier LABEL_STACK_NID
             = NodeIdentifier.create(QName.create(CLabeledUnicastDestination.QNAME, "label-stack").intern());
     private static final NodeIdentifier LV_NID
@@ -86,7 +84,8 @@ abstract class AbstractLabeledUnicastRIBSupport
     protected void processDestination(final DOMDataWriteTransaction tx, final YangInstanceIdentifier routesPath,
         final ContainerNode destination, final ContainerNode attributes, final ApplyRoute function) {
         if (destination != null) {
-            final Optional<DataContainerChild<? extends PathArgument, ?>> maybeRoutes = destination.getChild(NLRI_ROUTES_LIST);
+            final Optional<DataContainerChild<? extends PathArgument, ?>> maybeRoutes
+                    = destination.getChild(NLRI_ROUTES_LIST);
             if (maybeRoutes.isPresent()) {
                 final DataContainerChild<? extends PathArgument, ?> routes = maybeRoutes.get();
                 if (routes instanceof UnkeyedListNode) {
@@ -127,7 +126,7 @@ abstract class AbstractLabeledUnicastRIBSupport
     private CLabeledUnicastDestination extractCLabeledUnicastDestination(
             final DataContainerNode<? extends PathArgument> route) {
         final CLabeledUnicastDestinationBuilder builder = new CLabeledUnicastDestinationBuilder();
-        builder.setPrefix(extractPrefix(route, PREFIX_TYPE_NID));
+        builder.setPrefix(extractPrefix(route, prefixNid()));
         builder.setLabelStack(extractLabel(route, LABEL_STACK_NID, LV_NID));
         builder.setPathId(PathIdUtil.buildPathId(route, routePathIdNid()));
         return builder.build();
index f5a59e86e9e96a8389c55c77f80a91d3ace764ff..629ffea20605d9d2d510fd8ead29130da8996604 100644 (file)
@@ -37,10 +37,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.Attributes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.destination.DestinationType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
@@ -53,10 +50,9 @@ import org.slf4j.LoggerFactory;
 
 public final class LinkstateRIBSupport extends AbstractRIBSupport<LinkstateRoute, LinkstateRouteKey> {
     private static final Logger LOG = LoggerFactory.getLogger(LinkstateRIBSupport.class);
-    private static final QName ROUTE_KEY_QNAME = QName.create(LinkstateRoute.QNAME, ROUTE_KEY).intern();
     private static final LinkstateRIBSupport SINGLETON = new LinkstateRIBSupport();
-    private final NodeIdentifier route = new NodeIdentifier(LinkstateRoute.QNAME);
-    private final NodeIdentifier nlriRoutesList = new NodeIdentifier(CLinkstateDestination.QNAME);
+    private final YangInstanceIdentifier.NodeIdentifier nlriRoutesList
+            = new YangInstanceIdentifier.NodeIdentifier(CLinkstateDestination.QNAME);
 
     private LinkstateRIBSupport() {
         super(LinkstateRoutesCase.class, LinkstateRoutes.class, LinkstateRoute.class, LinkstateAddressFamily.class,
@@ -73,7 +69,7 @@ public final class LinkstateRIBSupport extends AbstractRIBSupport<LinkstateRoute
         SimpleNlriTypeRegistry.getInstance().serializeNlriType(cLinkstateDestination, buffer);
         final Optional<DataContainerChild<? extends PathArgument, ?>> maybePathIdLeaf =
                 linkstate.getChild(routePathIdNid());
-        return PathIdUtil.createNidKey(LinkstateRoute.QNAME, ROUTE_KEY_QNAME,
+        return PathIdUtil.createNidKey(routeQName(), routeKeyQName(),
                 pathIdQName(), Arrays.toString(ByteArray.readAllBytes(buffer)), maybePathIdLeaf);
     }
 
@@ -97,7 +93,7 @@ public final class LinkstateRIBSupport extends AbstractRIBSupport<LinkstateRoute
         if (maybeRoutes.isPresent()) {
             final DataContainerChild<? extends PathArgument, ?> routes = maybeRoutes.get();
             if (routes instanceof UnkeyedListNode) {
-                final YangInstanceIdentifier base = routesPath.node(routesContainerIdentifier()).node(this.route);
+                final YangInstanceIdentifier base = routesPath.node(routesContainerIdentifier()).node(routeNid());
                 for (final UnkeyedListEntryNode e : ((UnkeyedListNode) routes).getValue()) {
                     final NodeIdentifierWithPredicates routeKey = createRouteKey(e);
                     function.apply(tx, base, routeKey, e, attributes);
index ce24df0af67630bb6d1710a5b583eddf6e31cc13..24d8739c2f0706170e3a00b7d6af08f84a05898e 100644 (file)
@@ -13,7 +13,7 @@ module odl-bgp-policy {
     import bgp-types { prefix bgp-t; revision-date 2018-03-29; }
 
     organization "AT&T Services, Inc.";
-    contact "Claudio D. Gasparini <claudio.gasparini@pantheon.tech.com>";
+    contact "Claudio D. Gasparini <claudio.gasparini@pantheon.tech>";
 
     description
         "This module contains odl bgp policy model
index 572f8ea5485f7203e8bfa9f5efa1972b71bc53d6..92723a7575d12a3380895912660593cc8f5622ff 100644 (file)
@@ -66,17 +66,6 @@ public final class PathIdUtil {
         return (Long) NormalizedNodes.findNode(data, pathNii).map(NormalizedNode::getValue).orElse(null);
     }
 
-    /**
-     * Get route key object ( prefgit stat  ix / key-value/ .. ).
-     *
-     * @param routeId       PathArgument containing the key
-     * @param routeKeyQname routeKey Qname
-     * @return key
-     */
-    public static Object getObjectKey(final NodeIdentifierWithPredicates routeId, final QName routeKeyQname) {
-        return routeId.getKeyValues().get(routeKeyQname);
-    }
-
     public static NodeIdentifierWithPredicates createNodeIdentifierWithPredicates(final QName routeQname,
             final QName pathidQname, final Object pathId,
             final QName routeKeyQname, final Object keyObject) {
index 60256d937b49f4cdd9543ae5ca89d0250b18b9c6..ccd5b666d491a42da3d0a6a6bbb6fe10b3780434 100644 (file)
     <modules>
         <module>bgp-artifacts</module>
         <module>concepts</module>
-        <module>inet</module>
-        <module>linkstate</module>
-        <module>flowspec</module>
-        <module>l3vpn</module>
-        <module>labeled-unicast</module>
         <module>parser-api</module>
         <module>parser-spi</module>
         <module>parser-impl</module>
         <module>openconfig-spi</module>
         <module>path-selection-mode</module>
         <module>benchmark-app</module>
-        <module>evpn</module>
         <module>cli</module>
         <module>peer-acceptor</module>
         <module>openconfig-state</module>
         <module>openconfig-rp-spi</module>
         <module>openconfig-rp-impl</module>
         <module>openconfig-rp-statement</module>
+        <!--Extensions-->
+        <module>inet</module>
+        <module>linkstate</module>
+        <module>flowspec</module>
+        <module>l3vpn</module>
+        <module>labeled-unicast</module>
+        <module>evpn</module>
     </modules>
 </project>
index b18c791d143ce167bfa70ed5cb91322f1be24e6c..e299c9275977fe3d5f8357a26573dd9a600de109 100644 (file)
@@ -13,7 +13,6 @@ import com.google.common.annotations.Beta;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Optional;
-import javax.annotation.Nonnull;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.Update;
@@ -38,6 +37,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RouteDistinguisher;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.RouteDistinguisherBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.SubsequentAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.next.hop.CNextHop;
 import org.opendaylight.yangtools.yang.binding.DataObject;
@@ -88,7 +89,8 @@ public abstract class AbstractRIBSupport<R extends Route, N extends Identifier>
     private final QName pathIdQname;
     private final NodeIdentifier pathIdNid;
     private final QName routeKeyQname;
-    private final NodeIdentifier routeKeyNodeId;
+    private final NodeIdentifier prefixTypeNid;
+    private final NodeIdentifier rdNid;
 
     /**
      * Default constructor. Requires the QName of the container augmented under the routes choice
@@ -128,7 +130,8 @@ public abstract class AbstractRIBSupport<R extends Route, N extends Identifier>
         this.pathIdQname = QName.create(routeQName(), "path-id").intern();
         this.pathIdNid = new NodeIdentifier(this.pathIdQname);
         this.routeKeyQname = QName.create(routeQName(), ROUTE_KEY).intern();
-        this.routeKeyNodeId = new NodeIdentifier(this.routeKeyQname);
+        this.prefixTypeNid = NodeIdentifier.create(QName.create(destinationQname, "prefix").intern());
+        this.rdNid = NodeIdentifier.create(QName.create(destinationQname, "route-distinguisher").intern());
     }
 
     @Override
@@ -155,17 +158,19 @@ public abstract class AbstractRIBSupport<R extends Route, N extends Identifier>
         return this.routeQname;
     }
 
+    protected final NodeIdentifier prefixNid() {
+        return this.prefixTypeNid;
+    }
+
     protected final NodeIdentifier routeNid() {
         return this.routesListIdentifier;
     }
 
-    @Nonnull
     @Override
     public final Class<? extends AddressFamily> getAfi() {
         return this.afiClass;
     }
 
-    @Nonnull
     @Override
     public final Class<? extends SubsequentAddressFamily> getSafi() {
         return this.safiClass;
@@ -202,11 +207,9 @@ public abstract class AbstractRIBSupport<R extends Route, N extends Identifier>
         return mb.build();
     }
 
-    @Nonnull
-    protected abstract DestinationType buildDestination(@Nonnull Collection<MapEntryNode> routes);
+    protected abstract DestinationType buildDestination(Collection<MapEntryNode> routes);
 
-    @Nonnull
-    protected abstract DestinationType buildWithdrawnDestination(@Nonnull Collection<MapEntryNode> routes);
+    protected abstract DestinationType buildWithdrawnDestination(Collection<MapEntryNode> routes);
 
     /**
      * Return the {@link NodeIdentifier} of the AFI/SAFI-specific container under
@@ -343,7 +346,6 @@ public abstract class AbstractRIBSupport<R extends Route, N extends Identifier>
         putRoutes(tx, tablePath, nlri, attributes, ROUTES);
     }
 
-    @Nonnull
     @Override
     public final Update buildUpdate(final Collection<MapEntryNode> advertised, final Collection<MapEntryNode> withdrawn,
             final Attributes attr) {
@@ -441,7 +443,15 @@ public abstract class AbstractRIBSupport<R extends Route, N extends Identifier>
         return this.routeKeyQname;
     }
 
-    protected final NodeIdentifier routeKeyNodeIdentifier() {
-        return this.routeKeyNodeId;
+    protected final String extractPrefix(final DataContainerNode<? extends PathArgument> route) {
+        return (String) route.getChild(prefixTypeNid).get().getValue();
+    }
+
+    protected final RouteDistinguisher extractRouteDistinguisher(
+            final DataContainerNode<? extends YangInstanceIdentifier.PathArgument> route) {
+        if (route.getChild(this.rdNid).isPresent()) {
+            return RouteDistinguisherBuilder.getDefaultInstance((String) route.getChild(this.rdNid).get().getValue());
+        }
+        return null;
     }
 }
index 44810266749dbde79c31fc8fc11c85aa9a01c5bc..a653da999476fe3c6e9123bc1f775a270baa7abf 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev180329.ipv4.routes.ipv4.routes;
 
-import com.google.common.collect.ImmutableCollection;
 import com.google.common.collect.ImmutableMap;
 import java.util.Collection;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
@@ -19,7 +18,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.tables.Routes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.Ipv4AddressFamily;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev180329.UnicastSubsequentAddressFamily;
-import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.Identifier;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;