static void ct_parse_v1(struct xt_option_call *cb) { struct xt_ct_target_info_v1 *info = cb->data; xtables_option_parse(cb); switch (cb->entry->id) { case O_NOTRACK: info->flags |= XT_CT_NOTRACK; break; case O_ZONE_ORIG: case O_ZONE_REPLY: case O_ZONE: ct_parse_zone_id(cb->arg, cb->entry->id, &info->zone, &info->flags); break; case O_CTEVENTS: info->ct_events = ct_parse_events(ct_event_tbl, ARRAY_SIZE(ct_event_tbl), cb->arg); break; case O_EXPEVENTS: info->exp_events = ct_parse_events(exp_event_tbl, ARRAY_SIZE(exp_event_tbl), cb->arg); break; } }
static void ct_parse(struct xt_option_call *cb) { struct xt_ct_target_info *info = cb->data; xtables_option_parse(cb); switch (cb->entry->id) { case O_NOTRACK: info->flags |= XT_CT_NOTRACK; break; case O_CTEVENTS: info->ct_events = ct_parse_events(ct_event_tbl, ARRAY_SIZE(ct_event_tbl), cb->arg); break; case O_EXPEVENTS: info->exp_events = ct_parse_events(exp_event_tbl, ARRAY_SIZE(exp_event_tbl), cb->arg); break; } }
static int ct_parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_target **target) { struct xt_ct_target_info *info = (struct xt_ct_target_info *)(*target)->data; unsigned int zone; switch (c) { case CT_OPT_NOTRACK: xtables_param_act(XTF_ONLY_ONCE, "CT", "--notrack", *flags & CT_OPT_NOTRACK); info->flags |= XT_CT_NOTRACK; break; case CT_OPT_HELPER: xtables_param_act(XTF_ONLY_ONCE, "CT", "--helper", *flags & CT_OPT_HELPER); strncpy(info->helper, optarg, sizeof(info->helper)); info->helper[sizeof(info->helper) - 1] = '\0'; break; case CT_OPT_CTEVENTS: xtables_param_act(XTF_ONLY_ONCE, "CT", "--ctevents", *flags & CT_OPT_CTEVENTS); info->ct_events = ct_parse_events(ct_event_tbl, ARRAY_SIZE(ct_event_tbl), optarg); break; case CT_OPT_EXPEVENTS: xtables_param_act(XTF_ONLY_ONCE, "CT", "--expevents", *flags & CT_OPT_EXPEVENTS); info->exp_events = ct_parse_events(exp_event_tbl, ARRAY_SIZE(exp_event_tbl), optarg); break; case CT_OPT_ZONE: xtables_param_act(XTF_ONLY_ONCE, "CT", "--zone", *flags & CT_OPT_ZONE); if (!xtables_strtoui(optarg, NULL, &zone, 0, UINT16_MAX)) xtables_error(PARAMETER_PROBLEM, "Bad zone value \"%s\"", optarg); info->zone = zone; break; default: return 0; } *flags |= c; return 1; }