This definition seems to be unused by the way :) I am not sure if "0x00000003" is better than "3" (we have only two flags). Something like 00000011b would be clearer, but we don't have SHOW_BINARY.
ti 7. helmik. 2023 klo 15.36 Antonio Quartulli (a...@unstable.cc) kirjoitti: > > Hi, > > On 07/02/2023 10:42, Lev Stipakov wrote: > > From: Lev Stipakov <l...@openvpn.net> > > > > Followin DHCP options: > > > > DOMAIN, ADAPTER_DOMAIN_SUFFIX, DNS, WINS > > > > don't require DHCP server in order to be used. > > > > This change allows those options to be used with dco and wintun > > drivers. If an option specified which requires DHCP server and > > tap-windows6 driver is not used, print a clear error message > > instead of obscure reference to --ip-win32. > > > > This fixes https://github.com/OpenVPN/openvpn/issues/239 > > > > Reported-by: Marek Zarychta > > Signed-off-by: Lev Stipakov <l...@openvpn.net> > > --- > > v2: replace enum with defines, which are more suitable > > as bit flags > > > > src/openvpn/options.c | 39 +++++++++++++++++++++++---------------- > > src/openvpn/tun.h | 6 +++++- > > 2 files changed, 28 insertions(+), 17 deletions(-) > > > > diff --git a/src/openvpn/options.c b/src/openvpn/options.c > > index 6ae3faf8..9c05217c 100644 > > --- a/src/openvpn/options.c > > +++ b/src/openvpn/options.c > > @@ -1290,7 +1290,7 @@ show_tuntap_options(const struct tuntap_options *o) > > SHOW_INT(dhcp_masq_offset); > > SHOW_INT(dhcp_lease_time); > > SHOW_INT(tap_sleep); > > - SHOW_BOOL(dhcp_options); > > + SHOW_INT(dhcp_options); > > wouldn't SHOW_UNSIGNED be more appropriate since this is a bitfield? > > This is its definition: > > options.c:987:#define SHOW_UNSIGNED(var) SHOW_PARM(var, o->var, "0x%08x") > > Cheers, > > > SHOW_BOOL(dhcp_renew); > > SHOW_BOOL(dhcp_pre_release); > > SHOW_STR(domain); > > @@ -2478,12 +2478,20 @@ options_postprocess_verify_ce(const struct options > > *options, > > msg(M_USAGE, "On Windows, --ip-win32 doesn't make sense unless > > --ifconfig is also used"); > > } > > > > - if (options->tuntap_options.dhcp_options > > - && options->windows_driver != WINDOWS_DRIVER_WINTUN > > - && options->tuntap_options.ip_win32_type != IPW32_SET_DHCP_MASQ > > - && options->tuntap_options.ip_win32_type != IPW32_SET_ADAPTIVE) > > + if (options->tuntap_options.dhcp_options & DHCP_OPTIONS_DHCP_REQUIRED) > > { > > - msg(M_USAGE, "--dhcp-option requires --ip-win32 dynamic or > > adaptive"); > > + const char *prefix = "Some dhcp-options require DHCP server"; > > + if (options->windows_driver != WINDOWS_DRIVER_TAP_WINDOWS6) > > + { > > + msg(M_USAGE, "%s, which is not supported by selected %s > > driver", > > + prefix, print_windows_driver(options->windows_driver)); > > + } > > + else if (options->tuntap_options.ip_win32_type != > > IPW32_SET_DHCP_MASQ > > + && options->tuntap_options.ip_win32_type != > > IPW32_SET_ADAPTIVE) > > + { > > + msg(M_USAGE, "%s, which requires --ip-win32 dynamic or > > adaptive", > > + prefix); > > + } > > } > > > > if (options->windows_driver == WINDOWS_DRIVER_WINTUN && dev != > > DEV_TYPE_TUN) > > @@ -8083,16 +8091,17 @@ add_option(struct options *options, > > { > > struct tuntap_options *o = &options->tuntap_options; > > VERIFY_PERMISSION(OPT_P_DHCPDNS); > > - bool ipv6dns = false; > > > > if ((streq(p[1], "DOMAIN") || streq(p[1], > > "ADAPTER_DOMAIN_SUFFIX")) > > && p[2] && !p[3]) > > { > > o->domain = p[2]; > > + o->dhcp_options |= DHCP_OPTIONS_DHCP_OPTIONAL; > > } > > else if (streq(p[1], "NBS") && p[2] && !p[3]) > > { > > o->netbios_scope = p[2]; > > + o->dhcp_options |= DHCP_OPTIONS_DHCP_REQUIRED; > > } > > else if (streq(p[1], "NBT") && p[2] && !p[3]) > > { > > @@ -8104,31 +8113,35 @@ add_option(struct options *options, > > goto err; > > } > > o->netbios_node_type = t; > > + o->dhcp_options |= DHCP_OPTIONS_DHCP_REQUIRED; > > } > > else if ((streq(p[1], "DNS") || streq(p[1], "DNS6")) && p[2] && > > !p[3] > > && (!strstr(p[2], ":") || ipv6_addr_safe(p[2]))) > > { > > if (strstr(p[2], ":")) > > { > > - ipv6dns = true; > > dhcp_option_dns6_parse(p[2], o->dns6, &o->dns6_len, > > msglevel); > > } > > else > > { > > dhcp_option_address_parse("DNS", p[2], o->dns, > > &o->dns_len, msglevel); > > + o->dhcp_options |= DHCP_OPTIONS_DHCP_OPTIONAL; > > } > > } > > else if (streq(p[1], "WINS") && p[2] && !p[3]) > > { > > dhcp_option_address_parse("WINS", p[2], o->wins, > > &o->wins_len, msglevel); > > + o->dhcp_options |= DHCP_OPTIONS_DHCP_OPTIONAL; > > } > > else if (streq(p[1], "NTP") && p[2] && !p[3]) > > { > > dhcp_option_address_parse("NTP", p[2], o->ntp, &o->ntp_len, > > msglevel); > > + o->dhcp_options |= DHCP_OPTIONS_DHCP_REQUIRED; > > } > > else if (streq(p[1], "NBDD") && p[2] && !p[3]) > > { > > dhcp_option_address_parse("NBDD", p[2], o->nbdd, > > &o->nbdd_len, msglevel); > > + o->dhcp_options |= DHCP_OPTIONS_DHCP_REQUIRED; > > } > > else if (streq(p[1], "DOMAIN-SEARCH") && p[2] && !p[3]) > > { > > @@ -8141,10 +8154,12 @@ add_option(struct options *options, > > msg(msglevel, "--dhcp-option %s: maximum of %d search > > entries can be specified", > > p[1], N_SEARCH_LIST_LEN); > > } > > + o->dhcp_options |= DHCP_OPTIONS_DHCP_REQUIRED; > > } > > else if (streq(p[1], "DISABLE-NBT") && !p[2]) > > { > > o->disable_nbt = 1; > > + o->dhcp_options |= DHCP_OPTIONS_DHCP_REQUIRED; > > } > > #if defined(TARGET_ANDROID) > > else if (streq(p[1], "PROXY_HTTP") && p[3] && !p[4]) > > @@ -8158,14 +8173,6 @@ add_option(struct options *options, > > msg(msglevel, "--dhcp-option: unknown option type '%s' or > > missing or unknown parameter", p[1]); > > goto err; > > } > > - > > - /* flag that we have options to give to the TAP driver's DHCPv4 > > server > > - * - skipped for "DNS6", as that's not a DHCPv4 option > > - */ > > - if (!ipv6dns) > > - { > > - o->dhcp_options = true; > > - } > > } > > #endif /* if defined(_WIN32) || defined(TARGET_ANDROID) */ > > #ifdef _WIN32 > > diff --git a/src/openvpn/tun.h b/src/openvpn/tun.h > > index 3b0a0d24..e19e1a2e 100644 > > --- a/src/openvpn/tun.h > > +++ b/src/openvpn/tun.h > > @@ -62,6 +62,10 @@ enum windows_driver_type { > > #define IPW32_SET_ADAPTIVE_DELAY_WINDOW 300 > > #define IPW32_SET_ADAPTIVE_TRY_NETSH 20 > > > > +/* bit flags for DHCP options */ > > +#define DHCP_OPTIONS_DHCP_OPTIONAL (1<<0) > > +#define DHCP_OPTIONS_DHCP_REQUIRED (1<<1) > > + > > struct tuntap_options { > > /* --ip-win32 options */ > > bool ip_win32_defined; > > @@ -90,7 +94,7 @@ struct tuntap_options { > > > > /* --dhcp-option options */ > > > > - bool dhcp_options; > > + int dhcp_options; > > > > const char *domain; /* DOMAIN (15) */ > > > > -- > Antonio Quartulli -- -Lev _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel