]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ip.c
From Crist J. Clark <[email protected]>: print the IP protocol field
[tcpdump] / print-ip.c
index da34def9448f55ab323a9e4d97363da0d0f6bc9e..62c70342fe606607b584be85f3099fc4db3a2d06 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.100 2001-09-17 21:58:03 fenner Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.101 2001-10-27 07:42:46 guy Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -34,6 +34,7 @@ static const char rcsid[] =
 
 #include <netinet/in.h>
 
+#include <netdb.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -257,6 +258,7 @@ ip_print(register const u_char *bp, register u_int length)
        register const u_char *cp;
        u_char nh;
        int advance;
+       struct protoent *proto;
 
        ip = (const struct ip *)bp;
 #ifdef LBL_ALIGN
@@ -461,7 +463,11 @@ again:
                        break;
 
                default:
-                       (void)printf(" ip-proto-%d %d", nh, len);
+                       if ((proto = getprotobynumber(nh)) != NULL)
+                               (void)printf(" %s", proto->p_name);
+                       else
+                               (void)printf(" ip-proto-%d", nh);
+                       printf(" %d", len);
                        break;
                }
        }
@@ -480,11 +486,17 @@ again:
        if (off & 0x3fff) {
                /*
                 * if this isn't the first frag, we're missing the
-                * next level protocol header.  print the ip addr.
+                * next level protocol header.  print the ip addr
+                * and the protocol.
                 */
-               if (off & 0x1fff)
+               if (off & 0x1fff) {
                        (void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
                                      ipaddr_string(&ip->ip_dst));
+                       if ((proto = getprotobynumber(ip->ip_p)) != NULL)
+                               (void)printf(" %s", proto->p_name);
+                       else
+                               (void)printf(" ip-proto-%d", ip->ip_p);
+               }
 #ifndef IP_MF
 #define IP_MF 0x2000
 #endif /* IP_MF */