static int DSCP_parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_target **target) { struct xt_DSCP_info *dinfo = (struct xt_DSCP_info *)(*target)->data; switch (c) { case 'F': if (*flags) xtables_error(PARAMETER_PROBLEM, "DSCP target: Only use --set-dscp ONCE!"); parse_dscp(optarg, dinfo); *flags = 1; break; case 'G': if (*flags) xtables_error(PARAMETER_PROBLEM, "DSCP target: Only use --set-dscp-class ONCE!"); parse_class(optarg, dinfo); *flags = 1; break; default: return 0; } return 1; }
static int dscp_parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_match **match) { struct xt_dscp_info *dinfo = (struct xt_dscp_info *)(*match)->data; switch (c) { case 'F': if (*flags) xtables_error(PARAMETER_PROBLEM, "DSCP match: Only use --dscp ONCE!"); xtables_check_inverse(optarg, &invert, &optind, 0, argv); parse_dscp(optarg, dinfo); if (invert) dinfo->invert = 1; *flags = 1; break; case 'G': if (*flags) xtables_error(PARAMETER_PROBLEM, "DSCP match: Only use --dscp-class ONCE!"); xtables_check_inverse(optarg, &invert, &optind, 0, argv); parse_class(optarg, dinfo); if (invert) dinfo->invert = 1; *flags = 1; break; } return 1; }
static int parse(int c, char **argv, int invert, unsigned int *flags, const struct ipt_entry *entry, unsigned int *nfcache, struct ipt_entry_match **match) { struct ipt_dscp_info *dinfo = (struct ipt_dscp_info *)(*match)->data; switch (c) { case 'F': if (*flags) exit_error(PARAMETER_PROBLEM, "DSCP match: Only use --dscp ONCE!"); check_inverse(optarg, &invert, &optind, 0); parse_dscp(argv[optind-1], dinfo); if (invert) dinfo->invert = 1; *flags = 1; break; case 'G': if (*flags) exit_error(PARAMETER_PROBLEM, "DSCP match: Only use --dscp-class ONCE!"); check_inverse(optarg, &invert, &optind, 0); parse_class(argv[optind - 1], dinfo); if (invert) dinfo->invert = 1; *flags = 1; break; default: return 0; } return 1; }