]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ip.c
provide multiline output for PIM Joins/Grafts/Graft-Acks
[tcpdump] / print-ip.c
index 3be2a6888eaa8ae9f84a11400dac30e012f5f7e6..b4e26b8fe85a004e7119aedded725a7d55f19b70 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] _U_ =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.131 2003-11-19 00:17:32 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.133 2004-03-17 13:24:09 hannes Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -434,10 +434,11 @@ ip_print(register const u_char *bp, register u_int length)
             * For unfragmented datagrams, note the don't fragment flag.
             */
 
-           (void)printf(", id %u, offset %u, flags [%s]",
+           (void)printf(", id %u, offset %u, flags [%s], proto %u",
                             EXTRACT_16BITS(&ip->ip_id),
                             (off & 0x1fff) * 8,
-                            bittok2str(ip_frag_values, "none", off & 0xe000 ));
+                            bittok2str(ip_frag_values, "none", off & 0xe000 ),
+                             ip->ip_p);
 
             (void)printf(", length: %u", EXTRACT_16BITS(&ip->ip_len));
 
@@ -478,6 +479,8 @@ again:
                case IPPROTO_AH:
                        nh = *cp;
                        advance = ah_print(cp);
+                       if (advance <= 0)
+                               break;
                        cp += advance;
                        len -= advance;
                        goto again;
@@ -486,10 +489,10 @@ again:
                    {
                        int enh, padlen;
                        advance = esp_print(cp, (const u_char *)ip, &enh, &padlen);
+                       if (advance <= 0)
+                               break;
                        cp += advance;
                        len -= advance + padlen;
-                       if (enh < 0)
-                               break;
                        nh = enh & 0xff;
                        goto again;
                    }
@@ -498,10 +501,10 @@ again:
                    {
                        int enh;
                        advance = ipcomp_print(cp, &enh);
+                       if (advance <= 0)
+                               break;
                        cp += advance;
                        len -= advance;
-                       if (enh < 0)
-                               break;
                        nh = enh & 0xff;
                        goto again;
                    }