This patch should apply cleanly to tcpdump-3.7.2 available from www.tcpdump.org. You might have to change to link line in Makefile.in on some systems (e.g. OpenBSD) that require some link-time dependency ordering. diff -bur tcpdump-3.7.2/Makefile.in libtcpdump/Makefile.in --- tcpdump-3.7.2/Makefile.in Mon Dec 10 00:21:23 2001 +++ libtcpdump/Makefile.in Tue Jun 24 09:05:34 2003 @@ -40,7 +40,7 @@ # CC = @CC@ -PROG = tcpdump +PROG = libtcpdump.a CCOPT = @V_CCOPT@ INCLS = -I. @V_INCLS@ DEFS = @DEFS@ @@ -83,7 +83,7 @@ print-stp.c print-sunrpc.c print-tcp.c \ print-telnet.c print-tftp.c print-timed.c print-token.c \ print-udp.c print-vjc.c print-vrrp.c print-wb.c print-zephyr.c \ - setsignal.c tcpdump.c util.c + setsignal.c tcpdump.c libtcpdump.c util.c LOCALSRC = @LOCALSRC@ GENSRC = version.c @@ -120,7 +120,7 @@ $(PROG): $(OBJ) @V_PCAPDEP@ @rm -f $@ - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS) + ar cru $@ $(OBJ) getnameinfo.o: $(srcdir)/missing/getnameinfo.c $(CC) $(CFLAGS) -o $@ -c $(srcdir)/missing/getnameinfo.c diff -bur tcpdump-3.7.2/addrtoname.c libtcpdump/addrtoname.c --- tcpdump-3.7.2/addrtoname.c Wed Oct 1 09:06:57 2003 +++ libtcpdump/addrtoname.c Wed Oct 1 09:06:45 2003 @@ -236,9 +236,15 @@ struct in6_addr addr; static struct h6namemem *p; /* static for longjmp() */ register const char *cp; - char ntop_buf[INET6_ADDRSTRLEN]; + static char ntop_buf[INET6_ADDRSTRLEN]; memcpy(&addr, ap, sizeof(addr)); + + if (nflag) { + inet_ntop(AF_INET6, &addr, ntop_buf, sizeof(ntop_buf)); + return (ntop_buf); + } + p = &h6nametable[*(u_int16_t *)&addr.s6_addr[14] & (HASHNAMESIZE-1)]; for (; p->nxt; p = p->nxt) { if (memcmp(&p->addr, &addr, sizeof(addr)) == 0) diff -bur tcpdump-3.7.2/interface.h libtcpdump/interface.h --- tcpdump-3.7.2/interface.h Wed Oct 1 09:06:57 2003 +++ libtcpdump/interface.h Wed Oct 1 09:06:45 2003 @@ -316,3 +316,17 @@ extern void bpf_dump(struct bpf_program *, int); #endif + + +#define printf(fmt, args...) tcpdump_printf(fmt, ##args) +#define fputs(str, stream) tcpdump_printf(str) + +#ifdef putchar +#undef putchar +#endif +#ifdef putc +#undef putc +#endif +#define putc(char, out) tcpdump_printf("%c", char) +#define putchar(char) tcpdump_printf("%c", char) + diff -bur tcpdump-3.7.2/tcpdump.c libtcpdump/tcpdump.c --- tcpdump-3.7.2/tcpdump.c Wed Oct 1 09:06:59 2003 +++ libtcpdump/tcpdump.c Wed Oct 1 09:06:47 2003 @@ -186,6 +186,8 @@ pcap_dumper_t *p; }; +#if 0 + int main(int argc, char **argv) { @@ -492,6 +494,10 @@ exit(0); } + +#endif + + /* make a clean exit on interrupts */ static RETSIGTYPE cleanup(int signo)