1
0
mirror of https://github.com/systemd/systemd synced 2026-04-26 17:04:50 +02:00

Compare commits

..

4 Commits

Author SHA1 Message Date
Yu Watanabe
87d3b4ef3b
Merge pull request #23292 from alexhenrie/dhcpv6
network: clarify relationship between RA flags and DHCPv6 modes
2022-05-07 11:42:45 +09:00
Zbigniew Jędrzejewski-Szmek
680f2fb39d shared/json: disentangle flag mixup
_DEBUG and _RELAX had the same value… I'm not sure what the effect
of this is.
2022-05-07 11:41:57 +09:00
Alex Henrie
6e40d0e458 network: clarify the relationship between DHCP= and WithoutRA=
Just setting DHCP=ipv6 is not enough to get DHCPv6 working without RA.
The WithoutRA option must also be changed from its default of "no".
2022-05-06 14:01:53 -06:00
Alex Henrie
0bcc6557fb network: clarify the relationship between RA flags and DHCPv6 modes
In the documentation, using the term "managed" for both the RA flag and
the DHCPv6 mode is confusing because the mode is referred to as
"solicit" both in the official DHCPv6 documentation (see RFC 8415) and
in the WithoutRA option.

Furthermore, calling the other RA flag "other information" or "other
address configuration" is confusing because its official name is simply
"other configuration" (see RFC 4861 and RFC 5175) and it isn't used to
assign IP addresses.

Rewrite the documentation for DHCPv6Client and WithoutRA to make it
clear that getting the "managed" RA flag triggers the same kind of DHCP
request as WithoutRA=solicit, whereas getting the "other configuration"
RA flag triggers the same kind of DHCP request as
WithoutRA=information-request.
2022-05-06 14:01:53 -06:00
5 changed files with 25 additions and 19 deletions

View File

@ -328,9 +328,10 @@
<literal>no</literal>.</para> <literal>no</literal>.</para>
<para>Note that DHCPv6 will by default be triggered by Router Advertisement, if that is <para>Note that DHCPv6 will by default be triggered by Router Advertisement, if that is
enabled, regardless of this parameter. By enabling DHCPv6 support explicitly, the DHCPv6 enabled, regardless of this parameter. By explicitly enabling DHCPv6 support here, the
client will be started regardless of the presence of routers on the link, or what flags the DHCPv6 client will be started in the mode specified by the <variable>WithoutRA=</variable>
routers pass. See <literal>IPv6AcceptRA=</literal>.</para> setting in the [DHCPv6] section, regardless of the presence of routers on the link, or
what flags the routers pass. See <literal>IPv6AcceptRA=</literal>.</para>
<para>Furthermore, note that by default the domain name specified through DHCP is not used <para>Furthermore, note that by default the domain name specified through DHCP is not used
for name resolution. See option <option>UseDomains=</option> below.</para> for name resolution. See option <option>UseDomains=</option> below.</para>
@ -2172,9 +2173,10 @@ Table=1234</programlisting></para>
<varlistentry> <varlistentry>
<term><varname>WithoutRA=</varname></term> <term><varname>WithoutRA=</varname></term>
<listitem> <listitem>
<para>Allows DHCPv6 client to start without router advertisements's managed or other <para>Allows DHCPv6 client to start without router advertisements's
address configuration flag. Takes one of <literal>no</literal>, <literal>solicit</literal> <literal>managed</literal> or <literal>other configuration</literal> flag. Takes one of
or <literal>information-request</literal>. If this is not specified, <literal>no</literal>, <literal>solicit</literal>, or
<literal>information-request</literal>. If this is not specified,
<literal>solicit</literal> is used when <varname>DHCPPrefixDelegation=</varname> is enabled <literal>solicit</literal> is used when <varname>DHCPPrefixDelegation=</varname> is enabled
and <varname>UplinkInterface=:self</varname> is specified in the [DHCPPrefixDelegation] and <varname>UplinkInterface=:self</varname> is specified in the [DHCPPrefixDelegation]
section. Otherwise, defaults to <literal>no</literal>, and the DHCPv6 client will be started section. Otherwise, defaults to <literal>no</literal>, and the DHCPv6 client will be started
@ -2507,10 +2509,14 @@ Token=prefixstable:2002:da8:1::</programlisting></para>
<term><varname>DHCPv6Client=</varname></term> <term><varname>DHCPv6Client=</varname></term>
<listitem> <listitem>
<para>Takes a boolean, or the special value <literal>always</literal>. When true, the <para>Takes a boolean, or the special value <literal>always</literal>. When true, the
DHCPv6 client will be started when the RA has the managed or other information flag. If set DHCPv6 client will be started in <literal>solicit</literal> mode if the RA has the
to <literal>always</literal>, the DHCPv6 client will be started in managed mode when an RA <literal>managed</literal> flag or <literal>information-request</literal> mode if the RA
is received, even if neither managed nor other information flag is set in the RA. This will lacks the <literal>managed</literal> flag but has the
be ignored when <varname>WithoutRA=</varname> in the [DHCPv6] section is enabled, or <literal>other configuration</literal> flag. If set to <literal>always</literal>, the
DHCPv6 client will be started in <literal>solicit</literal> mode when an RA is received,
even if neither the <literal>managed</literal> nor the
<literal>other configuration</literal> flag is set in the RA. This will be ignored when
<varname>WithoutRA=</varname> in the [DHCPv6] section is enabled, or
<varname>UplinkInterface=:self</varname> in the [DHCPPrefixDelegation] section is <varname>UplinkInterface=:self</varname> in the [DHCPPrefixDelegation] section is
specified. Defaults to true.</para> specified. Defaults to true.</para>
</listitem> </listitem>

