printf("%03d %s\n", opt->option, opt->var);
}
-int make_reqmask(uint8_t *mask, char **opts, int add)
+int make_option_mask(uint8_t *mask, char **opts, int add)
{
char *token, *p = *opts, *t;
const struct dhcp_opt *opt;
}
if (match) {
if (add == 1)
- add_reqmask(mask,
- opt->option);
+ add_option_mask(mask,
+ opt->option);
else
- del_reqmask(mask,
- opt->option);
+ del_option_mask(mask,
+ opt->option);
break;
}
}
*p++ = 0;
for (opt = dhcp_opts; opt->option; opt++) {
if (!(opt->type & REQUEST ||
- has_reqmask(options->reqmask, opt->option)))
+ has_option_mask(options->requestmask, opt->option)))
continue;
switch (opt->option) {
case DHO_RENEWALTIME: /* FALLTHROUGH */
for (opt = dhcp_opts; opt->option; opt++) {
if (!opt->var)
continue;
- if (has_reqmask(options->nomask, opt->option))
+ if (has_option_mask(options->nomask, opt->option))
continue;
if (get_option_raw(dhcp, opt->option))
e++;
for (opt = dhcp_opts; opt->option; opt++) {
if (!opt->var)
continue;
- if (has_reqmask(options->nomask, opt->option))
+ if (has_option_mask(options->nomask, opt->option))
continue;
val = NULL;
p = get_option(dhcp, opt->option, &pl, NULL);
/* Don't set any optional arguments here so we retain POSIX
* compatibility with getopt */
-#define OPTS "bc:df:h:i:kl:m:no:pqr:s:t:u:v:xABC:DEF:GI:KLO:TVX:"
+#define OPTS "bc:df:h:i:kl:m:no:pqr:s:t:u:v:xABC:DEF:GI:KLO:Q:TVX:"
static int doversion = 0;
static int dohelp = 0;
{"nolink", no_argument, NULL, 'K'},
{"noipv4ll", no_argument, NULL, 'L'},
{"nooption", optional_argument, NULL, 'O'},
+ {"require", required_argument, NULL, 'Q'},
{"test", no_argument, NULL, 'T'},
{"variables", no_argument, NULL, 'V'},
{"blacklist", required_argument, NULL, 'X'},
printf("usage: "PACKAGE" [-dknpqxADEGHKLOTV] [-c script] [-f file ] [-h hostname]\n"
" [-i classID ] [-l leasetime] [-m metric] [-o option] [-r ipaddr]\n"
" [-s ipaddr] [-t timeout] [-u userclass] [-F none|ptr|both]\n"
- " [-I clientID] [-C hookscript] [-X ipaddr] <interface>\n");
+ " [-I clientID] [-C hookscript] [-Q option] [-X ipaddr] <interface>\n");
}
static char *
}
break;
case 'o':
- if (make_reqmask(options->reqmask, &oarg, 1) != 0) {
+ if (make_option_mask(options->requestmask, &oarg, 1) != 0) {
logger(LOG_ERR, "unknown option `%s'", oarg);
return -1;
}
options->options &= ~DHCPCD_IPV4LL;
break;
case 'O':
- if (make_reqmask(options->reqmask, &optarg, -1) != 0 ||
- make_reqmask(options->nomask, &optarg, 1) != 0)
+ if (make_option_mask(options->requestmask, &oarg, -1) != 0 ||
+ make_option_mask(options->requiremask, &oarg, -1) != 0 ||
+ make_option_mask(options->nomask, &oarg, 1) != 0)
{
logger(LOG_ERR, "unknown option `%s'", optarg);
return -1;
}
break;
+ case 'Q':
+ if (make_option_mask(options->requiremask, &oarg, 1) != 0 ||
+ make_option_mask(options->requestmask, &oarg, 1) != 0)
+ {
+ logger(LOG_ERR, "unknown option `%s'", oarg);
+ return -1;
+ }
+ break;
case 'X':
if (!inet_aton(oarg, &addr)) {
logger(LOG_ERR, "`%s' is not a valid IP address",
"%s %s", PACKAGE, VERSION);
#ifdef CMDLINE_COMPAT
- add_reqmask(options->reqmask, DHO_DNSSERVER);
- add_reqmask(options->reqmask, DHO_DNSDOMAIN);
- add_reqmask(options->reqmask, DHO_DNSSEARCH);
- add_reqmask(options->reqmask, DHO_NISSERVER);
- add_reqmask(options->reqmask, DHO_NISDOMAIN);
- add_reqmask(options->reqmask, DHO_NTPSERVER);
+ add_requestmask(options->requestmask, DHO_DNSSERVER);
+ add_requestmask(options->reqmask, DHO_DNSDOMAIN);
+ add_requestmask(options->reqmask, DHO_DNSSEARCH);
+ add_requestmask(options->reqmask, DHO_NISSERVER);
+ add_requestmask(options->reqmask, DHO_NISDOMAIN);
+ add_requestmask(options->reqmask, DHO_NTPSERVER);
/* If the duid file exists, then enable duid by default
* This means we don't break existing clients that easily :) */
#ifdef CMDLINE_COMPAT
case 'H': /* FALLTHROUGH */
case 'M':
- del_reqmask(options->reqmask, DHO_MTU);
+ del_requestmask(options->reqmask, DHO_MTU);
break;
case 'N':
- del_reqmask(options->reqmask, DHO_NTPSERVER);
+ del_requestmask(options->reqmask, DHO_NTPSERVER);
break;
case 'R':
- del_reqmask(options->reqmask, DHO_DNSSERVER);
- del_reqmask(options->reqmask, DHO_DNSDOMAIN);
- del_reqmask(options->reqmask, DHO_DNSSEARCH);
+ del_requestmask(options->reqmask, DHO_DNSSERVER);
+ del_requestmask(options->reqmask, DHO_DNSDOMAIN);
+ del_requestmask(options->reqmask, DHO_DNSSEARCH);
break;
case 'S':
- add_reqmask(options->reqmask, DHO_MSCSR);
+ add_requestmask(options->reqmask, DHO_MSCSR);
break;
case 'Y':
- del_reqmask(options->reqmask, DHO_NISSERVER);
- del_reqmask(options->reqmask, DHO_NISDOMAIN);
+ del_requestmask(options->reqmask, DHO_NISSERVER);
+ del_requestmask(options->reqmask, DHO_NISDOMAIN);
break;
#endif
default: