]> The Tcpdump Group git mirrors - tcpdump/commitdiff
Clean up length checks for IS-IS.
authorGuy Harris <[email protected]>
Sat, 23 Dec 2017 20:33:25 +0000 (12:33 -0800)
committerGuy Harris <[email protected]>
Sat, 23 Dec 2017 20:33:25 +0000 (12:33 -0800)
When you have TLVs wrapped within TLVs, you have a lot of ways in which
you can overrun something, whether it's the wrapping TLV or the subTLV.

Update test output to correspond with the results of the changes.

print-isoclns.c
tests/isis-extd-isreach-oobr.out
tests/isis-seg-fault-1-v.out

index cbd355f432f1df06385264ea5191ac9573cf454a..3d44975e3c21832ced17fb3d62c7a3182eb8516d 100644 (file)
@@ -117,7 +117,7 @@ static const struct tok isis_pdu_values[] = {
 #define ISIS_TLV_LSP_BUFFERSIZE      14  /* iso10589 rev2 */
 #define ISIS_TLV_LSP_BUFFERSIZE_MINLEN 2
 #define ISIS_TLV_EXT_IS_REACH        22  /* rfc5305 */
-#define ISIS_TLV_IS_ALIAS_ID         24  /* draft-ietf-isis-ext-lsp-frags-02 */
+#define ISIS_TLV_IS_ALIAS_ID         24  /* rfc5311 */
 #define ISIS_TLV_DECNET_PHASE4       42
 #define ISIS_TLV_LUCENT_PRIVATE      66
 #define ISIS_TLV_INT_IP_REACH        128 /* rfc1195, rfc2966 */
@@ -1828,170 +1828,6 @@ trunc:
     return(0);
 }
 
