]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-mobile.c
More UNALIGNED_MEM{CPY,CMP} on IP addresses.
[tcpdump] / print-mobile.c
index f217932a4f9ae26b90dbe7d39c0dcfd84c0ac610..530f26efeb41a07ef182e314306eb5ddb50e519f 100644 (file)
 #include "config.h"
 #endif
 
-#ifndef lint
-static const char rcsid[] =
-     "@(#) $Header: /tcpdump/master/tcpdump/print-mobile.c,v 1.7 2001-08-20 17:53:54 fenner Exp $";
-#endif
-
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/uio.h>
-#include <sys/socket.h>
+#include <tcpdump-stdinc.h>
 
-#include <netinet/in.h>
-
-#include <netdb.h>
 #include <stdio.h>
 
 #include "interface.h"
@@ -78,12 +67,13 @@ mobile_print(const u_char *bp, u_int length)
 {
        const u_char *cp = bp +8 ;
        const struct mobile_ip *mob;
+       struct cksum_vec vec[1];
        u_short proto,crc;
        u_char osp =0;                  /* old source address present */
 
        mob = (const struct mobile_ip *)bp;
 
-       if (length < MOBILE_SIZE) {
+       if (length < MOBILE_SIZE || !TTEST(*mob)) {
                fputs("[|mobile]", stdout);
                return;
        }
@@ -95,7 +85,7 @@ mobile_print(const u_char *bp, u_int length)
                osp=1;
                cp +=4 ;
        }
-       
+
        if (osp)  {
                fputs("[S] ",stdout);
                if (vflag)
@@ -107,7 +97,9 @@ mobile_print(const u_char *bp, u_int length)
                (void)printf("> %s ",ipaddr_string(&mob->odst));
                (void)printf("(oproto=%d)",proto>>8);
        }
-       if (in_cksum((u_short *)mob, osp ? 12 : 8, 0)!=0) {
+       vec[0].ptr = (const u_int8_t *)(void *)mob;
+       vec[0].len = osp ? 12 : 8;
+       if (in_cksum(vec, 1)!=0) {
                (void)printf(" (bad checksum %d)",crc);
        }