Fix topology not showing prefixes learned from BGP/LS 59/5059/2
authorRobert Varga <rovarga@cisco.com>
Fri, 31 Jan 2014 11:17:26 +0000 (12:17 +0100)
committerRobert Varga <rovarga@cisco.com>
Fri, 31 Jan 2014 18:21:36 +0000 (19:21 +0100)
The Linkstate RIB plugin was losing IP reachability information in the
prefix case. Fix it by using the copy builder constructor.

Also add a defensive check for IP reachability presence in the topology
builder.

Change-Id: I0b16b036397a935771d86a3c7253c998e594ec7c
Signed-off-by: Robert Varga <rovarga@cisco.com>
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/LinkstateAdjRIBsIn.java
bgp/topology-provider/src/main/java/org/opendaylight/bgpcep/bgp/topology/provider/LinkstateTopologyBuilder.java

index 2a2c03b698c78da34fb5734d445ca90d70ad421b..375accae37e8240c0df18d2dddabd3362fb180bf 100644 (file)
@@ -23,8 +23,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.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.Attributes1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.ObjectType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.attributes.AttributeType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.LinkCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.LinkCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.NodeCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.NodeCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.PrefixCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.PrefixCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.link._case.LinkDescriptorsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.object.type.link._case.LocalNodeDescriptorsBuilder;
@@ -143,16 +146,16 @@ final class LinkstateAdjRIBsIn extends AbstractAdjRIBsIn<CLinkstateDestination,
                                                                final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.attributes.attribute.type.prefix._case.PrefixAttributesBuilder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.attributes.attribute.type.prefix._case.PrefixAttributesBuilder(a);
                                                                b.setPrefixAttributes(builder.build());
                                                        }
-
                                                }
 
                                                return b.build();
                                        }
 
                                        @Override
-                                       protected ObjectType createObject(final CLinkstateDestination key) {
-                                               return new PrefixCaseBuilder().setAdvertisingNodeDescriptors(
-                                                               new AdvertisingNodeDescriptorsBuilder(key.getLocalNodeDescriptors()).build()).build();
+                                       protected PrefixCase createObject(final CLinkstateDestination key) {
+                                               final PrefixCaseBuilder b = new PrefixCaseBuilder(key.getPrefixDescriptors());
+                                               b.setAdvertisingNodeDescriptors(new AdvertisingNodeDescriptorsBuilder(key.getLocalNodeDescriptors()).build());
+                                               return b.build();
                                        }
                                };
                                break;
@@ -174,7 +177,7 @@ final class LinkstateAdjRIBsIn extends AbstractAdjRIBsIn<CLinkstateDestination,
                                        }
 
                                        @Override
-                                       protected ObjectType createObject(final CLinkstateDestination key) {
+                                       protected LinkCase createObject(final CLinkstateDestination key) {
                                                final LinkCaseBuilder b = new LinkCaseBuilder();
                                                b.setLinkDescriptors(new LinkDescriptorsBuilder(key.getLinkDescriptors()).build());
                                                b.setLocalNodeDescriptors(new LocalNodeDescriptorsBuilder(key.getLocalNodeDescriptors()).build());
@@ -199,7 +202,7 @@ final class LinkstateAdjRIBsIn extends AbstractAdjRIBsIn<CLinkstateDestination,
                                        }
 
                                        @Override
-                                       protected ObjectType createObject(final CLinkstateDestination key) {
+                                       protected NodeCase createObject(final CLinkstateDestination key) {
                                                final LocalNodeDescriptors d = key.getLocalNodeDescriptors();
                                                return new NodeCaseBuilder().setNodeDescriptors(new NodeDescriptorsBuilder(d).build()).build();
                                        }
index 9c63eac0dd5d381ce652e27d6f3b7033d0401e6f..5ca0c55bcb9bc1fefab99b9dcb7f5d85d1b2f112 100644 (file)
@@ -647,13 +647,18 @@ public final class LinkstateTopologyBuilder extends AbstractTopologyBuilder<Link
 
        private void createPrefix(final DataModification<InstanceIdentifier<?>, DataObject> trans, final UriBuilder base,
                        final LinkstateRoute value, final PrefixCase p, final Attributes attributes) {
-               final PrefixAttributes pa = ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.attributes.attribute.type.PrefixCase) attributes.getAugmentation(
-                               Attributes1.class).getAttributeType()).getPrefixAttributes();
+               final IpPrefix ippfx = p.getIpReachabilityInformation();
+               if (ippfx == null) {
+                       LOG.warn("IP reachability not present in prefix {} route {}, skipping it", p, value);
+                       return;
+               }
 
                final PrefixBuilder pb = new PrefixBuilder();
-               final IpPrefix ippfx = p.getIpReachabilityInformation();
                pb.setKey(new PrefixKey(ippfx));
                pb.setPrefix(ippfx);
+
+               final PrefixAttributes pa = ((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev131125.bgp.rib.rib.loc.rib.tables.routes.linkstate.routes._case.linkstate.routes.linkstate.route.attributes.attribute.type.PrefixCase) attributes.getAugmentation(
+                               Attributes1.class).getAttributeType()).getPrefixAttributes();
                if (pa != null) {
                        pb.setMetric(pa.getPrefixMetric().getValue());
                }