summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaan De Meyer <daan.j.demeyer@gmail.com>2020-06-09 21:18:28 +0200
committerGitHub <noreply@github.com>2020-06-09 21:18:28 +0200
commit45204921be610be839482a037985fd5a5052f2dd (patch)
tree246bcb7ec5538bfbc2f52ddf9a5c135fb5b9dd9e /src
parent2ffadd3ceee3abcb339d3ec08a11238794d42d24 (diff)
parent331ee15f18a58996d9dc8248918d35d5ce7f7131 (diff)
downloadsystemd-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.c12
-rw-r--r--src/libsystemd/sd-network/sd-network.c4
-rw-r--r--src/network/networkctl.c12
-rw-r--r--src/network/networkd-link.c7
-rw-r--r--src/systemd/sd-dhcp6-client.h3
-rw-r--r--src/systemd/sd-network.h3
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;