<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-binding</artifactId>
- <version>${yangtools.version}</version>
+ <version>${code.generator.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<Import-Package>
com.google.common.base,
org.opendaylight.protocol.concepts,
+ org.opendaylight.yang.gen.v1.*,
+ org.opendaylight.yangtools.yang.binding
</Import-Package>
</instructions>
</configuration>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-binding</artifactId>
- <version>${yangtools.version}</version>
+ <version>${code.generator.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<groupId>org.opendaylight.controller</groupId>
<artifactId>sal-binding-api</artifactId>
<version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-binding</artifactId>
+ <version>${code.generator.version}</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<configuration>
<instructions>
<Bundle-Name>${project.groupId}.${project.artifactId}</Bundle-Name>
- <Import-Package>
- org.opendaylight.protocol.concepts,
- org.opendaylight.protocol.framework,
- com.google.common.base,
- com.google.common.collect,
- com.google.common.eventbus,
- javax.annotation,
- javax.management,
- org.opendaylight.protocol.bgp.concepts,
- org.opendaylight.protocol.bgp.parser,
- org.opendaylight.protocol.bgp.parser.impl,
- org.opendaylight.protocol.bgp.util,
- org.opendaylight.protocol.util,
- org.slf4j,
- io.netty.channel,
- io.netty.util.concurrent,
- </Import-Package>
<Export-Package>
org.opendaylight.protocol.bgp.rib.impl,
org.opendaylight.protocol.bgp.rib.impl.spi
- </Export-Package>
+ </Export-Package>
+ <Bundle-Activator>org.opendaylight.protocol.bgp.rib.impl.Activator</Bundle-Activator>
</instructions>
</configuration>
</plugin>
--- /dev/null
+package org.opendaylight.protocol.bgp.rib.impl;
+
+import org.opendaylight.controller.sal.binding.api.AbstractBindingAwareProvider;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+
+public final class Activator extends AbstractBindingAwareProvider {
+ private RIBImpl rib;
+
+
+ @Override
+ public void onSessionInitiated(final ProviderContext session) {
+ rib = new RIBImpl(session.getSALService(DataProviderService.class));
+ }
+}
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import org.opendaylight.controller.sal.binding.api.data.DataModification;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction ;
import org.opendaylight.protocol.bgp.rib.spi.AbstractAdjRIBsIn;
import org.opendaylight.protocol.bgp.rib.spi.AdjRIBsIn;
import org.opendaylight.protocol.bgp.rib.spi.AdjRIBsInFactory;
}
@Override
- public InstanceIdentifier identifierForKey(final InstanceIdentifier basePath,
+ public InstanceIdentifier<?> identifierForKey(final InstanceIdentifier<?> basePath,
final Ipv4Prefix key) {
- final InstanceIdentifierBuilder builder = InstanceIdentifier.builder(basePath);
+ final InstanceIdentifierBuilder<?> builder = InstanceIdentifier.builder(basePath);
builder.node(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.loc.rib.tables.routes.Ipv4Routes.class);
builder.node(Ipv4Routes.class, new Ipv4RoutesKey(key));
@Override
public void addRoutes(
- final DataModification trans,
+ final DataModificationTransaction trans,
final Peer peer,
final MpReachNlri nlri,
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributes attributes) {
}
@Override
- public void removeRoutes(final DataModification trans, final Peer peer,
+ public void removeRoutes(final DataModificationTransaction trans, final Peer peer,
final MpUnreachNlri nlri) {
for (Ipv4Prefix id : ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.update.path.attributes.mp.unreach.nlri.withdrawn.routes.nlri.Ipv4)nlri.getWithdrawnRoutes().getNlri()).getIpv4Prefixes()) {
super.remove(trans, peer, id);
}
@Override
- public InstanceIdentifier identifierForKey(final InstanceIdentifier basePath,
+ public InstanceIdentifier<?> identifierForKey(final InstanceIdentifier<?> basePath,
final Ipv6Prefix key) {
- final InstanceIdentifierBuilder builder = InstanceIdentifier.builder(basePath);
+ final InstanceIdentifierBuilder<?> builder = InstanceIdentifier.builder(basePath);
builder.node(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.loc.rib.tables.routes.Ipv6Routes.class);
builder.node(Ipv6Routes.class, new Ipv6RoutesKey(key));
@Override
public void addRoutes(
- final DataModification trans,
+ final DataModificationTransaction trans,
final Peer peer,
final MpReachNlri nlri,
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributes attributes) {
}
@Override
- public void removeRoutes(final DataModification trans, final Peer peer,
+ public void removeRoutes(final DataModificationTransaction trans, final Peer peer,
final MpUnreachNlri nlri) {
for (Ipv6Prefix id : ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.update.path.attributes.mp.unreach.nlri.withdrawn.routes.nlri.Ipv6)nlri.getWithdrawnRoutes().getNlri()).getIpv6Prefixes()) {
super.remove(trans, peer, id);
}
@Override
- public InstanceIdentifier identifierForKey(final InstanceIdentifier basePath,
+ public InstanceIdentifier<?> identifierForKey(final InstanceIdentifier<?> basePath,
final CLinkstateDestination key) {
- final InstanceIdentifierBuilder builder = InstanceIdentifier.builder(basePath);
+ final InstanceIdentifierBuilder<?> builder = InstanceIdentifier.builder(basePath);
switch (key.getNlriType()) {
case Ipv4Prefix:
@Override
public void addRoutes(
- final DataModification trans,
+ final DataModificationTransaction trans,
final Peer peer,
final MpReachNlri nlri,
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributes attributes) {
}
@Override
- public void removeRoutes(final DataModification trans, final Peer peer,
+ public void removeRoutes(final DataModificationTransaction trans, final Peer peer,
final MpUnreachNlri nlri) {
final CLinkstateDestination key =
((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.
* @param <T> Actual object state reference
*/
final class BGPObjectComparator implements Comparator<PathAttributes> {
+ public static final BGPObjectComparator INSTANCE = new BGPObjectComparator();
+
+ private BGPObjectComparator() {
+ }
+
@Override
public int compare(final PathAttributes o1, final PathAttributes o2) {
if (o1 == o2) {
import javax.annotation.concurrent.ThreadSafe;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.controller.sal.binding.api.data.DataModification;
-import org.opendaylight.controller.sal.binding.api.data.DataModification.TransactionStatus;
+
+
+import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
import org.opendaylight.protocol.bgp.rib.spi.AdjRIBsIn;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.Update;
import com.google.common.base.Preconditions;
@ThreadSafe
-public final class RIBImpl {
+final class RIBImpl {
private static final Logger logger = LoggerFactory.getLogger(RIBImpl.class);
private final DataProviderService dps;
private final RIBTables tables;
- private final String name;
- public RIBImpl(final String name, final ProviderContext context) {
- this.name = Preconditions.checkNotNull(name);
- this.dps = context.getSALService(DataProviderService.class);
- this.tables = new RIBTables(new BGPObjectComparator(), AdjRIBsInFactoryRegistryImpl.INSTANCE);
+ RIBImpl(final DataProviderService dps) {
+ this.dps = Preconditions.checkNotNull(dps);
+ this.tables = new RIBTables(BGPObjectComparator.INSTANCE, AdjRIBsInFactoryRegistryImpl.INSTANCE);
}
synchronized void updateTables(final BGPPeer peer, final Update message) {
- final DataModification trans = dps.beginTransaction();
+ final DataModificationTransaction trans = dps.beginTransaction();
// FIXME: detect and handle end-of-RIB markers
synchronized void clearTable(final BGPPeer peer, final TablesKey key) {
final AdjRIBsIn ari = tables.get(key);
if (ari != null) {
- final DataModification trans = dps.beginTransaction();
+ final DataModificationTransaction trans = dps.beginTransaction();
ari.clear(trans, peer);
// FIXME: we need to attach to this future for failures
}
protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
- toStringHelper.add("name", this.name);
return toStringHelper;
}
}
<artifactId>sal-binding-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.yangtools</groupId>
+ <artifactId>yang-binding</artifactId>
+ <version>${code.generator.version}</version>
+ </dependency>
+
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.ThreadSafe;
-import org.opendaylight.controller.sal.binding.api.data.DataModification;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.PathAttributes;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.LocRib;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.Tables;
private final ID key;
@GuardedBy("this")
- private InstanceIdentifier name;
+ private InstanceIdentifier<?> name;
@GuardedBy("this")
private RIBEntryData currentState;
this.key = Preconditions.checkNotNull(key);
}
- private InstanceIdentifier getName() {
+ private InstanceIdentifier<?> getName() {
if (name == null) {
name = identifierForKey(basePath, key);
}
return newState;
}
- private void electCandidate(final DataModification transaction, final RIBEntryData candidate) {
+ private void electCandidate(final DataModificationTransaction transaction, final RIBEntryData candidate) {
if (this.currentState == null || !this.currentState.equals(candidate)) {
transaction.putRuntimeData(getName(), candidate.getDataObject(key));
this.currentState = candidate;
}
}
- synchronized boolean removeState(final DataModification transaction, final Peer peer) {
+ synchronized boolean removeState(final DataModificationTransaction transaction, final Peer peer) {
this.candidates.remove(peer);
final RIBEntryData candidate = findCandidate(null);
}
}
- synchronized void setState(final DataModification transaction, final Peer peer, final RIBEntryData state) {
+ synchronized void setState(final DataModificationTransaction transaction, final Peer peer, final RIBEntryData state) {
this.candidates.put(peer, state);
electCandidate(transaction, findCandidate(state));
}
}
private final Comparator<PathAttributes> comparator;
- private final InstanceIdentifier basePath;
+ private final InstanceIdentifier<?> basePath;
@GuardedBy("this")
private final Map<ID, RIBEntry> entries = new HashMap<>();
}
@Override
- public synchronized void clear(final DataModification trans, final Peer peer) {
+ public synchronized void clear(final DataModificationTransaction trans, final Peer peer) {
final Iterator<Map.Entry<ID, RIBEntry>> i = this.entries.entrySet().iterator();
while (i.hasNext()) {
final Map.Entry<ID, RIBEntry> e = i.next();
}
}
- protected abstract InstanceIdentifier identifierForKey(final InstanceIdentifier basePath, final ID id);
+ protected abstract InstanceIdentifier<?> identifierForKey(final InstanceIdentifier<?> basePath, final ID id);
- protected synchronized void add(final DataModification trans, final Peer peer, final ID id, final RIBEntryData data) {
+ protected synchronized void add(final DataModificationTransaction trans, final Peer peer, final ID id, final RIBEntryData data) {
RIBEntry e = this.entries.get(id);
if (e == null) {
e = new RIBEntry(id);
e.setState(trans, peer, data);
}
- protected synchronized void remove(final DataModification trans, final Peer peer, final ID id) {
+ protected synchronized void remove(final DataModificationTransaction trans, final Peer peer, final ID id) {
final RIBEntry e = this.entries.get(id);
if (e != null && e.removeState(trans, peer)) {
this.entries.remove(id);
*/
package org.opendaylight.protocol.bgp.rib.spi;
-import org.opendaylight.controller.sal.binding.api.data.DataModification;
+import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributes;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.update.path.attributes.MpReachNlri;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130918.update.path.attributes.MpUnreachNlri;
public interface AdjRIBsIn {
- public void addRoutes(DataModification trans, Peer peer, MpReachNlri nlri, PathAttributes attributes);
- public void removeRoutes(DataModification trans, Peer peer, MpUnreachNlri nlri);
- public void clear(DataModification trans, Peer peer);
+ public void addRoutes(DataModificationTransaction trans, Peer peer, MpReachNlri nlri, PathAttributes attributes);
+ public void removeRoutes(DataModificationTransaction trans, Peer peer, MpUnreachNlri nlri);
+ public void clear(DataModificationTransaction trans, Peer peer);
}
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>sal-binding-broker-impl</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>concepts</artifactId>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-binding</artifactId>
- <version>${yangtools.version}</version>
+ <version>${code.generator.version}</version>
<scope>test</scope>
</dependency>
<dependency>
ret.add(mavenBundle("io.netty", "netty-transport", "4.0.9.Final"));
ret.add(mavenBundle("org.slf4j", "slf4j-api", "1.7.2"));
- ret.add(mavenBundle("org.opendaylight.yangtools", "concepts", "0.5-SNAPSHOT"));
- ret.add(mavenBundle("org.opendaylight.yangtools", "yang-binding", "0.5.9-SNAPSHOT"));
+ ret.add(mavenBundle("org.opendaylight.yangtools", "concepts", "0.1.1-SNAPSHOT"));
+ ret.add(mavenBundle("org.opendaylight.yangtools", "yang-binding", "0.6.0-SNAPSHOT"));
ret.add(mavenBundle("org.opendaylight.yangtools", "yang-common", "0.5.9-SNAPSHOT"));
ret.add(mavenBundle("org.opendaylight.yangtools.model", "ietf-inet-types", "2010.09.24.1"));
+ ret.add(mavenBundle("org.javassist", "javassist", "3.17.1-GA"));
+ ret.add(mavenBundle("org.opendaylight.controller", "sal-common-api", "1.0-SNAPSHOT"));
+ ret.add(mavenBundle("org.opendaylight.controller", "sal-binding-api", "1.0-SNAPSHOT"));
+ ret.add(mavenBundle("org.opendaylight.controller", "sal-binding-broker-impl", "1.0-SNAPSHOT"));
+ ret.add(mavenBundle("org.opendaylight.controller", "sal-common", "1.0-SNAPSHOT"));
+
return ret;
}
@Override
protected Collection<String> prerequisiteBundles() {
return Lists.newArrayList("concepts", "bgp-concepts", "bgp-linkstate", "bgp-parser-api",
- "bgp-parser-impl", "bgp-rib-api", "bgp-util", "framework", "util");
+ "bgp-parser-impl", "bgp-rib-api", "bgp-rib-spi", "bgp-util", "framework", "util");
}
@Override
@Override
protected Collection<String> prerequisiteBundles() {
return Lists.newArrayList("concepts", "bgp-concepts", "bgp-linkstate", "bgp-parser-api",
- "bgp-parser-impl", "bgp-rib-api", "bgp-rib-impl", "bgp-util", "framework", "util");
+ "bgp-parser-impl", "bgp-rib-api", "bgp-rib-impl", "bgp-rib-spi", "bgp-util", "framework", "util");
}
@Override
<dependency>
<groupId>org.opendaylight.yangtools</groupId>
<artifactId>yang-binding</artifactId>
- <version>${yangtools.version}</version>
+ <version>${code.generator.version}</version>
</dependency>
<dependency>
<groupId>org.opendaylight.yangtools</groupId>