summaryrefslogtreecommitdiffstats
path: root/extensions
diff options
context:
space:
mode:
authorJan Engelhardt <jengelh@medozas.de>2011-02-27 16:54:27 +0100
committerJan Engelhardt <jengelh@medozas.de>2011-04-06 12:54:22 +0200
commitf92bca9da4ee68f05dbb827a8444804a8edb1b87 (patch)
treecee392f8078b6004a364a2745482623b4951f6b1 /extensions
parentaa37acc1423126f555135935c687eb91995b9440 (diff)
libxt_CHECKSUM: use guided option parser
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
Diffstat (limited to 'extensions')
-rw-r--r--extensions/libxt_CHECKSUM.c46
1 files changed, 14 insertions, 32 deletions
diff --git a/extensions/libxt_CHECKSUM.c b/extensions/libxt_CHECKSUM.c
index 83b3d699..df9f9b3c 100644
--- a/extensions/libxt_CHECKSUM.c
+++ b/extensions/libxt_CHECKSUM.c
@@ -8,15 +8,14 @@
*
* libxt_CHECKSUM.c borrowed some bits from libipt_ECN.c
*/
-#include <stdbool.h>
#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
#include <xtables.h>
#include <linux/netfilter/xt_CHECKSUM.h>
+enum {
+ O_CHECKSUM_FILL = 0,
+};
+
static void CHECKSUM_help(void)
{
printf(
@@ -24,34 +23,18 @@ static void CHECKSUM_help(void)
" --checksum-fill Fill in packet checksum.\n");
}
-static const struct option CHECKSUM_opts[] = {
- {.name = "checksum-fill", .has_arg = false, .val = 'F'},
- XT_GETOPT_TABLEEND,
+static const struct xt_option_entry CHECKSUM_opts[] = {
+ {.name = "checksum-fill", .id = O_CHECKSUM_FILL,
+ .flags = XTOPT_MAND, .type = XTTYPE_NONE},
+ XTOPT_TABLEEND,
};
-static int CHECKSUM_parse(int c, char **argv, int invert, unsigned int *flags,
- const void *entry, struct xt_entry_target **target)
+static void CHECKSUM_parse(struct xt_option_call *cb)
{
- struct xt_CHECKSUM_info *einfo
- = (struct xt_CHECKSUM_info *)(*target)->data;
-
- switch (c) {
- case 'F':
- xtables_param_act(XTF_ONLY_ONCE, "CHECKSUM", "--checksum-fill",
- *flags & XT_CHECKSUM_OP_FILL);
- einfo->operation = XT_CHECKSUM_OP_FILL;
- *flags |= XT_CHECKSUM_OP_FILL;
- break;
- }
+ struct xt_CHECKSUM_info *einfo = cb->data;
- return 1;
-}
-
-static void CHECKSUM_check(unsigned int flags)
-{
- if (!flags)
- xtables_error(PARAMETER_PROBLEM,
- "CHECKSUM target: Parameter --checksum-fill is required");
+ xtables_option_parse(cb);
+ einfo->operation = XT_CHECKSUM_OP_FILL;
}
static void CHECKSUM_print(const void *ip, const struct xt_entry_target *target,
@@ -82,11 +65,10 @@ static struct xtables_target checksum_tg_reg = {
.size = XT_ALIGN(sizeof(struct xt_CHECKSUM_info)),
.userspacesize = XT_ALIGN(sizeof(struct xt_CHECKSUM_info)),
.help = CHECKSUM_help,
- .parse = CHECKSUM_parse,
- .final_check = CHECKSUM_check,
.print = CHECKSUM_print,
.save = CHECKSUM_save,
- .extra_opts = CHECKSUM_opts,
+ .x6_parse = CHECKSUM_parse,
+ .x6_options = CHECKSUM_opts,
};
void _init(void)