plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

dat.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;