Home | History | Annotate | Download | only in iptables
      1 #ifndef IPTABLES_XSHARED_H
      2 #define IPTABLES_XSHARED_H 1
      3 
      4 #include <limits.h>
      5 #include <stdbool.h>
      6 #include <stdint.h>
      7 #include <netinet/in.h>
      8 #include <net/if.h>
      9 #include <sys/time.h>
     10 #include <linux/netfilter_ipv4/ip_tables.h>
     11 #include <linux/netfilter_ipv6/ip6_tables.h>
     12 
     13 enum {
     14 	OPT_NONE        = 0,
     15 	OPT_NUMERIC     = 1 << 0,
     16 	OPT_SOURCE      = 1 << 1,
     17 	OPT_DESTINATION = 1 << 2,
     18 	OPT_PROTOCOL    = 1 << 3,
     19 	OPT_JUMP        = 1 << 4,
     20 	OPT_VERBOSE     = 1 << 5,
     21 	OPT_EXPANDED    = 1 << 6,
     22 	OPT_VIANAMEIN   = 1 << 7,
     23 	OPT_VIANAMEOUT  = 1 << 8,
     24 	OPT_LINENUMBERS = 1 << 9,
     25 	OPT_COUNTERS    = 1 << 10,
     26 };
     27 
     28 struct xtables_globals;
     29 struct xtables_rule_match;
     30 struct xtables_target;
     31 
     32 /**
     33  * xtables_afinfo - protocol family dependent information
     34  * @kmod:		kernel module basename (e.g. "ip_tables")
     35  * @proc_exists:	file which exists in procfs when module already loaded
     36  * @libprefix:		prefix of .so library name (e.g. "libipt_")
     37  * @family:		nfproto family
     38  * @ipproto:		used by setsockopt (e.g. IPPROTO_IP)
     39  * @so_rev_match:	optname to check revision support of match
     40  * @so_rev_target:	optname to check revision support of target
     41  */
     42 struct xtables_afinfo {
     43 	const char *kmod;
     44 	const char *proc_exists;
     45 	const char *libprefix;
     46 	uint8_t family;
     47 	uint8_t ipproto;
     48 	int so_rev_match;
     49 	int so_rev_target;
     50 };
     51 
     52 struct iptables_command_state {
     53 	union {
     54 		struct ipt_entry fw;
     55 		struct ip6t_entry fw6;
     56 	};
     57 	int invert;
     58 	int c;
     59 	unsigned int options;
     60 	struct xtables_rule_match *matches;
     61 	struct xtables_target *target;
     62 	struct xt_counters counters;
     63 	char *protocol;
     64 	int proto_used;
     65 	const char *jumpto;
     66 	char **argv;
     67 	bool restore;
     68 };
     69 
     70 typedef int (*mainfunc_t)(int, char **);
     71 
     72 struct subcommand {
     73 	const char *name;
     74 	mainfunc_t main;
     75 };
     76 
     77 enum {
     78 	XT_OPTION_OFFSET_SCALE = 256,
     79 };
     80 
     81 extern void print_extension_helps(const struct xtables_target *,
     82 	const struct xtables_rule_match *);
     83 extern const char *proto_to_name(uint8_t, int);
     84 extern int command_default(struct iptables_command_state *,
     85 	struct xtables_globals *);
     86 extern struct xtables_match *load_proto(struct iptables_command_state *);
     87 extern int subcmd_main(int, char **, const struct subcommand *);
     88 extern void xs_init_target(struct xtables_target *);
     89 extern void xs_init_match(struct xtables_match *);
     90 
     91 /**
     92  * Values for the iptables lock.
     93  *
     94  * A value >= 0 indicates the lock filedescriptor. Other values are:
     95  *
     96  * XT_LOCK_UNSUPPORTED : The system does not support locking, execution will
     97  * proceed lockless.
     98  *
     99  * XT_LOCK_BUSY : The lock was held by another process. xtables_lock only
    100  * returns this value when |wait| == false. If |wait| == true, xtables_lock
    101  * will not return unless the lock has been acquired.
    102  *
    103  * XT_LOCK_NOT_ACQUIRED : We have not yet attempted to acquire the lock.
    104  */
    105 enum {
    106 	XT_LOCK_BUSY = -1,
    107 	XT_LOCK_UNSUPPORTED  = -2,
    108 	XT_LOCK_NOT_ACQUIRED  = -3,
    109 };
    110 extern int xtables_lock(int wait, struct timeval *tv);
    111 extern void xtables_unlock(int lock);
    112 
    113 int parse_wait_time(int argc, char *argv[]);
    114 void parse_wait_interval(int argc, char *argv[], struct timeval *wait_interval);
    115 bool xs_has_arg(int argc, char *argv[]);
    116 
    117 extern const struct xtables_afinfo *afinfo;
    118 
    119 #endif /* IPTABLES_XSHARED_H */
    120