Create two new interfaces for Export policies 01/36001/9
authorClaudio D. Gasparini <cgaspari@cisco.com>
Tue, 15 Mar 2016 10:51:16 +0000 (11:51 +0100)
committerClaudio D. Gasparini <cgaspari@cisco.com>
Tue, 15 Mar 2016 18:45:28 +0000 (19:45 +0100)
Create two new interfaces for Export policies to separate
from implementation, and be used on different module without
suffer cyclic dependency.
Also we move another classes that will be required by other
modules.

Change-Id: I17265d3434e7302892ea0b5e5b06c88e54b39014
Signed-off-by: Claudio D. Gasparini <cgaspari@cisco.com>
21 files changed:
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/AdjRibInWriter.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/AdjRibOutListener.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ApplicationPeer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPPeer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BestPathSelector.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/CacheDisconnectedPeersImpl.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ExportPolicyPeerTrackerImpl.java [moved from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ExportPolicyPeerTracker.java with 87% similarity]
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ImportPolicyPeerTracker.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/LocRibWriter.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/PeerExportGroupImpl.java [moved from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/PeerExportGroup.java with 73% similarity]
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RIBImpl.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/RIB.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AdjRibsInWriterTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BestPathSelectorTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/OffsetMapTest.java
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/CacheDisconnectedPeers.java [moved from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/CacheDisconnectedPeers.java with 79% similarity]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/ExportPolicyPeerTracker.java [new file with mode: 0644]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/IdentifierUtils.java [moved from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/IdentifierUtils.java with 88% similarity]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/PeerExportGroup.java [new file with mode: 0644]
bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RouterIds.java [moved from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RouterIds.java with 97% similarity]

index c6af52253e2063a35fc5918bf6c5408fceb880d9..9da50a9a2d6f17e55787414619b98c3689bedbe6 100644 (file)
@@ -23,6 +23,7 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContext;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContextRegistry;
+import org.opendaylight.protocol.bgp.rib.spi.IdentifierUtils;
 import org.opendaylight.protocol.bgp.rib.spi.RibSupportUtils;
 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.MpUnreachNlri;
index 0976f336e9576f39d98b2e8bbf8781f524f89c71..193c6287238cb7b27b668eccad2d93be2513568d 100644 (file)
@@ -20,6 +20,7 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.protocol.bgp.rib.impl.spi.Codecs;
 import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry;
+import org.opendaylight.protocol.bgp.rib.spi.IdentifierUtils;
 import org.opendaylight.protocol.bgp.rib.spi.RIBSupport;
 import org.opendaylight.protocol.bgp.rib.spi.RibSupportUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
index 5987de4f0f18a54a23a199334d06945ef007e9f7..5d1a01676a1578065350d82ae9418922b2021d94 100644 (file)
@@ -20,6 +20,8 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPConfigModuleTracker;
+import org.opendaylight.protocol.bgp.rib.spi.IdentifierUtils;
+import org.opendaylight.protocol.bgp.rib.spi.RouterIds;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.ApplicationRibId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole;
index 96457c2a054f42dc7b99d84f4217e3291b2e91cf..1233d21c7848f8fd73b8cb927072b58de811aa27 100644 (file)
@@ -37,6 +37,7 @@ import org.opendaylight.protocol.bgp.rib.spi.BGPSession;
 import org.opendaylight.protocol.bgp.rib.spi.BGPSessionListener;
 import org.opendaylight.protocol.bgp.rib.spi.BGPTerminationReason;
 import org.opendaylight.protocol.bgp.rib.spi.Peer;
+import org.opendaylight.protocol.bgp.rib.spi.RouterIds;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.prefixes.DestinationIpv4Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.prefixes.destination.ipv4.Ipv4Prefixes;
index 83be8cb31488ee4af3621e680e86daedc5b746c3..fa8479d7e1b1830b8babf490d686c2790ca2f3f5 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.primitives.UnsignedInteger;
 import java.util.Collection;
 import javax.annotation.Nonnull;
+import org.opendaylight.protocol.bgp.rib.spi.RouterIds;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.OriginatorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpOrigin;
 import org.opendaylight.yangtools.yang.common.QName;
index e9a8f5fa127d19f90d2a9b2cecf8d0d7acc9b6c1..ae88043f599dcffb852440341b7d6ac62c63598b 100644 (file)
@@ -10,7 +10,8 @@ package org.opendaylight.protocol.bgp.rib.impl;
 import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 import java.util.concurrent.TimeUnit;