-/*
- * this is the common IS-REACH subTLV decoder it is called
- * from isis_print_ext_is_reach()
- */
-
-static int
-isis_print_is_reach_subtlv(netdissect_options *ndo,
-                           const uint8_t *tptr, u_int subt, u_int subl,
-                           const char *ident)
-{
-        u_int te_class,priority_level,gmpls_switch_cap;
-        union { /* int to float conversion buffer for several subTLVs */
-            float f;
-            uint32_t i;
-        } bw;
-
-        /* first lets see if we know the subTLVs name*/
-       ND_PRINT((ndo, "%s%s subTLV #%u, length: %u",
-                 ident, tok2str(isis_ext_is_reach_subtlv_values, "unknown", subt),
-                 subt, subl));
-
-       ND_TCHECK_LEN(tptr, subl);
-
-        switch(subt) {
-        case ISIS_SUBTLV_EXT_IS_REACH_ADMIN_GROUP:
-        case ISIS_SUBTLV_EXT_IS_REACH_LINK_LOCAL_REMOTE_ID:
-        case ISIS_SUBTLV_EXT_IS_REACH_LINK_REMOTE_ID:
-           if (subl >= 4) {
-             ND_PRINT((ndo, ", 0x%08x", EXTRACT_BE_U_4(tptr)));
-             if (subl == 8) /* rfc4205 */
-               ND_PRINT((ndo, ", 0x%08x", EXTRACT_BE_U_4(tptr + 4)));
-           }
-           break;
-        case ISIS_SUBTLV_EXT_IS_REACH_IPV4_INTF_ADDR:
-        case ISIS_SUBTLV_EXT_IS_REACH_IPV4_NEIGHBOR_ADDR:
-            if (subl >= sizeof(struct in_addr))
-              ND_PRINT((ndo, ", %s", ipaddr_string(ndo, tptr)));
-            break;
-        case ISIS_SUBTLV_EXT_IS_REACH_MAX_LINK_BW :
-       case ISIS_SUBTLV_EXT_IS_REACH_RESERVABLE_BW:
-            if (subl >= 4) {
-              bw.i = EXTRACT_BE_U_4(tptr);
-              ND_PRINT((ndo, ", %.3f Mbps", bw.f * 8 / 1000000));
-            }
-            break;
-        case ISIS_SUBTLV_EXT_IS_REACH_UNRESERVED_BW :
-            if (subl >= 32) {
-              for (te_class = 0; te_class < 8; te_class++) {
-                bw.i = EXTRACT_BE_U_4(tptr);
-                ND_PRINT((ndo, "%s  TE-Class %u: %.3f Mbps",
-                       ident,
-                       te_class,
-                       bw.f * 8 / 1000000));
-               tptr+=4;
-             }
-            }
-            break;
-        case ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS: /* fall through */
-        case ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS_OLD:
-            if (subl == 0)
-                break;
-            ND_PRINT((ndo, "%sBandwidth Constraints Model ID: %s (%u)",
-                   ident,
-                   tok2str(diffserv_te_bc_values, "unknown", EXTRACT_U_1(tptr)),
-                   EXTRACT_U_1(tptr)));
-            tptr++;
-            /* decode BCs until the subTLV ends */
-            for (te_class = 0; te_class < (subl-1)/4; te_class++) {
-                bw.i = EXTRACT_BE_U_4(tptr);
-                ND_PRINT((ndo, "%s  Bandwidth constraint CT%u: %.3f Mbps",
-                       ident,
-                       te_class,
-                       bw.f * 8 / 1000000));
-               tptr+=4;
-            }
-            break;
-        case ISIS_SUBTLV_EXT_IS_REACH_TE_METRIC:
-            if (subl >= 3)
-              ND_PRINT((ndo, ", %u", EXTRACT_BE_U_3(tptr)));
-            break;
-        case ISIS_SUBTLV_EXT_IS_REACH_LINK_ATTRIBUTE:
-            if (subl == 2) {
-               ND_PRINT((ndo, ", [ %s ] (0x%04x)",
-                      bittok2str(isis_subtlv_link_attribute_values,
-                                 "Unknown",
-                                 EXTRACT_BE_U_2(tptr)),
-                      EXTRACT_BE_U_2(tptr)));
-            }
-            break;
-        case ISIS_SUBTLV_EXT_IS_REACH_LINK_PROTECTION_TYPE:
-            if (subl >= 2) {
-              ND_PRINT((ndo, ", %s, Priority %u",
-                  bittok2str(gmpls_link_prot_values, "none", EXTRACT_U_1(tptr)),
-                  EXTRACT_U_1(tptr + 1)));
-            }
-            break;
-        case ISIS_SUBTLV_SPB_METRIC:
-            if (subl >= 6) {
-              ND_PRINT((ndo, ", LM: %u", EXTRACT_BE_U_3(tptr)));
-              tptr=tptr+3;
-              ND_PRINT((ndo, ", P: %u", EXTRACT_U_1(tptr)));
-              tptr++;
-              ND_PRINT((ndo, ", P-ID: %u", EXTRACT_BE_U_2(tptr)));
-            }
-            break;
-        case ISIS_SUBTLV_EXT_IS_REACH_INTF_SW_CAP_DESCR:
-            if (subl >= 36) {
-              gmpls_switch_cap = EXTRACT_U_1(tptr);
-              ND_PRINT((ndo, "%s  Interface Switching Capability:%s",
-                   ident,
-                   tok2str(gmpls_switch_cap_values, "Unknown", gmpls_switch_cap)));
-              ND_PRINT((ndo, ", LSP Encoding: %s",
-                   tok2str(gmpls_encoding_values, "Unknown", EXTRACT_U_1((tptr + 1)))));
-             tptr+=4;
-              ND_PRINT((ndo, "%s  Max LSP Bandwidth:", ident));
-              for (priority_level = 0; priority_level < 8; priority_level++) {
-                bw.i = EXTRACT_BE_U_4(tptr);
-                ND_PRINT((ndo, "%s    priority level %u: %.3f Mbps",
-                       ident,
-                       priority_level,
-                       bw.f * 8 / 1000000));
-               tptr+=4;
-              }
-              subl-=36;
-              switch (gmpls_switch_cap) {
-              case GMPLS_PSC1:
-              case GMPLS_PSC2:
-              case GMPLS_PSC3:
-              case GMPLS_PSC4:
-                if (subl < 6)
-                    break;
-                bw.i = EXTRACT_BE_U_4(tptr);
-                ND_PRINT((ndo, "%s  Min LSP Bandwidth: %.3f Mbps", ident, bw.f * 8 / 1000000));
-                ND_PRINT((ndo, "%s  Interface MTU: %u", ident, EXTRACT_BE_U_2(tptr + 4)));
-                break;
-              case GMPLS_TSC:
-                if (subl < 8)
-                    break;
-                bw.i = EXTRACT_BE_U_4(tptr);
-                ND_PRINT((ndo, "%s  Min LSP Bandwidth: %.3f Mbps", ident, bw.f * 8 / 1000000));
-                ND_PRINT((ndo, "%s  Indication %s", ident,
-                       tok2str(gmpls_switch_cap_tsc_indication_values, "Unknown (%u)", EXTRACT_U_1((tptr + 4)))));
-                break;
-              default:
-                /* there is some optional stuff left to decode but this is as of yet
-                   not specified so just lets hexdump what is left */
-                if(subl>0){
-                  if (!print_unknown_data(ndo, tptr, "\n\t\t    ", subl))
-                    return(0);
-                }
-              }
-            }
-            break;
-        default:
-            if (!print_unknown_data(ndo, tptr, "\n\t\t    ", subl))
-                return(0);
-            break;
-        }
-        return(1);
-
-trunc:
-    return(0);
-}
-
 /*
  * this is the common IS-REACH decoder it is called
  * from various EXTD-IS REACH style TLVs (22,24,222)
@@ -1999,49 +1835,234 @@ trunc:
 
 static int
 isis_print_ext_is_reach(netdissect_options *ndo,
-                        const uint8_t *tptr, const char *ident, u_int tlv_type)
+                        const uint8_t *tptr, const char *ident, u_int tlv_type,
+                        u_int tlv_remaining)
 {
     char ident_buffer[20];
     u_int subtlv_type,subtlv_len,subtlv_sum_len;
     int proc_bytes = 0; /* how many bytes did we process ? */
