X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=extensions%2Flibipt_icmp.c;h=9d45c8c659f557cc5081d89aec880aeed4b045a5;hb=6afea0b41dfbc3824956d11d960ad80097218feb;hp=f1d3dcd9fce937ad8f86b8205a64ae0db805fc2e;hpb=f7b70cf9e00324b89b02de213bcd0dde7044d035;p=iptables.git diff --git a/extensions/libipt_icmp.c b/extensions/libipt_icmp.c index f1d3dcd..9d45c8c 100644 --- a/extensions/libipt_icmp.c +++ b/extensions/libipt_icmp.c @@ -114,7 +114,7 @@ static struct option opts[] = { {0} }; -static unsigned int +static void parse_icmp(const char *icmptype, u_int8_t *type, u_int8_t code[]) { unsigned int limit = sizeof(icmp_codes)/sizeof(struct icmp_names); @@ -165,10 +165,6 @@ parse_icmp(const char *icmptype, u_int8_t *type, u_int8_t code[]) code[1] = 0xFF; } } - - if (code[0] == 0 && code[1] == 0xFF) - return NFC_IP_SRC_PT; - else return NFC_IP_SRC_PT | NFC_IP_DST_PT; } /* Initialize the match. */ @@ -194,9 +190,8 @@ parse(int c, char **argv, int invert, unsigned int *flags, switch (c) { case '1': check_inverse(optarg, &invert, &optind, 0); - *nfcache |= parse_icmp(argv[optind-1], - &icmpinfo->type, - icmpinfo->code); + parse_icmp(argv[optind-1], &icmpinfo->type, + icmpinfo->code); if (invert) icmpinfo->invflags |= IPT_ICMP_INV; break; @@ -271,10 +266,15 @@ static void save(const struct ipt_ip *ip, const struct ipt_entry_match *match) if (icmp->invflags & IPT_ICMP_INV) printf("! "); - printf("--icmp-type %u", icmp->type); - if (icmp->code[0] != 0 || icmp->code[1] != 0xFF) - printf("/%u", icmp->code[0]); - printf(" "); + /* special hack for 'any' case */ + if (icmp->type == 0xFF) { + printf("--icmp-type any "); + } else { + printf("--icmp-type %u", icmp->type); + if (icmp->code[0] != 0 || icmp->code[1] != 0xFF) + printf("/%u", icmp->code[0]); + printf(" "); + } } /* Final check; we don't care. */ @@ -282,20 +282,19 @@ static void final_check(unsigned int flags) { } -static -struct iptables_match icmp -= { NULL, - "icmp", - IPTABLES_VERSION, - IPT_ALIGN(sizeof(struct ipt_icmp)), - IPT_ALIGN(sizeof(struct ipt_icmp)), - &help, - &init, - &parse, - &final_check, - &print, - &save, - opts +static struct iptables_match icmp = { + .next = NULL, + .name = "icmp", + .version = IPTABLES_VERSION, + .size = IPT_ALIGN(sizeof(struct ipt_icmp)), + .userspacesize = IPT_ALIGN(sizeof(struct ipt_icmp)), + .help = &help, + .init = &init, + .parse = &parse, + .final_check = &final_check, + .print = &print, + .save = &save, + .extra_opts = opts }; void _init(void)