Change-Id: I6a787866e99238412fd83b6267f7c915dbbb5680
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>ietf-inet-types</artifactId>
</dependency>
<groupId>org.opendaylight.yangtools.model</groupId>
<artifactId>ietf-inet-types</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>config-api</artifactId>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>config-api</artifactId>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>sal-common-api</artifactId>
<dependency>
<groupId>org.opendaylight.controller</groupId>
<artifactId>sal-common-api</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
</dependency>
<dependency>
<groupId>org.opendaylight.controller</groupId>
import com.google.common.collect.ImmutableSet;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import com.google.common.collect.ImmutableSet;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.protocol.bgp.linkstate.nlri.LinkstateNlriParser;
import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBSupport;
import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
import org.opendaylight.protocol.bgp.linkstate.nlri.LinkstateNlriParser;
import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBSupport;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild;
import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
abstract void apply(DOMDataWriteTransaction tx, YangInstanceIdentifier base, NodeIdentifierWithPredicates routeKey, DataContainerNode<?> route, final ContainerNode attributes);
}
abstract void apply(DOMDataWriteTransaction tx, YangInstanceIdentifier base, NodeIdentifierWithPredicates routeKey, DataContainerNode<?> route, final ContainerNode attributes);
}
- private final class PutRoute extends ApplyRoute {
+ private static final class DeleteRoute extends ApplyRoute {
+ @Override
+ void apply(final DOMDataWriteTransaction tx, final YangInstanceIdentifier base, final NodeIdentifierWithPredicates routeKey, final DataContainerNode<?> route, final ContainerNode attributes) {
+ tx.delete(LogicalDatastoreType.OPERATIONAL, base.node(routeKey));
+ }
+ }
+ private final class PutRoute extends ApplyRoute {
@Override
void apply(final DOMDataWriteTransaction tx, final YangInstanceIdentifier base, final NodeIdentifierWithPredicates routeKey,
final DataContainerNode<?> route, final ContainerNode attributes) {
@Override
void apply(final DOMDataWriteTransaction tx, final YangInstanceIdentifier base, final NodeIdentifierWithPredicates routeKey,
final DataContainerNode<?> route, final ContainerNode attributes) {
- // TODO Auto-generated method stub
+ final DataContainerNodeBuilder<NodeIdentifierWithPredicates, MapEntryNode> b = ImmutableNodes.mapEntryBuilder();
+ b.withNodeIdentifier(routeKey);
+ // FIXME: All route children, there should be a utility somewhere to do this
+ for (final DataContainerChild<? extends PathArgument, ?> child : route.getValue()) {
+ b.withChild(child);
+ }
+ // Add attributes
+ final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> cb = Builders.containerBuilder(attributes);
+ cb.withNodeIdentifier(routeAttributesIdentifier());
+ b.withChild(cb.build());
+ tx.put(LogicalDatastoreType.OPERATIONAL, base.node(routeKey), b.build());
private static final QName ROUTE_KEY = QName.cachedReference(QName.create(LinkstateRoute.QNAME, "route-key"));
private static final LinkstateRIBSupport SINGLETON = new LinkstateRIBSupport();
private static final QName ROUTE_KEY = QName.cachedReference(QName.create(LinkstateRoute.QNAME, "route-key"));
private static final LinkstateRIBSupport SINGLETON = new LinkstateRIBSupport();
+ private static final ApplyRoute DELETE_ROUTE = new DeleteRoute();
+
private final ChoiceNode emptyRoutes = Builders.choiceBuilder()
.withNodeIdentifier(new NodeIdentifier(Routes.QNAME))
.addChild(Builders.containerBuilder()
private final ChoiceNode emptyRoutes = Builders.choiceBuilder()
.withNodeIdentifier(new NodeIdentifier(Routes.QNAME))
.addChild(Builders.containerBuilder()
private final NodeIdentifier destination = new NodeIdentifier(DestinationLinkstate.QNAME);
private final NodeIdentifier route = new NodeIdentifier(LinkstateRoute.QNAME);
private final NodeIdentifier nlriRoutesList = new NodeIdentifier(CLinkstateDestination.QNAME);
private final NodeIdentifier destination = new NodeIdentifier(DestinationLinkstate.QNAME);
private final NodeIdentifier route = new NodeIdentifier(LinkstateRoute.QNAME);
private final NodeIdentifier nlriRoutesList = new NodeIdentifier(CLinkstateDestination.QNAME);
- private final NodeIdentifier routeKeyLeaf = new NodeIdentifier(ROUTE_KEY);
private final ApplyRoute putRoute = new PutRoute();
private LinkstateRIBSupport() {
private final ApplyRoute putRoute = new PutRoute();
private LinkstateRIBSupport() {
@Override
protected void deleteDestinationRoutes(final DOMDataWriteTransaction tx, final YangInstanceIdentifier tablePath,
final ContainerNode destination) {
@Override
protected void deleteDestinationRoutes(final DOMDataWriteTransaction tx, final YangInstanceIdentifier tablePath,
final ContainerNode destination) {
- // TODO Auto-generated method stub
-
+ processDestination(tx, tablePath, destination, null, DELETE_ROUTE);
}
private void processDestination(final DOMDataWriteTransaction tx, final YangInstanceIdentifier tablePath,
}
private void processDestination(final DOMDataWriteTransaction tx, final YangInstanceIdentifier tablePath,
- // FIXME: Re-enable once linkstate RIB is introduced.
@Test
public void testWithLinkstate() throws InterruptedException, ExecutionException {
final List<BgpTableType> tables = ImmutableList.of(
@Test
public void testWithLinkstate() throws InterruptedException, ExecutionException {
final List<BgpTableType> tables = ImmutableList.of(