diff options
author | Daan De Meyer <daan.j.demeyer@gmail.com> | 2020-06-09 21:18:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-09 21:18:28 +0200 |
commit | 45204921be610be839482a037985fd5a5052f2dd (patch) | |
tree | 246bcb7ec5538bfbc2f52ddf9a5c135fb5b9dd9e /src | |
parent | 2ffadd3ceee3abcb339d3ec08a11238794d42d24 (diff) | |
parent | 331ee15f18a58996d9dc8248918d35d5ce7f7131 (diff) | |
download | systemd-45204921be610be839482a037985fd5a5052f2dd.tar.gz |
Merge pull request #16104 from ssahani/dhcpv6-iaid
networkctl: Display DHCPv6 IAID
Diffstat (limited to 'src')
-rw-r--r-- | src/libsystemd-network/sd-dhcp6-client.c | 12 | ||||
-rw-r--r-- | src/libsystemd/sd-network/sd-network.c | 4 | ||||
-rw-r--r-- | src/network/networkctl.c | 12 | ||||
-rw-r--r-- | src/network/networkd-link.c | 7 | ||||
-rw-r--r-- | src/systemd/sd-dhcp6-client.h | 3 | ||||
-rw-r--r-- | src/systemd/sd-network.h | 3 |
6 files changed, 39 insertions, 2 deletions
diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c index 8d13aef4e7..b761707e7f 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -342,6 +342,18 @@ int sd_dhcp6_client_set_iaid(sd_dhcp6_client *client, uint32_t iaid) { return 0; } +int sd_dhcp6_client_get_iaid(sd_dhcp6_client *client, uint32_t *iaid) { + assert_return(client, -EINVAL); + assert_return(iaid, -EINVAL); + + if (!client->iaid_set) + return -ENODATA; + + *iaid = be32toh(client->ia_na.ia_na.id); + + return 0; +} + int sd_dhcp6_client_set_fqdn( sd_dhcp6_client *client, const char *fqdn) { diff --git a/src/libsystemd/sd-network/sd-network.c b/src/libsystemd/sd-network/sd-network.c index 5195a5850f..35606789e3 100644 --- a/src/libsystemd/sd-network/sd-network.c +++ b/src/libsystemd/sd-network/sd-network.c @@ -172,6 +172,10 @@ _public_ int sd_network_link_get_dhcp4_client_id_string(int ifindex, char **clie return network_link_get_string(ifindex, "DHCP4_CLIENT_ID", client_id); } +_public_ int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid) { + return network_link_get_string(ifindex, "DHCP6_CLIENT_IAID", iaid); +} + _public_ int sd_network_link_get_required_for_online(int ifindex) { _cleanup_free_ char *s = NULL; int r; diff --git a/src/network/networkctl.c b/src/network/networkctl.c index dea190eb0d..d4a5b52309 100644 --- a/src/network/networkctl.c +++ b/src/network/networkctl.c @@ -1381,7 +1381,7 @@ static int link_status_one( _cleanup_strv_free_ char **dns = NULL, **ntp = NULL, **sip = NULL, **search_domains = NULL, **route_domains = NULL, **pop3_server = NULL, **smtp_server = NULL, **lpr_server = NULL; _cleanup_free_ char *setup_state = NULL, *operational_state = NULL, *tz = NULL; - _cleanup_free_ char *t = NULL, *network = NULL, *client_id = NULL; + _cleanup_free_ char *t = NULL, *network = NULL, *client_id = NULL, *iaid = NULL; const char *driver = NULL, *path = NULL, *vendor = NULL, *model = NULL, *link = NULL; const char *on_color_operational, *off_color_operational, *on_color_setup, *off_color_setup; @@ -2083,6 +2083,16 @@ static int link_status_one( return table_log_add_error(r); } + r = sd_network_link_get_dhcp6_client_iaid_string(info->ifindex, &iaid); + if (r >= 0) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "DHCP6 Client IAID:", + TABLE_STRING, iaid); + if (r < 0) + return table_log_add_error(r); + } + r = dump_lldp_neighbors(table, "Connected To:", info->ifindex); if (r < 0) return r; diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 20c5c1c4c8..b27b13c194 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -4086,8 +4086,9 @@ int link_save(Link *link) { const char *admin_state, *oper_state, *carrier_state, *address_state; _cleanup_free_ char *temp_path = NULL; _cleanup_fclose_ FILE *f = NULL; - Address *a; + uint32_t iaid; Route *route; + Address *a; Iterator i; int r; @@ -4420,6 +4421,10 @@ int link_save(Link *link) { } } + r = sd_dhcp6_client_get_iaid(link->dhcp6_client, &iaid); + if (r >= 0) + fprintf(f, "DHCP6_CLIENT_IAID=0x%x\n", iaid); + r = fflush_and_check(f); if (r < 0) goto fail; diff --git a/src/systemd/sd-dhcp6-client.h b/src/systemd/sd-dhcp6-client.h index 58a17a5a3f..32616c9799 100644 --- a/src/systemd/sd-dhcp6-client.h +++ b/src/systemd/sd-dhcp6-client.h @@ -110,6 +110,9 @@ int sd_dhcp6_client_set_duid_llt( int sd_dhcp6_client_set_iaid( sd_dhcp6_client *client, uint32_t iaid); +int sd_dhcp6_client_get_iaid( + sd_dhcp6_client *client, + uint32_t *iaid); int sd_dhcp6_client_set_fqdn( sd_dhcp6_client *client, const char *fqdn); diff --git a/src/systemd/sd-network.h b/src/systemd/sd-network.h index 876f010c95..c38c5fc18b 100644 --- a/src/systemd/sd-network.h +++ b/src/systemd/sd-network.h @@ -191,6 +191,9 @@ int sd_network_link_get_timezone(int ifindex, char **timezone); /* Get DHCPv4 client id for a given link. */ int sd_network_link_get_dhcp4_client_id_string(int ifindex, char **client_id); +/* Get DHCPv6 client IAID for a given link. */ +int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid); + /* Monitor object */ typedef struct sd_network_monitor sd_network_monitor; |