new goodies
This commit is contained in:
parent
35d26aa321
commit
87a52e0485
44 changed files with 8723 additions and 0 deletions
106
src/cmd/ip/snoopy/dat.h
Executable file
106
src/cmd/ip/snoopy/dat.h
Executable file
|
|
@ -0,0 +1,106 @@
|
|||
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 opendevice(char*, int);
|
||||
|
||||
extern int Nflag;
|
||||
extern int dflag;
|
||||
extern int Cflag;
|
||||
|
||||
typedef Filter *Filterptr;
|
||||
#define YYSTYPE Filterptr
|
||||
extern Filter *filter;
|
||||
Loading…
Add table
Add a link
Reference in a new issue