summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/dhcp/nm-dhcp-systemd.c69
-rw-r--r--src/core/dhcp/nm-dhcp-utils.c12
2 files changed, 45 insertions, 36 deletions
diff --git a/src/core/dhcp/nm-dhcp-systemd.c b/src/core/dhcp/nm-dhcp-systemd.c
index 2c72353109..045d528791 100644
--- a/src/core/dhcp/nm-dhcp-systemd.c
+++ b/src/core/dhcp/nm-dhcp-systemd.c
@@ -80,14 +80,12 @@ lease_to_ip6_config(NMDedupMultiIndex *multi_idx,
gs_unref_hashtable GHashTable *options = NULL;
struct in6_addr tmp_addr;
const struct in6_addr *dns;
- uint32_t lft_pref, lft_valid;
char addr_str[NM_UTILS_INET_ADDRSTRLEN];
char **domains;
char **ntp_fqdns;
const struct in6_addr *ntp_addrs;
const char *s;
- nm_auto_free_gstring GString *str = NULL;
- gboolean has_any_addresses = FALSE;
+ nm_auto_free_gstring GString *str = NULL;
int num, i;
nm_assert(lease);
@@ -96,36 +94,45 @@ lease_to_ip6_config(NMDedupMultiIndex *multi_idx,
options = nm_dhcp_option_create_options_dict();
- sd_dhcp6_lease_reset_address_iter(lease);
- nm_gstring_prepare(&str);
- while (sd_dhcp6_lease_get_address(lease, &tmp_addr, &lft_pref, &lft_valid) >= 0) {
- const NMPlatformIP6Address address = {
- .plen = 128,
- .address = tmp_addr,
- .timestamp = ts,
- .lifetime = lft_valid,
- .preferred = lft_pref,
- .addr_source = NM_IP_CONFIG_SOURCE_DHCP,
- };
-
- nm_l3_config_data_add_address_6(l3cd, &address);
-
- _nm_utils_inet6_ntop(&tmp_addr, addr_str);
- g_string_append(nm_gstring_add_space_delimiter(str), addr_str);
-
- has_any_addresses = TRUE;
- }
+ if (!info_only) {
+ gboolean has_any_addresses = FALSE;
+ uint32_t lft_pref;
+ uint32_t lft_valid;
- if (str->len) {
- nm_dhcp_option_add_option(options, AF_INET6, NM_DHCP_OPTION_DHCP6_NM_IP_ADDRESS, str->str);
- }
+ sd_dhcp6_lease_reset_address_iter(lease);
+ nm_gstring_prepare(&str);
+ while (sd_dhcp6_lease_get_address(lease, &tmp_addr, &lft_pref, &lft_valid) >= 0) {
+ const NMPlatformIP6Address address = {
+ .plen = 128,
+ .address = tmp_addr,
+ .timestamp = ts,
+ .lifetime = lft_valid,
+ .preferred = lft_pref,
+ .addr_source = NM_IP_CONFIG_SOURCE_DHCP,
+ };
+
+ nm_l3_config_data_add_address_6(l3cd, &address);
+
+ _nm_utils_inet6_ntop(&tmp_addr, addr_str);
+ g_string_append(nm_gstring_add_space_delimiter(str), addr_str);
- if (!info_only && !has_any_addresses) {
- g_set_error_literal(error,
- NM_MANAGER_ERROR,
- NM_MANAGER_ERROR_FAILED,
- "no address received in managed mode");
- return NULL;
+ has_any_addresses = TRUE;
+ }
+
+ if (str->len) {
+ nm_dhcp_option_add_option(options,
+ AF_INET6,
+ NM_DHCP_OPTION_DHCP6_NM_IP_ADDRESS,
+ str->str);
+ }
+
+ if (!has_any_addresses) {
+ g_set_error_literal(error,
+ NM_MANAGER_ERROR,
+ NM_MANAGER_ERROR_FAILED,
+ "no address received in managed mode");
+ return NULL;
+ }
}
num = sd_dhcp6_lease_get_dns(lease, &dns);
diff --git a/src/core/dhcp/nm-dhcp-utils.c b/src/core/dhcp/nm-dhcp-utils.c
index ecb6eea67a..3ae7e6b71c 100644
--- a/src/core/dhcp/nm-dhcp-utils.c
+++ b/src/core/dhcp/nm-dhcp-utils.c
@@ -670,8 +670,13 @@ nm_dhcp_utils_ip6_config_from_options(NMDedupMultiIndex *multi_idx,
_LOG2I(LOGD_DHCP6, iface, " preferred_lft %u", address.preferred);
}
- str = g_hash_table_lookup(options, "ip6_address");
- if (str) {
+ if (!info_only) {
+ str = g_hash_table_lookup(options, "ip6_address");
+ if (!str) {
+ /* No address in Managed mode is a hard error */
+ return NULL;
+ }
+
if (!inet_pton(AF_INET6, str, &tmp_addr)) {
_LOG2W(LOGD_DHCP6, iface, "(%s): DHCP returned invalid address '%s'", iface, str);
return NULL;
@@ -681,9 +686,6 @@ nm_dhcp_utils_ip6_config_from_options(NMDedupMultiIndex *multi_idx,
address.addr_source = NM_IP_CONFIG_SOURCE_DHCP;
nm_l3_config_data_add_address_6(l3cd, &address);
_LOG2I(LOGD_DHCP6, iface, " address %s", str);
- } else if (info_only == FALSE) {
- /* No address in Managed mode is a hard error */
- return NULL;
}
str = g_hash_table_lookup(options, "host_name");