1
0
mirror of https://github.com/systemd/systemd synced 2026-04-26 08:54: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>
<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;

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_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 */
JSON_DEBUG = 1 << 4, /* Indicates that this log message is a debug message */
JSON_WARNING = 1 << 5, /* Indicates that this log message is a warning message */
/* The following two may be passed into log_json() in addition to those above */
JSON_DEBUG = 1 << 5, /* Indicates that this log message is a debug message */
JSON_WARNING = 1 << 6, /* Indicates that this log message is a warning message */
} JsonDispatchFlags;
typedef int (*JsonDispatchCallback)(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata);