summaryrefslogtreecommitdiffstats
path: root/include/libipset/ipset.h
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2018-10-18 17:27:49 +0200
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2018-10-18 17:27:49 +0200
commit55fdd96e331e920ee62bd816a572ac24f6dcd1ae (patch)
tree74e53ff7174e08b035b85f95977ff6919e315b01 /include/libipset/ipset.h
parenta27741493db0d824a51775e387cf3972a471f64e (diff)
Library reworked to support embedding ipset completely
The ipset library is rewritten/extended to support embedding ipset, so that sets can fully be managed without calling the ipset binary. The ipset binary relies completely on the new library. The libipset.3 manpage was written about the library functions and usage. Signed-off-by: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Diffstat (limited to 'include/libipset/ipset.h')
-rw-r--r--include/libipset/ipset.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/include/libipset/ipset.h b/include/libipset/ipset.h
new file mode 100644
index 0000000..7eba74e
--- /dev/null
+++ b/include/libipset/ipset.h
@@ -0,0 +1,90 @@
+/* Copyright 2007-2010 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 version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef LIBIPSET_IPSET_H
+#define LIBIPSET_IPSET_H
+
+#include <stdbool.h> /* bool */
+#include <libipset/linux_ip_set.h> /* enum ipset_cmd */
+#include <libipset/session.h> /* ipset_session_* */
+#include <libipset/types.h> /* ipset_load_types */
+
+#define IPSET_CMD_ALIASES 3
+
+/* Commands in userspace */
+struct ipset_commands {
+ enum ipset_cmd cmd;
+ int has_arg;
+ const char *name[IPSET_CMD_ALIASES];
+ const char *help;
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const struct ipset_commands ipset_commands[];
+
+struct ipset_session;
+struct ipset_data;
+struct ipset;
+
+
+/* Environment options */
+struct ipset_envopts {
+ int flag;
+ int has_arg;
+ const char *name[2];
+ const char *help;
+ int (*parse)(struct ipset *ipset, int flag, const char *str);
+ int (*print)(char *buf, unsigned int len,
+ const struct ipset_data *data, int flag, uint8_t env);
+};
+
+extern const struct ipset_envopts ipset_envopts[];
+
+extern bool ipset_match_cmd(const char *arg, const char * const name[]);
+extern bool ipset_match_option(const char *arg, const char * const name[]);
+extern bool ipset_match_envopt(const char *arg, const char * const name[]);
+extern void ipset_port_usage(void);
+extern int ipset_parse_filename(struct ipset *ipset, int opt, const char *str);
+extern int ipset_parse_output(struct ipset *ipset,
+ int opt, const char *str);
+extern int ipset_envopt_parse(struct ipset *ipset,
+ int env, const char *str);
+
+enum ipset_exittype {
+ IPSET_NO_PROBLEM = 0,
+ IPSET_OTHER_PROBLEM,
+ IPSET_PARAMETER_PROBLEM,
+ IPSET_VERSION_PROBLEM,
+ IPSET_SESSION_PROBLEM,
+};
+
+typedef int (*ipset_custom_errorfn)(struct ipset *ipset, void *p,
+ int status, const char *msg, ...)
+ __attribute__ ((format (printf, 4, 5)));
+typedef int (*ipset_standard_errorfn)(struct ipset *ipset, void *p);
+
+extern struct ipset_session * ipset_session(struct ipset *ipset);
+extern bool ipset_is_interactive(struct ipset *ipset);
+extern int ipset_custom_printf(struct ipset *ipset,
+ ipset_custom_errorfn custom_error,
+ ipset_standard_errorfn standard_error,
+ ipset_print_outfn outfn,
+ void *p);
+
+extern int ipset_parse_argv(struct ipset *ipset, int argc, char *argv[]);
+extern int ipset_parse_line(struct ipset *ipset, char *line);
+extern int ipset_parse_stream(struct ipset *ipset, FILE *f);
+extern struct ipset * ipset_init(void);
+extern int ipset_fini(struct ipset *ipset);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* LIBIPSET_IPSET_H */