123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- typedef struct Field Field;
- typedef struct Filter Filter;
- typedef struct Msg Msg;
- typedef struct Mux Mux;
- typedef struct Proto Proto;
- #define NetS(x) ((((uchar*)x)[0]<<8) | ((uchar*)x)[1])
- #define Net3(x) ((((uchar*)x)[0]<<16) | (((uchar*)x)[1]<<8) | ((uchar*)x)[2])
- #define NetL(x) ((((uchar*)x)[0]<<24) | (((uchar*)x)[1]<<16) | (((uchar*)x)[2]<<8) | ((uchar*)x)[3])
- /*
- * one per protocol module
- */
- struct Proto
- {
- char* name;
- void (*compile)(Filter*);
- int (*filter)(Filter*, Msg*);
- int (*seprint)(Msg*);
- Mux* mux;
- Field* field;
- int (*framer)(int, uchar*, int);
- };
- extern Proto *protos[];
- /*
- * one per protocol module, pointed to by Proto.mux
- */
- struct Mux
- {
- char* name;
- ulong val;
- Proto* pr;
- };
- /*
- * a field defining a comparison filter
- */
- struct Field
- {
- char* name;
- int ftype;
- int subop;
- char* help;
- };
- /*
- * the status of the current message walk
- */
- struct Msg
- {
- uchar *ps; /* packet ptr */
- uchar *pe; /* packet end */
- char *p; /* buffer start */
- char *e; /* buffer end */
- int needroot; /* pr is root, need to see in expression */
- Proto *pr; /* current/next protocol */
- };
- enum
- {
- Fnum, /* just a number */
- Fether, /* ethernet address */
- Fv4ip, /* v4 ip address */
- Fv6ip, /* v6 ip address */
- Fba, /* byte array */
- };
- /*
- * a node in the filter tree
- */
- struct Filter {
- int op; /* token type */
- char *s; /* string */
- Filter *l;
- Filter *r;
- Proto *pr; /* next protocol;
- /* protocol specific */
- int subop;
- ulong param;
- union {
- ulong ulv;
- vlong vlv;
- uchar a[32];
- };
- };
- extern void yyinit(char*);
- extern int yyparse(void);
- extern Filter* newfilter(void);
- extern void compile_cmp(char*, Filter*, Field*);
- extern void demux(Mux*, ulong, ulong, Msg*, Proto*);
- extern int defaultframer(int, uchar*, int);
- extern int Nflag;
- extern int dflag;
- extern int Cflag;
- typedef Filter *Filterptr;
- #define YYSTYPE Filterptr
- extern Filter *filter;
|