X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=extensions%2Flibip6t_multiport.c;fp=extensions%2Flibip6t_multiport.c;h=013241b227f95f13c63aa6a5e49f1ac67208de55;hb=6afea0b41dfbc3824956d11d960ad80097218feb;hp=dc5bbf48b707c4f0b1df271640b46d309bbea4be;hpb=f7b70cf9e00324b89b02de213bcd0dde7044d035;p=iptables.git diff --git a/extensions/libip6t_multiport.c b/extensions/libip6t_multiport.c index dc5bbf4..013241b 100644 --- a/extensions/libip6t_multiport.c +++ b/extensions/libip6t_multiport.c @@ -112,33 +112,37 @@ parse(int c, char **argv, int invert, unsigned int *flags, switch (c) { case '1': + check_inverse(argv[optind-1], &invert, &optind, 0); proto = check_proto(entry); multiinfo->count = parse_multi_ports(argv[optind-1], multiinfo->ports, proto); multiinfo->flags = IP6T_MULTIPORT_SOURCE; - *nfcache |= NFC_IP6_SRC_PT; break; case '2': + check_inverse(argv[optind-1], &invert, &optind, 0); proto = check_proto(entry); multiinfo->count = parse_multi_ports(argv[optind-1], multiinfo->ports, proto); multiinfo->flags = IP6T_MULTIPORT_DESTINATION; - *nfcache |= NFC_IP6_DST_PT; break; case '3': + check_inverse(argv[optind-1], &invert, &optind, 0); proto = check_proto(entry); multiinfo->count = parse_multi_ports(argv[optind-1], multiinfo->ports, proto); multiinfo->flags = IP6T_MULTIPORT_EITHER; - *nfcache |= NFC_IP6_SRC_PT | NFC_IP6_DST_PT; break; default: return 0; } + if (invert) + exit_error(PARAMETER_PROBLEM, + "multiport does not support invert"); + if (*flags) exit_error(PARAMETER_PROBLEM, "multiport can only have one option"); @@ -242,20 +246,18 @@ static void save(const struct ip6t_ip6 *ip, const struct ip6t_entry_match *match printf(" "); } -static -struct ip6tables_match multiport -= { NULL, - "multiport", - IPTABLES_VERSION, - IP6T_ALIGN(sizeof(struct ip6t_multiport)), - IP6T_ALIGN(sizeof(struct ip6t_multiport)), - &help, - &init, - &parse, - &final_check, - &print, - &save, - opts +static struct ip6tables_match multiport = { + .name = "multiport", + .version = IPTABLES_VERSION, + .size = IP6T_ALIGN(sizeof(struct ip6t_multiport)), + .userspacesize = IP6T_ALIGN(sizeof(struct ip6t_multiport)), + .help = &help, + .init = &init, + .parse = &parse, + .final_check = &final_check, + .print = &print, + .save = &save, + .extra_opts = opts, }; void