]> The Tcpdump Group git mirrors - libpcap/commitdiff
add BPF_ filters for misc. IS-IS PDU Types
authorhannes <hannes>
Fri, 6 Dec 2002 00:01:33 +0000 (00:01 +0000)
committerhannes <hannes>
Fri, 6 Dec 2002 00:01:33 +0000 (00:01 +0000)
gencode.c
gencode.h
grammar.y
nlpid.h
scanner.l

index 19aa2998c849585cdf64de1cebe53e86760e75bd..47eba1b9dbde1c767b469cd7ad77c48f711f2763 100644 (file)
--- a/gencode.c
+++ b/gencode.c
@@ -21,7 +21,7 @@
  */
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.181 2002-12-04 21:40:13 hannes Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/libpcap/gencode.c,v 1.182 2002-12-06 00:01:33 hannes Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -2694,10 +2694,8 @@ struct block *
 gen_proto_abbrev(proto)
        int proto;
 {
-#ifdef INET6
        struct block *b0;
-#endif
-       struct block *b1;
+        struct block *b1;
 
        switch (proto) {
 
@@ -2854,6 +2852,66 @@ gen_proto_abbrev(proto)
                b1 = gen_proto(ISO10589_ISIS, Q_ISO, Q_DEFAULT);
                break;
 
+       case Q_ISIS_L1: /* all IS-IS Level1 PDU-Types */
+               b0 = gen_proto(ISIS_L1_LAN_IIH, Q_ISIS, Q_DEFAULT);
+               b1 = gen_proto(ISIS_PTP_IIH, Q_ISIS, Q_DEFAULT); /* FIXME extract the circuit-type bits */
+               gen_or(b0, b1);
+               b0 = gen_proto(ISIS_L1_LSP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               b0 = gen_proto(ISIS_L1_CSNP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               b0 = gen_proto(ISIS_L1_PSNP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               break;
+
+       case Q_ISIS_L2: /* all IS-IS Level2 PDU-Types */
+               b0 = gen_proto(ISIS_L2_LAN_IIH, Q_ISIS, Q_DEFAULT);
+               b1 = gen_proto(ISIS_PTP_IIH, Q_ISIS, Q_DEFAULT); /* FIXME extract the circuit-type bits */
+               gen_or(b0, b1);
+               b0 = gen_proto(ISIS_L2_LSP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               b0 = gen_proto(ISIS_L2_CSNP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               b0 = gen_proto(ISIS_L2_PSNP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               break;
+
+       case Q_ISIS_IIH: /* all IS-IS Hello PDU-Types */
+               b0 = gen_proto(ISIS_L1_LAN_IIH, Q_ISIS, Q_DEFAULT);
+               b1 = gen_proto(ISIS_L2_LAN_IIH, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               b0 = gen_proto(ISIS_PTP_IIH, Q_ISIS, Q_DEFAULT);                
+                gen_or(b0, b1);
+               break;
+
+       case Q_ISIS_LSP: 
+               b0 = gen_proto(ISIS_L1_LSP, Q_ISIS, Q_DEFAULT);
+               b1 = gen_proto(ISIS_L2_LSP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               break;
+
+       case Q_ISIS_SNP:
+               b0 = gen_proto(ISIS_L1_CSNP, Q_ISIS, Q_DEFAULT);
+               b1 = gen_proto(ISIS_L2_CSNP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               b0 = gen_proto(ISIS_L1_PSNP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               b0 = gen_proto(ISIS_L2_PSNP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               break;
+
+       case Q_ISIS_CSNP:
+               b0 = gen_proto(ISIS_L1_PSNP, Q_ISIS, Q_DEFAULT);
+               b1 = gen_proto(ISIS_L2_PSNP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               break;
+
+       case Q_ISIS_PSNP:
+               b0 = gen_proto(ISIS_L1_PSNP, Q_ISIS, Q_DEFAULT);
+               b1 = gen_proto(ISIS_L2_PSNP, Q_ISIS, Q_DEFAULT);
+               gen_or(b0, b1);
+               break;
+
        case Q_CLNP:
                b1 = gen_proto(ISO8473_CLNP, Q_ISO, Q_DEFAULT);
                break;
@@ -3509,6 +3567,13 @@ gen_proto(v, proto, dir)
                        return b1;
                }
 
+        case Q_ISIS:
+            b0 = gen_proto(ISO10589_ISIS, Q_ISO, Q_DEFAULT);
+            /* 4 is the offset of the PDU type relative to the IS-IS header */
+            b1 = gen_cmp(off_nl_nosnap+4, BPF_B, (long)v);
+            gen_and(b0, b1);
+            return b1;
+
        case Q_ARP:
                bpf_error("arp does not encapsulate another protocol");
                /* NOTREACHED */
index eab14fc2352b2e9669fb97300c9d8531377a31f7..1b9459fdb35bbb19908e037aa3f5b5c11c3f106b 100644 (file)
--- 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.55 2002-07-11 09:06:34 guy Exp $ (LBL)
+ * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.56 2002-12-06 00:01:34 hannes Exp $ (LBL)
  */
 
 /*
 
 #define Q_NETBEUI      30
 
+/* IS-IS Levels */
+#define Q_ISIS_L1       31
+#define Q_ISIS_L2       32
+/* PDU types */
+#define Q_ISIS_IIH      33
+#define Q_ISIS_LAN_IIH  34
+#define Q_ISIS_PTP_IIH  35
+#define Q_ISIS_SNP      36
+#define Q_ISIS_CSNP     37
+#define Q_ISIS_PSNP     38
+#define Q_ISIS_LSP      39
+
 /* Directional qualifiers. */
 
 #define Q_SRC          1
index e32cdd08f54c771805c1cd0b13021c8c603c1916..1adc58c50acb521061e6caf35056955f3f683428 100644 (file)
--- a/grammar.y
+++ b/grammar.y
@@ -22,7 +22,7 @@
  */
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.77 2002-08-11 18:27:14 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.78 2002-12-06 00:01:34 hannes Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -126,7 +126,7 @@ pcap_parse()
 %token  LEN
 %token  IPV6 ICMPV6 AH ESP
 %token VLAN
-%token  ISO ESIS ISIS CLNP
+%token  ISO ESIS CLNP ISIS L1 L2 IIH LSP SNP CSNP PSNP 
 %token  STP
 %token  IPX
 %token  NETBEUI
@@ -300,6 +300,13 @@ pname:       LINK                  { $$ = Q_LINK; }
        | ISO                   { $$ = Q_ISO; }
        | ESIS                  { $$ = Q_ESIS; }
        | ISIS                  { $$ = Q_ISIS; }
+       | L1                    { $$ = Q_ISIS_L1; }
+       | L2                    { $$ = Q_ISIS_L2; }
+       | IIH                   { $$ = Q_ISIS_IIH; }
+       | LSP                   { $$ = Q_ISIS_LSP; }
+       | SNP                   { $$ = Q_ISIS_SNP; }
+       | PSNP                  { $$ = Q_ISIS_PSNP; }
+       | CSNP                  { $$ = Q_ISIS_CSNP; }
        | CLNP                  { $$ = Q_CLNP; }
        | STP                   { $$ = Q_STP; }
        | IPX                   { $$ = Q_IPX; }
diff --git a/nlpid.h b/nlpid.h
index 87ee38104261f761b57c872e2253f8a00617929b..5327a362b41ce3d657a3ae1f06f5ca3629bbab70 100644 (file)
--- a/nlpid.h
+++ b/nlpid.h
@@ -15,7 +15,7 @@
  * 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)
+ * @(#) $Header: /tcpdump/master/libpcap/nlpid.h,v 1.2 2002-12-06 00:01:34 hannes Exp $ (Juniper)
  */
 
 /* Types missing from some systems */
 #ifndef        ISO10589_ISIS
 #define        ISO10589_ISIS           0x83
 #endif
+/*
+ * this does not really belong in the nlpid.h file
+ * however we need it for generating nice
+ * IS-IS related BPF filters
+ */
+#define ISIS_L1_LAN_IIH      15
+#define ISIS_L2_LAN_IIH      16
+#define ISIS_PTP_IIH         17
+#define ISIS_L1_LSP          18
+#define ISIS_L2_LSP          20
+#define ISIS_L1_CSNP         24
+#define ISIS_L2_CSNP         25
+#define ISIS_L1_PSNP         26
+#define ISIS_L2_PSNP         27
+
 #ifndef ISO8878A_CONS
 #define        ISO8878A_CONS           0x84
 #endif
index c8fecd82ca7e5d4e465765a7e6f924f2734822f2..d7fd4bfcdb440edd7642eef861f2ce707c6b0a2a 100644 (file)
--- a/scanner.l
+++ b/scanner.l
@@ -22,7 +22,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.90 2002-08-08 08:22:47 guy Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/libpcap/scanner.l,v 1.91 2002-12-06 00:01:35 hannes Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -214,6 +214,14 @@ esis               return ESIS;
 es-is          return ESIS;
 isis           return ISIS;
 is-is          return ISIS;
+l1              return L1;
+l2              return L2;
+iih             return IIH;
+lsp             return LSP;
+snp             return SNP;
+csnp            return CSNP;
+psnp            return PSNP;
+
 clnp           return CLNP;
 
 stp            return STP;