+    u_int te_class,priority_level,gmpls_switch_cap;
+    union { /* int to float conversion buffer for several subTLVs */
+        float f;
+        uint32_t i;
+    } bw;
 
     if (!ND_TTEST_LEN(tptr, NODE_ID_LEN))
         return(0);
+    if (tlv_remaining < NODE_ID_LEN)
+        return(0);
 
     ND_PRINT((ndo, "%sIS Neighbor: %s", ident, isis_print_id(tptr, NODE_ID_LEN)));
     tptr+=NODE_ID_LEN;
+    tlv_remaining-=NODE_ID_LEN;
 
     if (tlv_type != ISIS_TLV_IS_ALIAS_ID) { /* the Alias TLV Metric field is implicit 0 */
         if (!ND_TTEST_3(tptr))    /* and is therefore skipped */
            return(0);
+       if (tlv_remaining < 3)
+           return(0);
        ND_PRINT((ndo, ", Metric: %u", EXTRACT_BE_U_3(tptr)));
        tptr+=3;
+       tlv_remaining-=3;
     }
 
     if (!ND_TTEST_1(tptr))
         return(0);
+    if (tlv_remaining < 1)
+        return(0);
     subtlv_sum_len=EXTRACT_U_1(tptr); /* read out subTLV length */
     tptr++;
