summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dhcp/nm-dhcp-client.c21
-rw-r--r--src/dhcp/nm-dhcp-client.h4
-rw-r--r--src/dhcp/nm-dhcp-dhclient.c4
3 files changed, 13 insertions, 16 deletions
diff --git a/src/dhcp/nm-dhcp-client.c b/src/dhcp/nm-dhcp-client.c
index be2b538db6..390b7054ec 100644
--- a/src/dhcp/nm-dhcp-client.c
+++ b/src/dhcp/nm-dhcp-client.c
@@ -513,7 +513,7 @@ nm_dhcp_client_start_ip4 (NMDhcpClient *self,
}
static GBytes *
-get_duid (NMDhcpClient *self)
+get_duid (NMDhcpClient *self, gboolean global)
{
return NULL;
}
@@ -541,19 +541,14 @@ nm_dhcp_client_start_ip6 (NMDhcpClient *self,
nm_assert (!priv->duid);
nm_assert (client_id);
- switch (enforce_duid) {
- case NM_DHCP_DUID_ENFORCE_NEVER:
- case NM_DHCP_DUID_ENFORCE_LEASE_FALLBACK:
- priv->duid = NM_DHCP_CLIENT_GET_CLASS (self)->get_duid (self);
- if (priv->duid)
- break;
- /* fall through */
- case NM_DHCP_DUID_ENFORCE_ALWAYS:
+ if (enforce_duid == NM_DHCP_DUID_ENFORCE_NEVER)
+ priv->duid = NM_DHCP_CLIENT_GET_CLASS (self)->get_duid (self, TRUE);
+ else if (enforce_duid == NM_DHCP_DUID_ENFORCE_LEASE_FALLBACK)
+ priv->duid = NM_DHCP_CLIENT_GET_CLASS (self)->get_duid (self, FALSE);
+
+ /* NM_DHCP_DUID_ENFORCE_ALWAYS and fallback */
+ if (!priv->duid)
priv->duid = g_bytes_ref (client_id);
- break;
- default:
- nm_assert_not_reached ();
- }
_LOGD ("DUID is '%s'", (str = nm_dhcp_utils_duid_to_string (priv->duid)));
diff --git a/src/dhcp/nm-dhcp-client.h b/src/dhcp/nm-dhcp-client.h
index fc8c1a5693..98c3ed262e 100644
--- a/src/dhcp/nm-dhcp-client.h
+++ b/src/dhcp/nm-dhcp-client.h
@@ -96,13 +96,15 @@ typedef struct {
/**
* get_duid:
* @self: the #NMDhcpClient
+ * @global: if set to #true, the duid should be searched also in the
+ * DHCP client's system-wide persistent configuration.
*
* Attempts to find an existing DHCPv6 DUID for this client in the DHCP
* client's persistent configuration. Returned DUID should be the binary
* representation of the DUID. If no DUID is found, %NULL should be
* returned.
*/
- GBytes *(*get_duid) (NMDhcpClient *self);
+ GBytes *(*get_duid) (NMDhcpClient *self, gboolean global);
/* Signals */
void (*state_changed) (NMDhcpClient *self,
diff --git a/src/dhcp/nm-dhcp-dhclient.c b/src/dhcp/nm-dhcp-dhclient.c
index 3bd14ebe89..43746dd394 100644
--- a/src/dhcp/nm-dhcp-dhclient.c
+++ b/src/dhcp/nm-dhcp-dhclient.c
@@ -582,7 +582,7 @@ state_changed (NMDhcpClient *client,
}
static GBytes *
-get_duid (NMDhcpClient *client)
+get_duid (NMDhcpClient *client, gboolean global)
{
NMDhcpDhclient *self = NM_DHCP_DHCLIENT (client);
NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (self);
@@ -607,7 +607,7 @@ get_duid (NMDhcpClient *client)
g_free (leasefile);
}
- if (!duid) {
+ if (!duid && global) {
/* Otherwise read the default machine-wide DUID */
_LOGD ("looking for default DUID in '%s'", priv->def_leasefile);
duid = nm_dhcp_dhclient_read_duid (priv->def_leasefile, &error);