dat.h 1.9 KB

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