+    tlv_remaining--;
     proc_bytes=NODE_ID_LEN+3+1;
     ND_PRINT((ndo, ", %ssub-TLVs present",subtlv_sum_len ? "" : "no "));
     if (subtlv_sum_len) {
         ND_PRINT((ndo, " (%u)", subtlv_sum_len));
-        while (subtlv_sum_len>0) {
+        /* prepend the indent string */
+        snprintf(ident_buffer, sizeof(ident_buffer), "%s  ",ident);
+        ident = ident_buffer;
+        while (subtlv_sum_len != 0) {
             if (!ND_TTEST_2(tptr))
                 return(0);
+            if (tlv_remaining < 2) {
+                ND_PRINT((ndo, "%sRemaining data in TLV shorter than a subTLV header",ident));
+                proc_bytes += tlv_remaining;
+                break;
+            }
+            if (subtlv_sum_len < 2) {
+                ND_PRINT((ndo, "%sRemaining data in subTLVs shorter than a subTLV header",ident));
+                proc_bytes += subtlv_sum_len;
+                break;
+            }
             subtlv_type=EXTRACT_U_1(tptr);
             subtlv_len=EXTRACT_U_1(tptr + 1);
-            tptr+=2;
-            /* prepend the indent string */
-            snprintf(ident_buffer, sizeof(ident_buffer), "%s  ",ident);
-            if (!isis_print_is_reach_subtlv(ndo, tptr, subtlv_type, subtlv_len, ident_buffer))
-                return(0);
-            tptr+=subtlv_len;
-            subtlv_sum_len-=(subtlv_len+2);
-            proc_bytes+=(subtlv_len+2);
+            tptr += 2;
+            tlv_remaining -= 2;
+            subtlv_sum_len -= 2;
+            proc_bytes += 2;
+            ND_PRINT((ndo, "%s%s subTLV #%u, length: %u",
+                      ident, tok2str(isis_ext_is_reach_subtlv_values, "unknown", subtlv_type),
+                      subtlv_type, subtlv_len));
+
+            if (subtlv_sum_len < subtlv_len) {
+                ND_PRINT((ndo, " (remaining data in subTLVs shorter than the current subTLV)"));
+                proc_bytes += subtlv_sum_len;
+                break;
+            }
+
+            if (tlv_remaining < subtlv_len) {
+                ND_PRINT((ndo, " (> remaining tlv length)"));
+                proc_bytes += tlv_remaining;
+                break;
+            }
+
+            ND_TCHECK_LEN(tptr, subtlv_len);
+
+            switch(subtlv_type) {
+            case ISIS_SUBTLV_EXT_IS_REACH_ADMIN_GROUP:
+            case ISIS_SUBTLV_EXT_IS_REACH_LINK_LOCAL_REMOTE_ID:
+            case ISIS_SUBTLV_EXT_IS_REACH_LINK_REMOTE_ID:
+                if (subtlv_len >= 4) {
+                    ND_PRINT((ndo, ", 0x%08x", EXTRACT_BE_U_4(tptr)));
+                    if (subtlv_len == 8) /* rfc4205 */
+                        ND_PRINT((ndo, ", 0x%08x", EXTRACT_BE_U_4(tptr + 4)));
+                }
+                break;
+            case ISIS_SUBTLV_EXT_IS_REACH_IPV4_INTF_ADDR:
+            case ISIS_SUBTLV_EXT_IS_REACH_IPV4_NEIGHBOR_ADDR:
+                if (subtlv_len >= sizeof(struct in_addr))
+                    ND_PRINT((ndo, ", %s", ipaddr_string(ndo, tptr)));
+                break;
+            case ISIS_SUBTLV_EXT_IS_REACH_MAX_LINK_BW :
+            case ISIS_SUBTLV_EXT_IS_REACH_RESERVABLE_BW:
+                if (subtlv_len >= 4) {
+                    bw.i = EXTRACT_BE_U_4(tptr);
+                    ND_PRINT((ndo, ", %.3f Mbps", bw.f * 8 / 1000000));
+                }
+                break;
+            case ISIS_SUBTLV_EXT_IS_REACH_UNRESERVED_BW :
+                if (subtlv_len >= 32) {
+                    for (te_class = 0; te_class < 8; te_class++) {
+                        bw.i = EXTRACT_BE_U_4(tptr);
+                        ND_PRINT((ndo, "%s  TE-Class %u: %.3f Mbps",
+                                  ident,
+                                  te_class,
+                                  bw.f * 8 / 1000000));
+                        tptr += 4;
+                    }
+                }
+                break;
+            case ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS: /* fall through */
+            case ISIS_SUBTLV_EXT_IS_REACH_BW_CONSTRAINTS_OLD:
+                if (subtlv_len == 0)
+                    break;
+                ND_PRINT((ndo, "%sBandwidth Constraints Model ID: %s (%u)",
+                          ident,
+                          tok2str(diffserv_te_bc_values, "unknown", EXTRACT_U_1(tptr)),
+                          EXTRACT_U_1(tptr)));
+                tptr++;
+                /* decode BCs until the subTLV ends */
+                for (te_class = 0; te_class < (subtlv_len-1)/4; te_class++) {
+                    bw.i = EXTRACT_BE_U_4(tptr);
+                    ND_PRINT((ndo, "%s  Bandwidth constraint CT%u: %.3f Mbps",
+                              ident,
+                              te_class,
+                              bw.f * 8 / 1000000));
+                    tptr += 4;
+                }
+                break;
+            case ISIS_SUBTLV_EXT_IS_REACH_TE_METRIC:
+                if (subtlv_len >= 3)
+                    ND_PRINT((ndo, ", %u", EXTRACT_BE_U_3(tptr)));
+                break;
+            case ISIS_SUBTLV_EXT_IS_REACH_LINK_ATTRIBUTE:
+                if (subtlv_len == 2) {
+                    ND_PRINT((ndo, ", [ %s ] (0x%04x)",
+                              bittok2str(isis_subtlv_link_attribute_values,
+                                         "Unknown",
+                                         EXTRACT_BE_U_2(tptr)),
+                              EXTRACT_BE_U_2(tptr)));
+                }
+                break;
+            case ISIS_SUBTLV_EXT_IS_REACH_LINK_PROTECTION_TYPE:
+                if (subtlv_len >= 2) {
+                    ND_PRINT((ndo, ", %s, Priority %u",
+                              bittok2str(gmpls_link_prot_values, "none", EXTRACT_U_1(tptr)),
+                              EXTRACT_U_1(tptr + 1)));
+                }
+                break;
+            case ISIS_SUBTLV_SPB_METRIC:
+                if (subtlv_len >= 6) {
+                    ND_PRINT((ndo, ", LM: %u", EXTRACT_BE_U_3(tptr)));
+                    tptr += 3;
+                    ND_PRINT((ndo, ", P: %u", EXTRACT_U_1(tptr)));
+                    tptr++;
+                    ND_PRINT((ndo, ", P-ID: %u", EXTRACT_BE_U_2(tptr)));
+                }
+                break;
+            case ISIS_SUBTLV_EXT_IS_REACH_INTF_SW_CAP_DESCR:
+                if (subtlv_len >= 36) {
+                    gmpls_switch_cap = EXTRACT_U_1(tptr);
+                    ND_PRINT((ndo, "%s  Interface Switching Capability:%s",
+                              ident,
+                              tok2str(gmpls_switch_cap_values, "Unknown", gmpls_switch_cap)));
+                    ND_PRINT((ndo, ", LSP Encoding: %s",
+                              tok2str(gmpls_encoding_values, "Unknown", EXTRACT_U_1((tptr + 1)))));
+                    tptr += 4;
+                    ND_PRINT((ndo, "%s  Max LSP Bandwidth:", ident));
+                    for (priority_level = 0; priority_level < 8; priority_level++) {
+                        bw.i = EXTRACT_BE_U_4(tptr);
+                        ND_PRINT((ndo, "%s    priority level %u: %.3f Mbps",
+                                  ident,
+                                  priority_level,
+                                  bw.f * 8 / 1000000));
+                        tptr += 4;
+                    }
+                    subtlv_len -= 36;
+                    switch (gmpls_switch_cap) {
+                    case GMPLS_PSC1:
+                    case GMPLS_PSC2:
+                    case GMPLS_PSC3:
+                    case GMPLS_PSC4:
+                        if (subtlv_len < 6)
+                            break;
+                        bw.i = EXTRACT_BE_U_4(tptr);
+                        ND_PRINT((ndo, "%s  Min LSP Bandwidth: %.3f Mbps", ident, bw.f * 8 / 1000000));
+                        ND_PRINT((ndo, "%s  Interface MTU: %u", ident, EXTRACT_BE_U_2(tptr + 4)));
+                        break;
+                    case GMPLS_TSC:
+                        if (subtlv_len < 8)
+                            break;
+                        bw.i = EXTRACT_BE_U_4(tptr);
+                        ND_PRINT((ndo, "%s  Min LSP Bandwidth: %.3f Mbps", ident, bw.f * 8 / 1000000));
+                        ND_PRINT((ndo, "%s  Indication %s", ident,
+                                  tok2str(gmpls_switch_cap_tsc_indication_values, "Unknown (%u)", EXTRACT_U_1((tptr + 4)))));
+                        break;
+                    default:
+                        /* there is some optional stuff left to decode but this is as of yet
+                           not specified so just lets hexdump what is left */
+                        if (subtlv_len != 0) {
+                            if (!print_unknown_data(ndo, tptr, "\n\t\t    ", subtlv_len))
+                                return(0);
+                        }
+                    }
+                }
+                break;
+            default:
+                if (!print_unknown_data(ndo, tptr, "\n\t\t    ", subtlv_len))
+                    return(0);
+                break;
+            }
+
+            tptr += subtlv_len;
+            tlv_remaining -= subtlv_len;
+            subtlv_sum_len -= subtlv_len;
+            proc_bytes += subtlv_len;
         }
     }
     return(proc_bytes);
+
+trunc:
+    return(0);
 }
 
 /*
@@ -2152,7 +2173,7 @@ isis_print_extd_ip_reach(netdissect_options *ndo,
 
     if ((afi == AF_INET  && ISIS_MASK_TLV_EXTD_IP_SUBTLV(status_byte))
      || (afi == AF_INET6 && ISIS_MASK_TLV_EXTD_IP6_SUBTLV(status_byte))
-       ) {
+            ) {
         /* assume that one prefix can hold more
            than one subTLV - therefore the first byte must reflect
            the aggregate bytecount of the subTLVs for this prefix
@@ -2662,7 +2683,7 @@ isis_print(netdissect_options *ndo,
             tptr+=mt_len;
             tmp-=mt_len;
             while (tmp >= 2+NODE_ID_LEN+3+1) {
-                ext_is_len = isis_print_ext_is_reach(ndo, tptr, "\n\t      ", tlv_type);
+                ext_is_len = isis_print_ext_is_reach(ndo, tptr, "\n\t      ", tlv_type, tmp);
                 if (ext_is_len == 0) /* did something go wrong ? */
                     goto trunctlv;
 
