Blame bootstrap_ver/iptables/xshared.h

Packit Service dd8e2b
#ifndef IPTABLES_XSHARED_H
Packit Service dd8e2b
#define IPTABLES_XSHARED_H 1
Packit Service dd8e2b
Packit Service dd8e2b
#include <limits.h>
Packit Service dd8e2b
#include <stdbool.h>
Packit Service dd8e2b
#include <stdint.h>
Packit Service dd8e2b
#include <netinet/in.h>
Packit Service dd8e2b
#include <net/if.h>
Packit Service dd8e2b
#include <linux/netfilter_arp/arp_tables.h>
Packit Service dd8e2b
#include <linux/netfilter_ipv4/ip_tables.h>
Packit Service dd8e2b
#include <linux/netfilter_ipv6/ip6_tables.h>
Packit Service dd8e2b
Packit Service dd8e2b
#ifdef DEBUG
Packit Service dd8e2b
#define DEBUGP(x, args...) fprintf(stdout, x, ## args)
Packit Service dd8e2b
#else
Packit Service dd8e2b
#define DEBUGP(x, args...)
Packit Service dd8e2b
#endif
Packit Service dd8e2b
Packit Service dd8e2b
enum {
Packit Service dd8e2b
	OPT_NONE        = 0,
Packit Service dd8e2b
	OPT_NUMERIC     = 1 << 0,
Packit Service dd8e2b
	OPT_SOURCE      = 1 << 1,
Packit Service dd8e2b
	OPT_DESTINATION = 1 << 2,
Packit Service dd8e2b
	OPT_PROTOCOL    = 1 << 3,
Packit Service dd8e2b
	OPT_JUMP        = 1 << 4,
Packit Service dd8e2b
	OPT_VERBOSE     = 1 << 5,
Packit Service dd8e2b
	OPT_EXPANDED    = 1 << 6,
Packit Service dd8e2b
	OPT_VIANAMEIN   = 1 << 7,
Packit Service dd8e2b
	OPT_VIANAMEOUT  = 1 << 8,
Packit Service dd8e2b
	OPT_LINENUMBERS = 1 << 9,
Packit Service dd8e2b
	OPT_COUNTERS    = 1 << 10,
Packit Service dd8e2b
};
Packit Service dd8e2b
Packit Service dd8e2b
struct xtables_globals;
Packit Service dd8e2b
struct xtables_rule_match;
Packit Service dd8e2b
struct xtables_target;
Packit Service dd8e2b
Packit Service dd8e2b
/**
Packit Service dd8e2b
 * xtables_afinfo - protocol family dependent information
Packit Service dd8e2b
 * @kmod:		kernel module basename (e.g. "ip_tables")
Packit Service dd8e2b
 * @proc_exists:	file which exists in procfs when module already loaded
Packit Service dd8e2b
 * @libprefix:		prefix of .so library name (e.g. "libipt_")
Packit Service dd8e2b
 * @family:		nfproto family
Packit Service dd8e2b
 * @ipproto:		used by setsockopt (e.g. IPPROTO_IP)
Packit Service dd8e2b
 * @so_rev_match:	optname to check revision support of match
Packit Service dd8e2b
 * @so_rev_target:	optname to check revision support of target
Packit Service dd8e2b
 */
Packit Service dd8e2b
struct xtables_afinfo {
Packit Service dd8e2b
	const char *kmod;
Packit Service dd8e2b
	const char *proc_exists;
Packit Service dd8e2b
	const char *libprefix;
Packit Service dd8e2b
	uint8_t family;
Packit Service dd8e2b
	uint8_t ipproto;
Packit Service dd8e2b
	int so_rev_match;
Packit Service dd8e2b
	int so_rev_target;
Packit Service dd8e2b
};
Packit Service dd8e2b
Packit Service dd8e2b
/* trick for ebtables-compat, since watchers are targets */
Packit Service dd8e2b
struct ebt_match {
Packit Service dd8e2b
	struct ebt_match			*next;
Packit Service dd8e2b
	union {
Packit Service dd8e2b
		struct xtables_match		*match;
Packit Service dd8e2b
		struct xtables_target		*watcher;
Packit Service dd8e2b
	} u;
Packit Service dd8e2b
	bool					ismatch;
Packit Service dd8e2b
};
Packit Service dd8e2b
Packit Service dd8e2b
/* Fake ebt_entry */
Packit Service dd8e2b
struct ebt_entry {
Packit Service dd8e2b
	/* this needs to be the first field */
Packit Service dd8e2b
	unsigned int bitmask;
Packit Service dd8e2b
	unsigned int invflags;
Packit Service dd8e2b
	uint16_t ethproto;
Packit Service dd8e2b
	/* the physical in-dev */
Packit Service dd8e2b
	char in[IFNAMSIZ];
Packit Service dd8e2b
	/* the logical in-dev */
Packit Service dd8e2b
	char logical_in[IFNAMSIZ];
Packit Service dd8e2b
	/* the physical out-dev */
Packit Service dd8e2b
	char out[IFNAMSIZ];
Packit Service dd8e2b
	/* the logical out-dev */
Packit Service dd8e2b
	char logical_out[IFNAMSIZ];
Packit Service dd8e2b
	unsigned char sourcemac[6];
Packit Service dd8e2b
	unsigned char sourcemsk[6];
Packit Service dd8e2b
	unsigned char destmac[6];
Packit Service dd8e2b
	unsigned char destmsk[6];
Packit Service dd8e2b
};
Packit Service dd8e2b
Packit Service dd8e2b
struct iptables_command_state {
Packit Service dd8e2b
	union {
Packit Service dd8e2b
		struct ebt_entry eb;
Packit Service dd8e2b
		struct ipt_entry fw;
Packit Service dd8e2b
		struct ip6t_entry fw6;
Packit Service dd8e2b
		struct arpt_entry arp;
Packit Service dd8e2b
	};
Packit Service dd8e2b
	int invert;
Packit Service dd8e2b
	int c;
Packit Service dd8e2b
	unsigned int options;
Packit Service dd8e2b
	struct xtables_rule_match *matches;
Packit Service dd8e2b
	struct ebt_match *match_list;
Packit Service dd8e2b
	struct xtables_target *target;
Packit Service dd8e2b
	struct xt_counters counters;
Packit Service dd8e2b
	char *protocol;
Packit Service dd8e2b
	int proto_used;
Packit Service dd8e2b
	const char *jumpto;
Packit Service dd8e2b
	char **argv;
Packit Service dd8e2b
	bool restore;
Packit Service dd8e2b
};
Packit Service dd8e2b
Packit Service dd8e2b
typedef int (*mainfunc_t)(int, char **);
Packit Service dd8e2b
Packit Service dd8e2b
struct subcommand {
Packit Service dd8e2b
	const char *name;
Packit Service dd8e2b
	mainfunc_t main;
Packit Service dd8e2b
};
Packit Service dd8e2b
Packit Service dd8e2b
enum {
Packit Service dd8e2b
	XT_OPTION_OFFSET_SCALE = 256,
Packit Service dd8e2b
};
Packit Service dd8e2b
Packit Service dd8e2b
extern void print_extension_helps(const struct xtables_target *,
Packit Service dd8e2b
	const struct xtables_rule_match *);
