* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.166 2001-07-05 18:54:13 guy Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/tcpdump/interface.h,v 1.167 2001-08-20 17:52:39 fenner Exp $ (LBL)
*/
#ifndef tcpdump_interface_h
extern void udp_print(const u_char *, u_int, const u_char *, int);
extern void wb_print(const void *, u_int);
extern int ah_print(register const u_char *, register const u_char *);
-extern int esp_print(register const u_char *, register const u_char *, int *);
+extern int esp_print(register const u_char *, register const u_char *, int *, int *);
extern void isakmp_print(const u_char *, u_int, const u_char *);
extern int ipcomp_print(register const u_char *, register const u_char *, int *);
extern void rx_print(register const u_char *, int, int, int, u_char *);
extern void ospf6_print(const u_char *, u_int);
extern void dhcp6_print(const u_char *, u_int, u_int16_t, u_int16_t);
#endif /*INET6*/
-extern u_short in_cksum(const u_short *, register int, u_short);
+extern u_short in_cksum(const u_short *, register int, int);
#ifndef HAVE_BPF_DUMP
struct bpf_program;
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-esp.c,v 1.18 2001-04-13 02:56:38 itojun Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-esp.c,v 1.19 2001-08-20 17:52:38 fenner Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
#include "addrtoname.h"
int
-esp_print(register const u_char *bp, register const u_char *bp2, int *nhdr)
+esp_print(register const u_char *bp, register const u_char *bp2, int *nhdr, int *padlen)
{
register const struct esp *esp;
register const u_char *ep;
break;
#endif /*INET6*/
case 4:
+ /* nexthdr & padding are in the last fragment */
+ if (ntohs(ip->ip_off) & IP_MF)
+ goto fail;
#ifdef INET6
ip6 = NULL;
#endif
if (ep - bp < *(ep - 2))
goto fail;
+ if (padlen)
+ *padlen = *(ep - 2) + 2;
+
if (nhdr)
*nhdr = *(ep - 1);
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.98 2001-06-15 22:17:33 fenner Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ip.c,v 1.99 2001-08-20 17:52:39 fenner Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
* don't modifiy the packet.
*/
u_short
-in_cksum(const u_short *addr, register int len, u_short csum)
+in_cksum(const u_short *addr, register int len, int csum)
{
int nleft = len;
const u_short *w = addr;
#endif
case IPPROTO_ESP:
{
- int enh;
- advance = esp_print(cp, (const u_char *)ip, &enh);
+ int enh, padlen;
+ advance = esp_print(cp, (const u_char *)ip, &enh, &padlen);
cp += advance;
- len -= advance;
+ len -= advance + padlen;
if (enh < 0)
break;
nh = enh & 0xff;
#ifndef lint
static const char rcsid[] =
- "@(#) $Header: /tcpdump/master/tcpdump/print-ip6.c,v 1.16 2000-11-17 19:08:15 itojun Exp $";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-ip6.c,v 1.17 2001-08-20 17:52:40 fenner Exp $";
#endif
#ifdef HAVE_CONFIG_H
break;
case IPPROTO_ESP:
{
- int enh;
- advance = esp_print(cp, (const u_char *)ip6, &enh);
+ int enh, padlen;
+ advance = esp_print(cp, (const u_char *)ip6, &enh, &padlen);
if (enh < 0)
goto end;
nh = enh & 0xff;
+ len -= padlen;
break;
}
#ifndef IPPROTO_IPCOMP