@@ -2673,7 +2694,7 @@ isis_print(netdissect_options *ndo,
 
         case ISIS_TLV_IS_ALIAS_ID:
            while (tmp >= NODE_ID_LEN+1) { /* is it worth attempting a decode ? */
-               ext_is_len = isis_print_ext_is_reach(ndo, tptr, "\n\t      ", tlv_type);
+               ext_is_len = isis_print_ext_is_reach(ndo, tptr, "\n\t      ", tlv_type, tmp);
                if (ext_is_len == 0) /* did something go wrong ? */
                    goto trunctlv;
                tmp-=ext_is_len;
@@ -2683,7 +2704,7 @@ isis_print(netdissect_options *ndo,
 
         case ISIS_TLV_EXT_IS_REACH:
             while (tmp >= NODE_ID_LEN+3+1) { /* is it worth attempting a decode ? */
-                ext_is_len = isis_print_ext_is_reach(ndo, tptr, "\n\t      ", tlv_type);
+                ext_is_len = isis_print_ext_is_reach(ndo, tptr, "\n\t      ", tlv_type, tmp);
                 if (ext_is_len == 0) /* did something go wrong ? */
                     goto trunctlv;
                 tmp-=ext_is_len;
index 7da29b66df8e4764d43f0109c4bbeb4f35ae109c..71d7c3fe5491ce6eaa76cbf9e75dca6c076bfaf2 100644 (file)
@@ -11,29 +11,34 @@ IS-IS, length 33554427
          lan-id:    0101.0101.0100.00, Priority: 1, PDU length: 257
            Extended IS Reachability TLV #22, length: 12
              IS Neighbor: 0d0d.0d0d.0d0d.0d, Metric: 855309, sub-TLVs present (13)
-               unknown subTLV #13, length: 13
-                   0x0000:  0d0d 0d0d 0d0d 0d0d 0d0d 0d0d 0d
-             IS Neighbor: 0d0d.0d0d.0d0d.0d, Metric: 855309, sub-TLVs present (13)
-               unknown subTLV #13, length: 13
-                   0x0000:  0d0d 0d0d 0d0d 0d64 0d0d 0d0d 0d
-             IS Neighbor: 0d0d.0d0d.0d0d.0d, Metric: 855309, sub-TLVs present (13)
-               unknown subTLV #13, length: 13
-                   0x0000:  0d0d 0d0d 0d0d 0d0d 0d0d 0d0d 0d
-             IS Neighbor: 0d0d.0d0d.0d0d.0d, Metric: 855309, sub-TLVs present (13)
-               unknown subTLV #13, length: 13
-                   0x0000:  1c0d 0d0d 0d0d 670d 0d0d 0d0d 0d
-             IS Neighbor: 0d0d.0d00.0000.40, Metric: 13391955, sub-TLVs present (3)
-               unknown subTLV #41, length: 16
-                   0x0000:  0022 0000 0000 0000 0000 0000 0000 0000
-             IS Neighbor: 0000.0000.0a16.00, Metric: 2097279, no sub-TLVs present
-             IS Neighbor: 0000.3604.1f01.16, Metric: 70400, no sub-TLVs present
-             IS Neighbor: 0012.3a01.4996.01, Metric: 8838496, no sub-TLVs present
-             IS Neighbor: 00c7.8787.8766.87, Metric: 0, sub-TLVs present (64)
-               unknown subTLV #120, length: 22
-                   0x0000:  0101 0100 f0ff ffff ff01 0101 434c 4945
-                   0x0010:  4e54 0101 011f
-               Link Local/Remote Identifier subTLV #4, length: 4, 0x04040404
-               Link Local/Remote Identifier subTLV #4, length: 4, 0x04040404
-               Link Local/Remote Identifier subTLV #4, length: 4, 0x0404000a
-               Bandwidth Constraints subTLV #22, length: 0
-                [|isis]
+               Remaining data in TLV shorter than a subTLV header
+           Purge Originator Identifier TLV #13, length: 13
+             Purge Originator System-ID: 0d0d.0d0d.0d0d
+             Received from System-ID: 0d0d.0d0d.0d0d
+           Purge Originator Identifier TLV #13, length: 13
+             Purge Originator System-ID: 0d0d.0d0d.0d0d
+             Received from System-ID: 0d0d.0d0d.0d0d
+           Purge Originator Identifier TLV #13, length: 13
+             Purge Originator System-ID: 0d64.0d0d.0d0d
+             Received from System-ID: 0d0d.0d0d.0d0d
+           Purge Originator Identifier TLV #13, length: 13
+             Purge Originator System-ID: 0d0d.0d0d.0d0d
+             Received from System-ID: 0d0d.0d0d.0d0d
+           Purge Originator Identifier TLV #13, length: 13
+             Purge Originator System-ID: 0d0d.0d0d.0d0d
+             Received from System-ID: 0d0d.0d0d.0d0d
+           Purge Originator Identifier TLV #13, length: 13
+             Purge Originator System-ID: 0d1c.0d0d.0d0d
+             Received from System-ID: 0d67.0d0d.0d0d
+           Purge Originator Identifier TLV #13, length: 13
+             Purge Originator System-ID: 0d0d.0000.0040
+             Received from System-ID: cc58.5303.2910
+           unknown TLV #0, length: 34
+               0x0000:  0000 0000 0000 0000 0000 0000 0000 0000
+               0x0010:  0000 0a16 0020 007f 0000 0036 041f 0116
+               0x0020:  0113
+           unknown TLV #0, length: 0
+           unknown TLV #0, length: 18
+               0x0000:  3a01 4996 0186 dd60 0000 c787 8787 6687
+               0x0010:  0000
+           unknown TLV #0, length: 64 [|isis]
index e1f3c2cdce0cedf0179755581b3a6cf6772c6350..db2871f17ff50c4272c7af7bd2910068fb28d123 100644 (file)
@@ -31,94 +31,28 @@ IS-IS, length 1497
                unknown subTLV #0, length: 0
                unknown subTLV #0, length: 0
                unknown subTLV #64, length: 0
-               unknown subTLV #0, length: 189
-                   0x0000:  0000 0000 0000 0000 0000 0000 0000 0000
-                   0x0010:  00c2 0000 0000 0000 0000 0000 0000 0000
-                   0x0020:  0000 0000 0000 0000 0000 0000 0020 0000
-                   0x0030:  00f0 0000 0000 0000 0000 0000 0000 0000
-                   0x0040:  0000 0000 0000 0000 0000 0000 5900 0000
-                   0x0050:  0000 0000 0000 0000 0000 0000 0000 0000
-                   0x0060:  0000 0000 0000 0000 0000 0000 0000 0000
-                   0x0070:  0000 0000 0000 0000 0000 0000 0000 0000
-                   0x0080:  0000 0000 0000 0000 0000 7d00 0008 ff00
-                   0x0090:  004a 0000 0000 0000 0000 0000 0000 0000
-                   0x00a0:  8000 0000 0000 0000 0000 0000 0000 0000
-                   0x00b0:  0000 0000 0000 0000 0000 0000 00
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 3400.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.2302.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0069.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0200.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0067.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, sub-TLVs present (37)
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
+               unknown subTLV #0, length: 189 (remaining data in subTLVs shorter than the current subTLV)
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 7800.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0065.00, sub-TLVs present (128)
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #66, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 8
-                   0x0000:  0000 0008 ff00 0000
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #121, length: 1
-                   0x0000:  00
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
-               unknown subTLV #0, length: 0
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0020.0000.00f0.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.7d, no sub-TLVs present
+             IS Neighbor: 0000.4a00.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.80, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0034.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.00, sub-TLVs present (35)
+               unknown subTLV #2, length: 0
                unknown subTLV #0, length: 0
-               unknown subTLV #50, length: 0
                unknown subTLV #0, length: 0
                unknown subTLV #0, length: 0
                unknown subTLV #0, length: 0
@@ -127,48 +61,48 @@ IS-IS, length 1497
                unknown subTLV #0, length: 0
                unknown subTLV #0, length: 0
                unknown subTLV #0, length: 0
+               unknown subTLV #105, length: 0
                unknown subTLV #0, length: 0
                unknown subTLV #0, length: 0
                unknown subTLV #0, length: 0
                unknown subTLV #0, length: 0
-               unknown subTLV #132, length: 8
-                   0x0000:  0000 0000 0000 0000
+               unknown subTLV #2, length: 0
                unknown subTLV #0, length: 0
-             IS Neighbor: 8900.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 2500.0000.0000.00, no sub-TLVs present
+               Remaining data in subTLVs shorter than a subTLV header
+             IS Neighbor: 0000.0000.0000.67, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.2500.0000.c9, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0008.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: f700.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.6500.8000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.4200.0000.00, sub-TLVs present (8)
+               unknown subTLV #0, length: 0
+               Remaining data in TLV shorter than a subTLV header
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.004f.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 7901.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0000.32, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 3d00.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0800.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0089.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0025.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0025.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 0025.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
-             IS Neighbor: 0080.0002.0000.00, no sub-TLVs present
-             IS Neighbor: 0000.0000.007e.00, no sub-TLVs present
+             IS Neighbor: 0000.0000.0800.00, no sub-TLVs present
+             IS Neighbor: 2500.0000.0000.00, no sub-TLVs present
+             IS Neighbor: 4a00.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present
              IS Neighbor: 0000.0000.0000.00, no sub-TLVs present