View File

@ -1384,7 +1384,7 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) {
} }
log_dhcp6_client(client, "Starting in %s mode", log_dhcp6_client(client, "Starting in %s mode",
client->information_request ? "Information request" : "Managed"); client->information_request ? "Information request" : "Solicit");
return client_start_transaction(client, state); return client_start_transaction(client, state);
} }

View File

@ -35,7 +35,7 @@ static DHCP6ClientStartMode link_get_dhcp6_client_start_mode(Link *link) {
if (link->network->dhcp6_client_start_mode >= 0) if (link->network->dhcp6_client_start_mode >= 0)
return link->network->dhcp6_client_start_mode; return link->network->dhcp6_client_start_mode;
/* When this interface itself is an uplink interface, then start dhcp6 client in managed mode. */ /* When this interface itself is an uplink interface, then start dhcp6 client in solicit mode. */
if (dhcp_pd_is_uplink(link, link, /* accept_auto = */ false)) if (dhcp_pd_is_uplink(link, link, /* accept_auto = */ false))
return DHCP6_CLIENT_START_MODE_SOLICIT; return DHCP6_CLIENT_START_MODE_SOLICIT;
@ -686,7 +686,7 @@ static int dhcp6_configure(Link *link) {
return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to %s requesting prefixes to be delegated: %m", return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to %s requesting prefixes to be delegated: %m",
enable_disable(link->network->dhcp6_use_pd_prefix)); enable_disable(link->network->dhcp6_use_pd_prefix));
/* Even if UseAddress=no, we need to request IA_NA, as the dhcp6 client may be started in managed mode. */ /* Even if UseAddress=no, we need to request IA_NA, as the dhcp6 client may be started in solicit mode. */
r = sd_dhcp6_client_set_address_request(client, link->network->dhcp6_use_pd_prefix ? link->network->dhcp6_use_address : true); r = sd_dhcp6_client_set_address_request(client, link->network->dhcp6_use_pd_prefix ? link->network->dhcp6_use_address : true);
if (r < 0) if (r < 0)
return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to %s requesting address: %m", return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to %s requesting address: %m",

View File

@ -949,13 +949,13 @@ static int ndisc_start_dhcp6_client(Link *link, sd_ndisc_router *rt) {
return 0; return 0;
/* (re)start DHCPv6 client in stateful or stateless mode according to RA flags. /* (re)start DHCPv6 client in stateful or stateless mode according to RA flags.
* Note, if both managed and other information bits are set, then ignore other * Note, if both "managed" and "other configuration" bits are set, then ignore
* information bit. See RFC 4861. */ * "other configuration" bit. See RFC 4861. */
r = dhcp6_start_on_ra(link, !(flags & ND_RA_FLAG_MANAGED)); r = dhcp6_start_on_ra(link, !(flags & ND_RA_FLAG_MANAGED));
break; break;
} }
case IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS: case IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS:
/* When IPv6AcceptRA.DHCPv6Client=always, start dhcp6 client in managed mode /* When IPv6AcceptRA.DHCPv6Client=always, start dhcp6 client in solicit mode
* even if the router flags have neither M nor O flags. */ * even if the router flags have neither M nor O flags. */
r = dhcp6_start_on_ra(link, /* information_request = */ false); r = dhcp6_start_on_ra(link, /* information_request = */ false);
break; break;

View File

@ -331,9 +331,9 @@ typedef enum JsonDispatchFlags {
JSON_SAFE = 1 << 3, /* Don't accept "unsafe" strings in json_dispatch_string() + json_dispatch_string() */ JSON_SAFE = 1 << 3, /* Don't accept "unsafe" strings in json_dispatch_string() + json_dispatch_string() */
JSON_RELAX = 1 << 4, /* Use relaxed user name checking in json_dispatch_user_group_name */ JSON_RELAX = 1 << 4, /* Use relaxed user name checking in json_dispatch_user_group_name */
/* The following two may be passed into log_json() in addition to the three above */ /* The following two may be passed into log_json() in addition to those above */
JSON_DEBUG = 1 << 4, /* Indicates that this log message is a debug message */ JSON_DEBUG = 1 << 5, /* Indicates that this log message is a debug message */
JSON_WARNING = 1 << 5, /* Indicates that this log message is a warning message */ JSON_WARNING = 1 << 6, /* Indicates that this log message is a warning message */
} JsonDispatchFlags; } JsonDispatchFlags;
typedef int (*JsonDispatchCallback)(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata); typedef int (*JsonDispatchCallback)(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);