-import org.opendaylight.protocol.bgp.rib.impl.spi.CacheDisconnectedPeers;
+import org.opendaylight.protocol.bgp.rib.spi.CacheDisconnectedPeers;
+import org.opendaylight.protocol.bgp.rib.spi.RouterIds;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
 
index 38931ff1320c820e544dad70d5b654859db9865d..53ad8eb4c4d240fc77e37fd0112f5d4c169655c7 100644 (file)
@@ -21,6 +21,7 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContext;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContextRegistry;
+import org.opendaylight.protocol.bgp.rib.spi.IdentifierUtils;
 import org.opendaylight.protocol.bgp.rib.spi.RIBSupport;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.rib.Peer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.rib.peer.AdjRibIn;
similarity index 87%
rename from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ExportPolicyPeerTracker.java
rename to bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/ExportPolicyPeerTrackerImpl.java
index f664edb79918614d8ba5baaa9845625cd1da5629..bf09d30caec202db058693872367f6e2f1db6145 100644 (file)
@@ -22,6 +22,9 @@ import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
+import org.opendaylight.protocol.bgp.rib.spi.ExportPolicyPeerTracker;
+import org.opendaylight.protocol.bgp.rib.spi.IdentifierUtils;
+import org.opendaylight.protocol.bgp.rib.spi.PeerExportGroup;
 import org.opendaylight.protocol.bgp.rib.spi.RibSupportUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole;
