summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Giudici <fgiudici@redhat.com>2019-07-25 11:03:40 +0200
committerFrancesco Giudici <fgiudici@redhat.com>2019-09-06 12:30:38 +0200
commitf22a4bf24bfed7f146883ffd1b7fbb7465ef2d9f (patch)
tree10881e983bb55a772f748a32ca9ce4f82c2518b3
parentefe878a3f72faa798874715e881e9155bd7a2dde (diff)
downloadNetworkManager-f22a4bf24bfed7f146883ffd1b7fbb7465ef2d9f.tar.gz
dhcp: nettools: retrieve and expose the private dhcp options
-rw-r--r--src/dhcp/nm-dhcp-nettools.c38
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);