Fix for Bug 8005. Parsing Sub Tlv for multiple neighbors

Change-Id: I32c86793db14698280199dd24f9a0e3731fb9771
diff --git a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/NeighborForExtendedIs.java b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/NeighborForExtendedIs.java
index 41265d1..b248dec 100644
--- a/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/NeighborForExtendedIs.java
+++ b/protocols/isis/isisio/src/main/java/org/onosproject/isis/io/isispacket/tlv/NeighborForExtendedIs.java
@@ -102,7 +102,11 @@
         this.setMetric(channelBuffer.readUnsignedMedium());
         int nTlvPresent = channelBuffer.readByte();
         if (nTlvPresent > 0) {
-            while (channelBuffer.readableBytes() > IsisUtil.TWO_BYTES) {
+            /* ntlvPresent=0 infers that all Sub TLVs,
+               for a particular neighbor,
+               have been parsed and the loop has to be terminated
+             */
+            while (channelBuffer.readableBytes() > IsisUtil.TWO_BYTES && nTlvPresent > 0) {
                 TlvHeader tlvHeader = new TlvHeader();
                 tlvHeader.setTlvType(channelBuffer.readByte());
                 tlvHeader.setTlvLength(channelBuffer.readByte());
@@ -115,10 +119,18 @@
                         if (subTlv != null) {
                             this.addSubTlv(subTlv);
                         }
+                        /*As one Sub TLV is parsed, its length is
+                        subtracted from total length to be read
+                         */
+                        nTlvPresent = nTlvPresent - (tlvLength + IsisUtil.TWO_BYTES);
                     }
                 } else {
                     if (channelBuffer.readableBytes() >= tlvLength) {
                         channelBuffer.readBytes(tlvLength);
+                        /*As one Sub TLV is parsed, its length is
+                        subtracted from total length to be read
+                         */
+                        nTlvPresent = nTlvPresent - (tlvLength + IsisUtil.TWO_BYTES);
                     }
                 }
             }
@@ -151,4 +163,4 @@
                 .add("teSubTlv", teSubTlv)
                 .toString();
     }
-}
\ No newline at end of file
+}