1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-25 01:34:28 +03:00

Merge pull request #23292 from alexhenrie/dhcpv6

network: clarify relationship between RA flags and DHCPv6 modes
This commit is contained in:
Yu Watanabe 2022-05-07 11:42:45 +09:00 committed by GitHub
commit 87d3b4ef3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 16 deletions

View File

@ -328,9 +328,10 @@
<literal>no</literal>.</para>
<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
client will be started regardless of the presence of routers on the link, or what flags the
routers pass. See <literal>IPv6AcceptRA=</literal>.</para>
enabled, regardless of this parameter. By explicitly enabling DHCPv6 support here, the
DHCPv6 client will be started in the mode specified by the <variable>WithoutRA=</variable>
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
for name resolution. See option <option>UseDomains=</option> below.</para>
@ -2172,9 +2173,10 @@ Table=1234</programlisting></para>
<varlistentry>
<term><varname>WithoutRA=</varname></term>
<listitem>
<para>Allows DHCPv6 client to start without router advertisements's managed or other
address configuration flag. Takes one of <literal>no</literal>, <literal>solicit</literal>
or <literal>information-request</literal>. If this is not specified,
<para>Allows DHCPv6 client to start without router advertisements's
<literal>managed</literal> or <literal>other configuration</literal> flag. Takes one of
<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
and <varname>UplinkInterface=:self</varname> is specified in the [DHCPPrefixDelegation]
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>
<listitem>
<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
to <literal>always</literal>, the DHCPv6 client will be started in managed mode when an RA
is received, even if neither managed nor other information flag is set in the RA. This will
be ignored when <varname>WithoutRA=</varname> in the [DHCPv6] section is enabled, or
DHCPv6 client will be started in <literal>solicit</literal> mode if the RA has the
<literal>managed</literal> flag or <literal>information-request</literal> mode if the RA
lacks the <literal>managed</literal> flag but has the
<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
specified. Defaults to true.</para>
</listitem>

View File

@ -1384,7 +1384,7 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) {
}
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);
}

View File

@ -35,7 +35,7 @@ static DHCP6ClientStartMode link_get_dhcp6_client_start_mode(Link *link) {
if (link->network->dhcp6_client_start_mode >= 0)
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))
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",
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);
if (r < 0)
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;
/* (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
* information bit. See RFC 4861. */
* Note, if both "managed" and "other configuration" bits are set, then ignore
* "other configuration" bit. See RFC 4861. */
r = dhcp6_start_on_ra(link, !(flags & ND_RA_FLAG_MANAGED));
break;
}
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. */
r = dhcp6_start_on_ra(link, /* information_request = */ false);
break;