Browse files

From Florent Drouin: add support for filtering on MTP2 frame types.

  • Loading branch information...
1 parent 7bf28e7 commit 7589e0abc35ad50e7db4ee90e5d510937d221003 @yuguy yuguy committed Dec 21, 2006
Showing with 78 additions and 12 deletions.
  1. +1 −0 CREDITS
  2. +49 −1 gencode.c
  3. +12 −6 gencode.h
  4. +12 −4 grammar.y
  5. +4 −1 scanner.l
View
1 CREDITS
@@ -32,6 +32,7 @@ Additional people who have contributed patches:
Dug Song <dugsong@monkey.org>
Eric Anderson <anderse@hpl.hp.com>
Erik de Castro Lopo <erik.de.castro.lopo@sensorynetworks.com>
+ Florent Drouin <Florent.Drouin@alcatel-lucent.fr>
Franz Schaefer <schaefer@mond.at>
Gianluca Varenni <varenni@netgroup-serv.polito.it>
Gilbert Hoyek <gil_hoyek@hotmail.com>
View
50 gencode.c
@@ -21,7 +21,7 @@
*/
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.274 2006-12-20 08:20:27 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.275 2006-12-21 19:44:06 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -725,6 +725,11 @@ static u_int off_vci;
static u_int off_proto;
/*
+ * These are offsets for the MTP2 fields.
+ */
+static u_int off_li;
+
+/*
* These are offsets for the MTP3 fields.
*/
static u_int off_sio;
@@ -790,6 +795,7 @@ init_linktype(p)
/*
* And assume we're not doing SS7.
*/
+ off_li = -1;
off_sio = -1;
off_opc = -1;
off_dpc = -1;
@@ -1217,6 +1223,7 @@ init_linktype(p)
return;
case DLT_MTP2:
+ off_li = 2;
off_sio = 3;
off_opc = 4;
off_dpc = 4;
@@ -6757,6 +6764,47 @@ gen_atmtype_abbrev(type)
return b1;
}
+/*
+ * Filtering for MTP2 messages based on li value
+ * FISU, length is null
+ * LSU, length is 1 or 2
+ * MSU, length is 3 or more
+ */
+struct block *
+gen_mtp2type_abbrev(type)
+ int type;
+{
+ struct block *b0, *b1;
+
+ switch (type) {
+
+ case M_FISU:
+ if (linktype != DLT_MTP2)
+ bpf_error("'fisu' supported only on MTP2");
+ /* gen_ncmp(offrel, offset, size, mask, jtype, reverse, value) */
+ b0 = gen_ncmp(OR_PACKET, off_li, BPF_B, 0x3f, BPF_JEQ, 0, 0);
+ break;
+
+ case M_LSU:
+ if (linktype != DLT_MTP2)
+ bpf_error("'lsu' supported only on MTP2");
+ b0 = gen_ncmp(OR_PACKET, off_li, BPF_B, 0x3f, BPF_JGT, 1, 2);
+ b1 = gen_ncmp(OR_PACKET, off_li, BPF_B, 0x3f, BPF_JGT, 0, 0);
+ gen_and(b1, b0);
+ break;
+
+ case M_MSU:
+ if (linktype != DLT_MTP2)
+ bpf_error("'msu' supported only on MTP2");
+ b0 = gen_ncmp(OR_PACKET, off_li, BPF_B, 0x3f, BPF_JGT, 0, 2);
+ break;
+
+ default:
+ abort();
+ }
+ return b0;
+}
+
struct block *
gen_mtp3field_code(mtp3field, jvalue, jtype, reverse)
int mtp3field;
View
18 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.66 2005-09-05 09:07:00 guy Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.67 2006-12-21 19:44:06 guy Exp $ (LBL)
*/
/*
@@ -173,11 +173,16 @@
end-to-end circuits, ILMI circuits or
connection signalling circuit. */
-/*MTP3 field types */
-#define M_SIO 1
-#define M_OPC 2
-#define M_DPC 3
-#define M_SLS 4
+/* MTP2 types */
+#define M_FISU 22 /* FISU */
+#define M_LSU 23 /* LSU */
+#define M_MSU 24 /* MSU */
+
+/* MTP3 field types */
+#define M_SIO 1
+#define M_OPC 2
+#define M_DPC 3
+#define M_SLS 4
struct slist;
@@ -296,6 +301,7 @@ struct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtyp
struct block *gen_atmtype_abbrev(int type);
struct block *gen_atmmulti_abbrev(int type);
+struct block *gen_mtp2type_abbrev(int type);
struct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
struct block *gen_pf_ifname(const char *);
View
16 grammar.y
@@ -22,7 +22,7 @@
*/
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.93 2006-10-04 18:09:22 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.94 2006-12-21 19:44:06 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -113,8 +113,9 @@ pcap_parse()
%type <i> atmtype atmmultitype
%type <blk> atmfield
%type <blk> atmfieldvalue atmvalue atmlistvalue
-%type <blk> mtp3field
-%type <blk> mtp3fieldvalue mtp3value mtp3listvalue
+%type <i> mtp2type
+%type <blk> mtp3field
+%type <blk> mtp3fieldvalue mtp3value mtp3listvalue
%token DST SRC HOST GATEWAY
@@ -140,7 +141,8 @@ pcap_parse()
%token OAM OAMF4 CONNECTMSG METACONNECT
%token VPI VCI
%token RADIO
-%token SIO OPC DPC SLS
+%token FISU LSU MSU
+%token SIO OPC DPC SLS
%type <s> ID
%type <e> EID
@@ -269,6 +271,7 @@ rterm: head id { $$ = $2; }
| atmtype { $$.b = gen_atmtype_abbrev($1); $$.q = qerr; }
| atmmultitype { $$.b = gen_atmmulti_abbrev($1); $$.q = qerr; }
| atmfield atmvalue { $$.b = $2.b; $$.q = qerr; }
+ | mtp2type { $$.b = gen_mtp2type_abbrev($1); $$.q = qerr; }
| mtp3field mtp3value { $$.b = $2.b; $$.q = qerr; }
;
/* protocol level qualifiers */
@@ -447,6 +450,11 @@ atmfieldvalue: NUM {
atmlistvalue: atmfieldvalue
| atmlistvalue or atmfieldvalue { gen_or($1.b, $3.b); $$ = $3; }
;
+ /* MTP2 types quantifier */
+mtp2type: FISU { $$ = M_FISU; }
+ | LSU { $$ = M_LSU; }
+ | MSU { $$ = M_MSU; }
+ ;
/* MTP3 field types quantifier */
mtp3field: SIO { $$.mtp3fieldtype = M_SIO; }
| OPC { $$.mtp3fieldtype = M_OPC; }
View
5 scanner.l
@@ -22,7 +22,7 @@
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.106 2006-10-04 18:09:22 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.107 2006-12-21 19:44:06 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -288,6 +288,9 @@ srnr|subrulenum return PF_SRNR;
reason return PF_REASON;
action return PF_ACTION;
+fisu return FISU;
+lsu return LSU;
+msu return MSU;
sio return SIO;
opc return OPC;
dpc return DPC;

0 comments on commit 7589e0a

Please sign in to comment.