tdat.h - plan9port - [fork] Plan 9 from user space
HTML git clone git://src.adamsgaard.dk/plan9port
DIR Log
DIR Files
DIR Refs
DIR README
DIR 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)[2])
9 #define NetL(x) (((ulong)((((uchar*)x)[0]<<24) | (((uchar*)x)[1]<<16) | (((uchar*)x)[2]<<8) | ((uchar*)x)[3]))&0xFFFFFFFFU)
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) | (((uchar*)x)[1]<<8) | ((uchar*)x)[0]))&0xFFFFFFFFU)
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 expression */
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;