diff options
author | Francesco Giudici <fgiudici@redhat.com> | 2019-07-25 11:03:40 +0200 |
---|---|---|
committer | Francesco Giudici <fgiudici@redhat.com> | 2019-09-06 12:30:38 +0200 |
commit | f22a4bf24bfed7f146883ffd1b7fbb7465ef2d9f (patch) | |
tree | 10881e983bb55a772f748a32ca9ce4f82c2518b3 | |
parent | efe878a3f72faa798874715e881e9155bd7a2dde (diff) | |
download | NetworkManager-f22a4bf24bfed7f146883ffd1b7fbb7465ef2d9f.tar.gz |
dhcp: nettools: retrieve and expose the private dhcp options
-rw-r--r-- | src/dhcp/nm-dhcp-nettools.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/dhcp/nm-dhcp-nettools.c b/src/dhcp/nm-dhcp-nettools.c index 62fa760891..1d06104a7a 100644 --- a/src/dhcp/nm-dhcp-nettools.c +++ b/src/dhcp/nm-dhcp-nettools.c @@ -869,6 +869,43 @@ lease_parse_wpad (NDhcp4ClientLease *lease, str->str); } +static void +lease_parse_private_options (NDhcp4ClientLease *lease, + const char *iface, + GHashTable *options) +{ + int i; + + for (i = NM_DHCP_OPTION_DHCP4_PRIVATE_224; i <= NM_DHCP_OPTION_DHCP4_PRIVATE_254; i++) { + gs_free char *option_string = NULL; + guint8 *data; + gsize n_data; + int r; + + /* We manage private options 249 (private classless static route) and 252 (wpad) in a special + * way, so skip them as we here just manage all (the other) private options as raw data */ + if (NM_IN_SET (i, NM_DHCP_OPTION_DHCP4_PRIVATE_CLASSLESS_STATIC_ROUTE, + NM_DHCP_OPTION_DHCP4_PRIVATE_PROXY_AUTODISCOVERY)) + continue; + + r = n_dhcp4_client_lease_query (lease, i, &data, &n_data); + if (r) + continue; + + option_string = nm_utils_bin2hexstr_full (data, n_data, ':', FALSE, NULL); + LOG_LEASE (LOGD_DHCP4, "%s '%s'", + nm_dhcp_option_request_string (_nm_dhcp_option_dhcp4_options, i), + option_string); + if (options) { + nm_dhcp_option_take_option (options, + _nm_dhcp_option_dhcp4_options, + i, + g_steal_pointer (&option_string)); + } + + } +} + static NMIP4Config * lease_to_ip4_config (NMDedupMultiIndex *multi_idx, const char *iface, @@ -901,6 +938,7 @@ lease_to_ip4_config (NMDedupMultiIndex *multi_idx, lease_parse_ntps (lease, iface, options); lease_parse_root_path (lease, iface, options); lease_parse_wpad (lease, iface, options); + lease_parse_private_options (lease, iface, options); NM_SET_OUT (out_options, g_steal_pointer (&options)); return g_steal_pointer (&ip4_config); |