From 5dfaf89b5b851d3e8dd2cb4e2bd8f31ff49b4701 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 8 Jun 2020 06:39:06 +0200 Subject: [PATCH 1/3] network: DHCP4 client ID save in state file --- src/network/networkd-link.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 805aff3ab1..eeb5f5e16a 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -4354,6 +4354,8 @@ int link_save(Link *link) { if (link->dhcp_lease) { struct in_addr address; const char *tz = NULL; + size_t client_id_len; + const void *client_id; assert(link->network); @@ -4368,6 +4370,15 @@ int link_save(Link *link) { fputc('\n', f); } + r = sd_dhcp_lease_get_client_id(link->dhcp_lease, &client_id, &client_id_len); + if (r >= 0) { + _cleanup_free_ char *id = NULL; + + r = sd_dhcp_client_id_to_string(client_id, client_id_len, &id); + if (r >= 0) + fprintf(f, "DHCP4_CLIENT_ID=%s\n", id); + } + r = dhcp_lease_save(link->dhcp_lease, link->lease_file); if (r < 0) goto fail; From daec96821def5d20de992a00912c8bcdf39927b5 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 8 Jun 2020 06:39:50 +0200 Subject: [PATCH 2/3] sd-network: Introduce API to access DHCP4 client ID --- src/libsystemd/sd-network/sd-network.c | 4 ++++ src/systemd/sd-network.h | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/libsystemd/sd-network/sd-network.c b/src/libsystemd/sd-network/sd-network.c index 7e03817f82..5195a5850f 100644 --- a/src/libsystemd/sd-network/sd-network.c +++ b/src/libsystemd/sd-network/sd-network.c @@ -168,6 +168,10 @@ _public_ int sd_network_link_get_address_state(int ifindex, char **state) { return network_link_get_string(ifindex, "ADDRESS_STATE", state); } +_public_ int sd_network_link_get_dhcp4_client_id_string(int ifindex, char **client_id) { + return network_link_get_string(ifindex, "DHCP4_CLIENT_ID", client_id); +} + _public_ int sd_network_link_get_required_for_online(int ifindex) { _cleanup_free_ char *s = NULL; int r; diff --git a/src/systemd/sd-network.h b/src/systemd/sd-network.h index 2637a0f8bb..876f010c95 100644 --- a/src/systemd/sd-network.h +++ b/src/systemd/sd-network.h @@ -188,6 +188,9 @@ int sd_network_link_get_carrier_bound_by(int ifindex, int **ifindexes); /* Get the timezone that was learnt on a specific link. */ 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); + /* Monitor object */ typedef struct sd_network_monitor sd_network_monitor; From 2153bbc81a8714fe5fbb3031c970c2c05fd25974 Mon Sep 17 00:00:00 2001 From: Susant Sahani Date: Mon, 8 Jun 2020 06:40:23 +0200 Subject: [PATCH 3/3] networkctl: Display DHCP4 client ID --- src/network/networkctl.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/network/networkctl.c b/src/network/networkctl.c index 59c2ed278b..dea190eb0d 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; + _cleanup_free_ char *t = NULL, *network = NULL, *client_id = 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; @@ -2073,6 +2073,16 @@ static int link_status_one( return table_log_add_error(r); } + r = sd_network_link_get_dhcp4_client_id_string(info->ifindex, &client_id); + if (r >= 0) { + r = table_add_many(table, + TABLE_EMPTY, + TABLE_STRING, "DHCP4 Client ID:", + TABLE_STRING, client_id); + if (r < 0) + return table_log_add_error(r); + } + r = dump_lldp_neighbors(table, "Connected To:", info->ifindex); if (r < 0) return r;