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