URI: 
       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;