switch(c) {
case '%':
- if (check_inverse(optarg, &invert, NULL, 0))
- exit_error(PARAMETER_PROBLEM,
- "Unexpected `!' after --dstlimit");
+ if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
if (!parse_rate(optarg, &r->cfg.avg))
exit_error(PARAMETER_PROBLEM,
"bad rate `%s'", optarg);
break;
case '$':
- if (check_inverse(optarg, &invert, NULL, 0))
- exit_error(PARAMETER_PROBLEM,
- "Unexpected `!' after --dstlimit-burst");
-
+ if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
if (string_to_number(optarg, 0, 10000, &num) == -1)
exit_error(PARAMETER_PROBLEM,
"bad --dstlimit-burst `%s'", optarg);
*flags |= PARAM_BURST;
break;
case '&':
- if (check_inverse(optarg, &invert, NULL, 0))
- exit_error(PARAMETER_PROBLEM,
- "Unexpected `!' after --dstlimit-htable-size");
-
+ if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
if (string_to_number(optarg, 0, 0xffffffff, &num) == -1)
exit_error(PARAMETER_PROBLEM,
"bad --dstlimit-htable-size: `%s'", optarg);
*flags |= PARAM_SIZE;
break;
case '*':
- if (check_inverse(optarg, &invert, NULL, 0))
- exit_error(PARAMETER_PROBLEM,
- "Unexpected `!' after --dstlimit-htable-max");
+ if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
if (string_to_number(optarg, 0, 0xffffffff, &num) == -1)
exit_error(PARAMETER_PROBLEM,
"bad --dstlimit-htable-max: `%s'", optarg);
*flags |= PARAM_MAX;
break;
case '(':
- if (check_inverse(optarg, &invert, NULL, 0))
- exit_error(PARAMETER_PROBLEM, "Unexpected `!' after "
- "--dstlimit-htable-gcinterval");
+ if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
if (string_to_number(optarg, 0, 0xffffffff, &num) == -1)
exit_error(PARAMETER_PROBLEM,
"bad --dstlimit-htable-gcinterval: `%s'",
*flags |= PARAM_GCINTERVAL;
break;
case ')':
- if (check_inverse(optarg, &invert, NULL, 0))
- exit_error(PARAMETER_PROBLEM, "Unexpected `!' after "
- "--dstlimit-htable-expire");
+ if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
if (string_to_number(optarg, 0, 0xffffffff, &num) == -1)
exit_error(PARAMETER_PROBLEM,
"bad --dstlimit-htable-expire: `%s'", optarg);
*flags |= PARAM_EXPIRE;
break;
case '_':
- if (check_inverse(optarg, &invert, NULL, 0))
- exit_error(PARAMETER_PROBLEM, "Unexpected `!' after "
- "--dstlimit-mode");
+ if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
if (!strcmp(optarg, "dstip"))
r->cfg.mode = IPT_DSTLIMIT_HASH_DIP;
else if (!strcmp(optarg, "dstip-destport") ||
*flags |= PARAM_MODE;
break;
case '"':
- if (check_inverse(optarg, &invert, NULL, 0))
- exit_error(PARAMETER_PROBLEM, "Unexpected `!' after "
- "--dstlimit-name");
+ if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
if (strlen(optarg) == 0)
exit_error(PARAMETER_PROBLEM, "Zero-length name?");
strncpy(r->name, optarg, sizeof(r->name));
return 0;
}
+ if (invert)
+ exit_error(PARAMETER_PROBLEM,
+ "dstlimit does not support invert");
+
return 1;
}