Add for packtes of IPPROTO_MOBILE (55). This is yet another

tunneling protocol which is described in RFC2004.
XXX There is no verification of the miniheader checksum at the moment.
This commit is contained in:
hwr 1998-09-25 19:10:25 +00:00
parent 1131320f18
commit fadc6762f7
4 changed files with 129 additions and 5 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: Makefile,v 1.12 1998/07/25 11:30:43 explorer Exp $ # $NetBSD: Makefile,v 1.13 1998/09/25 19:10:25 hwr Exp $
PROG= tcpdump PROG= tcpdump
MAN= tcpdump.8 MAN= tcpdump.8
@ -21,7 +21,7 @@ print-ip.c print-igrp.c print-icmp.c print-gre.c print-fddi.c print-ether.c \
print-egp.c print-dvmrp.c print-domain.c print-decnet.c print-bootp.c print-atm.c \ print-egp.c print-dvmrp.c print-domain.c print-decnet.c print-bootp.c print-atm.c \
print-hdlc.c \ print-hdlc.c \
print-atalk.c print-arp.c parsenfsfh.c machdep.c gmt2local.c bpf_dump.c \ print-atalk.c print-arp.c parsenfsfh.c machdep.c gmt2local.c bpf_dump.c \
addrtoname.c addrtoname.c print-mobile.c
SRCS+= version.c SRCS+= version.c
AWKS= atime.awk packetdat.awk stime.awk send-ack.awk AWKS= atime.awk packetdat.awk stime.awk send-ack.awk

View File

@ -1,4 +1,4 @@
/* $NetBSD: interface.h,v 1.5 1998/07/25 11:30:44 explorer Exp $ */ /* $NetBSD: interface.h,v 1.6 1998/09/25 19:10:25 hwr Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
@ -217,6 +217,7 @@ extern void isoclns_print(const u_char *, u_int, u_int, const u_char *,
const u_char *); const u_char *);
extern void krb_print(const u_char *, u_int); extern void krb_print(const u_char *, u_int);
extern void llap_print(const u_char *, u_int); extern void llap_print(const u_char *, u_int);
extern void mobile_print(const u_char *, u_int);
extern void netbios_print(struct p8022Hdr *, u_int); extern void netbios_print(struct p8022Hdr *, u_int);
extern void nfsreply_print(const u_char *, u_int, const u_char *); extern void nfsreply_print(const u_char *, u_int, const u_char *);
extern void nfsreq_print(const u_char *, u_int, const u_char *); extern void nfsreq_print(const u_char *, u_int, const u_char *);

View File

@ -1,4 +1,4 @@
/* $NetBSD: print-ip.c,v 1.5 1997/10/03 19:55:17 christos Exp $ */ /* $NetBSD: print-ip.c,v 1.6 1998/09/25 19:10:25 hwr Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
@ -27,7 +27,7 @@
static const char rcsid[] = static const char rcsid[] =
"@(#) Header: print-ip.c,v 1.66 97/05/28 12:51:43 leres Exp (LBL)"; "@(#) Header: print-ip.c,v 1.66 97/05/28 12:51:43 leres Exp (LBL)";
#else #else
__RCSID("$NetBSD: print-ip.c,v 1.5 1997/10/03 19:55:17 christos Exp $"); __RCSID("$NetBSD: print-ip.c,v 1.6 1998/09/25 19:10:25 hwr Exp $");
#endif #endif
#endif #endif
@ -470,6 +470,21 @@ ip_print(register const u_char *bp, register u_int length)
} }
break; break;
#ifndef IPPROTO_MOBILE
#define IPPROTO_MOBILE 55
#endif
case IPPROTO_MOBILE:
if (vflag)
(void)printf("mobile %s > %s: ",
ipaddr_string(&ip->ip_src),
ipaddr_string(&ip->ip_dst));
mobile_print(cp, len);
if (! vflag) {
printf(" (mobile encap)");
return;
}
break;
default: default:
(void)printf("%s > %s:", ipaddr_string(&ip->ip_src), (void)printf("%s > %s:", ipaddr_string(&ip->ip_src),
ipaddr_string(&ip->ip_dst)); ipaddr_string(&ip->ip_dst));

View File

@ -0,0 +1,108 @@
/* $NetBSD: print-mobile.c,v 1.1 1998/09/25 19:10:25 hwr Exp $ */
/*
* (c) 1998 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Heiko W.Rupp <hwr@pilhuhn.de>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
__RCSID("$NetBSD: print-mobile.c,v 1.1 1998/09/25 19:10:25 hwr Exp $");
#endif
#include <sys/param.h>
#include <sys/time.h>
#include <sys/uio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netdb.h>
#include <stdio.h>
#include "interface.h"
#include "addrtoname.h"
#include "extract.h" /* must come after interface.h */
#define MOBILE_SIZE (8)
struct mobile_ip {
u_short proto;
u_short hcheck;
u_int32_t odst;
u_int32_t osrc;
};
#define OSRC_PRES 0x0080 /* old source is present */
/*
* Deencapsulate and print a mobile-tunneled IP datagram
*/
void
mobile_print(const u_char *bp, u_int length)
{
const u_char *cp = bp +8 ;
const struct mobile_ip *mob;
u_short proto,crc;
u_char osp =0; /* old source address present */
mob = (const struct mobile_ip *)bp;
if (length < MOBILE_SIZE) {
fputs("[|mobile]", stdout);
return;
}
proto = EXTRACT_16BITS(&mob->proto);
crc = EXTRACT_16BITS(&mob->hcheck);
if (proto & OSRC_PRES) {
osp=1;
cp +=4 ;
}
if (vflag && osp) {
fputs("[S] ",stdout);
(void)printf("%s ",ipaddr_string(&mob->osrc));
} else {
fputs("[] ",stdout);
}
if (vflag) {
(void)printf("> %s ",ipaddr_string(&mob->odst));
(void)printf("(o ip_p: %d)",proto>>8);
}
return;
}