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