Bug 5564: BGP-LS: Bad handling of unknown NLRI type cause NPE 05/36505/2
authorMilos Fabian <milfabia@cisco.com>
Mon, 21 Mar 2016 15:18:21 +0000 (16:18 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 24 Mar 2016 09:38:38 +0000 (09:38 +0000)
Fixed destination extractor for TE LSP NLRI Type.
Fixed serialization handling for unknown NLRI Type.

Change-Id: Ie1a26e78d71d289ae2b63bd3c7a5d7167c50ee99
Signed-off-by: Milos Fabian <milfabia@cisco.com>
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/nlri/LinkstateNlriParser.java

index 7af1e65d0523533df000a69edc486c6bd5935e18..b6cd5151ebc952850f0c1dea8be054e363b32d63 100644 (file)
@@ -309,7 +309,8 @@ public final class LinkstateNlriParser implements NlriParser, NlriSerializer {
             TeLspNlriParser.serializeLspID(teLSP.getLspId(), ldescs);
             TeLspNlriParser.serializeTEA(afi, ldescs);
         } else {
-            LOG.warn("Unknown NLRI Type.");
+            LOG.warn("Unknown NLRI Type for: {}.", ot);
+            return;
         }
         TlvUtil.writeTLV(nlriType.getIntValue(), nlriByteBuf, buffer);
     }
@@ -375,18 +376,16 @@ public final class LinkstateNlriParser implements NlriParser, NlriSerializer {
         serializeCommonParts(builder, linkstate);
 
         final ChoiceNode objectType = (ChoiceNode) linkstate.getChild(OBJECT_TYPE_NID).get();
-        if (!builder.getProtocolId().equals(ProtocolId.RsvpTe)) {
-            if (objectType.getChild(ADVERTISING_NODE_DESCRIPTORS_NID).isPresent()) {
-                serializeAdvertisedNodeDescriptor(builder, objectType);
-            } else if (objectType.getChild(LOCAL_NODE_DESCRIPTORS_NID).isPresent()) {
-                serializeLocalNodeDescriptor(builder, objectType);
-            } else if (objectType.getChild(NODE_DESCRIPTORS_NID).isPresent()) {
-                serializeNodeDescriptor(builder, objectType);
-            } else {
-                LOG.warn("Unknown Object Type.");
-            }
+        if (objectType.getChild(ADVERTISING_NODE_DESCRIPTORS_NID).isPresent()) {
+            serializeAdvertisedNodeDescriptor(builder, objectType);
+        } else if (objectType.getChild(LOCAL_NODE_DESCRIPTORS_NID).isPresent()) {
+            serializeLocalNodeDescriptor(builder, objectType);
+        } else if (objectType.getChild(NODE_DESCRIPTORS_NID).isPresent()) {
+            serializeNodeDescriptor(builder, objectType);
         } else if (TeLspNlriParser.isTeLsp(objectType)) {
             builder.setObjectType(TeLspNlriParser.serializeTeLsp(objectType));
+        } else {
+            LOG.warn("Unknown Object Type: {}.", objectType);
         }
         return builder.build();
     }