81d99d861fb785047640042f3476b0ea86025a0e
[iptables.git] / include / ip6tables.h
1 #ifndef _IP6TABLES_USER_H
2 #define _IP6TABLES_USER_H
3
4 #include "iptables_common.h"
5 #include "libiptc/libip6tc.h"
6
7 #ifndef IP6T_LIB_DIR
8 #define IP6T_LIB_DIR "/usr/local/lib/iptables"
9 #endif
10
11 struct ip6tables_rule_match
12 {
13         struct ip6tables_rule_match *next;
14
15         struct ip6tables_match *match;
16 };
17
18 /* Include file for additions: new matches and targets. */
19 struct ip6tables_match
20 {
21         struct ip6tables_match *next;
22
23         ip6t_chainlabel name;
24
25         const char *version;
26
27         /* Size of match data. */
28         size_t size;
29
30         /* Size of match data relevent for userspace comparison purposes */
31         size_t userspacesize;
32
33         /* Function which prints out usage message. */
34         void (*help)(void);
35
36         /* Initialize the match. */
37         void (*init)(struct ip6t_entry_match *m, unsigned int *nfcache);
38
39         /* Function which parses command options; returns true if it
40            ate an option */
41         int (*parse)(int c, char **argv, int invert, unsigned int *flags,
42                      const struct ip6t_entry *entry,
43                      unsigned int *nfcache,
44                      struct ip6t_entry_match **match);
45
46         /* Final check; exit if not ok. */
47         void (*final_check)(unsigned int flags);
48
49         /* Prints out the match iff non-NULL: put space at end */
50         void (*print)(const struct ip6t_ip6 *ip,
51                       const struct ip6t_entry_match *match, int numeric);
52
53         /* Saves the union ipt_matchinfo in parsable form to stdout. */
54         void (*save)(const struct ip6t_ip6 *ip,
55                      const struct ip6t_entry_match *match);
56
57         /* Pointer to list of extra command-line options */
58         const struct option *extra_opts;
59
60         /* Ignore these men behind the curtain: */
61         unsigned int option_offset;
62         struct ip6t_entry_match *m;
63         unsigned int mflags;
64 #ifdef NO_SHARED_LIBS
65         unsigned int loaded; /* simulate loading so options are merged properly */
66 #endif
67 };
68
69 struct ip6tables_target
70 {
71         struct ip6tables_target *next;
72         
73         ip6t_chainlabel name;
74
75         const char *version;
76
77         /* Size of target data. */
78         size_t size;
79
80         /* Size of target data relevent for userspace comparison purposes */
81         size_t userspacesize;
82
83         /* Function which prints out usage message. */
84         void (*help)(void);
85
86         /* Initialize the target. */
87         void (*init)(struct ip6t_entry_target *t, unsigned int *nfcache);
88
89         /* Function which parses command options; returns true if it
90            ate an option */
91         int (*parse)(int c, char **argv, int invert, unsigned int *flags,
92                      const struct ip6t_entry *entry,
93                      struct ip6t_entry_target **target);
94         
95         /* Final check; exit if not ok. */
96         void (*final_check)(unsigned int flags);
97
98         /* Prints out the target iff non-NULL: put space at end */
99         void (*print)(const struct ip6t_ip6 *ip,
100                       const struct ip6t_entry_target *target, int numeric);
101
102         /* Saves the targinfo in parsable form to stdout. */
103         void (*save)(const struct ip6t_ip6 *ip,
104                      const struct ip6t_entry_target *target);
105
106         /* Pointer to list of extra command-line options */
107         struct option *extra_opts;
108
109         /* Ignore these men behind the curtain: */
110         unsigned int option_offset;
111         struct ip6t_entry_target *t;
112         unsigned int tflags;
113         unsigned int used;
114 #ifdef NO_SHARED_LIBS
115         unsigned int loaded; /* simulate loading so options are merged properly */
116 #endif
117 };
118
119 extern int line;
120
121 /* Your shared library should call one of these. */
122 extern void register_match6(struct ip6tables_match *me);
123 extern void register_target6(struct ip6tables_target *me);
124
125 extern int do_command6(int argc, char *argv[], char **table,
126                        ip6tc_handle_t *handle);
127 /* Keeping track of external matches and targets: linked lists. */
128 extern struct ip6tables_match *ip6tables_matches;
129 extern struct ip6tables_target *ip6tables_targets;
130
131 enum ip6t_tryload {
132         DONT_LOAD,
133         TRY_LOAD,
134         LOAD_MUST_SUCCEED
135 };
136
137 extern struct ip6tables_target *find_target(const char *name, enum ip6t_tryload);
138 extern struct ip6tables_match *find_match(const char *name, enum ip6t_tryload, struct ip6tables_rule_match **match);
139
140 extern void parse_interface(const char *arg, char *vianame, unsigned char *mask);
141
142 extern int for_each_chain(int (*fn)(const ip6t_chainlabel, int, ip6tc_handle_t *), int verbose, int builtinstoo, ip6tc_handle_t *handle);
143 extern int flush_entries(const ip6t_chainlabel chain, int verbose, ip6tc_handle_t *handle);
144 extern int delete_chain(const ip6t_chainlabel chain, int verbose, ip6tc_handle_t *handle);
145 extern int ip6tables_insmod(const char *modname, const char *modprobe);
146
147 #endif /*_IP6TABLES_USER_H*/