From b0dcde29f7933ee716aaa0bed9d6c553fc265222 Mon Sep 17 00:00:00 2001 From: guy Date: Sun, 28 Jan 2001 09:44:48 +0000 Subject: [PATCH] Add a "netbeui" keyword, which selects NetBEUI packets (LLC packets with 0xf0 as the DSAP and SSAP). Let "ipx" work on non-Ethernet 802.2 frames - we assume they're always frames with the IPX DSAP. --- gencode.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++- gencode.h | 4 +++- grammar.y | 4 +++- llc.h | 11 +++++++---- scanner.l | 4 +++- 5 files changed, 69 insertions(+), 8 deletions(-) diff --git a/gencode.c b/gencode.c index 65d18ec..711acfc 100644 --- a/gencode.c +++ b/gencode.c @@ -21,7 +21,7 @@ */ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.146 2001-01-15 00:03:40 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.147 2001-01-28 09:44:48 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -721,6 +721,20 @@ gen_linktype(proto) gen_and(b0, b1); return b1; + case LLCSAP_NETBEUI: + /* + * NetBEUI always uses 802.2 encapsulation. + * XXX - should we check both the DSAP and the + * SSAP, like this, or should we check just the + * DSAP? + */ + b0 = gen_cmp_gt(off_linktype, BPF_H, ETHERMTU); + gen_not(b0); + b1 = gen_cmp(off_linktype + 2, BPF_H, (bpf_int32) + ((LLCSAP_NETBEUI << 8) | LLCSAP_NETBEUI)); + gen_and(b0, b1); + return b1; + case LLCSAP_IPX: /* * Check for; @@ -879,6 +893,18 @@ gen_linktype(proto) return gen_cmp(off_linktype, BPF_H, (long) ((LLCSAP_ISONS << 8) | LLCSAP_ISONS)); + case LLCSAP_NETBEUI: + return gen_cmp(off_linktype, BPF_H, (long) + ((LLCSAP_NETBEUI << 8) | LLCSAP_NETBEUI)); + + case LLCSAP_IPX: + /* + * XXX - are there ever SNAP frames for IPX on + * non-Ethernet 802.x networks? + */ + return gen_cmp(off_linktype, BPF_B, + (bpf_int32)LLCSAP_IPX); + case ETHERTYPE_ATALK: /* * 802.2-encapsulated ETHERTYPE_ATALK packets are @@ -950,6 +976,19 @@ gen_linktype(proto) gen_and(b0, b1); return b1; + case LLCSAP_NETBEUI: + /* + * NetBEUI always uses 802.2 encapsulation. + * XXX - should we check both the DSAP and the + * LSAP, like this, or should we check just the + * DSAP? + */ + b0 = gen_cmp(off_linktype, BPF_H, LINUX_SLL_P_802_2); + b1 = gen_cmp(off_linktype + 2, BPF_H, (bpf_int32) + ((LLCSAP_NETBEUI << 8) | LLCSAP_NETBEUI)); + gen_and(b0, b1); + return b1; + case LLCSAP_IPX: /* * Ethernet_II frames, which are Ethernet @@ -1712,6 +1751,9 @@ gen_host(addr, mask, proto, dir) case Q_IPX: bpf_error("IPX host filtering not implemented"); + case Q_NETBEUI: + bpf_error("'netbeui' modifier applied to host"); + default: abort(); } @@ -1810,6 +1852,9 @@ gen_host6(addr, mask, proto, dir) case Q_IPX: bpf_error("IPX host filtering not implemented"); + case Q_NETBEUI: + bpf_error("'netbeui' modifier applied to host"); + default: abort(); } @@ -2020,6 +2065,10 @@ gen_proto_abbrev(proto) b1 = gen_linktype(LLCSAP_IPX); break; + case Q_NETBEUI: + b1 = gen_linktype(LLCSAP_NETBEUI); + break; + default: abort(); } @@ -2682,6 +2731,9 @@ gen_proto(v, proto, dir) case Q_IPX: bpf_error("'ipx proto' is bogus"); + case Q_NETBEUI: + bpf_error("'netbeui proto' is bogus"); + default: abort(); /* NOTREACHED */ diff --git a/gencode.h b/gencode.h index c451426..fa76fcb 100644 --- a/gencode.h +++ b/gencode.h @@ -18,7 +18,7 @@ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.49 2001-01-14 07:57:48 guy Exp $ (LBL) + * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.50 2001-01-28 09:44:49 guy Exp $ (LBL) */ /* Address qualifiers. */ @@ -69,6 +69,8 @@ #define Q_IPX 27 +#define Q_NETBEUI 28 + /* Directional qualifiers. */ #define Q_SRC 1 diff --git a/grammar.y b/grammar.y index 3e90252..3b26e27 100644 --- a/grammar.y +++ b/grammar.y @@ -22,7 +22,7 @@ */ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.66 2001-01-14 07:57:48 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.67 2001-01-28 09:44:50 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -120,6 +120,7 @@ pcap_parse() %token ISO ESIS ISIS CLNP %token STP %token IPX +%token NETBEUI %type ID %type EID @@ -267,6 +268,7 @@ pname: LINK { $$ = Q_LINK; } | CLNP { $$ = Q_CLNP; } | STP { $$ = Q_STP; } | IPX { $$ = Q_IPX; } + | NETBEUI { $$ = Q_NETBEUI; } ; other: pqual TK_BROADCAST { $$ = gen_broadcast($1); } | pqual TK_MULTICAST { $$ = gen_multicast($1); } diff --git a/llc.h b/llc.h index f074523..b8c221f 100644 --- a/llc.h +++ b/llc.h @@ -18,7 +18,7 @@ * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#) $Header: /tcpdump/master/libpcap/llc.h,v 1.1 2001-01-14 21:26:53 guy Exp $ (LBL) + * @(#) $Header: /tcpdump/master/libpcap/llc.h,v 1.2 2001-01-28 09:44:50 guy Exp $ (LBL) */ /* @@ -58,9 +58,12 @@ #ifndef LLCSAP_SNAP #define LLCSAP_SNAP 0xaa #endif -#ifndef LLCSAP_ISONS -#define LLCSAP_ISONS 0xfe -#endif #ifndef LLCSAP_IPX #define LLCSAP_IPX 0xe0 #endif +#ifndef LLCSAP_NETBEUI +#define LLCSAP_NETBEUI 0xf0 +#endif +#ifndef LLCSAP_ISONS +#define LLCSAP_ISONS 0xfe +#endif diff --git a/scanner.l b/scanner.l index 4ef4803..b6ed45a 100644 --- a/scanner.l +++ b/scanner.l @@ -22,7 +22,7 @@ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.72 2001-01-14 07:57:49 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.73 2001-01-28 09:44:50 guy Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -201,6 +201,8 @@ stp return STP; ipx return IPX; +netbeui return NETBEUI; + host return HOST; net return NET; mask return MASK;