diff options
Diffstat (limited to 'extensions/libip6t_HL.c')
-rw-r--r-- | extensions/libip6t_HL.c | 83 |
1 files changed, 37 insertions, 46 deletions
diff --git a/extensions/libip6t_HL.c b/extensions/libip6t_HL.c index 2062828..bff0611 100644 --- a/extensions/libip6t_HL.c +++ b/extensions/libip6t_HL.c @@ -5,53 +5,46 @@ * This program is distributed under the terms of GNU GPL */ +#include <getopt.h> #include <stdio.h> #include <string.h> #include <stdlib.h> -#include <getopt.h> -#include <ip6tables.h> +#include <xtables.h> -#include <linux/netfilter_ipv6/ip6_tables.h> #include <linux/netfilter_ipv6/ip6t_HL.h> #define IP6T_HL_USED 1 -static void init(struct ip6t_entry_target *t, unsigned int *nfcache) -{ -} - -static void help(void) +static void HL_help(void) { printf( -"HL target v%s options\n" +"HL target options\n" " --hl-set value Set HL to <value 0-255>\n" " --hl-dec value Decrement HL by <value 1-255>\n" -" --hl-inc value Increment HL by <value 1-255>\n" -, IPTABLES_VERSION); +" --hl-inc value Increment HL by <value 1-255>\n"); } -static int parse(int c, char **argv, int invert, unsigned int *flags, - const struct ip6t_entry *entry, - struct ip6t_entry_target **target) +static int HL_parse(int c, char **argv, int invert, unsigned int *flags, + const void *entry, struct xt_entry_target **target) { struct ip6t_HL_info *info = (struct ip6t_HL_info *) (*target)->data; unsigned int value; if (*flags & IP6T_HL_USED) { - exit_error(PARAMETER_PROBLEM, + xtables_error(PARAMETER_PROBLEM, "Can't specify HL option twice"); } if (!optarg) - exit_error(PARAMETER_PROBLEM, + xtables_error(PARAMETER_PROBLEM, "HL: You must specify a value"); - if (check_inverse(optarg, &invert, NULL, 0)) - exit_error(PARAMETER_PROBLEM, + if (xtables_check_inverse(optarg, &invert, NULL, 0, argv)) + xtables_error(PARAMETER_PROBLEM, "HL: unexpected `!'"); - if (string_to_number(optarg, 0, 255, &value) == -1) - exit_error(PARAMETER_PROBLEM, + if (!xtables_strtoui(optarg, NULL, &value, 0, UINT8_MAX)) + xtables_error(PARAMETER_PROBLEM, "HL: Expected value between 0 and 255"); switch (c) { @@ -62,7 +55,7 @@ static int parse(int c, char **argv, int invert, unsigned int *flags, case '2': if (value == 0) { - exit_error(PARAMETER_PROBLEM, + xtables_error(PARAMETER_PROBLEM, "HL: decreasing by 0?"); } @@ -71,7 +64,7 @@ static int parse(int c, char **argv, int invert, unsigned int *flags, case '3': if (value == 0) { - exit_error(PARAMETER_PROBLEM, + xtables_error(PARAMETER_PROBLEM, "HL: increasing by 0?"); } @@ -89,15 +82,14 @@ static int parse(int c, char **argv, int invert, unsigned int *flags, return 1; } -static void final_check(unsigned int flags) +static void HL_check(unsigned int flags) { if (!(flags & IP6T_HL_USED)) - exit_error(PARAMETER_PROBLEM, + xtables_error(PARAMETER_PROBLEM, "HL: You must specify an action"); } -static void save(const struct ip6t_ip6 *ip, - const struct ip6t_entry_target *target) +static void HL_save(const void *ip, const struct xt_entry_target *target) { const struct ip6t_HL_info *info = (struct ip6t_HL_info *) target->data; @@ -117,8 +109,8 @@ static void save(const struct ip6t_ip6 *ip, printf("%u ", info->hop_limit); } -static void print(const struct ip6t_ip6 *ip, - const struct ip6t_entry_target *target, int numeric) +static void HL_print(const void *ip, const struct xt_entry_target *target, + int numeric) { const struct ip6t_HL_info *info = (struct ip6t_HL_info *) target->data; @@ -138,29 +130,28 @@ static void print(const struct ip6t_ip6 *ip, printf("%u ", info->hop_limit); } -static struct option opts[] = { - { "hl-set", 1, 0, '1' }, - { "hl-dec", 1, 0, '2' }, - { "hl-inc", 1, 0, '3' }, - { 0 } +static const struct option HL_opts[] = { + { "hl-set", 1, NULL, '1' }, + { "hl-dec", 1, NULL, '2' }, + { "hl-inc", 1, NULL, '3' }, + { .name = NULL } }; -static -struct ip6tables_target HL = { NULL, +static struct xtables_target hl_tg6_reg = { .name = "HL", - .version = IPTABLES_VERSION, - .size = IP6T_ALIGN(sizeof(struct ip6t_HL_info)), - .userspacesize = IP6T_ALIGN(sizeof(struct ip6t_HL_info)), - .help = &help, - .init = &init, - .parse = &parse, - .final_check = &final_check, - .print = &print, - .save = &save, - .extra_opts = opts + .version = XTABLES_VERSION, + .family = NFPROTO_IPV6, + .size = XT_ALIGN(sizeof(struct ip6t_HL_info)), + .userspacesize = XT_ALIGN(sizeof(struct ip6t_HL_info)), + .help = HL_help, + .parse = HL_parse, + .final_check = HL_check, + .print = HL_print, + .save = HL_save, + .extra_opts = HL_opts, }; void _init(void) { - register_target6(&HL); + xtables_register_target(&hl_tg6_reg); } |