ip6tables.h revision 79dee0702b18c8ea1d1f7a2b1f6b29349466986b
179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell#ifndef _IP6TABLES_USER_H
279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell#define _IP6TABLES_USER_H
379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell#include "iptables_common.h"
579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell#include "libiptc/libip6tc.h"
679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell/* Include file for additions: new matches and targets. */
879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russellstruct ip6tables_match
979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell{
1079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	struct ip6tables_match *next;
1179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
1279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	ip6t_chainlabel name;
1379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
1479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	const char *version;
1579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
1679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Size of match data. */
1779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	size_t size;
1879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
1979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Function which prints out usage message. */
2079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*help)(void);
2179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
2279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Initialize the match. */
2379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*init)(struct ip6t_entry_match *m, unsigned int *nfcache);
2479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
2579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Function which parses command options; returns true if it
2679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	   ate an option */
2779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	int (*parse)(int c, char **argv, int invert, unsigned int *flags,
2879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		     const struct ip6t_entry *entry,
2979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		     unsigned int *nfcache,
3079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		     struct ip6t_entry_match **match);
3179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
3279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Final check; exit if not ok. */
3379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*final_check)(unsigned int flags);
3479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
3579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Prints out the match iff non-NULL: put space at end */
3679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*print)(const struct ip6t_ip6 *ip,
3779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		      const struct ip6t_entry_match *match, int numeric);
3879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
3979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Saves the union ipt_matchinfo in parsable form to stdout. */
4079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*save)(const struct ip6t_ip6 *ip,
4179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		     const struct ip6t_entry_match *match);
4279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
4379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Pointer to list of extra command-line options */
4479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	struct option *extra_opts;
4579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
4679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Ignore these men behind the curtain: */
4779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	unsigned int option_offset;
4879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	struct ip6t_entry_match *m;
4979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	unsigned int mflags;
5079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell};
5179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
5279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russellstruct ip6tables_target
5379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell{
5479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	struct ip6tables_target *next;
5579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
5679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	ip6t_chainlabel name;
5779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
5879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	const char *version;
5979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
6079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Size of target data. */
6179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	size_t size;
6279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
6379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Function which prints out usage message. */
6479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*help)(void);
6579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
6679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Initialize the target. */
6779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*init)(struct ip6t_entry_target *t, unsigned int *nfcache);
6879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
6979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Function which parses command options; returns true if it
7079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	   ate an option */
7179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	int (*parse)(int c, char **argv, int invert, unsigned int *flags,
7279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		     const struct ip6t_entry *entry,
7379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		     struct ip6t_entry_target **target);
7479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
7579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Final check; exit if not ok. */
7679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*final_check)(unsigned int flags);
7779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
7879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Prints out the target iff non-NULL: put space at end */
7979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*print)(const struct ip6t_ip6 *ip,
8079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		      const struct ip6t_entry_target *target, int numeric);
8179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
8279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Saves the targinfo in parsable form to stdout. */
8379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	void (*save)(const struct ip6t_ip6 *ip,
8479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		     const struct ip6t_entry_target *target);
8579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
8679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Pointer to list of extra command-line options */
8779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	struct option *extra_opts;
8879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
8979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	/* Ignore these men behind the curtain: */
9079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	unsigned int option_offset;
9179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	struct ip6t_entry_target *t;
9279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell	unsigned int tflags;
9379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell};
9479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
9579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell/* Your shared library should call one of these. */
9679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russellextern void register_match6(struct ip6tables_match *me);
9779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russellextern void register_target6(struct ip6tables_target *me);
9879dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
9979dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russellextern int do_command6(int argc, char *argv[], char **table,
10079dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell		       ip6tc_handle_t *handle);
10179dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell/* Keeping track of external matches and targets: linked lists. */
10279dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russellextern struct ip6tables_match *ip6tables_matches;
10379dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russellextern struct ip6tables_target *ip6tables_targets;
10479dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell
10579dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russellextern struct ip6tables_target *find_target6(const char *name, int tryload);
10679dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russellextern struct ip6tables_match *find_match6(const char *name, int tryload);
10779dee0702b18c8ea1d1f7a2b1f6b29349466986bRusty Russell#endif /*_IP6TABLES_USER_H*/
108