Packit Service dd8e2b
extern const char *proto_to_name(uint8_t, int);
Packit Service dd8e2b
extern int command_default(struct iptables_command_state *,
Packit Service dd8e2b
	struct xtables_globals *);
Packit Service dd8e2b
extern struct xtables_match *load_proto(struct iptables_command_state *);
Packit Service dd8e2b
extern int subcmd_main(int, char **, const struct subcommand *);
Packit Service dd8e2b
extern void xs_init_target(struct xtables_target *);
Packit Service dd8e2b
extern void xs_init_match(struct xtables_match *);
Packit Service dd8e2b
Packit Service dd8e2b
/**
Packit Service dd8e2b
 * Values for the iptables lock.
Packit Service dd8e2b
 *
Packit Service dd8e2b
 * A value >= 0 indicates the lock filedescriptor. Other values are:
Packit Service dd8e2b
 *
Packit Service dd8e2b
 * XT_LOCK_FAILED : The lock could not be acquired.
Packit Service dd8e2b
 *
Packit Service dd8e2b
 * XT_LOCK_BUSY : The lock was held by another process. xtables_lock only
Packit Service dd8e2b
 * returns this value when |wait| == false. If |wait| == true, xtables_lock
Packit Service dd8e2b
 * will not return unless the lock has been acquired.
Packit Service dd8e2b
 *
Packit Service dd8e2b
 * XT_LOCK_NOT_ACQUIRED : We have not yet attempted to acquire the lock.
Packit Service dd8e2b
 */
Packit Service dd8e2b
enum {
Packit Service dd8e2b
	XT_LOCK_BUSY = -1,
Packit Service dd8e2b
	XT_LOCK_FAILED = -2,
Packit Service dd8e2b
	XT_LOCK_NOT_ACQUIRED  = -3,
Packit Service dd8e2b
};
Packit Service dd8e2b
extern void xtables_unlock(int lock);
Packit Service dd8e2b
extern int xtables_lock_or_exit(int wait, struct timeval *tv);
Packit Service dd8e2b
Packit Service dd8e2b
int parse_wait_time(int argc, char *argv[]);
Packit Service dd8e2b
void parse_wait_interval(int argc, char *argv[], struct timeval *wait_interval);
Packit Service dd8e2b
int parse_counters(const char *string, struct xt_counters *ctr);
Packit Service dd8e2b
bool xs_has_arg(int argc, char *argv[]);
Packit Service dd8e2b
Packit Service dd8e2b
extern const struct xtables_afinfo *afinfo;
Packit Service dd8e2b
Packit Service dd8e2b
extern char *newargv[];
Packit Service dd8e2b
extern int newargc;
Packit Service dd8e2b
Packit Service dd8e2b
extern char *oldargv[];
Packit Service dd8e2b
extern int oldargc;
Packit Service dd8e2b
Packit Service dd8e2b
extern int newargvattr[];
Packit Service dd8e2b
Packit Service dd8e2b
int add_argv(const char *what, int quoted);
Packit Service dd8e2b
void free_argv(void);
Packit Service dd8e2b
void save_argv(void);
Packit Service dd8e2b
void add_param_to_argv(char *parsestart, int line);
Packit Service dd8e2b
Packit Service dd8e2b
void print_ipv4_addresses(const struct ipt_entry *fw, unsigned int format);
Packit Service dd8e2b
void print_ipv6_addresses(const struct ip6t_entry *fw6, unsigned int format);
Packit Service dd8e2b
Packit Service dd8e2b
void print_ifaces(const char *iniface, const char *outiface, uint8_t invflags,
Packit Service dd8e2b
		  unsigned int format);
Packit Service dd8e2b
Packit Service dd8e2b
void command_match(struct iptables_command_state *cs);
Packit Service dd8e2b
const char *xt_parse_target(const char *targetname);
Packit Service dd8e2b
void command_jump(struct iptables_command_state *cs);
Packit Service dd8e2b
Packit Service dd8e2b
#endif /* IPTABLES_XSHARED_H */