diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index 61acea1a8b..e267d4d40c 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -422,11 +422,15 @@
IPv6LinkLocalAddressGenerationMode=
- Specifies how IPv6 link local address is generated. Takes one of eui64,
- none, stable-privacy and random.
- When unset, the kernel's default will be used. Note that if LinkLocalAddressing=
- not configured as ipv6 then IPv6LinkLocalAddressGenerationMode=
- is ignored.
+ Specifies how IPv6 link local address is generated. Takes one of
+ eui64, none, stable-privacy and
+ random. When unset, the kernel's default will be used. Note that if
+ LinkLocalAddressing= is no or
+ ipv4, then IPv6LinkLocalAddressGenerationMode= will
+ be ignored. Also, even if LinkLocalAddressing= is yes
+ or ipv6, setting
+ IPv6LinkLocalAddressGenerationMode=none disables to configure an IPv6
+ link-local address.
diff --git a/src/basic/ordered-set.h b/src/basic/ordered-set.h
index 64df41766f..3ee47350b3 100644
--- a/src/basic/ordered-set.h
+++ b/src/basic/ordered-set.h
@@ -34,6 +34,10 @@ static inline int ordered_set_put(OrderedSet *s, void *p) {
return ordered_hashmap_put((OrderedHashmap*) s, p, p);
}
+static inline void *ordered_set_get(OrderedSet *s, const void *p) {
+ return ordered_hashmap_get((OrderedHashmap*) s, p);
+}
+
static inline unsigned ordered_set_size(OrderedSet *s) {
return ordered_hashmap_size((OrderedHashmap*) s);
}
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index 05e9ddacef..e853b45d13 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -2067,7 +2067,7 @@ static int link_drop_config(Link *link) {
return r;
}
-int link_configure(Link *link) {
+static int link_configure(Link *link) {
int r;
assert(link);
diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h
index 22cde53d3d..f6da6d9be6 100644
--- a/src/network/networkd-link.h
+++ b/src/network/networkd-link.h
@@ -241,7 +241,6 @@ int link_stop_engines(Link *link, bool may_keep_dhcp);
const char* link_state_to_string(LinkState s) _const_;
LinkState link_state_from_string(const char *s) _pure_;
-int link_configure(Link *link);
int link_reconfigure(Link *link, bool force);
int manager_udev_process_link(sd_device_monitor *monitor, sd_device *device, void *userdata);
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index bf2c0e99d4..0fa505bcbb 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -170,6 +170,8 @@ int network_verify(Network *network) {
if (network->link_local < 0)
network->link_local = network->bridge ? ADDRESS_FAMILY_NO : ADDRESS_FAMILY_IPV6;
+ if (network->ipv6ll_address_gen_mode == IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE)
+ SET_FLAG(network->link_local, ADDRESS_FAMILY_IPV6, false);
/* IPMasquerade implies IPForward */
network->ip_forward |= network->ip_masquerade;