]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ospf.c
remove the old lspping sample
[tcpdump] / print-ospf.c
index 17fbf743d5bea5b0127fe2c909728ebfd642fccd..169651bef37dd482411dc698c70f271372a885f9 100644 (file)
@@ -23,7 +23,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ospf.c,v 1.49 2004-01-08 22:08:40 hannes Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ospf.c,v 1.51 2004-03-24 02:32:27 guy Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -126,6 +126,7 @@ static struct tok lsa_opaque_te_link_tlv_subtlv_values[] = {
        { LS_OPAQUE_TE_LINK_SUBTLV_LINK_PROTECTION_TYPE, "Link Protection Type" },
        { LS_OPAQUE_TE_LINK_SUBTLV_INTF_SW_CAP_DESCR,    "Interface Switching Capability" },
        { LS_OPAQUE_TE_LINK_SUBTLV_SHARED_RISK_GROUP,    "Shared Risk Link Group" },
+       { LS_OPAQUE_TE_LINK_SUBTLV_DIFFSERV_TE,          "Diffserv TE" },
        { 0,                    NULL }
 };
 
@@ -231,7 +232,7 @@ ospf_print_lsa(register const struct lsa *lsap)
        register const struct aslametric *almp;
        register const struct mcla *mcp;
        register const u_int32_t *lp;
-       register int j, k, tlv_type, tlv_length, subtlv_type, subtlv_length, priority_level;
+       register int j, k, tlv_type, tlv_length, subtlv_type, subtlv_length, priority_level, bandwidth_constraint;
        register int ls_length;
        const u_int8_t *tptr;
        int count_srlg;
@@ -428,8 +429,7 @@ ospf_print_lsa(register const struct lsa *lsap)
                tptr = (u_int8_t *)(&lsap->lsa_un.un_grace_tlv.type);
 
                while (ls_length != 0) {
-                    if (!TTEST2(*tptr, 4))
-                        goto trunc;
+                    TCHECK2(*tptr, 4);
                    if (ls_length < 4) {
                         printf("\n\t    Remaining LS length %u < 4", ls_length);
                         return(ls_end);
@@ -450,6 +450,7 @@ ospf_print_lsa(register const struct lsa *lsap)
                         return(ls_end);
                     }
                     ls_length-=tlv_length;
+                    TCHECK2(*tptr, tlv_length);
                     switch(tlv_type) {
 
                     case LS_OPAQUE_GRACE_TLV_PERIOD:
@@ -491,8 +492,7 @@ ospf_print_lsa(register const struct lsa *lsap)
                tptr = (u_int8_t *)(&lsap->lsa_un.un_te_lsa_tlv.type);
 
                while (ls_length != 0) {
-                    if (!TTEST2(*tptr, 4))
-                        goto trunc;
+                    TCHECK2(*tptr, 4);
                    if (ls_length < 4) {
                         printf("\n\t    Remaining LS length %u < 4", ls_length);
                         return(ls_end);
@@ -521,8 +521,7 @@ ospf_print_lsa(register const struct lsa *lsap)
                                     tlv_length);
                                 return(ls_end);
                             }
-                            if (!TTEST2(*tptr, 4))
-                                goto trunc;
+                            TCHECK2(*tptr, 4);
                             subtlv_type = EXTRACT_16BITS(tptr);
                             subtlv_length = EXTRACT_16BITS(tptr+2);
                             tptr+=4;
@@ -533,8 +532,7 @@ ospf_print_lsa(register const struct lsa *lsap)
                                    subtlv_type,
                                    subtlv_length);
                             
-                            if (!TTEST2(*tptr, subtlv_length))
-                                goto trunc;
+                            TCHECK2(*tptr, subtlv_length);
                             switch(subtlv_type) {
                             case LS_OPAQUE_TE_LINK_SUBTLV_ADMIN_GROUP:
                                 printf(", 0x%08x", EXTRACT_32BITS(tptr));
@@ -566,6 +564,15 @@ ospf_print_lsa(register const struct lsa *lsap)
                                            bw.f*8/1000000 );
                                 }
                                 break;
+                            case LS_OPAQUE_TE_LINK_SUBTLV_DIFFSERV_TE:
+                                printf("\n\t\tBandwidth Constraints Model ID: (%u)", *tptr);
+                                for (bandwidth_constraint = 0; bandwidth_constraint < 8; bandwidth_constraint++) {
+                                    bw.i = EXTRACT_32BITS(tptr+4+bandwidth_constraint*4);
+                                    printf("\n\t\t  Bandwidth constraint %d: %.3f Mbps",
+                                           bandwidth_constraint,
+                                           bw.f*8/1000000 );
+                                }
+                                break;
                             case LS_OPAQUE_TE_LINK_SUBTLV_TE_METRIC:
                                 printf(", Metric %u", EXTRACT_32BITS(tptr));
                                 break;
@@ -624,6 +631,11 @@ ospf_print_lsa(register const struct lsa *lsap)
                         break;
                         
                     case LS_OPAQUE_TE_TLV_ROUTER:
+                        if (tlv_length < 4) {
+                            printf("\n\t    TLV length %u < 4", tlv_length);
+                            return(ls_end);
+                        }
+                        TCHECK2(*tptr, 4);
                         printf(", %s", ipaddr_string(tptr));
                         break;