@@ -33,11 +36,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNod
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/**
- * Tracks peers for adj-rib-out writeout.
- */
-final class ExportPolicyPeerTracker extends AbstractPeerRoleTracker {
-    private static final Logger LOG = LoggerFactory.getLogger(ExportPolicyPeerTracker.class);
+final class ExportPolicyPeerTrackerImpl extends AbstractPeerRoleTracker implements ExportPolicyPeerTracker {
+    private static final Logger LOG = LoggerFactory.getLogger(ExportPolicyPeerTrackerImpl.class);
     private static final Function<YangInstanceIdentifier, Entry<PeerId, YangInstanceIdentifier>> GENERATE_PEERID = new Function<YangInstanceIdentifier, Entry<PeerId, YangInstanceIdentifier>>() {
         @Override
         public Entry<PeerId, YangInstanceIdentifier> apply(final YangInstanceIdentifier input) {
@@ -51,7 +51,7 @@ final class ExportPolicyPeerTracker extends AbstractPeerRoleTracker {
     private volatile Map<PeerRole, PeerExportGroup> groups = Collections.emptyMap();
     private final PolicyDatabase policyDatabase;
 
-    ExportPolicyPeerTracker(final PolicyDatabase policyDatabase) {
+    ExportPolicyPeerTrackerImpl(final PolicyDatabase policyDatabase) {
         this.policyDatabase = Preconditions.checkNotNull(policyDatabase);
     }
 
@@ -76,7 +76,7 @@ final class ExportPolicyPeerTracker extends AbstractPeerRoleTracker {
             final AbstractExportPolicy policy = this.policyDatabase.exportPolicyForRole(e.getKey());
             final Collection<Entry<PeerId, YangInstanceIdentifier>> peers = ImmutableList.copyOf(Collections2.transform(e.getValue(), GENERATE_PEERID));
 
-            ret.put(e.getKey(), new PeerExportGroup(peers, allPeerRoles, policy));
+            ret.put(e.getKey(), new PeerExportGroupImpl(peers, allPeerRoles, policy));
         }
 
         return ret;
@@ -101,11 +101,13 @@ final class ExportPolicyPeerTracker extends AbstractPeerRoleTracker {
         }
     }
 
-    PeerExportGroup getPeerGroup(final PeerRole role) {
+    @Override
+    public PeerExportGroup getPeerGroup(final PeerRole role) {
         return this.groups.get(Preconditions.checkNotNull(role));
     }
 
-    void onTablesChanged(final PeerId peerId, final DataTreeCandidateNode node) {
+    @Override
+    public void onTablesChanged(final PeerId peerId, final DataTreeCandidateNode node) {
         if (node.getDataAfter().isPresent()) {
             final NodeIdentifierWithPredicates value = (NodeIdentifierWithPredicates) node.getDataAfter().get().getIdentifier();
             final boolean added = this.peerTables.put(peerId, value);
@@ -119,7 +121,8 @@ final class ExportPolicyPeerTracker extends AbstractPeerRoleTracker {
         }
     }
 
-    boolean isTableSupported(final PeerId peerId, final TablesKey tablesKey) {
+    @Override
+    public boolean isTableSupported(final PeerId peerId, final TablesKey tablesKey) {
         return this.peerTables.get(peerId).contains(RibSupportUtils.toYangKey(SupportedTables.QNAME, tablesKey));
     }
 
index 10cdb29752e7e039b1278b8e1775f3c21584a1ce..2f45ddb6bced6d322487852ffd442c1c4fdbd378 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.protocol.bgp.rib.impl;
 import com.google.common.base.Preconditions;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import org.opendaylight.protocol.bgp.rib.spi.IdentifierUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
index d8724af6a8ae7fef4d5f072ee4de571ce44326db..f52824caded76b9cd5f2295a78b3718a23c9226e 100644 (file)
@@ -23,10 +23,14 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
-import org.opendaylight.protocol.bgp.rib.impl.spi.CacheDisconnectedPeers;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContextRegistry;
+import org.opendaylight.protocol.bgp.rib.spi.CacheDisconnectedPeers;
+import org.opendaylight.protocol.bgp.rib.spi.ExportPolicyPeerTracker;
+import org.opendaylight.protocol.bgp.rib.spi.IdentifierUtils;
+import org.opendaylight.protocol.bgp.rib.spi.PeerExportGroup;
 import org.opendaylight.protocol.bgp.rib.spi.RIBSupport;
 import org.opendaylight.protocol.bgp.rib.spi.RibSupportUtils;
+import org.opendaylight.protocol.bgp.rib.spi.RouterIds;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole;
@@ -86,7 +90,7 @@ final class LocRibWriter implements AutoCloseable, DOMDataTreeChangeListener {
         this.ourAs = Preconditions.checkNotNull(ourAs);
         this.ribSupport = registry.getRIBSupportContext(tablesKey).getRibSupport();
         this.attributesIdentifier = this.ribSupport.routeAttributesIdentifier();
-        this.peerPolicyTracker = new ExportPolicyPeerTracker(pd);
+        this.peerPolicyTracker = new ExportPolicyPeerTrackerImpl(pd);
         this.cacheDisconnectedPeers = cacheDisconnectedPeers;
 
         final DOMDataWriteTransaction tx = this.chain.newWriteOnlyTransaction();
similarity index 73%
rename from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/PeerExportGroup.java
rename to bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/PeerExportGroupImpl.java
index fe5fbfee7851609e3cbeaafd936be1f9db571605..300fc4553dc09b359d9e2982ee5ae601c7ad8771 100644 (file)
@@ -11,31 +11,31 @@ import com.google.common.base.Preconditions;
 import java.util.Collection;
 import java.util.Map;
 import java.util.Map.Entry;
+import org.opendaylight.protocol.bgp.rib.spi.PeerExportGroup;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 
-/**
- * A collection of peers sharing the same export policy.
- */
-final class PeerExportGroup {
+final class PeerExportGroupImpl implements PeerExportGroup {
     private final Collection<Entry<PeerId, YangInstanceIdentifier>> peers;
     private final Map<PeerId, PeerRole> peerRoles;
     private final AbstractExportPolicy policy;
 
-    PeerExportGroup(final Collection<Entry<PeerId, YangInstanceIdentifier>> peers, final Map<PeerId, PeerRole> peerRoles, final AbstractExportPolicy policy) {
+    PeerExportGroupImpl(final Collection<Entry<PeerId, YangInstanceIdentifier>> peers, final Map<PeerId, PeerRole> peerRoles, final AbstractExportPolicy policy) {
         this.peers = Preconditions.checkNotNull(peers);
         this.peerRoles = Preconditions.checkNotNull(peerRoles);
         this.policy = Preconditions.checkNotNull(policy);
     }
 
-    ContainerNode effectiveAttributes(final PeerId sourcePeerId, final ContainerNode attributes) {
+    @Override
+    public ContainerNode effectiveAttributes(final PeerId sourcePeerId, final ContainerNode attributes) {
         final PeerRole peerRole = peerRoles.get(sourcePeerId);
         return attributes == null || peerRole == null ? null :  policy.effectiveAttributes(peerRole, attributes);
     }
 
-    Collection<Entry<PeerId, YangInstanceIdentifier>> getPeers() {
+    @Override
+    public Collection<Entry<PeerId, YangInstanceIdentifier>> getPeers() {
         return peers;
     }
 }
\ No newline at end of file
index 727b0ad4fed60dc1faf72914a4d0a8fff57bd60c..03d965460e6794f20e855ba110852ea013972059 100644 (file)
@@ -37,10 +37,10 @@ import org.opendaylight.protocol.bgp.openconfig.spi.BGPConfigModuleTracker;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPOpenConfigProvider;
 import org.opendaylight.protocol.bgp.rib.DefaultRibReference;
 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
-import org.opendaylight.protocol.bgp.rib.impl.spi.CacheDisconnectedPeers;
 import org.opendaylight.protocol.bgp.rib.impl.spi.CodecsRegistry;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIB;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContextRegistry;
+import org.opendaylight.protocol.bgp.rib.spi.CacheDisconnectedPeers;
 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
 import org.opendaylight.protocol.bgp.rib.spi.RibSupportUtils;
 import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
index b411204c74e5d01afe2748364cf1eb49ea02ac06..ce83b6831afcef24f4de0ee93575855c072329f3 100644 (file)
@@ -13,6 +13,7 @@ import javax.annotation.Nonnull;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
 import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
 import org.opendaylight.protocol.bgp.openconfig.spi.BGPOpenConfigProvider;
+import org.opendaylight.protocol.bgp.rib.spi.CacheDisconnectedPeers;
 import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionConsumerContext;
 import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
index 0516f81e606d786664354adeb7d1c8e4b26762ed..6b7c05fc67b5c6073211fd46427c61bcc0f392e2 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.protocol.bgp.rib.impl;
 
 import static org.junit.Assert.assertNotNull;
+
 import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.CheckedFuture;
 import java.util.Set;
@@ -21,6 +22,7 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
 import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContext;
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIBSupportContextRegistry;
+import org.opendaylight.protocol.bgp.rib.spi.IdentifierUtils;
 import org.opendaylight.protocol.bgp.rib.spi.RibSupportUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole;
index 601b8f811b45c674a2848e200514b1cd99e292e8..036e201b43c91fe4788182c3d2e7233a6af02999 100644 (file)
@@ -9,12 +9,14 @@ package org.opendaylight.protocol.bgp.rib.impl;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.common.primitives.UnsignedInteger;
 import java.util.ArrayList;
 import java.util.List;
 import org.junit.Test;
+import org.opendaylight.protocol.bgp.rib.spi.RouterIds;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.as.path.Segments;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.as.path.SegmentsBuilder;
index 04dae500ad0fcc1349a1ebec98a7d2fb4de1366e..32616d5893dd51ddf8fd5029c7aa4a3b21c10edd 100644 (file)
@@ -11,6 +11,7 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
 import org.junit.Test;
+import org.opendaylight.protocol.bgp.rib.spi.RouterIds;
 
 public class OffsetMapTest {
 
similarity index 79%
rename from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/spi/CacheDisconnectedPeers.java
rename to bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/CacheDisconnectedPeers.java
index ec349d7939ef763ec5f89cb862acf1d01b1cb549..8d0ce85a823f71b0ca7adc103c6afbdc480a9168 100644 (file)
@@ -5,7 +5,7 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.protocol.bgp.rib.impl.spi;
+package org.opendaylight.protocol.bgp.rib.spi;
 
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
@@ -14,17 +14,23 @@ public interface CacheDisconnectedPeers {
 
     /**
      * Check whether Peer is inside the cache List
+     *
+     * @param peerId of destination peer
      * @return True if peer is contained on CacheList
      */
     boolean isPeerDisconnected(PeerId peerId);
 
     /**
      * Remove Peer from cache in case of reconnection
+     *
+     * @param peerId of reconnected peer
      */
     void reconnected(PeerId peerId);
 
     /**
-     * Insert disconnected peer to cache
+     * Add to cache list disconnected peer
+     *
+     * @param peerId of disconnected peer
      */
     void insertDesconectedPeer(Ipv4Address peerId);
 }
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/ExportPolicyPeerTracker.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/ExportPolicyPeerTracker.java
new file mode 100644 (file)
index 0000000..a4c10b5
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.protocol.bgp.rib.spi;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode;
+
+/**
+ * Tracks peers for adj-rib-out writeout.
+ */
+public interface ExportPolicyPeerTracker {
+    /**
+     * Update set with supported tables per peer
+     * @param peerId which receveid the change
+     * @param node data change
+     */
+    void onTablesChanged(PeerId peerId, DataTreeCandidateNode node);
+
+    /**
+     * returns PeerExportGroup per role
+     * @param role of desired PeerExportGroup
+     * @return PeerExportGroup
+     */
+    PeerExportGroup getPeerGroup(PeerRole role);
+
+    /**
+     * check whether the peer supports the table
+     * @param peerId of peer
+     * @param tablesKey to be checked
+     * @return true if peer supports table
+     */
+    boolean isTableSupported(PeerId peerId, TablesKey tablesKey);
+
+    /**
+     * @param peerId of peer
+     * @return Role of peer
+     */
+    PeerRole getRole(YangInstanceIdentifier peerId);
+
+    /**
+     * @param change data change
+     * @param peerPath YII of peer
+     */
+    void onDataTreeChanged(DataTreeCandidateNode change, YangInstanceIdentifier peerPath);
+}
similarity index 88%
rename from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/IdentifierUtils.java
rename to bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/IdentifierUtils.java
index e70596c9f250650100106f2b398e417b52eb3f87..65f3e3c644e5173c90b008b5b3f3b341bfdb8a7e 100644 (file)
@@ -5,7 +5,7 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.protocol.bgp.rib.impl;
+package org.opendaylight.protocol.bgp.rib.spi;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
@@ -18,7 +18,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 
-final class IdentifierUtils {
+public final class IdentifierUtils {
     private static final Predicate<PathArgument> IS_PEER = new Predicate<PathArgument>() {
         @Override
         public boolean apply(final PathArgument input) {
@@ -51,15 +51,15 @@ final class IdentifierUtils {
         return YangInstanceIdentifier.create(Iterables.limit(id.getPathArguments(), idx + 1));
     }
 
-    static YangInstanceIdentifier peerPath(final YangInstanceIdentifier id) {
+    public static YangInstanceIdentifier peerPath(final YangInstanceIdentifier id) {
         return firstIdentifierOf(id, IS_PEER);
     }
 
-    static NodeIdentifierWithPredicates peerKey(final YangInstanceIdentifier id) {
+    public static NodeIdentifierWithPredicates peerKey(final YangInstanceIdentifier id) {
         return firstKeyOf(id, IS_PEER);
     }
 
-    static PeerId peerId(final NodeIdentifierWithPredicates peerKey) {
+    public static PeerId peerId(final NodeIdentifierWithPredicates peerKey) {
         // We could use a codec, but this is simple enough
         return new PeerId((String) peerKey.getKeyValues().get(PEER_ID));
     }
@@ -68,7 +68,7 @@ final class IdentifierUtils {
         return firstKeyOf(id, IS_TABLES);
     }
 
-    static NodeIdentifierWithPredicates domPeerId(final PeerId peer) {
+    public static NodeIdentifierWithPredicates domPeerId(final PeerId peer) {
         return new NodeIdentifierWithPredicates(Peer.QNAME, PEER_ID, peer.getValue());
     }
 }
diff --git a/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/PeerExportGroup.java b/bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/PeerExportGroup.java
new file mode 100644 (file)
index 0000000..0b38810
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.protocol.bgp.rib.spi;
+
+import java.util.Collection;
+import java.util.Map;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+
+/**
+ * A collection of peers sharing the same export policy.
+ */
+public interface PeerExportGroup {
+    /**
+     * Transform outgoing attributes according to policy per Peer
+     * @param sourcePeerId root Peer
+     * @param attributes attributes container
+     * @return return attributes container after apply policy
+     */
+    ContainerNode effectiveAttributes(PeerId sourcePeerId, ContainerNode attributes);
+
+    /**
+     *
+     * @return map of peer
+     */
+    Collection<Map.Entry<PeerId, YangInstanceIdentifier>> getPeers();
+}
similarity index 97%
rename from bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/RouterIds.java
rename to bgp/rib-spi/src/main/java/org/opendaylight/protocol/bgp/rib/spi/RouterIds.java
index bc6b3977984bb61b8699d957c6c3fc6c8c311337..25bb5fb2c6d2d10a1d77552b352962190ce72bb2 100644 (file)
@@ -5,7 +5,7 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-package org.opendaylight.protocol.bgp.rib.impl;
+package org.opendaylight.protocol.bgp.rib.spi;
 
 import com.google.common.base.Preconditions;
 import com.google.common.cache.CacheBuilder;
@@ -17,7 +17,7 @@ import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerId;
 
-final class RouterIds {
+public final class RouterIds {
     private static final LoadingCache<String, UnsignedInteger> ROUTER_IDS = CacheBuilder.newBuilder().weakValues().build(new CacheLoader<String, UnsignedInteger>() {
         @Override
         public UnsignedInteger load(final String key) {