diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-02-08 22:16:38 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-02-10 17:34:02 +0900 |
commit | 80f2647dfbc694a17dbbd1afc1392fc7ed6600c1 (patch) | |
tree | 9453121dc6859720bc4094f141a15cf024b43e37 /src/network/networkd-ipv6ll.c | |
parent | de2f372ea2d3f01131b684814580dec2d28a606a (diff) | |
download | systemd-80f2647dfbc694a17dbbd1afc1392fc7ed6600c1.tar.gz |
network: introduce two helper functions for setting IPv6LL address generation mode
Diffstat (limited to 'src/network/networkd-ipv6ll.c')
-rw-r--r-- | src/network/networkd-ipv6ll.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/network/networkd-ipv6ll.c b/src/network/networkd-ipv6ll.c index 016df4a1b0..0ff28761f2 100644 --- a/src/network/networkd-ipv6ll.c +++ b/src/network/networkd-ipv6ll.c @@ -74,6 +74,50 @@ bool link_may_have_ipv6ll(Link *link) { return false; } +IPv6LinkLocalAddressGenMode link_get_ipv6ll_addrgen_mode(Link *link) { + assert(link); + + if (!link_ipv6ll_enabled(link)) + return IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE; + + if (link->network->ipv6ll_address_gen_mode >= 0) + return link->network->ipv6ll_address_gen_mode; + + if (in6_addr_is_set(&link->network->ipv6ll_stable_secret)) + return IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY; + + return IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64; +} + +int ipv6ll_addrgen_mode_fill_message(sd_netlink_message *message, IPv6LinkLocalAddressGenMode mode) { + int r; + + assert(message); + assert(mode >= 0 && mode < _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX); + + r = sd_netlink_message_open_container(message, IFLA_AF_SPEC); + if (r < 0) + return r; + + r = sd_netlink_message_open_container(message, AF_INET6); + if (r < 0) + return r; + + r = sd_netlink_message_append_u8(message, IFLA_INET6_ADDR_GEN_MODE, mode); + if (r < 0) + return r; + + r = sd_netlink_message_close_container(message); + if (r < 0) + return r; + + r = sd_netlink_message_close_container(message); + if (r < 0) + return r; + + return 0; +} + static const char* const ipv6_link_local_address_gen_mode_table[_IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX] = { [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64] = "eui64", [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE] = "none", |