BUG-108: make sure we add proper attributes, too 83/2683/1
authorRobert Varga <rovarga@cisco.com>
Tue, 12 Nov 2013 19:40:11 +0000 (20:40 +0100)
committerRobert Varga <rovarga@cisco.com>
Tue, 12 Nov 2013 19:40:11 +0000 (20:40 +0100)
Change-Id: I4bd99f0012b0df171b1cb81c560ea0519de4d89f
Signed-off-by: Robert Varga <rovarga@cisco.com>
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/LinkstateAdjRIBsIn.java
bgp/linkstate/src/main/yang/bgp-linkstate.yang

index 81845eacccfa232914319748c090c4b1e1976782..2ee9527e4d37e0610eb9293a29fd55a15d6e631b 100644 (file)
@@ -13,11 +13,18 @@ import org.opendaylight.controller.sal.binding.api.data.DataModificationTransact
 import org.opendaylight.protocol.bgp.rib.spi.AbstractAdjRIBsIn;
 import org.opendaylight.protocol.bgp.rib.spi.Peer;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.LinkstateDestination;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.PathAttributes1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.linkstate.destination.CLinkstateDestination;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.LinkstateRoute;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.LinkstateRouteBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.LinkstateRouteKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.Attributes1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.Attributes1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.ObjectType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.attributes.AttributeType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.attributes.attribute.type.link.LinkAttributesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.attributes.attribute.type.node.NodeAttributesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.attributes.attribute.type.prefix.PrefixAttributesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.object.type.LinkBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.object.type.NodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.object.type.Prefix;
@@ -26,6 +33,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.link
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.object.type.link.LocalNodeDescriptorsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.object.type.link.RemoteNodeDescriptorsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.object.type.node.NodeDescriptorsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.object.type.prefix.AdvertisingNodeDescriptorsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.update.path.attributes.linkstate.path.attribute.LinkStateAttribute;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.update.path.attributes.linkstate.path.attribute.link.state.attribute.LinkAttributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.update.path.attributes.linkstate.path.attribute.link.state.attribute.NodeAttributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.update.path.attributes.linkstate.path.attribute.link.state.attribute.PrefixAttributes;
 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.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;
