mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-28 05:10:32 +01:00
dhcp: merge nm_dhcp_client_start_ip4() and nm_dhcp_client_start_ip6() implementations
As almost always, there is a point in keeping IPv4 and IPv6 implementations
similar. Behave different where there is an actual difference, at the bottom
of the stack.
(cherry picked from commit 7f943f5fa6)
This commit is contained in:
parent
17425aa0dd
commit
0edfa4456a
3 changed files with 26 additions and 43 deletions
|
|
@ -676,54 +676,45 @@ l3_cfg_notify_cb(NML3Cfg *l3cfg, const NML3ConfigNotifyData *notify_data, NMDhcp
|
|||
}
|
||||
|
||||
gboolean
|
||||
nm_dhcp_client_start_ip4(NMDhcpClient *self, GError **error)
|
||||
{
|
||||
NMDhcpClientPrivate *priv;
|
||||
|
||||
g_return_val_if_fail(NM_IS_DHCP_CLIENT(self), FALSE);
|
||||
|
||||
priv = NM_DHCP_CLIENT_GET_PRIVATE(self);
|
||||
g_return_val_if_fail(priv->pid == -1, FALSE);
|
||||
g_return_val_if_fail(priv->config.addr_family == AF_INET, FALSE);
|
||||
g_return_val_if_fail(priv->config.uuid, FALSE);
|
||||
|
||||
_no_lease_timeout_schedule(self);
|
||||
|
||||
return NM_DHCP_CLIENT_GET_CLASS(self)->ip4_start(self, error);
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_dhcp_client_start_ip6(NMDhcpClient *self, GError **error)
|
||||
nm_dhcp_client_start(NMDhcpClient *self, GError **error)
|
||||
{
|
||||
NMDhcpClientPrivate *priv;
|
||||
gs_unref_bytes GBytes *own_client_id = NULL;
|
||||
const NMPlatformIP6Address *addr;
|
||||
const NMPlatformIP6Address *addr = NULL;
|
||||
int IS_IPv4;
|
||||
|
||||
g_return_val_if_fail(NM_IS_DHCP_CLIENT(self), FALSE);
|
||||
|
||||
priv = NM_DHCP_CLIENT_GET_PRIVATE(self);
|
||||
|
||||
g_return_val_if_fail(priv->pid == -1, FALSE);
|
||||
g_return_val_if_fail(priv->config.addr_family == AF_INET6, FALSE);
|
||||
g_return_val_if_fail(priv->config.uuid, FALSE);
|
||||
g_return_val_if_fail(!priv->effective_client_id, FALSE);
|
||||
nm_assert(!priv->effective_client_id);
|
||||
|
||||
if (!priv->config.v6.enforce_duid)
|
||||
own_client_id = NM_DHCP_CLIENT_GET_CLASS(self)->get_duid(self);
|
||||
IS_IPv4 = NM_IS_IPv4(priv->config.addr_family);
|
||||
|
||||
nm_dhcp_client_set_effective_client_id(self, own_client_id ?: priv->config.client_id);
|
||||
if (!IS_IPv4) {
|
||||
if (!priv->config.v6.enforce_duid)
|
||||
own_client_id = NM_DHCP_CLIENT_GET_CLASS(self)->get_duid(self);
|
||||
|
||||
addr = ipv6_lladdr_find(self);
|
||||
if (!addr) {
|
||||
_LOGD("waiting for IPv6LL address");
|
||||
priv->l3cfg_notify.wait_ll_address = TRUE;
|
||||
connect_l3cfg_notify(self);
|
||||
priv->ipv6_lladdr_timeout_source =
|
||||
nm_g_timeout_add_seconds_source(10, ipv6_lladdr_timeout, self);
|
||||
return TRUE;
|
||||
nm_dhcp_client_set_effective_client_id(self, own_client_id ?: priv->config.client_id);
|
||||
|
||||
addr = ipv6_lladdr_find(self);
|
||||
if (!addr) {
|
||||
_LOGD("waiting for IPv6LL address");
|
||||
priv->l3cfg_notify.wait_ll_address = TRUE;
|
||||
connect_l3cfg_notify(self);
|
||||
priv->ipv6_lladdr_timeout_source =
|
||||
nm_g_timeout_add_seconds_source(10, ipv6_lladdr_timeout, self);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
_no_lease_timeout_schedule(self);
|
||||
|
||||
if (IS_IPv4)
|
||||
return NM_DHCP_CLIENT_GET_CLASS(self)->ip4_start(self, error);
|
||||
|
||||
return NM_DHCP_CLIENT_GET_CLASS(self)->ip6_start(self, &addr->address, error);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -230,8 +230,7 @@ typedef struct {
|
|||
|
||||
GType nm_dhcp_client_get_type(void);
|
||||
|
||||
gboolean nm_dhcp_client_start_ip4(NMDhcpClient *self, GError **error);
|
||||
gboolean nm_dhcp_client_start_ip6(NMDhcpClient *self, GError **error);
|
||||
gboolean nm_dhcp_client_start(NMDhcpClient *self, GError **error);
|
||||
|
||||
const NMDhcpClientConfig *nm_dhcp_client_get_config(NMDhcpClient *self);
|
||||
|
||||
|
|
|
|||
|
|
@ -131,8 +131,7 @@ NMDhcpClient *
|
|||
nm_dhcp_manager_start_client(NMDhcpManager *self, NMDhcpClientConfig *config, GError **error)
|
||||
{
|
||||
NMDhcpManagerPrivate *priv;
|
||||
gs_unref_object NMDhcpClient *client = NULL;
|
||||
gboolean success = FALSE;
|
||||
gs_unref_object NMDhcpClient *client = NULL;
|
||||
gsize hwaddr_len;
|
||||
GType gtype;
|
||||
|
||||
|
|
@ -202,13 +201,7 @@ nm_dhcp_manager_start_client(NMDhcpManager *self, NMDhcpClientConfig *config, GE
|
|||
* default outside of NetworkManager API.
|
||||
*/
|
||||
|
||||
if (config->addr_family == AF_INET) {
|
||||
success = nm_dhcp_client_start_ip4(client, error);
|
||||
} else {
|
||||
success = nm_dhcp_client_start_ip6(client, error);
|
||||
}
|
||||
|
||||
if (!success)
|
||||
if (!nm_dhcp_client_start(client, error))
|
||||
return NULL;
|
||||
|
||||
return g_steal_pointer(&client);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue