diff options
author | Susant Sahani <ssahani@vmware.com> | 2020-03-18 13:42:27 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-03-19 08:57:59 +0100 |
commit | d69b62de4439a103fe3c8fbb9dbd25e1758d48b3 (patch) | |
tree | 70f43af4b42976c2cf0e998a78ee5a1a6895c06c /src/network/networkctl.c | |
parent | 194fe32296b5079cf4edcffbe15f672ff8a9e762 (diff) | |
download | systemd-d69b62de4439a103fe3c8fbb9dbd25e1758d48b3.tar.gz |
networkctl: Add support to display IPv6 addrgenmode
Diffstat (limited to 'src/network/networkctl.c')
-rw-r--r-- | src/network/networkctl.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 7db2142ef2..772e6a95c2 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -127,6 +127,7 @@ typedef struct LinkInfo { uint32_t max_mtu; uint32_t tx_queues; uint32_t rx_queues; + uint8_t addr_gen_mode; char *qdisc; char **alternative_names; @@ -188,6 +189,7 @@ typedef struct LinkInfo { bool has_ethtool_link_info:1; bool has_wlan_link_info:1; bool has_tunnel_ipv4:1; + bool has_ipv6_address_generation_mode:1; bool needs_freeing:1; } LinkInfo; @@ -397,6 +399,19 @@ static int decode_link(sd_netlink_message *m, LinkInfo *info, char **patterns, b (void) sd_netlink_message_read_u32(m, IFLA_MASTER, &info->master); + r = sd_netlink_message_enter_container(m, IFLA_AF_SPEC); + if (r >= 0) { + r = sd_netlink_message_enter_container(m, AF_INET6); + if (r >= 0) { + r = sd_netlink_message_read_u8(m, IFLA_INET6_ADDR_GEN_MODE, &info->addr_gen_mode); + if (r >= 0) + info->has_ipv6_address_generation_mode = true; + + (void) sd_netlink_message_exit_container(m); + } + (void) sd_netlink_message_exit_container(m); + } + /* fill kind info */ (void) decode_netdev(m, info); @@ -1418,6 +1433,24 @@ static int link_status_one( return table_log_add_error(r); } + if (info->has_ipv6_address_generation_mode) { + static const struct { + const char *mode; + } mode_table[] = { + { "eui64" }, + { "none" }, + { "stable-privacy" }, + { "random" }, + }; + + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "IPv6 Address Generation Mode:", + TABLE_STRING, mode_table[info->addr_gen_mode]); + if (r < 0) + return table_log_add_error(r); + } + if (streq_ptr(info->netdev_kind, "bridge")) { r = table_add_many(table, TABLE_EMPTY, |