]> The Tcpdump Group git mirrors - tcpdump/commitdiff
"length" is now the *remaining* packet length.
authorGuy Harris <[email protected]>
Sun, 5 Jul 2015 01:03:40 +0000 (18:03 -0700)
committerFrancois-Xavier Le Bail <[email protected]>
Wed, 18 Jan 2017 08:16:37 +0000 (09:16 +0100)
The loop that processes MPLS labels decrements the length for each
label, so it's the remaining length; don't subtract the total length of
the MPLS labels from it before handing it to packet printers.

print-mpls.c

index f6ee434e96d5a8cca81e6a92363a9e6333075e5a..ba4223346c8bd20e331a7c0a3a99eca3af615e16 100644 (file)
@@ -186,22 +186,22 @@ mpls_print(netdissect_options *ndo, const u_char *bp, u_int length)
         */
        if (pt == PT_UNKNOWN) {
                if (!ndo->ndo_suppress_default_print)
         */
        if (pt == PT_UNKNOWN) {
                if (!ndo->ndo_suppress_default_print)
-                       ND_DEFAULTPRINT(p, length - (p - bp));
+                       ND_DEFAULTPRINT(p, length);
                return;
        }
        ND_PRINT((ndo, ndo->ndo_vflag ? "\n\t" : " "));
        switch (pt) {
 
        case PT_IPV4:
                return;
        }
        ND_PRINT((ndo, ndo->ndo_vflag ? "\n\t" : " "));
        switch (pt) {
 
        case PT_IPV4:
-               ip_print(ndo, p, length - (p - bp));
+               ip_print(ndo, p, length);
                break;
 
        case PT_IPV6:
                break;
 
        case PT_IPV6:
-               ip6_print(ndo, p, length - (p - bp));
+               ip6_print(ndo, p, length);
                break;
 
        case PT_OSI:
                break;
 
        case PT_OSI:
-               isoclns_print(ndo, p, length - (p - bp), length - (p - bp));
+               isoclns_print(ndo, p, length, length);
                break;
 
        default:
                break;
 
        default: