summaryrefslogtreecommitdiffstats
path: root/lib/ipset_list_set.c
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2017-10-09 18:43:04 +0200
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2018-01-02 21:47:27 +0100
commitd71dd93599b932693f045301424c2276cd25a87e (patch)
treed1779c04b8bb2a44915483751ac33e498b1a2ad9 /lib/ipset_list_set.c
parente2a84a4a7bb8cdebfe4c0990b79179e2fd717a48 (diff)
Userspace revision handling is reworked
In order to make it simpler and more straightforward to express the revisions of the set type, all keywords and their parsing are separated from the individual set types. All backward compatibility arguments are recognized and ignored arguments are supported. Recognized but ignored arguments will be removed in a later release.
Diffstat (limited to 'lib/ipset_list_set.c')
-rw-r--r--lib/ipset_list_set.c552
1 files changed, 206 insertions, 346 deletions
diff --git a/lib/ipset_list_set.c b/lib/ipset_list_set.c
index 45934e7..973243f 100644
--- a/lib/ipset_list_set.c
+++ b/lib/ipset_list_set.c
@@ -9,43 +9,7 @@
#include <libipset/print.h> /* printing functions */
#include <libipset/types.h> /* prototypes */
-/* Parse commandline arguments */
-static const struct ipset_arg list_set_create_args0[] = {
- { .name = { "size", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_SIZE,
- .parse = ipset_parse_uint32, .print = ipset_print_number,
- },
- { .name = { "timeout", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_TIMEOUT,
- .parse = ipset_parse_timeout, .print = ipset_print_number,
- },
- { },
-};
-
-static const struct ipset_arg list_set_adt_args0[] = {
- { .name = { "timeout", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_TIMEOUT,
- .parse = ipset_parse_timeout, .print = ipset_print_number,
- },
- { .name = { "before", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_NAMEREF,
- .parse = ipset_parse_before,
- },
- { .name = { "after", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_NAMEREF,
- .parse = ipset_parse_after,
- },
- { },
-};
-
-static const char list_set_usage0[] =
-"create SETNAME list:set\n"
-" [size VALUE] [timeout VALUE]\n"
-"add SETNAME NAME [before|after NAME] [timeout VALUE]\n"
-"del SETNAME NAME [before|after NAME]\n"
-"test SETNAME NAME [before|after NAME]\n\n"
-"where NAME are existing set names.\n";
-
+/* Initial revision */
static struct ipset_type ipset_list_set0 = {
.name = "list:set",
.alias = { "setlist", NULL },
@@ -60,87 +24,57 @@ static struct ipset_type ipset_list_set0 = {
},
},
.compat_parse_elem = ipset_parse_name_compat,
- .args = {
- [IPSET_CREATE] = list_set_create_args0,
- [IPSET_ADD] = list_set_adt_args0,
- [IPSET_DEL] = list_set_adt_args0,
- [IPSET_TEST] = list_set_adt_args0,
- },
- .mandatory = {
- [IPSET_CREATE] = 0,
- [IPSET_ADD] = IPSET_FLAG(IPSET_OPT_NAME),
- [IPSET_DEL] = IPSET_FLAG(IPSET_OPT_NAME),
- [IPSET_TEST] = IPSET_FLAG(IPSET_OPT_NAME),
- },
- .full = {
- [IPSET_CREATE] = IPSET_FLAG(IPSET_OPT_SIZE)
- | IPSET_FLAG(IPSET_OPT_TIMEOUT),
- [IPSET_ADD] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF)
- | IPSET_FLAG(IPSET_OPT_TIMEOUT),
- [IPSET_DEL] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF),
- [IPSET_TEST] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF),
+ .cmd = {
+ [IPSET_CREATE] = {
+ .args = {
+ IPSET_ARG_SIZE,
+ IPSET_ARG_TIMEOUT,
+ IPSET_ARG_NONE,
+ },
+ .need = 0,
+ .full = 0,
+ .help = "",
+ },
+ [IPSET_ADD] = {
+ .args = {
+ IPSET_ARG_TIMEOUT,
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
+ [IPSET_DEL] = {
+ .args = {
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
+ [IPSET_TEST] = {
+ .args = {
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
},
-
- .usage = list_set_usage0,
+ .usage = "where NAME are existing set names.",
.description = "Initial revision",
};
-/* Parse commandline arguments */
-static const struct ipset_arg list_set_create_args1[] = {
- { .name = { "size", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_SIZE,
- .parse = ipset_parse_uint32, .print = ipset_print_number,
- },
- { .name = { "timeout", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_TIMEOUT,
- .parse = ipset_parse_timeout, .print = ipset_print_number,
- },
- { .name = { "counters", NULL },
- .has_arg = IPSET_NO_ARG, .opt = IPSET_OPT_COUNTERS,
- .parse = ipset_parse_flag, .print = ipset_print_flag,
- },
- { },
-};
-
-static const struct ipset_arg list_set_adt_args1[] = {
- { .name = { "timeout", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_TIMEOUT,
- .parse = ipset_parse_timeout, .print = ipset_print_number,
- },
- { .name = { "before", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_NAMEREF,
- .parse = ipset_parse_before,
- },
- { .name = { "after", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_NAMEREF,
- .parse = ipset_parse_after,
- },
- { .name = { "packets", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_PACKETS,
- .parse = ipset_parse_uint64, .print = ipset_print_number,
- },
- { .name = { "bytes", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_BYTES,
- .parse = ipset_parse_uint64, .print = ipset_print_number,
- },
- { },
-};
-
-static const char list_set_usage1[] =
-"create SETNAME list:set\n"
-" [size VALUE] [timeout VALUE] [counters\n"
-"add SETNAME NAME [before|after NAME] [timeout VALUE]\n"
-" [packets VALUE] [bytes VALUE]\n"
-"del SETNAME NAME [before|after NAME]\n"
-"test SETNAME NAME [before|after NAME]\n\n"
-"where NAME are existing set names.\n";
-
+/* counters support */
static struct ipset_type ipset_list_set1 = {
.name = "list:set",
.alias = { "setlist", NULL },
@@ -155,98 +89,60 @@ static struct ipset_type ipset_list_set1 = {
},
},
.compat_parse_elem = ipset_parse_name_compat,
- .args = {
- [IPSET_CREATE] = list_set_create_args1,
- [IPSET_ADD] = list_set_adt_args1,
- [IPSET_DEL] = list_set_adt_args1,
- [IPSET_TEST] = list_set_adt_args1,
- },
- .mandatory = {
- [IPSET_CREATE] = 0,
- [IPSET_ADD] = IPSET_FLAG(IPSET_OPT_NAME),
- [IPSET_DEL] = IPSET_FLAG(IPSET_OPT_NAME),
- [IPSET_TEST] = IPSET_FLAG(IPSET_OPT_NAME),
- },
- .full = {
- [IPSET_CREATE] = IPSET_FLAG(IPSET_OPT_SIZE)
- | IPSET_FLAG(IPSET_OPT_TIMEOUT)
- | IPSET_FLAG(IPSET_OPT_COUNTERS),
- [IPSET_ADD] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF)
- | IPSET_FLAG(IPSET_OPT_TIMEOUT)
- | IPSET_FLAG(IPSET_OPT_PACKETS)
- | IPSET_FLAG(IPSET_OPT_BYTES),
- [IPSET_DEL] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF),
- [IPSET_TEST] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF),
+ .cmd = {
+ [IPSET_CREATE] = {
+ .args = {
+ IPSET_ARG_SIZE,
+ IPSET_ARG_TIMEOUT,
+ IPSET_ARG_COUNTERS,
+ IPSET_ARG_NONE,
+ },
+ .need = 0,
+ .full = 0,
+ .help = "",
+ },
+ [IPSET_ADD] = {
+ .args = {
+ IPSET_ARG_TIMEOUT,
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_PACKETS,
+ IPSET_ARG_BYTES,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
+ [IPSET_DEL] = {
+ .args = {
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
+ [IPSET_TEST] = {
+ .args = {
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
},
-
- .usage = list_set_usage1,
+ .usage = "where NAME are existing set names.",
.description = "counters support",
};
-/* Parse commandline arguments */
-static const struct ipset_arg list_set_create_args2[] = {
- { .name = { "size", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_SIZE,
- .parse = ipset_parse_uint32, .print = ipset_print_number,
- },
- { .name = { "timeout", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_TIMEOUT,
- .parse = ipset_parse_timeout, .print = ipset_print_number,
- },
- { .name = { "counters", NULL },
- .has_arg = IPSET_NO_ARG, .opt = IPSET_OPT_COUNTERS,
- .parse = ipset_parse_flag, .print = ipset_print_flag,
- },
- { .name = { "comment", NULL },
- .has_arg = IPSET_NO_ARG, .opt = IPSET_OPT_CREATE_COMMENT,
- .parse = ipset_parse_flag, .print = ipset_print_flag,
- },
- { },
-};
-
-static const struct ipset_arg list_set_adt_args2[] = {
- { .name = { "timeout", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_TIMEOUT,
- .parse = ipset_parse_timeout, .print = ipset_print_number,
- },
- { .name = { "before", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_NAMEREF,
- .parse = ipset_parse_before,
- },
- { .name = { "after", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_NAMEREF,
- .parse = ipset_parse_after,
- },
- { .name = { "packets", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_PACKETS,
- .parse = ipset_parse_uint64, .print = ipset_print_number,
- },
- { .name = { "bytes", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_BYTES,
- .parse = ipset_parse_uint64, .print = ipset_print_number,
- },
- { .name = { "comment", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_ADT_COMMENT,
- .parse = ipset_parse_comment, .print = ipset_print_comment,
- },
- { },
-};
-
-static const char list_set_usage2[] =
-"create SETNAME list:set\n"
-" [size VALUE] [timeout VALUE] [counters] [comment]\n"
-"add SETNAME NAME [before|after NAME] [timeout VALUE]\n"
-" [packets VALUE] [bytes VALUE] [comment STRING]\n"
-"del SETNAME NAME [before|after NAME]\n"
-"test SETNAME NAME [before|after NAME]\n\n"
-"where NAME are existing set names.\n";
-
+/* comment support */
static struct ipset_type ipset_list_set2 = {
.name = "list:set",
.alias = { "setlist", NULL },
@@ -261,118 +157,62 @@ static struct ipset_type ipset_list_set2 = {
},
},
.compat_parse_elem = ipset_parse_name_compat,
- .args = {
- [IPSET_CREATE] = list_set_create_args2,
- [IPSET_ADD] = list_set_adt_args2,
- [IPSET_DEL] = list_set_adt_args2,
- [IPSET_TEST] = list_set_adt_args2,
- },
- .mandatory = {
- [IPSET_CREATE] = 0,
- [IPSET_ADD] = IPSET_FLAG(IPSET_OPT_NAME),
- [IPSET_DEL] = IPSET_FLAG(IPSET_OPT_NAME),
- [IPSET_TEST] = IPSET_FLAG(IPSET_OPT_NAME),
- },
- .full = {
- [IPSET_CREATE] = IPSET_FLAG(IPSET_OPT_SIZE)
- | IPSET_FLAG(IPSET_OPT_TIMEOUT)
- | IPSET_FLAG(IPSET_OPT_COUNTERS)
- | IPSET_FLAG(IPSET_OPT_CREATE_COMMENT),
- [IPSET_ADD] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF)
- | IPSET_FLAG(IPSET_OPT_TIMEOUT)
- | IPSET_FLAG(IPSET_OPT_PACKETS)
- | IPSET_FLAG(IPSET_OPT_BYTES)
- | IPSET_FLAG(IPSET_OPT_ADT_COMMENT),
- [IPSET_DEL] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF),
- [IPSET_TEST] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF),
+ .cmd = {
+ [IPSET_CREATE] = {
+ .args = {
+ IPSET_ARG_SIZE,
+ IPSET_ARG_TIMEOUT,
+ IPSET_ARG_COUNTERS,
+ IPSET_ARG_COMMENT,
+ IPSET_ARG_NONE,
+ },
+ .need = 0,
+ .full = 0,
+ .help = "",
+ },
+ [IPSET_ADD] = {
+ .args = {
+ IPSET_ARG_TIMEOUT,
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_PACKETS,
+ IPSET_ARG_BYTES,
+ IPSET_ARG_ADT_COMMENT,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
+ [IPSET_DEL] = {
+ .args = {
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
+ [IPSET_TEST] = {
+ .args = {
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
},
-
- .usage = list_set_usage2,
+ .usage = "where NAME are existing set names.",
.description = "comment support",
};
-/* Parse commandline arguments */
-static const struct ipset_arg list_set_create_args3[] = {
- { .name = { "size", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_SIZE,
- .parse = ipset_parse_uint32, .print = ipset_print_number,
- },
- { .name = { "timeout", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_TIMEOUT,
- .parse = ipset_parse_timeout, .print = ipset_print_number,
- },
- { .name = { "counters", NULL },
- .has_arg = IPSET_NO_ARG, .opt = IPSET_OPT_COUNTERS,
- .parse = ipset_parse_flag, .print = ipset_print_flag,
- },
- { .name = { "comment", NULL },
- .has_arg = IPSET_NO_ARG, .opt = IPSET_OPT_CREATE_COMMENT,
- .parse = ipset_parse_flag, .print = ipset_print_flag,
- },
- { .name = { "skbinfo", NULL },
- .has_arg = IPSET_NO_ARG, .opt = IPSET_OPT_SKBINFO,
- .parse = ipset_parse_flag, .print = ipset_print_flag,
- },
- { },
-};
-
-static const struct ipset_arg list_set_adt_args3[] = {
- { .name = { "timeout", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_TIMEOUT,
- .parse = ipset_parse_timeout, .print = ipset_print_number,
- },
- { .name = { "before", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_NAMEREF,
- .parse = ipset_parse_before,
- },
- { .name = { "after", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_NAMEREF,
- .parse = ipset_parse_after,
- },
- { .name = { "packets", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_PACKETS,
- .parse = ipset_parse_uint64, .print = ipset_print_number,
- },
- { .name = { "bytes", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_BYTES,
- .parse = ipset_parse_uint64, .print = ipset_print_number,
- },
- { .name = { "comment", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_ADT_COMMENT,
- .parse = ipset_parse_comment, .print = ipset_print_comment,
- },
- { .name = { "skbmark", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_SKBMARK,
- .parse = ipset_parse_skbmark, .print = ipset_print_skbmark,
- },
- { .name = { "skbprio", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_SKBPRIO,
- .parse = ipset_parse_skbprio, .print = ipset_print_skbprio,
- },
- { .name = { "skbqueue", NULL },
- .has_arg = IPSET_MANDATORY_ARG, .opt = IPSET_OPT_SKBQUEUE,
- .parse = ipset_parse_uint16, .print = ipset_print_number,
- },
- { },
-};
-
-static const char list_set_usage3[] =
-"create SETNAME list:set\n"
-" [size VALUE] [timeout VALUE] [counters] [comment]\n"
-" [skbinfo]\n"
-"add SETNAME NAME [before|after NAME] [timeout VALUE]\n"
-" [packets VALUE] [bytes VALUE] [comment STRING]\n"
-" [skbmark VALUE] [skbprio VALUE] [skbqueue VALUE]\n"
-"del SETNAME NAME [before|after NAME]\n"
-"test SETNAME NAME [before|after NAME]\n\n"
-"where NAME are existing set names.\n";
-
+/* skbinfo support */
static struct ipset_type ipset_list_set3 = {
.name = "list:set",
.alias = { "setlist", NULL },
@@ -387,45 +227,65 @@ static struct ipset_type ipset_list_set3 = {
},
},
.compat_parse_elem = ipset_parse_name_compat,
- .args = {
- [IPSET_CREATE] = list_set_create_args3,
- [IPSET_ADD] = list_set_adt_args3,
- [IPSET_DEL] = list_set_adt_args2,
- [IPSET_TEST] = list_set_adt_args2,
- },
- .mandatory = {
- [IPSET_CREATE] = 0,
- [IPSET_ADD] = IPSET_FLAG(IPSET_OPT_NAME),
- [IPSET_DEL] = IPSET_FLAG(IPSET_OPT_NAME),
- [IPSET_TEST] = IPSET_FLAG(IPSET_OPT_NAME),
- },
- .full = {
- [IPSET_CREATE] = IPSET_FLAG(IPSET_OPT_SIZE)
- | IPSET_FLAG(IPSET_OPT_TIMEOUT)
- | IPSET_FLAG(IPSET_OPT_COUNTERS)
- | IPSET_FLAG(IPSET_OPT_CREATE_COMMENT)
- | IPSET_FLAG(IPSET_OPT_SKBINFO),
- [IPSET_ADD] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF)
- | IPSET_FLAG(IPSET_OPT_TIMEOUT)
- | IPSET_FLAG(IPSET_OPT_PACKETS)
- | IPSET_FLAG(IPSET_OPT_BYTES)
- | IPSET_FLAG(IPSET_OPT_ADT_COMMENT)
- | IPSET_FLAG(IPSET_OPT_SKBMARK)
- | IPSET_FLAG(IPSET_OPT_SKBPRIO)
- | IPSET_FLAG(IPSET_OPT_SKBQUEUE),
- [IPSET_DEL] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF),
- [IPSET_TEST] = IPSET_FLAG(IPSET_OPT_NAME)
- | IPSET_FLAG(IPSET_OPT_BEFORE)
- | IPSET_FLAG(IPSET_OPT_NAMEREF),
+ .cmd = {
+ [IPSET_CREATE] = {
+ .args = {
+ IPSET_ARG_SIZE,
+ IPSET_ARG_TIMEOUT,
+ IPSET_ARG_COUNTERS,
+ IPSET_ARG_COMMENT,
+ IPSET_ARG_SKBINFO,
+ IPSET_ARG_NONE,
+ },
+ .need = 0,
+ .full = 0,
+ .help = "",
+ },
+ [IPSET_ADD] = {
+ .args = {
+ IPSET_ARG_TIMEOUT,
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_PACKETS,
+ IPSET_ARG_BYTES,
+ IPSET_ARG_ADT_COMMENT,
+ IPSET_ARG_SKBMARK,
+ IPSET_ARG_SKBPRIO,
+ IPSET_ARG_SKBQUEUE,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
+ [IPSET_DEL] = {
+ .args = {
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
+ [IPSET_TEST] = {
+ .args = {
+ IPSET_ARG_BEFORE,
+ IPSET_ARG_AFTER,
+ IPSET_ARG_NONE,
+ },
+ .need = IPSET_FLAG(IPSET_OPT_NAME),
+ .full = IPSET_FLAG(IPSET_OPT_NAME)
+ | IPSET_FLAG(IPSET_OPT_BEFORE),
+ .help = "NAME [before|after NAME]",
+ },
},
-
- .usage = list_set_usage3,
+ .usage = "where NAME are existing set names.",
.description = "skbinfo support",
};
+
void _init(void);
void _init(void)
{