blob: 9b1a4a167659f4c433cfd6216430bb50485649e3 [file] [log] [blame]
Marc Bouchere6869a82000-03-20 06:03:29 +00001#ifndef _IPTABLES_USER_H
2#define _IPTABLES_USER_H
3
4#include "libiptc/libiptc.h"
5
6/* Include file for additions: new matches and targets. */
7struct iptables_match
8{
9 struct iptables_match *next;
10
11 ipt_chainlabel name;
12
13 const char *version;
14
15 /* Size of match data. */
16 size_t size;
17
18 /* Function which prints out usage message. */
19 void (*help)(void);
20
21 /* Initialize the match. */
22 void (*init)(struct ipt_entry_match *m, unsigned int *nfcache);
23
24 /* Function which parses command options; returns true if it
25 ate an option */
26 int (*parse)(int c, char **argv, int invert, unsigned int *flags,
27 const struct ipt_entry *entry,
28 unsigned int *nfcache,
29 struct ipt_entry_match **match);
30
31 /* Final check; exit if not ok. */
32 void (*final_check)(unsigned int flags);
33
34 /* Prints out the match iff non-NULL: put space at end */
35 void (*print)(const struct ipt_ip *ip,
36 const struct ipt_entry_match *match, int numeric);
37
38 /* Saves the union ipt_matchinfo in parsable form to stdout. */
39 void (*save)(const struct ipt_ip *ip,
40 const struct ipt_entry_match *match);
41
42 /* Pointer to list of extra command-line options */
43 struct option *extra_opts;
44
45 /* Ignore these men behind the curtain: */
46 unsigned int option_offset;
47 struct ipt_entry_match *m;
48 unsigned int mflags;
49};
50
51struct iptables_target
52{
53 struct iptables_target *next;
54
55 ipt_chainlabel name;
56
57 const char *version;
58
59 /* Size of target data. */
60 size_t size;
61
62 /* Function which prints out usage message. */
63 void (*help)(void);
64
65 /* Initialize the target. */
66 void (*init)(struct ipt_entry_target *t, unsigned int *nfcache);
67
68 /* Function which parses command options; returns true if it
69 ate an option */
70 int (*parse)(int c, char **argv, int invert, unsigned int *flags,
71 const struct ipt_entry *entry,
72 struct ipt_entry_target **target);
73
74 /* Final check; exit if not ok. */
75 void (*final_check)(unsigned int flags);
76
77 /* Prints out the target iff non-NULL: put space at end */
78 void (*print)(const struct ipt_ip *ip,
79 const struct ipt_entry_target *target, int numeric);
80
81 /* Saves the targinfo in parsable form to stdout. */
82 void (*save)(const struct ipt_ip *ip,
83 const struct ipt_entry_target *target);
84
85 /* Pointer to list of extra command-line options */
86 struct option *extra_opts;
87
88 /* Ignore these men behind the curtain: */
89 unsigned int option_offset;
90 struct ipt_entry_target *t;
91 unsigned int tflags;
92};
93
94/* Your shared library should call one of these. */
95extern void register_match(struct iptables_match *me);
96extern void register_target(struct iptables_target *me);
97
98/* Functions we share */
99enum exittype {
100 OTHER_PROBLEM = 1,
101 PARAMETER_PROBLEM,
102 VERSION_PROBLEM
103};
104extern void exit_printhelp() __attribute__((noreturn));
105extern void exit_tryhelp(int) __attribute__((noreturn));
106int check_inverse(const char option[], int *invert);
107extern int string_to_number(const char *, int, int);
108void exit_error(enum exittype, char *, ...)__attribute__((noreturn,
109 format(printf,2,3)));
110extern char *addr_to_dotted(const struct in_addr *addrp);
111struct in_addr *dotted_to_addr(const char *dotted);
112extern const char *program_name, *program_version;
113
114extern int do_command(int argc, char *argv[], char **table,
115 iptc_handle_t *handle);
116/* Keeping track of external matches and targets: linked lists. */
117extern struct iptables_match *iptables_matches;
118extern struct iptables_target *iptables_targets;
119
120extern struct iptables_target *find_target(const char *name, int tryload);
121extern struct iptables_match *find_match(const char *name, int tryload);
122#endif /*_IPTABLES_USER_H*/