@@ -37,11 +49,15 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import com.google.common.base.Preconditions;
 
 final class LinkstateAdjRIBsIn extends AbstractAdjRIBsIn<CLinkstateDestination, LinkstateRoute> {
-       private static abstract class LinkstateRIBEntryData extends RIBEntryData<CLinkstateDestination, LinkstateRoute> {
-               protected LinkstateRIBEntryData(final PathAttributes attributes) {
+       private static abstract class LinkstateRIBEntryData<LSATTR extends LinkStateAttribute> extends RIBEntryData<CLinkstateDestination, LinkstateRoute> {
+               private final LSATTR lsattr;
+
+               protected LinkstateRIBEntryData(final PathAttributes attributes, final LSATTR lsattr) {
                        super(attributes);
+                       this.lsattr = Preconditions.checkNotNull(lsattr);
                }
 
+               protected abstract AttributeType createAttributes(LSATTR lsattr);
                protected abstract ObjectType createObject(CLinkstateDestination key);
 
                @Override
@@ -51,7 +67,10 @@ final class LinkstateAdjRIBsIn extends AbstractAdjRIBsIn<CLinkstateDestination,
                        builder.setIdentifier(key.getIdentifier());
                        builder.setProtocolId(key.getProtocolId());
                        builder.setDistinguisher(key.getDistinguisher());
-                       builder.setAttributes(new AttributesBuilder(getPathAttributes()).build());
+                       builder.setAttributes(new AttributesBuilder(getPathAttributes()).
+                                       addAugmentation(Attributes1.class, new Attributes1Builder().setAttributeType(
+                                                       Preconditions.checkNotNull(createAttributes(lsattr))).build()).
+                                                       build());
                        builder.setObjectType(Preconditions.checkNotNull(createObject(key)));
 
                        return builder.build();
@@ -75,19 +94,36 @@ final class LinkstateAdjRIBsIn extends AbstractAdjRIBsIn<CLinkstateDestination,
                        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.update.PathAttributes attributes) {
                final CLinkstateDestination key = (CLinkstateDestination) ((LinkstateDestination) nlri.getAdvertizedRoutes().getDestinationType()).getCLinkstateDestination();
 
+               final LinkStateAttribute lsattr = attributes.getAugmentation(PathAttributes1.class).
+                               getLinkstatePathAttribute().getLinkStateAttribute();
+
                RIBEntryData<CLinkstateDestination, LinkstateRoute> data = null;
                switch (key.getNlriType()) {
                case Ipv4Prefix:
                case Ipv6Prefix:
-                       data = new LinkstateRIBEntryData(attributes) {
+                       data = new LinkstateRIBEntryData<PrefixAttributes>(attributes, (PrefixAttributes)lsattr) {
+                               @Override
+                               protected AttributeType createAttributes(final PrefixAttributes lsattr) {
+                                       return new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.attributes.attribute.type.PrefixBuilder().
+                                                       setPrefixAttributes(new PrefixAttributesBuilder(lsattr).build()).build();
+                               }
+
                                @Override
                                protected Prefix createObject(final CLinkstateDestination key) {
-                                       return new PrefixBuilder(key.getPrefixDescriptors()).build();
+                                       return new PrefixBuilder(key.getPrefixDescriptors()).
+                                                       setAdvertisingNodeDescriptors(new AdvertisingNodeDescriptorsBuilder(key.getLocalNodeDescriptors()).build()).
+                                                       build();
                                }
                        };
                        break;
                case Link:
-                       data = new LinkstateRIBEntryData(attributes) {
+                       data = new LinkstateRIBEntryData<LinkAttributes>(attributes, (LinkAttributes)lsattr) {
+                               @Override
+                               protected AttributeType createAttributes(final LinkAttributes lsattr) {
+                                       return new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.attributes.attribute.type.LinkBuilder().
+                                                       setLinkAttributes(new LinkAttributesBuilder(lsattr).build()).build();
+                               }
+
                                @Override
                                protected ObjectType createObject(final CLinkstateDestination key) {
                                        final LinkBuilder b = new LinkBuilder();
@@ -101,7 +137,13 @@ final class LinkstateAdjRIBsIn extends AbstractAdjRIBsIn<CLinkstateDestination,
                        };
                        break;
                case Node:
-                       data = new LinkstateRIBEntryData(attributes) {
+                       data = new LinkstateRIBEntryData<NodeAttributes>(attributes, (NodeAttributes)lsattr) {
+                               @Override
+                               protected AttributeType createAttributes(final NodeAttributes lsattr) {
+                                       return new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.loc.rib.tables.routes.linkstate.routes.linkstate.route.attributes.attribute.type.NodeBuilder().
+                                                       setNodeAttributes(new NodeAttributesBuilder(lsattr).build()).build();
+                               }
+
                                @Override
                                protected ObjectType createObject(final CLinkstateDestination key) {
                                        return new NodeBuilder().setNodeDescriptors(new NodeDescriptorsBuilder(key.getLocalNodeDescriptors()).build()).build();
index 2a862f830138e454e7814367e9f89e06bc841fe1..aa0bb66dd1dab8882b08f7cc270f76021b6f029e 100644 (file)
@@ -609,11 +609,35 @@ module bgp-linkstate {
                                                }
                                        }
                                        case prefix {
+                                               container advertising-node-descriptors {
+                                                       uses node-identifier;
+                                               }
+
                                                uses prefix-identifiers;
                                        }
                                }
 
-                               uses bgp-rib:route;
+                               uses bgp-rib:route {
+                                       augment attributes {
+                                               choice attribute-type {
+                                                       case node {
+                                                               container node-attributes {
+                                                                       uses node-state;
+                                                               }
+                                                       }
+                                                       case link {
+                                                               container link-attributes {
+                                                                       uses link-state;
+                                                               }
+                                                       }
+                                                       case prefix {
+                                                               container prefix-attributes {
+                                                                       uses prefix-state;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
                        }
                }
        }