Skip to content

Commit

Permalink
Tony Li's changes, from FreeBSD, to support filtering for OSI packets
Browse files Browse the repository at this point in the history
and for ESIS and ISIS packets.
  • Loading branch information
yuguy committed Oct 28, 2000
1 parent 14972aa commit af30d75
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 5 deletions.
1 change: 1 addition & 0 deletions CREDITS
Expand Up @@ -23,6 +23,7 @@ Additional people who have contributed patches:
Peter Jeremy <peter.jeremy@alcatel.com.au>
Rafal Maszkowski <rzm@icm.edu.pl>
Rick Jones <raj@cup.hp.com>
Tony Li <tli@jnx.com>

The original LBL crew:
Steve McCanne
Expand Down
1 change: 1 addition & 0 deletions FILES
Expand Up @@ -35,6 +35,7 @@ linux-include/netinet/if_ether.h
linux-include/netinet/ip_var.h
mkdep
nametoaddr.c
nlpid.h
optimize.c
pcap-bpf.c
pcap-dlpi.c
Expand Down
44 changes: 42 additions & 2 deletions gencode.c
Expand Up @@ -21,7 +21,7 @@
*/
#ifndef lint
static const char rcsid[] =
"@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.128 2000-10-28 09:06:06 guy Exp $ (LBL)";
"@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.129 2000-10-28 09:30:21 guy Exp $ (LBL)";
#endif

#ifdef HAVE_CONFIG_H
Expand Down Expand Up @@ -50,6 +50,7 @@ struct rtentry;
#include "pcap-int.h"

#include "ethertype.h"
#include "nlpid.h"
#include "gencode.h"
#include "ppp.h"
#include <pcap-namedb.h>
Expand All @@ -58,6 +59,10 @@ struct rtentry;
#include <sys/socket.h>
#endif /*INET6*/

#define LLC_ISO_LSAP 0xfe

#define ETHERMTU 1500

#ifdef HAVE_OS_PROTO_H
#include "os-proto.h"
#endif
Expand Down Expand Up @@ -730,6 +735,17 @@ gen_linktype(proto)
*/
switch (proto) {

case LLC_ISO_LSAP:
/*
* OSI protocols always use 802.2 encapsulation.
*/
b0 = gen_cmp_gt(off_linktype, BPF_H, ETHERMTU);
gen_not(b0);
b1 = gen_cmp(off_linktype + 2, BPF_H, (long)
((LLC_ISO_LSAP << 8) | LLC_ISO_LSAP));
gen_and(b0, b1);
return b1;

case ETHERTYPE_ATALK:
case ETHERTYPE_AARP:
/*
Expand All @@ -742,7 +758,7 @@ gen_linktype(proto)
* we check for an Ethernet type field less than
* 1500, which means it's an 802.3 length field.
*/
b0 = gen_cmp_gt(off_linktype, BPF_H, 1500);
b0 = gen_cmp_gt(off_linktype, BPF_H, ETHERMTU);
gen_not(b0);

/*
Expand Down Expand Up @@ -1143,6 +1159,9 @@ gen_dnhostop(addr, dir, base_off)
gen_or(b0, b1);
return b1;

case Q_ISO:
bpf_error("ISO host filtering not implemented");

default:
abort();
}
Expand Down Expand Up @@ -1528,6 +1547,18 @@ gen_proto_abbrev(proto)
#endif
break;

case Q_ISO:
b1 = gen_linktype(LLC_ISO_LSAP);
break;

case Q_ESIS:
b1 = gen_proto(ISO9542_ESIS, Q_ISO, Q_DEFAULT);
break;

case Q_ISIS:
b1 = gen_proto(ISO10589_ISIS, Q_ISO, Q_DEFAULT);
break;

default:
abort();
}
Expand Down Expand Up @@ -2099,6 +2130,12 @@ gen_proto(v, proto, dir)
gen_and(b0, b1);
return b1;

case Q_ISO:
b0 = gen_linktype(LLC_ISO_LSAP);
b1 = gen_cmp(off_nl + 3, BPF_B, (long)v);
gen_and(b0, b1);
return b1;

case Q_ARP:
bpf_error("arp does not encapsulate another protocol");
/* NOTREACHED */
Expand Down Expand Up @@ -2914,6 +2951,9 @@ gen_greater(n)
return gen_len(BPF_JGE, n);
}

