--- /dev/null
+diff -urN tcpdump-3.4.orig/Makefile.in tcpdump-3.4/Makefile.in
+--- tcpdump-3.4.orig/Makefile.in Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/Makefile.in Sat Jul 3 19:03:02 1999
+@@ -41,8 +41,8 @@
+
+ CC = @CC@
+ PROG = tcpdump
+-CCOPT = @V_CCOPT@
+-INCLS = -I. @V_INCLS@
++CCOPT = @V_CCOPT@ -DINET6=1
++INCLS = -I/usr/include/pcap @V_INCLS@
+ DEFS = @DEFS@ -DHAVE_FDDI
+
+ # Standard CFLAGS
+@@ -73,7 +73,7 @@
+ print-snmp.c print-sunrpc.c print-tcp.c print-tftp.c print-tr.c \
+ print-udp.c print-wb.c addrtoname.c bpf_dump.c gmt2local.c \
+ machdep.c parsenfsfh.c util.c savestr.c setsignal.c \
+- print-smb.c smbutil.c
++ print-smb.c smbutil.c print-ipv6.c print-icmpv6.c
+ LOCALSRC =
+ GENSRC = version.c
+
+diff -urN tcpdump-3.4.orig/addrtoname.c tcpdump-3.4/addrtoname.c
+--- tcpdump-3.4.orig/addrtoname.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/addrtoname.c Sat Jul 3 17:58:06 1999
+@@ -62,7 +62,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+
+-#ifdef INET6
++#if defined(INET6) && __GLIBC__ < 2
+ #include <netinet6/in6.h>
+ #endif /* INET6 */
+
+diff -urN tcpdump-3.4.orig/linux-include/netinet/ip_icmp.h tcpdump-3.4/linux-include/netinet/ip_icmp.h
+--- tcpdump-3.4.orig/linux-include/netinet/ip_icmp.h Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/linux-include/netinet/ip_icmp.h Sat Jul 3 19:12:53 1999
+@@ -33,6 +33,7 @@
+ * @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93
+ */
+
++#ifndef _NO_INCLUDE_LOCAL
+ /*
+ * Interface Control Message Protocol Definitions.
+ * Per RFC 792, September 1981.
+@@ -157,4 +158,5 @@
+ void icmp_reflect __P((struct mbuf *));
+ void icmp_send __P((struct mbuf *, struct mbuf *));
+ int icmp_sysctl __P((int *, u_int, void *, size_t *, void *, size_t));
++#endif
+ #endif
+diff -urN tcpdump-3.4.orig/print-atalk.c tcpdump-3.4/print-atalk.c
+--- tcpdump-3.4.orig/print-atalk.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-atalk.c Sat Jul 3 17:58:06 1999
+@@ -39,12 +39,15 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/if_ether.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <stdio.h>
+ #include <stdlib.h>
+diff -urN tcpdump-3.4.orig/print-atm.c tcpdump-3.4/print-atm.c
+--- tcpdump-3.4.orig/print-atm.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-atm.c Sat Jul 3 17:58:06 1999
+@@ -37,11 +37,14 @@
+ #include <netinet/if_ether.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <stdio.h>
+ #include <pcap.h>
+diff -urN tcpdump-3.4.orig/print-ax25.c tcpdump-3.4/print-ax25.c
+--- tcpdump-3.4.orig/print-ax25.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-ax25.c Sat Jul 3 17:58:06 1999
+@@ -26,7 +26,10 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++#endif
+
+ #include <stdio.h>
+
+diff -urN tcpdump-3.4.orig/print-domain.c tcpdump-3.4/print-domain.c
+--- tcpdump-3.4.orig/print-domain.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-domain.c Sat Jul 3 17:58:06 1999
+@@ -38,11 +38,14 @@
+ #include <netinet/if_ether.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #ifdef NOERROR
+ #undef NOERROR /* Solaris sucks */
+diff -urN tcpdump-3.4.orig/print-dvmrp.c tcpdump-3.4/print-dvmrp.c
+--- tcpdump-3.4.orig/print-dvmrp.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-dvmrp.c Sat Jul 3 17:58:06 1999
+@@ -31,11 +31,14 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <stdio.h>
+ #include <string.h>
+diff -urN tcpdump-3.4.orig/print-ether.c tcpdump-3.4/print-ether.c
+--- tcpdump-3.4.orig/print-ether.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-ether.c Sat Jul 3 17:58:06 1999
+@@ -42,11 +42,14 @@
+ #include <netinet/if_ether.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #if defined(__GLIBC__) && __GLIBC__ >= 2
+ #include <linux/sockios.h>
+diff -urN tcpdump-3.4.orig/print-icmp.c tcpdump-3.4/print-icmp.c
+--- tcpdump-3.4.orig/print-icmp.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-icmp.c Sat Jul 3 17:58:06 1999
+@@ -34,16 +34,21 @@
+ #endif
+ #include <net/if.h>
+
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#else
++# define __FAVOR_BSD
++#endif
++
+ #include <netinet/in.h>
+ #include <netinet/if_ether.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+ #include <netinet/ip_icmp.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
+
+ #include <stdio.h>
+ #include <string.h>
+diff -urN tcpdump-3.4.orig/print-icmpv6.c tcpdump-3.4/print-icmpv6.c
+--- tcpdump-3.4.orig/print-icmpv6.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-icmpv6.c Sat Jul 3 19:31:02 1999
+@@ -107,30 +107,42 @@
+ #include <sys/types.h>
+ #include <sys/socket.h>
+
+-#include <net/if.h>
+-
+ #include <netinet/in.h>
+-#include <netinet/if_ether.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_icmp.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
+-
+-#include <netinet6/ipv6.h>
+-#include <netinet6/in6.h>
+-#include <netinet6/ipv6_var.h>
+-#include <netinet6/ipv6_icmp.h>
+-#include <stdio.h>
+
+-#include <string.h>
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
++
++#include <netdb.h>
++
++#if __GLIBC__ >= 2
++# include <netinet/ip6.h>
++# include <netinet/icmp6.h>
++# include <netinet/ip_icmp.h>
++#else
++# include <netinet6/in6.h>
++# include <netinet6/ipv6.h>
++#endif
+
++#include <stdio.h>
++#ifdef __STDC__
++#include <stdlib.h>
++#endif
++#include <unistd.h>
++
+ #include "interface.h"
+ #include "addrtoname.h"
+
++#define __u8 u_int8_t
++#define __u16 u_int16_t
++#define __u32 u_int32_t
++
+ char *ipv6addr_string(struct in6_addr *);
+
+ struct na_hdr
+@@ -360,7 +372,11 @@
+ void
+ icmpv6_print(register const u_char *bp, int length)
+ {
++#if __GLIBC__ >= 2
++ register const struct icmp6_hdr *dp;
++#else
+ register const struct ipv6_icmp *dp;
++#endif
+ register char *str;
+ register const struct ipv6 *oip;
+ register const struct udphdr *ouh;
+@@ -376,6 +392,47 @@
+
+ str = buf;
+ *str = '\0';
++
++/* Translation from NRL to Glibc defines */
++#if __GLIBC__ >= 2
++# define ICMPV6_MINLEN ICMP_MINLEN
++# define ICMPV6_ECHOREPLY ICMP6_ECHO_REPLY
++# define ICMPV6_ECHO ICMP6_ECHO_REQUEST
++# define ICMPV6_TOOBIG ICMP6_PACKET_TOO_BIG
++/* Destination unreachable */
++# define ICMPV6_UNREACH ICMP6_DST_UNREACH
++# define ICMPV6_UNREACH_NOROUTE ICMP6_DST_UNREACH_NOROUTE
++# define ICMPV6_UNREACH_ADMIN ICMP6_DST_UNREACH_ADMIN
++# define ICMPV6_UNREACH_NOTNEIGHBOR ICMP6_DST_UNREACH_NOTNEIGHBOR
++# define ICMPV6_UNREACH_ADDRESS ICMP6_DST_UNREACH_ADDR
++# define ICMPV6_UNREACH_PORT ICMP6_DST_UNREACH_NOPORT
++/* Membership */
++# define ICMPV6_GRPQUERY ICMP6_MEMBERSHIP_QUERY
++# define ICMPV6_GRPREPORT ICMP6_MEMBERSHIP_REPORT
++# define ICMPV6_GRPTERM ICMP6_MEMBERSHIP_REDUCTION
++/* Time exceeded */
++# define ICMPV6_TIMXCEED ICMP6_TIME_EXCEEDED
++# define ICMPV6_TIMXCEED_INTRANS ICMP6_TIME_EXCEED_TRANSIT
++# define ICMPV6_TIMXCEED_REASS ICMP6_TIME_EXCEED_REASSEMBLY
++/* Parameter problems */
++# define ICMPV6_PARAMPROB ICMP6_PARAM_PROB
++# define ICMPV6_PARAMPROB_PROB ICMP6_PARAMPROB_HEADER
++# define ICMPV6_PARAMPROB_NEXTHDR ICMP6_PARAMPROB_NEXTHEADER
++# define ICMPV6_PARAMPROB_BADOPT ICMP6_PARAMPROB_OPTION
++/* Neighbor discovery */
++# define ICMPV6_ROUTERSOL ND_ROUTER_SOLICIT
++# define ICMPV6_ROUTERADV ND_ROUTER_ADVERT
++# define ICMPV6_NEIGHBORSOL ND_NEIGHBOR_SOLICIT
++# define ICMPV6_NEIGHBORADV ND_NEIGHBOR_ADVERT
++# define ICMPV6_REDIRECT ND_REDIRECT
++
++# define icmp_type icmp6_type
++# define icmp_code icmp6_code
++# define icmp_nexthopmtu icmp6_mtu
++# define icmp_grpdelay icmp6_maxdelay
++# define icmp_paramptr icmp6_pptr
++#endif
++
+
+ if (left < ICMPV6_MINLEN)
+ goto trunc;
+diff -urN tcpdump-3.4.orig/print-igrp.c tcpdump-3.4/print-igrp.c
+--- tcpdump-3.4.orig/print-igrp.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-igrp.c Sat Jul 3 17:58:06 1999
+@@ -33,9 +33,13 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <errno.h>
+ #include <stdio.h>
+diff -urN tcpdump-3.4.orig/print-ip.c tcpdump-3.4/print-ip.c
+--- tcpdump-3.4.orig/print-ip.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-ip.c Sat Jul 3 17:58:06 1999
+@@ -36,11 +36,14 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #ifdef HAVE_MALLOC_H
+ #include <malloc.h>
+diff -urN tcpdump-3.4.orig/print-ipv6.c tcpdump-3.4/print-ipv6.c
+--- tcpdump-3.4.orig/print-ipv6.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-ipv6.c Sat Jul 3 19:02:24 1999
+@@ -111,16 +111,23 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <netdb.h>
+-#include <netinet6/in6.h>
+
+-#include <netinet6/ipv6.h>
++#if __GLIBC__ >= 2
++# include <netinet/ip6.h>
++#else
++# include <netinet6/in6.h>
++# include <netinet6/ipv6.h>
++#endif
+
+ #include <stdio.h>
+ #ifdef __STDC__
+@@ -162,7 +169,7 @@
+ printf(" Pad%d", optlen);
+ break;
+ case 194:
+- printf(" Jumbo %d", ntohl(*(__u32*)optptr));
++ printf(" Jumbo %d", ntohl(*(u_int32_t*)optptr));
+ if (optlen != 6)
+ printf(" <len %d is wrong>", optlen);
+ break;
+@@ -193,7 +200,14 @@
+ printf(" } ");
+ }
+
++#if __GLIBC__ >= 2
++static void frag_print(struct ip6_frag *ip)
++# define frag_reserved ip6f_reserved
++# define frag_id ip6f_ident
++# define frag_bitsoffset ip6f_offlg
++#else
+ static void frag_print(struct ipv6_fraghdr *ip)
++#endif
+ {
+ u_int16_t bitoffset;
+ printf(" frag[");
+@@ -206,7 +220,15 @@
+ printf(" id=%u] ", ntohl(ip->frag_id));
+ }
+
++#if __GLIBC__ >= 2
++static void route_print(struct ip6_rthdr0 *ip)
++#define i6sr_type ip6r0_type
++#define i6sr_numaddrs ip6r0_len
++#define i6sr_left ip6r0_segleft
++#define i6sr_reserved ip6r0_reserved
++#else
+ static void route_print(struct ipv6_srcroute0 *ip)
++#endif
+ {
+ printf("rthdr%d ", ip->i6sr_type);
+ if (ip->i6sr_type == 0) {
+@@ -216,7 +238,7 @@
+ while (n > 0) {
+ if (n == ip->i6sr_left)
+ printf ("|> ");
+- if (htonl(1<<i)&*(__u32*)&ip->i6sr_reserved)
++ if (htonl(1<<i)&*(u_int32_t*)&ip->i6sr_reserved)
+ printf("!");
+ printf("%s ", ipv6addr_string(a));
+ a++;
+@@ -224,7 +246,7 @@
+ n--;
+ }
+ if (i>0) {
+- if (htonl(1<<i)&*(__u32*)&ip->i6sr_reserved)
++ if (htonl(1<<i)&*(u_int32_t*)&ip->i6sr_reserved)
+ printf("! ");
+ }
+ }
+@@ -264,7 +286,11 @@
+ void ipv6_print (register const u_char *bp, register int length)
+ {
+ char buf[80];
++#if __GLIBC__ >= 2
++ register const struct ip6_hdr *ip;
++#else
+ register const struct ipv6 *ip;
++#endif
+ u_int8_t nhdr;
+ int first = 1, len=0;
+ char *cp;
+@@ -272,12 +298,21 @@
+ struct hostent *name;
+ int is_fragment = 0;
+
+- ip= (const struct ipv6 *) bp;
++#if __GLIBC__ >= 2
++ ip= (const struct ip6_hdr *) bp;
++ if (bp + sizeof(struct ip6_hdr) > snapend) {
++#else
++ ip= (const struct ipv6_hdr *) bp;
+ if (bp + sizeof(struct ipv6) > snapend) {
++#endif
+ printf("[|ipv6]");
+ return;
+ }
++#if __GLIBC__ >= 2
++ if (length < sizeof(struct ip6_hdr)){
++#else
+ if (length < sizeof(struct ipv6)){
++#endif
+ if (partial_frame)
+ (void)printf("truncated-ipv6 %d", length);
+ else
+@@ -285,7 +320,11 @@
+ return;
+ }
+
++#if __GLIBC__ >= 2
++ len = sizeof(struct ip6_hdr) + ntohs(ip->ip6_plen);
++#else
+ len = sizeof(struct ipv6) + ntohs(ip->ipv6_length);
++#endif
+
+ if (length < len) {
+ if (!partial_frame) {
+@@ -295,13 +334,24 @@
+ }
+ length = len;
+
++#if __GLIBC__ >= 2
++ len = sizeof(struct ip6_hdr);
++
++ printf(" %s > %s ", ipv6addr_string(&(ip->ip6_src)),
++ ipv6addr_string(&(ip->ip6_dst)));
++#else
+ len = sizeof(struct ipv6);
+
+ printf("%s > %s ", ipv6addr_string(&(ip->ipv6_src)),
+ ipv6addr_string(&(ip->ipv6_dst)));
++#endif
+
+ if (vflag) {
++#if __GLIBC__ >= 2
++ p = ntohl(ip->ip6_flow);
++#else
+ p = ntohl(ip->ipv6_versfl);
++#endif
+ printf(" (");
+ if ((p>>28) != 6)
+ printf("v%d, ", p>>28); /* version */
+@@ -318,20 +368,40 @@
+ }
+ if (p&0x00fffff)
+ printf("fl 0x%05x, ", p&0x00fffff); /* flow label */
++#if __GLIBC__ >= 2
++ printf("len %d, ", ntohs(ip->ip6_plen)); /* payload length */
++ printf("hop %d) ", ip->ip6_hlim);
++#else
+ printf("len %d, ", ntohs(ip->ipv6_length)); /* payload length */
+ printf("hop %d) ", ip->ipv6_hoplimit);
++#endif
+ }
+-
++
++#if __GLIBC__ >= 2
++ nhdr = ip->ip6_nxt;
++#else
+ nhdr = ip->ipv6_nexthdr;
++#endif
+ cp = (char *)(ip + 1);
+
++#if __GLIBC__ >= 2
++ while (( nhdr != IPPROTO_NONE) && (nhdr != IPPROTO_TCP) &&
++ (nhdr != IPPROTO_UDP) && (nhdr != IPPROTO_ICMPV6) &&
++ (nhdr != IPPROTO_IPIP) && (nhdr != IPPROTO_IPV6) &&
++ (nhdr != IPPROTO_RSVP)) {
++#else
+ while ((nhdr!=NEXTHDR_NONE)&&(nhdr!=NEXTHDR_TCP)&&(nhdr!=NEXTHDR_UDP)
+ &&(nhdr!=NEXTHDR_ICMPV6)&&(nhdr!=NEXTHDR_IPV4)&&
+ (nhdr!=NEXTHDR_IPV6) && (nhdr!=IPPROTO_RSVP) &&
+ (nhdr!=IPPROTO_PIM)) {
++#endif
+ switch (nhdr) {
+
++#if __GLIBC__ >= 2
++ case IPPROTO_HOPOPTS:
++#else
+ case NEXTHDR_HOP: /* hop by hop (0)*/
++#endif
+ len += (cp[1]+1)<<3;
+ if (bp+len <= snapend)
+ hop_print(cp);
+@@ -340,66 +410,140 @@
+ nhdr = cp[0];
+ cp += (cp[1]+1)<<3;
+ break;
+-
++#if __GLIBC__ >= 2
++ case IPPROTO_ROUTING:
++ len += sizeof (struct ip6_rthdr0 );
++#else
+ case NEXTHDR_ROUTING: /* routing header (43)*/
+ len += sizeof (struct ipv6_srcroute0 );
++#endif
+ if (bp+len<=snapend && vflag)
++#if __GLIBC__ >= 2
++ route_print((struct ipv6_rthdr0 *)cp);
++#else
+ route_print((struct ipv6_srcroute0 *)cp);
++#endif
+ else
+ printf(" route-hdr");
+ nhdr = cp[0];
+ cp += (cp[1]+1)<<3;
+ break;
+-
++#if __GLIBC__ >= 2
++ case IPPROTO_FRAGMENT:
++ len += sizeof (struct ip6_frag);
++#else
+ case NEXTHDR_FRAGMENT: /* fragment header (44)*/
+ len += sizeof (struct ipv6_fraghdr);
++#endif
+ if (bp+len <= snapend && vflag)
++#if __GLIBC__ >= 2
++ frag_print((struct ipv6_frag *)cp);
++#else
+ frag_print((struct ipv6_fraghdr *)cp);
++#endif
+ else
+ printf(" frag ");
+- if (!((((struct ipv6_fraghdr *)cp)->frag_bitsoffset) & htons(0xfff8))) {
++#if __GLIBC__ >= 2
++ if (!((((struct ip6_frag *)cp)->ip6f_offlg) & htons(IP6F_OFF_MASK))) {
++#else
++ /* IP6_OFFMASK as defined in netinet/ipv6.h doesn't
++ care about endianess */
++ if (!((((struct ipv6_fraghdr *)cp)->frag_bitsoffset) & htons(IP6_OFFMASK))) {
++#endif
+ nhdr = cp[0];
+ cp += 8;
+ is_fragment = 1;
+ break;
+ }
++#if __GLIBC__ >= 2
++ nhdr = ((struct ip6_frag *) cp)->ip6f_nxt;
++#else
+ nhdr = ((struct ipv6_fraghdr *) cp)->frag_nexthdr;
++#endif
+ printf("nhdr=");
+ switch (nhdr) {
++#if __GLIBC__ >= 2
++ case IPPROTO_HOPOPTS:
++#else
+ case NEXTHDR_HOP:
++#endif
+ printf("hop");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_IGMP:
++#else
+ case NEXTHDR_IGMP:
++#endif
+ printf("igmp");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_TCP:
++#else
+ case NEXTHDR_TCP:
++#endif
+ printf("tcp");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_UDP:
++#else
+ case NEXTHDR_UDP:
++#endif
+ printf("udp");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_IPV6:
++#else
+ case NEXTHDR_IPV6:
++#endif
+ printf("ipv6");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_ROUTING:
++#else
+ case NEXTHDR_ROUTING:
++#endif
+ printf("routing");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_FRAGMENT:
++#else
+ case NEXTHDR_FRAGMENT:
++#endif
+ printf("frag");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_ESP:
++#else
+ case NEXTHDR_ESP:
++#endif
+ printf("esp");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_AH:
++#else
+ case NEXTHDR_AH:
++#endif
+ printf("auth");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_ICMPV6:
++#else
+ case NEXTHDR_ICMPV6:
++#endif
+ printf("icmpv6");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_NONE:
++#else
+ case NEXTHDR_NONE:
++#endif
+ printf("no next");
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_DSTOPTS:
++#else
+ case NEXTHDR_DEST:
++#endif
+ printf("dest");
+ break;
+ default:
+@@ -407,7 +551,11 @@
+ }
+ return;
+
++#if __GLIBC__ >= 2
++ case IPPROTO_ESP:
++#else
+ case NEXTHDR_ESP: /* encapsulation header (50)*/
++#endif
+ len += sizeof(u_int32_t);
+ #ifdef IPSEC
+ if (bp + len <= snapend && vflag) {
+@@ -415,10 +563,14 @@
+ printf(" ");
+ } else
+ #endif
+- printf(" esp spi=%08x", *(__u32*)cp);
++ printf(" esp spi=%08x", *(u_int32_t*)cp);
+ return;
+
++#if __GLIBC__ >= 2
++ case IPPROTO_AH:
++#else
+ case NEXTHDR_AH: /* authentication header (51)*/
++#endif
+ #ifdef IPSEC
+ len += sizeof(struct ipsec_ah) + sizeof(u_int32_t) * ((struct ipsec_ah *)cp)->ah_datalen;
+ if (bp+len <= snapend && vflag) {
+@@ -430,13 +582,17 @@
+ cp += ((struct ipsec_ah *)cp)->ah_datalen * sizeof (u_int32_t)+ sizeof(struct ipsec_ah);
+ #else
+ len += (cp[1] + 2)<<2;
+- printf(" ah spi=%08x", *(__u32*)(cp+4));
++ printf(" ah spi=%08x", *(u_int32_t*)(cp+4));
+ nhdr = cp[0];
+ cp += (cp[1]+2)<<2;
+ #endif
+ break;
+
++#if __GLIBC__ >= 2
++ case IPPROTO_DSTOPTS:
++#else
+ case NEXTHDR_DEST: /* destination options header (60)*/
++#endif
+ len += (cp[1]+1)<<3;
+ if (bp + len <= snapend && vflag)
+ dest_print(cp);
+@@ -457,27 +613,53 @@
+ if (is_fragment)
+ partial_frame++;
+ switch (nhdr) {
++#if __GLIBC__ >= 2
++ case IPPROTO_TCP:
++#else
+ case NEXTHDR_TCP:
++#endif
+ tcp_print(cp, len, (const u_char *)ip);
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_UDP:
++#else
+ case NEXTHDR_UDP:
++#endif
+ udp_print(cp, len, (const u_char *)ip);
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_ICMPV6:
++#else
+ case NEXTHDR_ICMPV6:
++#endif
+ icmpv6_print(cp, len);
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_IPIP:
++#else
+ case NEXTHDR_IPV4:
++#endif
+ printf(": v4-in-v6");
+ ip_print(cp, len);
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_IPV6:
++#else
+ case NEXTHDR_IPV6:
++#endif
+ printf(": v6-in-v6");
+ ipv6_print(cp, len);
+ break;
++#if __GLIBC__ >= 2
++ case IPPROTO_RSVP:
++#else
+ case IPPROTO_RSVP:
++#endif
+ printf(" RSVP ");
++#ifdef RSVP_TCPDUMP
+ ntoh_rsvp_packet(cp, len);
+ rsvp_print_pkt(cp, len);
++#endif
+ break;
+ case IPPROTO_PIM:
+ printf(" PIMv2 ");
+diff -urN tcpdump-3.4.orig/print-ipx.c tcpdump-3.4/print-ipx.c
+--- tcpdump-3.4.orig/print-ipx.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-ipx.c Sat Jul 3 17:58:06 1999
+@@ -34,11 +34,14 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #ifdef __STDC__
+ #include <stdlib.h>
+diff -urN tcpdump-3.4.orig/print-krb.c tcpdump-3.4/print-krb.c
+--- tcpdump-3.4.orig/print-krb.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-krb.c Sat Jul 3 17:58:06 1999
+@@ -33,9 +33,13 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <ctype.h>
+ #include <errno.h>
+diff -urN tcpdump-3.4.orig/print-nfs.c tcpdump-3.4/print-nfs.c
+--- tcpdump-3.4.orig/print-nfs.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-nfs.c Sat Jul 3 17:58:06 1999
+@@ -38,7 +38,12 @@
+ #include <netinet/if_ether.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <rpc/rpc.h>
+
+diff -urN tcpdump-3.4.orig/print-null.c tcpdump-3.4/print-null.c
+--- tcpdump-3.4.orig/print-null.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-null.c Sat Jul 3 17:58:06 1999
+@@ -45,11 +45,14 @@
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+ #include <netinet/if_ether.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <pcap.h>
+ #include <stdio.h>
+diff -urN tcpdump-3.4.orig/print-ospf.c tcpdump-3.4/print-ospf.c
+--- tcpdump-3.4.orig/print-ospf.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-ospf.c Sat Jul 3 17:58:06 1999
+@@ -33,7 +33,12 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <ctype.h>
+ #include <stdio.h>
+diff -urN tcpdump-3.4.orig/print-pim.c tcpdump-3.4/print-pim.c
+--- tcpdump-3.4.orig/print-pim.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-pim.c Sat Jul 3 18:49:27 1999
+@@ -31,11 +31,14 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -43,6 +46,10 @@
+
+ #include "interface.h"
+ #include "addrtoname.h"
++
++#define __u32 u_int32_t
++#define __u16 u_int16_t
++#define __u8 u_int8_t
+
+ void
+ pim_print(register const u_char *bp, register u_int len)
+diff -urN tcpdump-3.4.orig/print-raw.c tcpdump-3.4/print-raw.c
+--- tcpdump-3.4.orig/print-raw.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-raw.c Sat Jul 3 17:58:06 1999
+@@ -40,11 +40,14 @@
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+ #include <netinet/if_ether.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <pcap.h>
+ #include <stdio.h>
+diff -urN tcpdump-3.4.orig/print-rip.c tcpdump-3.4/print-rip.c
+--- tcpdump-3.4.orig/print-rip.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-rip.c Sat Jul 3 17:58:06 1999
+@@ -31,9 +31,13 @@
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <stdio.h>
+
+diff -urN tcpdump-3.4.orig/print-sl.c tcpdump-3.4/print-sl.c
+--- tcpdump-3.4.orig/print-sl.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-sl.c Sat Jul 3 17:58:06 1999
+@@ -35,7 +35,7 @@
+ #include <sys/timeb.h>
+ #include <sys/file.h>
+ #include <sys/ioctl.h>
+-#include <sys/mbuf.h>
++#include "./sys/mbuf.h"
+ #include <sys/socket.h>
+
+ #if __STDC__
+@@ -47,14 +47,17 @@
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+ #include <netinet/if_ether.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
+
+-#include <net/slcompress.h>
+-#include <net/slip.h>
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
++
++#include "./net/slcompress.h"
++#include "./net/slip.h"
+
+ #include <ctype.h>
+ #include <netdb.h>
+diff -urN tcpdump-3.4.orig/print-sunrpc.c tcpdump-3.4/print-sunrpc.c
+--- tcpdump-3.4.orig/print-sunrpc.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-sunrpc.c Sat Jul 3 17:58:06 1999
+@@ -43,7 +43,12 @@
+ #include <netinet/if_ether.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <rpc/rpc.h>
+ #ifdef HAVE_RPC_RPCENT_H
+diff -urN tcpdump-3.4.orig/print-tcp.c tcpdump-3.4/print-tcp.c
+--- tcpdump-3.4.orig/print-tcp.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-tcp.c Sat Jul 3 17:58:06 1999
+@@ -32,20 +32,31 @@
+ #include <sys/param.h>
+ #include <sys/time.h>
+
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#else
++# define __FAVOR_BSD
++#endif
++
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
+
+ #ifdef HAVE_MEMORY_H
+ #include <memory.h>
+ #endif
+ #include <stdio.h>
++
+ #ifdef INET6
+-#include <netinet6/in6.h>
+-#include <netinet6/ipv6.h>
++# if __GLIBC__ >= 2
++# include <netinet/ip6.h>
++# else
++# include <netinet6/in6.h>
++# include <netinet6/ipv6.h>
++# endif
+ #endif /* INET6 */
+
+ #include <stdlib.h>
+diff -urN tcpdump-3.4.orig/print-tr.c tcpdump-3.4/print-tr.c
+--- tcpdump-3.4.orig/print-tr.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-tr.c Sat Jul 3 17:58:06 1999
+@@ -33,16 +33,20 @@
+ #endif
+ #include <net/if.h>
+
++#include <asm/types.h>
+ #include <netinet/in.h>
+ #include <netinet/if_tr.h>
+ #include <netinet/if_ether.h> /* just to get ETHERMTU */
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
+ #include <netinet/tcp.h>
+-#include <netinet/tcpip.h>
++
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
+
+ #include <stdio.h>
+ #include <pcap.h>
+diff -urN tcpdump-3.4.orig/print-udp.c tcpdump-3.4/print-udp.c
+--- tcpdump-3.4.orig/print-udp.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/print-udp.c Sat Jul 3 17:58:06 1999
+@@ -33,15 +33,26 @@
+ #include <sys/time.h>
+ #include <sys/socket.h>
+
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#else
++# define __FAVOR_BSD
++#endif
++
+ #include <netinet/in.h>
+ #include <netinet/in_systm.h>
+ #include <netinet/ip.h>
+-#include <netinet/ip_var.h>
+ #include <netinet/udp.h>
+-#include <netinet/udp_var.h>
++
+ #ifdef INET6
+-#include <netinet6/in6.h>
+-#include <netinet6/ipv6.h>
++# if __GLIBC__ >= 2
++# include <netinet/ip6.h>
++# else
++# include <netinet6/in6.h>
++# include <netinet6/ipv6.h>
++# endif
+ #endif
+
+ #ifdef NOERROR
+diff -urN tcpdump-3.4.orig/tcpdump.c tcpdump-3.4/tcpdump.c
+--- tcpdump-3.4.orig/tcpdump.c Sat Jul 3 17:50:45 1999
++++ tcpdump-3.4/tcpdump.c Sat Jul 3 17:58:06 1999
+@@ -104,8 +104,8 @@
+ static struct printer printers[] = {
+ { ether_if_print, DLT_EN10MB },
+ { tr_if_print, DLT_IEEE802 },
+- { sl_if_print, DLT_SLIP },
+- { sl_bsdos_if_print, DLT_SLIP_BSDOS },
++/* { sl_if_print, DLT_SLIP }, */
++/* { sl_bsdos_if_print, DLT_SLIP_BSDOS }, */
+ { ppp_if_print, DLT_PPP },
+ { ppp_bsdos_if_print, DLT_PPP_BSDOS },
+ { fddi_if_print, DLT_FDDI },
+diff -urN tcpdump-3.4.orig/xxx tcpdump-3.4/xxx
+--- tcpdump-3.4.orig/xxx Thu Jan 1 01:00:00 1970
++++ tcpdump-3.4/xxx Sat Jul 3 17:58:06 1999
+@@ -0,0 +1,6 @@
++#if ! __GLIBC__ >= 2
++# include <netinet/ip_var.h>
++# include <netinet/udp_var.h>
++# include <netinet/tcpip.h>
++#endif
++