X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=ipset%2Fipset.h;fp=ipset%2Fipset.h;h=50a3476d6f766323f3c220ea6157c5a21d012454;hb=3bbf6cde0b81310fdef47ebead675dfa6d346f8b;hp=0000000000000000000000000000000000000000;hpb=6afea0b41dfbc3824956d11d960ad80097218feb;p=iptables.git diff --git a/ipset/ipset.h b/ipset/ipset.h new file mode 100644 index 0000000..50a3476 --- /dev/null +++ b/ipset/ipset.h @@ -0,0 +1,187 @@ +#ifndef __IPSET_H +#define __IPSET_H + +/* Copyright 2000-2004 Joakim Axelsson (gozem@linux.nu) + * Patrick Schaaf (bof@bof.de) + * Jozsef Kadlecsik (kadlec@blackhole.kfki.hu) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include + +#include + +#define IPSET_LIB_NAME "/libipset_%s.so" +#define PROC_SYS_MODPROBE "/proc/sys/kernel/modprobe" + +#define LIST_TRIES 5 + +#ifdef IPSET_DEBUG +extern int option_debug; +#define DP(format, args...) if (option_debug) \ + do { \ + fprintf(stderr, "%s: %s (DBG): ", __FILE__, __FUNCTION__);\ + fprintf(stderr, format "\n" , ## args); \ + } while (0) +#else +#define DP(format, args...) +#endif + +/* Commands */ +enum set_commands { + CMD_NONE, + CMD_CREATE, /* -N */ + CMD_DESTROY, /* -X */ + CMD_FLUSH, /* -F */ + CMD_RENAME, /* -E */ + CMD_SWAP, /* -W */ + CMD_LIST, /* -L */ + CMD_SAVE, /* -S */ + CMD_RESTORE, /* -R */ + CMD_ADD, /* -A */ + CMD_DEL, /* -D */ + CMD_TEST, /* -T */ + CMD_BIND, /* -B */ + CMD_UNBIND, /* -U */ + CMD_HELP, /* -H */ + CMD_VERSION, /* -V */ + NUMBER_OF_CMD = CMD_VERSION, + /* Internal commands */ + CMD_MAX_SETS, + CMD_LIST_SIZE, + CMD_SAVE_SIZE, + CMD_ADT_GET, +}; + +enum exittype { + OTHER_PROBLEM = 1, + PARAMETER_PROBLEM, + VERSION_PROBLEM +}; + +/* The view of an ipset in userspace */ +struct set { + char name[IP_SET_MAXNAMELEN]; /* Name of the set */ + ip_set_id_t id; /* Unique set id */ + ip_set_id_t index; /* Array index */ + unsigned ref; /* References in kernel */ + struct settype *settype; /* Pointer to set type functions */ +}; + +struct settype { + struct settype *next; + + char typename[IP_SET_MAXNAMELEN]; + + int protocol_version; + + /* + * Create set + */ + + /* Size of create data. Will be sent to kernel */ + size_t create_size; + + /* Initialize the create. */ + void (*create_init) (void *data); + + /* Function which parses command options; returns true if it ate an option */ + int (*create_parse) (int c, char *argv[], void *data, + unsigned *flags); + + /* Final check; exit if not ok. */ + void (*create_final) (void *data, unsigned int flags); + + /* Pointer to list of extra command-line options for create */ + struct option *create_opts; + + /* + * Add/del/test IP + */ + + /* Size of data. Will be sent to kernel */ + size_t adt_size; + + /* Function which parses command options */ + ip_set_ip_t (*adt_parser) (unsigned cmd, const char *optarg, void *data); + + /* + * Printing + */ + + /* Size of header. */ + size_t header_size; + + /* Initialize the type-header */ + void (*initheader) (struct set *set, const void *data); + + /* Pretty print the type-header */ + void (*printheader) (struct set *set, unsigned options); + + /* Pretty print all IPs */ + void (*printips) (struct set *set, void *data, size_t len, unsigned options); + + /* Pretty print all IPs sorted */ + void (*printips_sorted) (struct set *set, void *data, size_t len, unsigned options); + + /* Print save arguments for creating the set */ + void (*saveheader) (struct set *set, unsigned options); + + /* Print save for all IPs */ + void (*saveips) (struct set *set, void *data, size_t len, unsigned options); + + /* Conver a single IP (binding) to string */ + char * (*bindip_tostring)(struct set *set, ip_set_ip_t ip, unsigned options); + + /* Parse an IP at restoring bindings. FIXME */ + void (*bindip_parse) (const char *str, ip_set_ip_t * ip); + + /* Print usage */ + void (*usage) (void); + + /* Internal data */ + void *header; + void *data; + unsigned int option_offset; + unsigned int flags; +}; + +extern void settype_register(struct settype *settype); + +/* extern void unregister_settype(set_type_t *set_type); */ + +extern void exit_error(enum exittype status, char *msg, ...); + +extern char *binding_ip_tostring(struct set *set, + ip_set_ip_t ip, unsigned options); +extern char *ip_tostring(ip_set_ip_t ip, unsigned options); +extern char *ip_tostring_numeric(ip_set_ip_t ip); +extern void parse_ip(const char *str, ip_set_ip_t * ip); +extern void parse_mask(const char *str, ip_set_ip_t * mask); +extern void parse_ipandmask(const char *str, ip_set_ip_t * ip, + ip_set_ip_t * mask); +extern char *port_tostring(ip_set_ip_t port, unsigned options); +extern void parse_port(const char *str, ip_set_ip_t * port); +extern int string_to_number(const char *str, unsigned int min, unsigned int max, + ip_set_ip_t *port); + +extern void *ipset_malloc(size_t size); +extern char *ipset_strdup(const char *); +extern void ipset_free(void **data); + +#endif /* __IPSET_H */