/*
* Actually, this is less than or equal.
*/
struct block *
gen_less(n)
int n;
Expand Down
6 changes: 5 additions & 1 deletion gencode.h
Expand Up @@ -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.44 2000-10-28 08:19:29 guy Exp $ (LBL)
* @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.45 2000-10-28 09:30:21 guy Exp $ (LBL)
*/

/* Address qualifiers. */
Expand Down Expand Up @@ -60,6 +60,10 @@

#define Q_AARP 21

#define Q_ISO 22
#define Q_ESIS 23
#define Q_ISIS 24

/* Directional qualifiers. */

#define Q_SRC 1
Expand Down
6 changes: 5 additions & 1 deletion grammar.y
Expand Up @@ -22,7 +22,7 @@
*/
#ifndef lint
static const char rcsid[] =
"@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.62 2000-10-28 08:19:30 guy Exp $ (LBL)";
"@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.63 2000-10-28 09:30:22 guy Exp $ (LBL)";
#endif

#ifdef HAVE_CONFIG_H
Expand Down Expand Up @@ -117,6 +117,7 @@ pcap_parse()
%token LEN
%token IPV6 ICMPV6 AH ESP
%token VLAN
%token ISO ESIS ISIS

%type <s> ID
%type <e> EID
Expand Down Expand Up @@ -258,6 +259,9 @@ pname: LINK { $$ = Q_LINK; }
| ICMPV6 { $$ = Q_ICMPV6; }
| AH { $$ = Q_AH; }
| ESP { $$ = Q_ESP; }
| ISO { $$ = Q_ISO; }
| ESIS { $$ = Q_ESIS; }
| ISIS { $$ = Q_ISIS; }
;
other: pqual TK_BROADCAST { $$ = gen_broadcast($1); }
| pqual TK_MULTICAST { $$ = gen_multicast($1); }
Expand Down
43 changes: 43 additions & 0 deletions nlpid.h
@@ -0,0 +1,43 @@
/*
* Copyright (c) 1996
* Juniper Networks, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that: (1) source code distributions
* retain the above copyright notice and this paragraph in its entirety, (2)
* distributions including binary code include the above copyright notice and
* this paragraph in its entirety in the documentation or other materials
* provided with the distribution. The name of Juniper Networks may not
* be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* @(#) $Header: /tcpdump/master/libpcap/nlpid.h,v 1.1 2000-10-28 09:30:22 guy Exp $ (Juniper)
*/

/* Types missing from some systems */

/*
* Network layer prototocol identifiers
*/
#ifndef ISO8473_CLNP
#define ISO8473_CLNP 0x81
#endif
#ifndef ISO9542_ESIS
#define ISO9542_ESIS 0x82
#endif
#ifndef ISO9542X25_ESIS
#define ISO9542X25_ESIS 0x8a
#endif
#ifndef ISO10589_ISIS
#define ISO10589_ISIS 0x83
#endif
#ifndef ISO8878A_CONS
#define ISO8878A_CONS 0x84
#endif
#ifndef ISO10747_IDRP
#define ISO10747_IDRP 0x85
#endif
8 changes: 7 additions & 1 deletion scanner.l
Expand Up @@ -22,7 +22,7 @@

#ifndef lint
static const char rcsid[] =
"@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.68 2000-10-28 08:19:30 guy Exp $ (LBL)";
"@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.69 2000-10-28 09:30:22 guy Exp $ (LBL)";
#endif

#ifdef HAVE_CONFIG_H
Expand Down Expand Up @@ -190,6 +190,12 @@ sca return SCA;
moprc return MOPRC;
mopdl return MOPDL;

iso return ISO;
esis return ESIS;
es-is return ESIS;
isis return ISIS;
is-is return ISIS;

host return HOST;
net return NET;
mask return MASK;
Expand Down

0 comments on commit af30d75

Please sign in to comment.