Compare commits

...

6 Commits

Author SHA1 Message Date
Lennart Poettering 7d7c75f149 update TODO 2020-11-16 21:08:38 +01:00
Lennart Poettering a21f53219b man: add missing full stop 2020-11-16 21:08:38 +01:00
Yu Watanabe e5b88e8d73
Merge pull request #17619 from yuwata/network-ndisc-dhcp6-client-always
network: honor M or O flag in RA even if IPv6AcceptRA.DHCPv6Cleint=always
2020-11-17 01:20:56 +09:00
Yu Watanabe d448888924 meson: use "_" as separator in test names
Follow-up for ca121e20c4.

Fixes #17568.
2020-11-16 21:28:05 +09:00
Yu Watanabe 787dd704e1 sd-dhcp6-client: insert spaces around ternary operator 2020-11-16 18:59:28 +09:00
Yu Watanabe 0e686feaff network: honor M or O flag in RA even if IPv6AcceptRA.DHCPv6Cleint=always
Follow-up for ac24e418d9.

The original motivation of the commit and RFE #15339 is to start dhcpv6
client in managed mode when neither M nor O flag is set in the RA.
But, previously, if the setting is set to "always", then the DHCPv6
client is always started in managed mode even if O flag is set in the
RA. Such the behavior breaks RFC 7084.
2020-11-16 18:59:24 +09:00
6 changed files with 29 additions and 11 deletions

12
TODO
View File

@ -20,6 +20,18 @@ Janitorial Clean-ups:
Features: Features:
* cryptsetup: optionally, when run during boot-up and password is never
entered, and we are on AC power (or so), power off machine again
* when configuring loopback netif, and it fails due to EPERM, eat up error if
it happens to be set up alright already.
* at boot: check if battery above some threshold, if not power off again after explanation
* userdb: add field for ambient caps, so that a user can have CAP_WAKE_ALARM
for example. And add code that resets ambient caps for all services by
default.
* homed: try to unmount in regular intervals when home dir was busy when we * homed: try to unmount in regular intervals when home dir was busy when we
tried because idle. tried because idle.

View File

@ -199,7 +199,7 @@
domains (TLDs) that are not known by the DNS root server. This domains (TLDs) that are not known by the DNS root server. This
logic does not work in all private zone setups.</para> logic does not work in all private zone setups.</para>
<para>Defaults to <literal>allow-downgrade</literal></para> <para>Defaults to <literal>allow-downgrade</literal>.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@ -2086,9 +2086,11 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<varlistentry> <varlistentry>
<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 default), the DHCPv6 client will be started when the <para>Takes a boolean, or the special value <literal>always</literal>. When true or
RA has the managed or other information flag. If set to <literal>always</literal>, the DHCPv6 client will be started even if there is no <literal>always</literal>, the DHCPv6 client will be started when the RA has the managed or
managed or other information flag in the RA.</para> other information flag. If set to <literal>always</literal>, the DHCPv6 client will also be
started in managed mode when neither managed nor other information flag is set in the RA.
Defaults to true.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>

View File

@ -1743,8 +1743,7 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) {
} }
log_dhcp6_client(client, "Started in %s mode", log_dhcp6_client(client, "Started in %s mode",
client->information_request? "Information request": client->information_request ? "Information request" : "Managed");
"Managed");
return client_start(client, state); return client_start(client, state);
} }

View File

@ -1163,13 +1163,17 @@ static int ndisc_router_handler(Link *link, sd_ndisc_router *rt) {
if (r < 0) if (r < 0)
return log_link_error_errno(link, r, "Failed to get RA flags: %m"); return log_link_error_errno(link, r, "Failed to get RA flags: %m");
if ((flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER) && link->network->ipv6_accept_ra_start_dhcp6_client)) { if ((flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER) &&
link->network->ipv6_accept_ra_start_dhcp6_client != IPV6_ACCEPT_RA_START_DHCP6_CLIENT_NO) ||
link->network->ipv6_accept_ra_start_dhcp6_client == IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS) {
if (link->network->ipv6_accept_ra_start_dhcp6_client == IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS) if (flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER))
r = dhcp6_request_address(link, false);
else
/* (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 */
r = dhcp6_request_address(link, !(flags & ND_RA_FLAG_MANAGED)); r = dhcp6_request_address(link, !(flags & ND_RA_FLAG_MANAGED));
else
/* When IPv6AcceptRA.DHCPv6Client=always, start dhcp6 client in managed mode
* even if router does not have M or O flag. */
r = dhcp6_request_address(link, false);
if (r < 0 && r != -EBUSY) if (r < 0 && r != -EBUSY)
return log_link_error_errno(link, r, "Could not acquire DHCPv6 lease on NDisc request: %m"); return log_link_error_errno(link, r, "Could not acquire DHCPv6 lease on NDisc request: %m");
else else

View File

@ -68,7 +68,8 @@ endif
foreach header : _systemd_headers + _not_installed_headers + ['../libudev/libudev.h'] foreach header : _systemd_headers + _not_installed_headers + ['../libudev/libudev.h']
foreach opt : opts foreach opt : opts
name = ''.join(['cc-', header.split('/')[-1], '_'] + opt) std_name = opt.length() == 2 ? '_'.join(opt[1].split(':')) : ''
name = ''.join(['cc-', header.split('/')[-1], '_', opt[0], std_name])
if want_tests != 'false' if want_tests != 'false'
test(name, test(name,
check_compilation_sh, check_compilation_sh,