Blame


1 87a52e04 2005-12-26 devnull typedef struct Field Field;
2 87a52e04 2005-12-26 devnull typedef struct Filter Filter;
3 87a52e04 2005-12-26 devnull typedef struct Msg Msg;
4 87a52e04 2005-12-26 devnull typedef struct Mux Mux;
5 87a52e04 2005-12-26 devnull typedef struct Proto Proto;
6 87a52e04 2005-12-26 devnull
7 87a52e04 2005-12-26 devnull #define NetS(x) ((((uchar*)x)[0]<<8) | ((uchar*)x)[1])
8 87a52e04 2005-12-26 devnull #define Net3(x) ((((uchar*)x)[0]<<16) | (((uchar*)x)[1]<<8) | ((uchar*)x)[2])
9 87a52e04 2005-12-26 devnull #define NetL(x) ((((uchar*)x)[0]<<24) | (((uchar*)x)[1]<<16) | (((uchar*)x)[2]<<8) | ((uchar*)x)[3])
10 87a52e04 2005-12-26 devnull
11 87a52e04 2005-12-26 devnull /*
12 87a52e04 2005-12-26 devnull * one per protocol module
13 87a52e04 2005-12-26 devnull */
14 87a52e04 2005-12-26 devnull struct Proto
15 87a52e04 2005-12-26 devnull {
16 87a52e04 2005-12-26 devnull char* name;
17 87a52e04 2005-12-26 devnull void (*compile)(Filter*);
18 87a52e04 2005-12-26 devnull int (*filter)(Filter*, Msg*);
19 87a52e04 2005-12-26 devnull int (*seprint)(Msg*);
20 87a52e04 2005-12-26 devnull Mux* mux;
21 a38a1836 2006-02-14 devnull char* valfmt;
22 87a52e04 2005-12-26 devnull Field* field;
23 87a52e04 2005-12-26 devnull int (*framer)(int, uchar*, int);
24 87a52e04 2005-12-26 devnull };
25 87a52e04 2005-12-26 devnull extern Proto *protos[];
26 87a52e04 2005-12-26 devnull
27 87a52e04 2005-12-26 devnull /*
28 87a52e04 2005-12-26 devnull * one per protocol module, pointed to by Proto.mux
29 87a52e04 2005-12-26 devnull */
30 87a52e04 2005-12-26 devnull struct Mux
31 87a52e04 2005-12-26 devnull {
32 87a52e04 2005-12-26 devnull char* name;
33 87a52e04 2005-12-26 devnull ulong val;
34 87a52e04 2005-12-26 devnull Proto* pr;
35 87a52e04 2005-12-26 devnull };
36 87a52e04 2005-12-26 devnull
37 87a52e04 2005-12-26 devnull /*
38 87a52e04 2005-12-26 devnull * a field defining a comparison filter
39 87a52e04 2005-12-26 devnull */
40 87a52e04 2005-12-26 devnull struct Field
41 87a52e04 2005-12-26 devnull {
42 87a52e04 2005-12-26 devnull char* name;
43 87a52e04 2005-12-26 devnull int ftype;
44 87a52e04 2005-12-26 devnull int subop;
45 87a52e04 2005-12-26 devnull char* help;
46 87a52e04 2005-12-26 devnull };
47 87a52e04 2005-12-26 devnull
48 87a52e04 2005-12-26 devnull /*
49 87a52e04 2005-12-26 devnull * the status of the current message walk
50 87a52e04 2005-12-26 devnull */
51 87a52e04 2005-12-26 devnull struct Msg
52 87a52e04 2005-12-26 devnull {
53 87a52e04 2005-12-26 devnull uchar *ps; /* packet ptr */
54 87a52e04 2005-12-26 devnull uchar *pe; /* packet end */
55 87a52e04 2005-12-26 devnull
56 87a52e04 2005-12-26 devnull char *p; /* buffer start */
57 87a52e04 2005-12-26 devnull char *e; /* buffer end */
58 87a52e04 2005-12-26 devnull
59 87a52e04 2005-12-26 devnull int needroot; /* pr is root, need to see in expression */
60 87a52e04 2005-12-26 devnull Proto *pr; /* current/next protocol */
61 87a52e04 2005-12-26 devnull };
62 87a52e04 2005-12-26 devnull
63 87a52e04 2005-12-26 devnull enum
64 87a52e04 2005-12-26 devnull {
65 87a52e04 2005-12-26 devnull Fnum, /* just a number */
66 87a52e04 2005-12-26 devnull Fether, /* ethernet address */
67 87a52e04 2005-12-26 devnull Fv4ip, /* v4 ip address */
68 87a52e04 2005-12-26 devnull Fv6ip, /* v6 ip address */
69 87a52e04 2005-12-26 devnull Fba, /* byte array */
70 87a52e04 2005-12-26 devnull };
71 87a52e04 2005-12-26 devnull
72 87a52e04 2005-12-26 devnull /*
73 87a52e04 2005-12-26 devnull * a node in the filter tree
74 87a52e04 2005-12-26 devnull */
75 87a52e04 2005-12-26 devnull struct Filter {
76 87a52e04 2005-12-26 devnull int op; /* token type */
77 87a52e04 2005-12-26 devnull char *s; /* string */
78 87a52e04 2005-12-26 devnull Filter *l;
79 87a52e04 2005-12-26 devnull Filter *r;
80 87a52e04 2005-12-26 devnull
81 87a52e04 2005-12-26 devnull Proto *pr; /* next protocol;
82 87a52e04 2005-12-26 devnull
83 87a52e04 2005-12-26 devnull /* protocol specific */
84 87a52e04 2005-12-26 devnull int subop;
85 87a52e04 2005-12-26 devnull ulong param;
86 87a52e04 2005-12-26 devnull union {
87 87a52e04 2005-12-26 devnull ulong ulv;
88 87a52e04 2005-12-26 devnull vlong vlv;
89 87a52e04 2005-12-26 devnull uchar a[32];
90 87a52e04 2005-12-26 devnull };
91 87a52e04 2005-12-26 devnull };
92 87a52e04 2005-12-26 devnull
93 87a52e04 2005-12-26 devnull extern void yyinit(char*);
94 87a52e04 2005-12-26 devnull extern int yyparse(void);
95 87a52e04 2005-12-26 devnull extern Filter* newfilter(void);
96 87a52e04 2005-12-26 devnull extern void compile_cmp(char*, Filter*, Field*);
97 87a52e04 2005-12-26 devnull extern void demux(Mux*, ulong, ulong, Msg*, Proto*);
98 87a52e04 2005-12-26 devnull extern int defaultframer(int, uchar*, int);
99 87a52e04 2005-12-26 devnull extern int opendevice(char*, int);
100 87a52e04 2005-12-26 devnull
101 87a52e04 2005-12-26 devnull extern int Nflag;
102 87a52e04 2005-12-26 devnull extern int dflag;
103 87a52e04 2005-12-26 devnull extern int Cflag;
104 87a52e04 2005-12-26 devnull
105 87a52e04 2005-12-26 devnull typedef Filter *Filterptr;
106 87a52e04 2005-12-26 devnull #define YYSTYPE Filterptr
107 87a52e04 2005-12-26 devnull extern Filter *filter;