diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index d069eca75..5a6a61b64 100644 --- a/src/NetworkManagerUtils.c +++ b/src/NetworkManagerUtils.c @@ -390,6 +390,38 @@ dump_object_to_props (GObject *object, GHashTable *hash) g_free (pspecs); } +static void +dump_dhcp4_to_props (NMDHCP4Config *config, GHashTable *hash) +{ + GSList *options, *iter; + + options = nm_dhcp4_config_list_options (config); + for (iter = options; iter; iter = g_slist_next (iter)) { + const char *option = (const char *) iter->data; + const char *val; + + val = nm_dhcp4_config_get_option (config, option); + value_hash_add_str (hash, option, val); + } + g_slist_free (options); +} + +static void +dump_dhcp6_to_props (NMDHCP6Config *config, GHashTable *hash) +{ + GSList *options, *iter; + + options = nm_dhcp6_config_list_options (config); + for (iter = options; iter; iter = g_slist_next (iter)) { + const char *option = (const char *) iter->data; + const char *val; + + val = nm_dhcp6_config_get_option (config, option); + value_hash_add_str (hash, option, val); + } + g_slist_free (options); +} + static void fill_device_props (NMDevice *device, GHashTable *dev_hash, @@ -420,11 +452,11 @@ fill_device_props (NMDevice *device, dhcp4_config = nm_device_get_dhcp4_config (device); if (dhcp4_config) - dump_object_to_props (G_OBJECT (dhcp4_config), dhcp4_hash); + dump_dhcp4_to_props (dhcp4_config, dhcp4_hash); dhcp6_config = nm_device_get_dhcp6_config (device); if (dhcp6_config) - dump_object_to_props (G_OBJECT (dhcp6_config), dhcp6_hash); + dump_dhcp6_to_props (dhcp6_config, dhcp6_hash); } static void diff --git a/src/nm-dhcp4-config.c b/src/nm-dhcp4-config.c index 5acf053f6..567ba6875 100644 --- a/src/nm-dhcp4-config.c +++ b/src/nm-dhcp4-config.c @@ -101,6 +101,23 @@ nm_dhcp4_config_get_option (NMDHCP4Config *self, const char *key) return value ? g_value_get_string (value) : NULL; } +/* Caller owns the list, but not the values in the list */ +GSList * +nm_dhcp4_config_list_options (NMDHCP4Config *self) +{ + GHashTableIter iter; + const char *option = NULL; + GSList *list = NULL; + + g_return_val_if_fail (NM_IS_DHCP4_CONFIG (self), NULL); + + g_hash_table_iter_init (&iter, NM_DHCP4_CONFIG_GET_PRIVATE (self)->options); + while (g_hash_table_iter_next (&iter, (gpointer) &option, NULL)) + list = g_slist_prepend (list, (gpointer) option); + + return list; +} + const char * nm_dhcp4_config_get_dbus_path (NMDHCP4Config *self) { diff --git a/src/nm-dhcp4-config.h b/src/nm-dhcp4-config.h index ffaa84304..4729da4c1 100644 --- a/src/nm-dhcp4-config.h +++ b/src/nm-dhcp4-config.h @@ -58,4 +58,6 @@ void nm_dhcp4_config_reset (NMDHCP4Config *config); const char *nm_dhcp4_config_get_option (NMDHCP4Config *config, const char *option); +GSList *nm_dhcp4_config_list_options (NMDHCP4Config *config); + #endif /* NM_DHCP4_CONFIG_H */ diff --git a/src/nm-dhcp6-config.c b/src/nm-dhcp6-config.c index fb6ccce50..885e5f840 100644 --- a/src/nm-dhcp6-config.c +++ b/src/nm-dhcp6-config.c @@ -101,6 +101,23 @@ nm_dhcp6_config_get_option (NMDHCP6Config *self, const char *key) return value ? g_value_get_string (value) : NULL; } +/* Caller owns the list, but not the values in the list */ +GSList * +nm_dhcp6_config_list_options (NMDHCP6Config *self) +{ + GHashTableIter iter; + const char *option = NULL; + GSList *list = NULL; + + g_return_val_if_fail (NM_IS_DHCP6_CONFIG (self), NULL); + + g_hash_table_iter_init (&iter, NM_DHCP6_CONFIG_GET_PRIVATE (self)->options); + while (g_hash_table_iter_next (&iter, (gpointer) &option, NULL)) + list = g_slist_prepend (list, (gpointer) option); + + return list; +} + const char * nm_dhcp6_config_get_dbus_path (NMDHCP6Config *self) { diff --git a/src/nm-dhcp6-config.h b/src/nm-dhcp6-config.h index 90eb10ffb..5e83b904f 100644 --- a/src/nm-dhcp6-config.h +++ b/src/nm-dhcp6-config.h @@ -58,4 +58,6 @@ void nm_dhcp6_config_reset (NMDHCP6Config *config); const char *nm_dhcp6_config_get_option (NMDHCP6Config *config, const char *option); +GSList *nm_dhcp6_config_list_options (NMDHCP6Config *self); + #endif /* NM_DHCP6_CONFIG_H */