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