1 /* Copyright 2002 Jeff Dike
2  * Licensed under the GPL
3  */
4 
5 #ifndef __CONSMGMT_H__
6 #define __CONSMGMT_H__
7 #include <stdarg.h>
8 
9 struct comlist {
10 	char *path;
11 	char *syntax;
12 	char *help;
13 	int (*doit)();
14 	unsigned char type;
15 	struct comlist *next;
16 };
17 
18 #define NOARG 0
19 #define INTARG 1
20 #define STRARG 2
21 #define WITHFILE 0x40
22 #define WITHFD 0x80
23 
24 void printlog(int priority, const char *format, ...);
25 void loadrcfile(void);
26 void setmgmtperm(char *path);
27 
28 void printoutc(FILE *fd, const char *format, ...);
29 void addcl(int ncl,struct comlist *cl);
30 #define ADDCL(CL) addcl(sizeof(CL)/sizeof(struct comlist),(CL))
31 
32 typedef int (*intfun)();
33 #ifdef DEBUGOPT
34 #define D_PACKET 01000
35 #define D_MGMT 02000
36 #define D_IN 01
37 #define D_OUT 02
38 #define D_PLUS 01
39 #define D_MINUS 02
40 #define D_DESCR 03
41 #define D_STATUS 04
42 #define D_ROOT 05
43 #define D_HASH 010
44 #define D_PORT 020
45 #define D_EP 030
46 #define D_FSTP 040
47 struct dbgcl {
48 	char *path; /* debug path for add/del */
49 	char *help; /* help string. just event mgmt when NULL */
50 	int tag;    /* tag for event mgmt and simple parsing */
51 	int *fds;   /* file descriptors for debug */
52 	intfun (*fun); /* function call dor plugin events */
53 	void **funarg; /* arg for function calls */
54 	unsigned short nfds; /* number of active fds */
55 	unsigned short nfun; /* number of active fun */
56 	unsigned short maxfds; /* current size of fds */
57 	unsigned short maxfun; /* current size of both fun and funarg */
58 	struct dbgcl *next;
59 };
60 void adddbgcl(int ncl, struct dbgcl* cl);
61 #define ADDDBGCL(CL) adddbgcl(sizeof(CL)/sizeof(struct dbgcl),(CL))
62 void debugout(struct dbgcl* cl, const char *format, ...);
63 void eventout(struct dbgcl* cl, ...);
64 int packetfilter(struct dbgcl* cl, ...);
65 #define DBGOUT(CL, ...) \
66 	if (__builtin_expect(((CL)->nfds) > 0, 0)) debugout((CL), __VA_ARGS__)
67 #define EVENTOUT(CL, ...) \
68 	if (__builtin_expect(((CL)->nfun) > 0, 0)) eventout((CL), __VA_ARGS__)
69 #define PACKETFILTER(CL, PORT, BUF, LEN) \
70 	(__builtin_expect((((CL)->nfun) == 0 || ((LEN)=packetfilter((CL), (PORT), (BUF), (LEN)))), 1))
71 	/*
72 #define PACKETFILTER(CL, PORT, BUF, LEN)  (LEN)
73 	*/
74 #else
75 #define DBGOUT(CL, ...)
76 #define EVENTOUT(CL, ...)
77 #define PACKETFILTER(CL, PORT, BUF, LEN)  (LEN)
78 #endif /* DEBUGOPT */
79 
80 #endif
81 
82 #ifdef VDEPLUGIN
83 struct plugin {
84 	char *name;
85 	char *help;
86 	void *handle;
87 	struct plugin *next;
88 };
89 #endif
90