dat.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. #define NetS(x) ((((uchar*)x)[0]<<8) | ((uchar*)x)[1])
  7. #define Net3(x) ((((uchar*)x)[0]<<16) | (((uchar*)x)[1]<<8) | ((uchar*)x)[2])
  8. #define NetL(x) ((((uchar*)x)[0]<<24) | (((uchar*)x)[1]<<16) | (((uchar*)x)[2]<<8) | ((uchar*)x)[3])
  9. /*
  10. * one per protocol module
  11. */
  12. struct Proto
  13. {
  14. char* name;
  15. void (*compile)(Filter*);
  16. int (*filter)(Filter*, Msg*);
  17. int (*seprint)(Msg*);
  18. Mux* mux;
  19. char* valfmt;
  20. Field* field;
  21. int (*framer)(int, uchar*, int);
  22. };
  23. extern Proto *protos[];
  24. /*
  25. * one per protocol module, pointed to by Proto.mux
  26. */
  27. struct Mux
  28. {
  29. char* name;
  30. ulong val;
  31. Proto* pr;
  32. };
  33. /*
  34. * a field defining a comparison filter
  35. */
  36. struct Field
  37. {
  38. char* name;
  39. int ftype;
  40. int subop;
  41. char* help;
  42. };
  43. /*
  44. * the status of the current message walk
  45. */
  46. struct Msg
  47. {
  48. uchar *ps; /* packet ptr */
  49. uchar *pe; /* packet end */
  50. char *p; /* buffer start */
  51. char *e; /* buffer end */
  52. int needroot; /* pr is root, need to see in expression */
  53. Proto *pr; /* current/next protocol */
  54. };
  55. enum
  56. {
  57. Fnum, /* just a number */
  58. Fether, /* ethernet address */
  59. Fv4ip, /* v4 ip address */
  60. Fv6ip, /* v6 ip address */
  61. Fba, /* byte array */
  62. };
  63. /*
  64. * a node in the filter tree
  65. */
  66. struct Filter {
  67. int op; /* token type */
  68. char *s; /* string */
  69. Filter *l;
  70. Filter *r;
  71. Proto *pr; /* next protocol;
  72. /* protocol specific */
  73. int subop;
  74. ulong param;
  75. union {
  76. ulong ulv;
  77. vlong vlv;
  78. uchar a[32];
  79. };
  80. };
  81. extern void yyinit(char*);
  82. extern int yyparse(void);
  83. extern Filter* newfilter(void);
  84. extern void compile_cmp(char*, Filter*, Field*);
  85. extern void demux(Mux*, ulong, ulong, Msg*, Proto*);
  86. extern int defaultframer(int, uchar*, int);
  87. extern int Nflag;
  88. extern int dflag;
  89. extern int Cflag;
  90. typedef Filter *Filterptr;
  91. #define YYSTYPE Filterptr
  92. extern Filter *filter;