diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/libipset/args.h | 71 | ||||
-rw-r--r-- | include/libipset/types.h | 16 |
2 files changed, 84 insertions, 3 deletions
diff --git a/include/libipset/args.h b/include/libipset/args.h new file mode 100644 index 0000000..cdec180 --- /dev/null +++ b/include/libipset/args.h @@ -0,0 +1,71 @@ +/* Copyright 2017 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_ARGS_H +#define LIBIPSET_ARGS_H + +/* Keywords */ +enum ipset_keywords { + IPSET_ARG_NONE = 0, + /* Family and aliases */ + IPSET_ARG_FAMILY, /* family */ + IPSET_ARG_INET, /* -4 */ + IPSET_ARG_INET6, /* -6 */ + /* Hash types */ + IPSET_ARG_HASHSIZE, /* hashsize */ + IPSET_ARG_MAXELEM, /* maxelem */ + /* Ignored options: backward compatibilty */ + IPSET_ARG_PROBES, /* probes */ + IPSET_ARG_RESIZE, /* resize */ + IPSET_ARG_GC, /* gc */ + IPSET_ARG_IGNORED_FROM, /* from */ + IPSET_ARG_IGNORED_TO, /* to */ + IPSET_ARG_IGNORED_NETWORK, /* network */ + /* List type */ + IPSET_ARG_SIZE, /* size */ + /* IP-type elements */ + IPSET_ARG_IPRANGE, /* range */ + IPSET_ARG_NETMASK, /* netmask */ + /* Port-type elements */ + IPSET_ARG_PORTRANGE, /* range */ + /* Setname type elements */ + IPSET_ARG_BEFORE, /* before */ + IPSET_ARG_AFTER, /* after */ + /* Backward compatibility */ + IPSET_ARG_FROM_IP, /* from */ + IPSET_ARG_TO_IP, /* to */ + IPSET_ARG_NETWORK, /* network */ + IPSET_ARG_FROM_PORT, /* from */ + IPSET_ARG_TO_PORT, /* to */ + /* Extra flags, options */ + IPSET_ARG_FORCEADD, /* forceadd */ + IPSET_ARG_MARKMASK, /* markmask */ + IPSET_ARG_NOMATCH, /* nomatch */ + /* Extensions */ + IPSET_ARG_TIMEOUT, /* timeout */ + IPSET_ARG_COUNTERS, /* counters */ + IPSET_ARG_PACKETS, /* packets */ + IPSET_ARG_BYTES, /* bytes */ + IPSET_ARG_COMMENT, /* comment */ + IPSET_ARG_ADT_COMMENT, /* comment */ + IPSET_ARG_SKBINFO, /* skbinfo */ + IPSET_ARG_SKBMARK, /* skbmark */ + IPSET_ARG_SKBPRIO, /* skbprio */ + IPSET_ARG_SKBQUEUE, /* skbqueue */ + IPSET_ARG_MAX, +}; + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct ipset_arg * ipset_keyword(enum ipset_keywords i); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBIPSET_ARGS_H */ diff --git a/include/libipset/types.h b/include/libipset/types.h index 137d7ec..bb71d88 100644 --- a/include/libipset/types.h +++ b/include/libipset/types.h @@ -10,6 +10,7 @@ #include <stddef.h> /* NULL */ #include <stdint.h> /* uintxx_t */ +#include <libipset/args.h> /* enum ipset_keywords */ #include <libipset/data.h> /* enum ipset_opt */ #include <libipset/parse.h> /* ipset_parsefn */ #include <libipset/print.h> /* ipset_printfn */ @@ -47,6 +48,7 @@ struct ipset_arg { enum ipset_opt opt; /* argumentum type */ ipset_parsefn parse; /* parser function */ ipset_printfn print; /* printing function */ + const char *help; /* help text */ }; /* Type check against the kernel */ @@ -63,6 +65,16 @@ struct ipset_elem { enum ipset_opt opt; /* elem option */ }; +#define IPSET_OPTARG_MAX 24 + +/* How other CADT args are parsed */ +struct ipset_optarg { + enum ipset_keywords args[IPSET_OPTARG_MAX];/* args */ + uint64_t need; /* needed flags */ + uint64_t full; /* all possible flags */ + const char *help; /* help text */ +}; + /* The set types in userspace * we could collapse 'args' and 'mandatory' to two-element lists * but for the readability the full list is supported. @@ -76,9 +88,7 @@ struct ipset_type { bool last_elem_optional; /* last element optional */ struct ipset_elem elem[IPSET_DIM_UMAX]; /* parse elem */ ipset_parsefn compat_parse_elem; /* compatibility parser */ - const struct ipset_arg *args[IPSET_CADT_MAX]; /* create/ADT args besides elem */ - uint64_t mandatory[IPSET_CADT_MAX]; /* create/ADT mandatory flags */ - uint64_t full[IPSET_CADT_MAX]; /* full args flags */ + struct ipset_optarg cmd[IPSET_CADT_MAX];/* optional arguments */ const char *usage; /* terse usage */ void (*usagefn)(void); /* additional usage */ const char *description; /* short revision description */ |