Merge libpcap version 0.4
PR: bin/7877
This commit is contained in:
parent
4e4869f856
commit
dfd1ee14ff
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996
|
||||
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -20,7 +20,7 @@
|
||||
*/
|
||||
#ifndef lint
|
||||
static const char rcsid[] =
|
||||
"@(#) $Header: gencode.c,v 1.91 96/12/11 19:10:23 leres Exp $ (LBL)";
|
||||
"@(#) $Header: gencode.c,v 1.94 98/07/12 13:06:49 leres Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -52,6 +52,7 @@ struct rtentry;
|
||||
#include "ethertype.h"
|
||||
#include "nlpid.h"
|
||||
#include "gencode.h"
|
||||
#include "ppp.h"
|
||||
#include <pcap-namedb.h>
|
||||
|
||||
#include "gnuc.h"
|
||||
@ -475,6 +476,13 @@ init_linktype(type)
|
||||
off_nl = 16;
|
||||
return;
|
||||
|
||||
case DLT_SLIP_BSDOS:
|
||||
/* XXX this may be the same as the DLT_PPP_BSDOS case */
|
||||
off_linktype = -1;
|
||||
/* XXX end */
|
||||
off_nl = 24;
|
||||
return;
|
||||
|
||||
case DLT_NULL:
|
||||
off_linktype = 0;
|
||||
off_nl = 4;
|
||||
@ -485,6 +493,11 @@ init_linktype(type)
|
||||
off_nl = 4;
|
||||
return;
|
||||
|
||||
case DLT_PPP_BSDOS:
|
||||
off_linktype = 5;
|
||||
off_nl = 24;
|
||||
return;
|
||||
|
||||
case DLT_FDDI:
|
||||
/*
|
||||
* FDDI doesn't really have a link-level type field.
|
||||
@ -553,8 +566,10 @@ gen_false()
|
||||
|
||||
static struct block *
|
||||
gen_linktype(proto)
|
||||
int proto;
|
||||
register int proto;
|
||||
{
|
||||
struct block *b0, *b1;
|
||||
|
||||
/* If we're not using encapsulation and checking for IP, we're done */
|
||||
if (off_linktype == -1 && proto == ETHERTYPE_IP)
|
||||
return gen_true();
|
||||
@ -566,7 +581,32 @@ gen_linktype(proto)
|
||||
|
||||
case DLT_PPP:
|
||||
if (proto == ETHERTYPE_IP)
|
||||
proto = 0x0021; /* XXX - need ppp.h defs */
|
||||
proto = PPP_IP; /* XXX was 0x21 */
|
||||
break;
|
||||
|
||||
case DLT_PPP_BSDOS:
|
||||
switch (proto) {
|
||||
|
||||
case ETHERTYPE_IP:
|
||||
b0 = gen_cmp(off_linktype, BPF_H, PPP_IP);
|
||||
b1 = gen_cmp(off_linktype, BPF_H, PPP_VJC);
|
||||
gen_or(b0, b1);
|
||||
b0 = gen_cmp(off_linktype, BPF_H, PPP_VJNC);
|
||||
gen_or(b1, b0);
|
||||
return b0;
|
||||
|
||||
case ETHERTYPE_DN:
|
||||
proto = PPP_DECNET;
|
||||
break;
|
||||
|
||||
case ETHERTYPE_ATALK:
|
||||
proto = PPP_APPLE;
|
||||
break;
|
||||
|
||||
case ETHERTYPE_NS:
|
||||
proto = PPP_NS;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case DLT_NULL:
|
||||
@ -1374,11 +1414,17 @@ gen_mcode(s1, s2, masklen, q)
|
||||
mlen = __pcap_atoin(s2, &m);
|
||||
/* Promote short ipaddr */
|
||||
m <<= 32 - mlen;
|
||||
if ((n & ~m) != 0)
|
||||
bpf_error("non-network bits set in \"%s mask %s\"",
|
||||
s1, s2);
|
||||
} else {
|
||||
/* Convert mask len to mask */
|
||||
if (masklen > 32)
|
||||
bpf_error("mask length must be <= 32");
|
||||
m = 0xffffffff << (32 - masklen);
|
||||
if ((n & ~m) != 0)
|
||||
bpf_error("non-network bits set in \"%s/%d\"",
|
||||
s1, masklen);
|
||||
}
|
||||
|
||||
switch (q.addr) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996
|
||||
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -24,7 +24,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] =
|
||||
"@(#) $Header: nametoaddr.c,v 1.45 96/10/17 23:26:53 leres Exp $ (LBL)";
|
||||
"@(#) $Header: nametoaddr.c,v 1.48 98/07/12 13:15:36 leres Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -345,7 +345,7 @@ pcap_ether_hostton(const char *name)
|
||||
if (ether_hostton((char *)name, (struct ether_addr *)a) == 0) {
|
||||
ap = (u_char *)malloc(6);
|
||||
if (ap != NULL)
|
||||
memcpy(ap, a, 6);
|
||||
memcpy((char *)ap, (char *)a, 6);
|
||||
}
|
||||
return (ap);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" Copyright (c) 1994, 1996
|
||||
.\" Copyright (c) 1994, 1996, 1997
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
@ -19,7 +19,7 @@
|
||||
.\"
|
||||
.\" $Id$
|
||||
.\"
|
||||
.TH PCAP 3 "18 August 1996"
|
||||
.TH PCAP 3 "24 June 1998"
|
||||
.SH NAME
|
||||
pcap \- Packet Capture library
|
||||
.SH SYNOPSIS
|
||||
@ -39,9 +39,9 @@ pcap_dumper_t *pcap_dump_open(pcap_t *p, char *fname)
|
||||
.ft B
|
||||
char errbuf[PCAP_ERRBUF_SIZE];
|
||||
char *pcap_lookupdev(char *errbuf)
|
||||
int pcap_lookupnet(char *device, u_long *netp,
|
||||
int pcap_lookupnet(char *device, bpf_u_int32 *netp,
|
||||
.ti +8
|
||||
u_long *maskp, char *errbuf)
|
||||
bpf_u_int32 *maskp, char *errbuf)
|
||||
.ft
|
||||
.LP
|
||||
.ft B
|
||||
@ -59,7 +59,7 @@ u_char *sp)
|
||||
.ft B
|
||||
int pcap_compile(pcap_t *p, struct bpf_program *fp,
|
||||
.ti +8
|
||||
char *str, int optimize, u_long netmask)
|
||||
char *str, int optimize, bpf_u_int32 netmask)
|
||||
int pcap_setfilter(pcap_t *p, struct bpf_program *fp)
|
||||
.ft
|
||||
.LP
|
||||
@ -100,6 +100,10 @@ at packets on the network.
|
||||
is a string that specifies the network device to open.
|
||||
.I snaplen
|
||||
specifies the maximum number of bytes to capture.
|
||||
.I promisc
|
||||
specifies if the interface is to be put into promiscuous mode.
|
||||
(Note that even if this parameter is false, the interface
|
||||
could well be in promiscuous mode for some other reason.)
|
||||
.I to_ms
|
||||
specifies the read timeout in milliseconds.
|
||||
.I ebuf
|
||||
@ -165,7 +169,7 @@ Both
|
||||
and
|
||||
.I maskp
|
||||
are
|
||||
.I u_long
|
||||
.I bpf_u_int32
|
||||
pointers.
|
||||
A return of -1 indicates an error in which case
|
||||
.I errbuf
|
||||
@ -178,9 +182,10 @@ specifies the maximum number of packets to process before returning. A
|
||||
.I cnt
|
||||
of -1 processes all the packets received in one buffer. A
|
||||
.I cnt
|
||||
of 0 processes all packets until an error occurs (or
|
||||
of 0 processes all packets until an error occurs,
|
||||
.B EOF
|
||||
is reached).
|
||||
is reached, or the read times out (when doing live reads and a non-zero
|
||||
read timeout is specified).
|
||||
.I callback
|
||||
specifies a routine to be called with three arguments:
|
||||
a
|
||||
@ -190,7 +195,9 @@ pointer which is passed in from
|
||||
a pointer to the
|
||||
.I pcap_pkthdr
|
||||
struct (which precede the actual network headers and data),
|
||||
and a length. The number of packets read is returned.
|
||||
and a
|
||||
.I u_char
|
||||
pointer to the packet data. The number of packets read is returned.
|
||||
Zero is returned when
|
||||
.B EOF
|
||||
is reached in a ``savefile.'' A return of -1 indicates
|
||||
@ -221,12 +228,16 @@ controls whether optimization on the resulting code is performed.
|
||||
specifies the netmask of the local net.
|
||||
.PP
|
||||
.B pcap_setfilter()
|
||||
is used to specify the a filter program.
|
||||
is used to specify a filter program.
|
||||
.I fp
|
||||
is a pointer to an array of
|
||||
.I bpf_program
|
||||
struct, usually the result of a call to
|
||||
.BR pcap_compile() .
|
||||
.B \-1
|
||||
is returned on failure;
|
||||
.B 0
|
||||
is returned on success.
|
||||
.PP
|
||||
.B pcap_loop()
|
||||
is similar to
|
||||
@ -234,6 +245,15 @@ is similar to
|
||||
except it keeps reading packets until
|
||||
.I cnt
|
||||
packets are processed or an error occurs.
|
||||
It does
|
||||
.B not
|
||||
return when live read timeouts occur.
|
||||
Rather, specifying a non-zero read timeout to
|
||||
.B pcap_open_live()
|
||||
and then calling
|
||||
.B pcap_dispatch()
|
||||
allows the reception and processing of any packets that arrive when the
|
||||
timeout occurs.
|
||||
A negative
|
||||
.I cnt
|
||||
causes
|
||||
@ -263,7 +283,7 @@ returns the major number of the version of the pcap used to write the
|
||||
savefile.
|
||||
.PP
|
||||
.B pcap_minor_version()
|
||||
returns the major number of the version of the pcap used to write the
|
||||
returns the minor number of the version of the pcap used to write the
|
||||
savefile.
|
||||
.PP
|
||||
.B pcap_file()
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1993, 1994, 1995, 1996
|
||||
* Copyright (c) 1993, 1994, 1995, 1996, 1997
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#) $Header: pcap.h,v 1.20 96/07/12 19:24:15 leres Exp $ (LBL)
|
||||
* @(#) $Header: pcap.h,v 1.21 97/10/15 21:59:13 leres Exp $ (LBL)
|
||||
*/
|
||||
|
||||
#ifndef lib_pcap_h
|
||||
@ -107,7 +107,7 @@ typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *,
|
||||
char *pcap_lookupdev(char *);
|
||||
int pcap_lookupnet(char *, bpf_u_int32 *, bpf_u_int32 *, char *);
|
||||
pcap_t *pcap_open_live(char *, int, int, int, char *);
|
||||
pcap_t *pcap_open_offline(char *, char *);
|
||||
pcap_t *pcap_open_offline(const char *, char *);
|
||||
void pcap_close(pcap_t *);
|
||||
int pcap_loop(pcap_t *, int, pcap_handler, u_char *);
|
||||
int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
|
||||
@ -132,7 +132,7 @@ int pcap_minor_version(pcap_t *);
|
||||
FILE *pcap_file(pcap_t *);
|
||||
int pcap_fileno(pcap_t *);
|
||||
|
||||
pcap_dumper_t *pcap_dump_open(pcap_t *, char *);
|
||||
pcap_dumper_t *pcap_dump_open(pcap_t *, const char *);
|
||||
void pcap_dump_close(pcap_dumper_t *);
|
||||
void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
%{
|
||||
/*
|
||||
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
|
||||
* Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -22,7 +22,7 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] =
|
||||
"@(#) $Header: scanner.l,v 1.55 96/09/27 22:34:45 leres Exp $ (LBL)";
|
||||
"@(#) $Header: scanner.l,v 1.56 97/07/21 13:31:50 leres Exp $ (LBL)";
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -139,14 +139,15 @@ outbound return OUTBOUND;
|
||||
">>" return RSH;
|
||||
{N} { yylval.i = stoi((char *)yytext); return NUM; }
|
||||
({N}\.{N})|({N}\.{N}\.{N})|({N}\.{N}\.{N}\.{N}) {
|
||||
yylval.s = sdup((char *)yytext); return HID;
|
||||
}
|
||||
yylval.s = sdup((char *)yytext); return HID; }
|
||||
{B}:{B}:{B}:{B}:{B}:{B} { yylval.e = pcap_ether_aton((char *)yytext);
|
||||
return EID; }
|
||||
{B}:+({B}:+)+ { bpf_error("bogus ethernet address %s", yytext); }
|
||||
[A-Za-z][-_.A-Za-z0-9]* { yylval.s = sdup((char *)yytext); return ID; }
|
||||
[A-Za-z0-9][-_.A-Za-z0-9]*[.A-Za-z0-9] {
|
||||
yylval.s = sdup((char *)yytext); return ID; }
|
||||
"\\"[^ !()\n\t]+ { yylval.s = sdup((char *)yytext + 1); return ID; }
|
||||
[^ \[\]\t\n\-_.A-Za-z0-9!<>()&|=]+ { bpf_error("illegal token: %s\n", yytext); }
|
||||
[^ \[\]\t\n\-_.A-Za-z0-9!<>()&|=]+i {
|
||||
bpf_error("illegal token: %s\n", yytext); }
|
||||
. { bpf_error("illegal char '%c'", *yytext); }
|
||||
%%
|
||||
void
|
||||
|
Loading…
Reference in New Issue
Block a user