dhcp: refactor DHCP anycast_address to be property of NMDhcpClient
Instead of passing the setting on during ip4_start()/ip6_start(), make it a property of NMDhcpClient. This property is currently only set by OLPC devices, and is only implemented by NMDhcpDhclient. As such, it also does not need to change or get reset. Hence, and immutable, construct-only property is clearer, because we don't have to pass parameters to ip[46]_start(). Arguably, the parameter is still there, but being immutable and always set, make it easier to reason about it.
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <linux/if_ether.h>
|
||||
|
||||
#include "libnm-glib-aux/nm-dedup-multi.h"
|
||||
#include "libnm-glib-aux/nm-random-utils.h"
|
||||
@@ -33,6 +34,7 @@ static guint signals[LAST_SIGNAL] = {0};
|
||||
|
||||
NM_GOBJECT_PROPERTIES_DEFINE(NMDhcpClient,
|
||||
PROP_ADDR_FAMILY,
|
||||
PROP_ANYCAST_ADDRESS,
|
||||
PROP_FLAGS,
|
||||
PROP_HWADDR,
|
||||
PROP_BROADCAST_HWADDR,
|
||||
@@ -61,6 +63,7 @@ typedef struct _NMDhcpClientPrivate {
|
||||
char * hostname;
|
||||
const char ** reject_servers;
|
||||
char * mud_url;
|
||||
char * anycast_address;
|
||||
GBytes * vendor_class_identifier;
|
||||
pid_t pid;
|
||||
guint timeout_id;
|
||||
@@ -280,6 +283,14 @@ nm_dhcp_client_set_client_id_bin(NMDhcpClient *self,
|
||||
_set_client_id(self, b, TRUE);
|
||||
}
|
||||
|
||||
const char *
|
||||
nm_dhcp_client_get_anycast_address(NMDhcpClient *self)
|
||||
{
|
||||
g_return_val_if_fail(NM_IS_DHCP_CLIENT(self), NULL);
|
||||
|
||||
return NM_DHCP_CLIENT_GET_PRIVATE(self)->anycast_address;
|
||||
}
|
||||
|
||||
const char *
|
||||
nm_dhcp_client_get_hostname(NMDhcpClient *self)
|
||||
{
|
||||
@@ -574,7 +585,6 @@ nm_dhcp_client_stop_watch_child(NMDhcpClient *self, pid_t pid)
|
||||
gboolean
|
||||
nm_dhcp_client_start_ip4(NMDhcpClient *self,
|
||||
GBytes * client_id,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * last_ip4_address,
|
||||
GError ** error)
|
||||
{
|
||||
@@ -594,10 +604,7 @@ nm_dhcp_client_start_ip4(NMDhcpClient *self,
|
||||
|
||||
nm_dhcp_client_set_client_id(self, client_id);
|
||||
|
||||
return NM_DHCP_CLIENT_GET_CLASS(self)->ip4_start(self,
|
||||
dhcp_anycast_addr,
|
||||
last_ip4_address,
|
||||
error);
|
||||
return NM_DHCP_CLIENT_GET_CLASS(self)->ip4_start(self, last_ip4_address, error);
|
||||
}
|
||||
|
||||
gboolean
|
||||
@@ -634,7 +641,6 @@ gboolean
|
||||
nm_dhcp_client_start_ip6(NMDhcpClient * self,
|
||||
GBytes * client_id,
|
||||
gboolean enforce_duid,
|
||||
const char * dhcp_anycast_addr,
|
||||
const struct in6_addr * ll_addr,
|
||||
NMSettingIP6ConfigPrivacy privacy,
|
||||
guint needed_prefixes,
|
||||
@@ -663,8 +669,11 @@ nm_dhcp_client_start_ip6(NMDhcpClient * self,
|
||||
else
|
||||
_LOGI("activation: beginning transaction (timeout in %u seconds)", (guint) priv->timeout);
|
||||
|
||||
return NM_DHCP_CLIENT_GET_CLASS(self)
|
||||
->ip6_start(self, dhcp_anycast_addr, ll_addr, privacy, needed_prefixes, error);
|
||||
return NM_DHCP_CLIENT_GET_CLASS(self)->ip6_start(self,
|
||||
ll_addr,
|
||||
privacy,
|
||||
needed_prefixes,
|
||||
error);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1073,6 +1082,10 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps
|
||||
/* construct-only */
|
||||
priv->hwaddr = g_value_dup_boxed(value);
|
||||
break;
|
||||
case PROP_ANYCAST_ADDRESS:
|
||||
/* construct-only */
|
||||
priv->anycast_address = g_value_dup_string(value);
|
||||
break;
|
||||
case PROP_BROADCAST_HWADDR:
|
||||
/* construct-only */
|
||||
priv->bcast_hwaddr = g_value_dup_boxed(value);
|
||||
@@ -1162,6 +1175,8 @@ constructed(GObject *object)
|
||||
nm_assert(!NM_FLAGS_ANY(priv->client_flags, NM_DHCP_CLIENT_FLAGS_REQUEST_BROADCAST));
|
||||
}
|
||||
|
||||
nm_assert(!priv->anycast_address || nm_utils_hwaddr_valid(priv->anycast_address, ETH_ALEN));
|
||||
|
||||
G_OBJECT_CLASS(nm_dhcp_client_parent_class)->constructed(object);
|
||||
}
|
||||
#endif
|
||||
@@ -1185,6 +1200,7 @@ dispose(GObject *object)
|
||||
nm_clear_g_free(&priv->iface);
|
||||
nm_clear_g_free(&priv->hostname);
|
||||
nm_clear_g_free(&priv->uuid);
|
||||
nm_clear_g_free(&priv->anycast_address);
|
||||
nm_clear_g_free(&priv->mud_url);
|
||||
nm_clear_g_free(&priv->reject_servers);
|
||||
nm_clear_pointer(&priv->client_id, g_bytes_unref);
|
||||
@@ -1259,6 +1275,13 @@ nm_dhcp_client_class_init(NMDhcpClientClass *client_class)
|
||||
AF_UNSPEC,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
obj_properties[PROP_ANYCAST_ADDRESS] =
|
||||
g_param_spec_string(NM_DHCP_CLIENT_ANYCAST_ADDRESS,
|
||||
"",
|
||||
"",
|
||||
NULL,
|
||||
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
|
||||
|
||||
obj_properties[PROP_UUID] =
|
||||
g_param_spec_string(NM_DHCP_CLIENT_UUID,
|
||||
"",
|
||||
|
@@ -25,6 +25,7 @@
|
||||
(G_TYPE_INSTANCE_GET_CLASS((obj), NM_TYPE_DHCP_CLIENT, NMDhcpClientClass))
|
||||
|
||||
#define NM_DHCP_CLIENT_ADDR_FAMILY "addr-family"
|
||||
#define NM_DHCP_CLIENT_ANYCAST_ADDRESS "anycast-address"
|
||||
#define NM_DHCP_CLIENT_FLAGS "flags"
|
||||
#define NM_DHCP_CLIENT_HWADDR "hwaddr"
|
||||
#define NM_DHCP_CLIENT_BROADCAST_HWADDR "broadcast-hwaddr"
|
||||
@@ -82,17 +83,13 @@ typedef enum _nm_packed {
|
||||
typedef struct {
|
||||
GObjectClass parent;
|
||||
|
||||
gboolean (*ip4_start)(NMDhcpClient *self,
|
||||
const char * anycast_addr,
|
||||
const char * last_ip4_address,
|
||||
GError ** error);
|
||||
gboolean (*ip4_start)(NMDhcpClient *self, const char *last_ip4_address, GError **error);
|
||||
|
||||
gboolean (*accept)(NMDhcpClient *self, GError **error);
|
||||
|
||||
gboolean (*decline)(NMDhcpClient *self, const char *error_message, GError **error);
|
||||
|
||||
gboolean (*ip6_start)(NMDhcpClient * self,
|
||||
const char * anycast_addr,
|
||||
const struct in6_addr * ll_addr,
|
||||
NMSettingIP6ConfigPrivacy privacy,
|
||||
guint needed_prefixes,
|
||||
@@ -132,6 +129,8 @@ GBytes *nm_dhcp_client_get_hw_addr(NMDhcpClient *self);
|
||||
|
||||
GBytes *nm_dhcp_client_get_broadcast_hw_addr(NMDhcpClient *self);
|
||||
|
||||
const char *nm_dhcp_client_get_anycast_address(NMDhcpClient *self);
|
||||
|
||||
guint32 nm_dhcp_client_get_route_table(NMDhcpClient *self);
|
||||
|
||||
void nm_dhcp_client_set_route_table(NMDhcpClient *self, guint32 route_table);
|
||||
@@ -160,14 +159,12 @@ GBytes *nm_dhcp_client_get_vendor_class_identifier(NMDhcpClient *self);
|
||||
|
||||
gboolean nm_dhcp_client_start_ip4(NMDhcpClient *self,
|
||||
GBytes * client_id,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * last_ip4_address,
|
||||
GError ** error);
|
||||
|
||||
gboolean nm_dhcp_client_start_ip6(NMDhcpClient * self,
|
||||
GBytes * client_id,
|
||||
gboolean enforce_duid,
|
||||
const char * dhcp_anycast_addr,
|
||||
const struct in6_addr * ll_addr,
|
||||
NMSettingIP6ConfigPrivacy privacy,
|
||||
guint needed_prefixes,
|
||||
|
@@ -291,7 +291,7 @@ char *
|
||||
nm_dhcp_dhclient_create_config(const char * interface,
|
||||
int addr_family,
|
||||
GBytes * client_id,
|
||||
const char * anycast_addr,
|
||||
const char * anycast_address,
|
||||
const char * hostname,
|
||||
guint32 timeout,
|
||||
gboolean use_fqdn,
|
||||
@@ -308,7 +308,8 @@ nm_dhcp_dhclient_create_config(const char * interface,
|
||||
gboolean reset_reqlist = FALSE;
|
||||
int i;
|
||||
|
||||
g_return_val_if_fail(!anycast_addr || nm_utils_hwaddr_valid(anycast_addr, ETH_ALEN), NULL);
|
||||
g_return_val_if_fail(!anycast_address || nm_utils_hwaddr_valid(anycast_address, ETH_ALEN),
|
||||
NULL);
|
||||
g_return_val_if_fail(NM_IN_SET(addr_family, AF_INET, AF_INET6), NULL);
|
||||
g_return_val_if_fail(!reject_servers || addr_family == AF_INET, NULL);
|
||||
nm_assert(!out_new_client_id || !*out_new_client_id);
|
||||
@@ -508,14 +509,14 @@ nm_dhcp_dhclient_create_config(const char * interface,
|
||||
|
||||
g_string_append_c(new_contents, '\n');
|
||||
|
||||
if (anycast_addr) {
|
||||
if (anycast_address) {
|
||||
g_string_append_printf(new_contents,
|
||||
"interface \"%s\" {\n"
|
||||
" initial-interval 1; \n"
|
||||
" anycast-mac ethernet %s;\n"
|
||||
"}\n",
|
||||
interface,
|
||||
anycast_addr);
|
||||
anycast_address);
|
||||
}
|
||||
|
||||
return g_string_free(g_steal_pointer(&new_contents), FALSE);
|
||||
|
@@ -151,7 +151,7 @@ merge_dhclient_config(NMDhcpDhclient * self,
|
||||
const char * iface,
|
||||
const char * conf_file,
|
||||
GBytes * client_id,
|
||||
const char * anycast_addr,
|
||||
const char * anycast_address,
|
||||
const char * hostname,
|
||||
guint32 timeout,
|
||||
gboolean use_fqdn,
|
||||
@@ -180,7 +180,7 @@ merge_dhclient_config(NMDhcpDhclient * self,
|
||||
new = nm_dhcp_dhclient_create_config(iface,
|
||||
addr_family,
|
||||
client_id,
|
||||
anycast_addr,
|
||||
anycast_address,
|
||||
hostname,
|
||||
timeout,
|
||||
use_fqdn,
|
||||
@@ -280,7 +280,7 @@ create_dhclient_config(NMDhcpDhclient * self,
|
||||
const char * iface,
|
||||
const char * uuid,
|
||||
GBytes * client_id,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * anycast_address,
|
||||
const char * hostname,
|
||||
guint32 timeout,
|
||||
gboolean use_fqdn,
|
||||
@@ -312,7 +312,7 @@ create_dhclient_config(NMDhcpDhclient * self,
|
||||
iface,
|
||||
new,
|
||||
client_id,
|
||||
dhcp_anycast_addr,
|
||||
anycast_address,
|
||||
hostname,
|
||||
timeout,
|
||||
use_fqdn,
|
||||
@@ -514,10 +514,7 @@ dhclient_start(NMDhcpClient *client,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ip4_start(NMDhcpClient *client,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * last_ip4_address,
|
||||
GError ** error)
|
||||
ip4_start(NMDhcpClient *client, const char *last_ip4_address, GError **error)
|
||||
{
|
||||
NMDhcpDhclient * self = NM_DHCP_DHCLIENT(client);
|
||||
NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE(self);
|
||||
@@ -532,7 +529,7 @@ ip4_start(NMDhcpClient *client,
|
||||
nm_dhcp_client_get_iface(client),
|
||||
nm_dhcp_client_get_uuid(client),
|
||||
client_id,
|
||||
dhcp_anycast_addr,
|
||||
nm_dhcp_client_get_anycast_address(client),
|
||||
nm_dhcp_client_get_hostname(client),
|
||||
nm_dhcp_client_get_timeout(client),
|
||||
NM_FLAGS_HAS(nm_dhcp_client_get_client_flags(client), NM_DHCP_CLIENT_FLAGS_USE_FQDN),
|
||||
@@ -556,7 +553,6 @@ ip4_start(NMDhcpClient *client,
|
||||
|
||||
static gboolean
|
||||
ip6_start(NMDhcpClient * client,
|
||||
const char * dhcp_anycast_addr,
|
||||
const struct in6_addr * ll_addr,
|
||||
NMSettingIP6ConfigPrivacy privacy,
|
||||
guint needed_prefixes,
|
||||
@@ -573,7 +569,7 @@ ip6_start(NMDhcpClient * client,
|
||||
nm_dhcp_client_get_iface(client),
|
||||
nm_dhcp_client_get_uuid(client),
|
||||
NULL,
|
||||
dhcp_anycast_addr,
|
||||
nm_dhcp_client_get_anycast_address(client),
|
||||
nm_dhcp_client_get_hostname(client),
|
||||
nm_dhcp_client_get_timeout(client),
|
||||
TRUE,
|
||||
|
@@ -161,10 +161,7 @@ dhcpcanon_start(NMDhcpClient *client,
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ip4_start(NMDhcpClient *client,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * last_ip4_address,
|
||||
GError ** error)
|
||||
ip4_start(NMDhcpClient *client, const char *last_ip4_address, GError **error)
|
||||
{
|
||||
return dhcpcanon_start(client, NULL, NULL, FALSE, NULL, 0, error);
|
||||
}
|
||||
|
@@ -65,10 +65,7 @@ nm_dhcp_dhcpcd_get_path(void)
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ip4_start(NMDhcpClient *client,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * last_ip4_address,
|
||||
GError ** error)
|
||||
ip4_start(NMDhcpClient *client, const char *last_ip4_address, GError **error)
|
||||
{
|
||||
NMDhcpDhcpcd * self = NM_DHCP_DHCPCD(client);
|
||||
gs_unref_ptrarray GPtrArray *argv = NULL;
|
||||
|
@@ -214,7 +214,7 @@ client_start(NMDhcpManager * self,
|
||||
gboolean iaid_explicit,
|
||||
guint32 timeout,
|
||||
NMDhcpClientFlags client_flags,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * anycast_address,
|
||||
const char * hostname,
|
||||
NMDhcpHostnameFlags hostname_flags,
|
||||
const char * mud_url,
|
||||
@@ -337,6 +337,8 @@ client_start(NMDhcpManager * self,
|
||||
reject_servers,
|
||||
NM_DHCP_CLIENT_FLAGS,
|
||||
(guint) client_flags,
|
||||
NM_DHCP_CLIENT_ANYCAST_ADDRESS,
|
||||
anycast_address,
|
||||
NULL);
|
||||
nm_assert(client && c_list_is_empty(&client->dhcp_client_lst));
|
||||
c_list_link_tail(&priv->dhcp_client_lst_head, &client->dhcp_client_lst);
|
||||
@@ -372,16 +374,11 @@ client_start(NMDhcpManager * self,
|
||||
*/
|
||||
|
||||
if (addr_family == AF_INET) {
|
||||
success = nm_dhcp_client_start_ip4(client,
|
||||
dhcp_client_id,
|
||||
dhcp_anycast_addr,
|
||||
last_ip4_address,
|
||||
error);
|
||||
success = nm_dhcp_client_start_ip4(client, dhcp_client_id, last_ip4_address, error);
|
||||
} else {
|
||||
success = nm_dhcp_client_start_ip6(client,
|
||||
dhcp_client_id,
|
||||
enforce_duid,
|
||||
dhcp_anycast_addr,
|
||||
ipv6_ll_addr,
|
||||
privacy,
|
||||
needed_prefixes,
|
||||
@@ -415,7 +412,7 @@ nm_dhcp_manager_start_ip4(NMDhcpManager * self,
|
||||
const char * mud_url,
|
||||
GBytes * dhcp_client_id,
|
||||
guint32 timeout,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * anycast_address,
|
||||
const char * last_ip_address,
|
||||
GBytes * vendor_class_identifier,
|
||||
const char *const * reject_servers,
|
||||
@@ -475,7 +472,7 @@ nm_dhcp_manager_start_ip4(NMDhcpManager * self,
|
||||
FALSE,
|
||||
timeout,
|
||||
client_flags | (use_fqdn ? NM_DHCP_CLIENT_FLAGS_USE_FQDN : NM_DHCP_CLIENT_FLAGS_NONE),
|
||||
dhcp_anycast_addr,
|
||||
anycast_address,
|
||||
hostname,
|
||||
hostname_flags,
|
||||
mud_url,
|
||||
@@ -507,7 +504,7 @@ nm_dhcp_manager_start_ip6(NMDhcpManager * self,
|
||||
guint32 iaid,
|
||||
gboolean iaid_explicit,
|
||||
guint32 timeout,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * anycast_address,
|
||||
NMSettingIP6ConfigPrivacy privacy,
|
||||
guint needed_prefixes,
|
||||
GError ** error)
|
||||
@@ -542,7 +539,7 @@ nm_dhcp_manager_start_ip6(NMDhcpManager * self,
|
||||
iaid_explicit,
|
||||
timeout,
|
||||
client_flags | NM_DHCP_CLIENT_FLAGS_USE_FQDN,
|
||||
dhcp_anycast_addr,
|
||||
anycast_address,
|
||||
hostname,
|
||||
hostname_flags,
|
||||
mud_url,
|
||||
|
@@ -49,7 +49,7 @@ NMDhcpClient *nm_dhcp_manager_start_ip4(NMDhcpManager * manager,
|
||||
const char * mud_url,
|
||||
GBytes * dhcp_client_id,
|
||||
guint32 timeout,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * anycast_address,
|
||||
const char * last_ip_address,
|
||||
GBytes * vendor_class_identifier,
|
||||
const char *const * reject_servers,
|
||||
@@ -73,7 +73,7 @@ NMDhcpClient *nm_dhcp_manager_start_ip6(NMDhcpManager * manager,
|
||||
guint32 iaid,
|
||||
gboolean iaid_explicit,
|
||||
guint32 timeout,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * anycast_address,
|
||||
NMSettingIP6ConfigPrivacy privacy,
|
||||
guint needed_prefixes,
|
||||
GError ** error);
|
||||
|
@@ -874,7 +874,7 @@ dhcp4_event_cb(int fd, GIOCondition condition, gpointer user_data)
|
||||
}
|
||||
|
||||
static gboolean
|
||||
nettools_create(NMDhcpNettools *self, const char *dhcp_anycast_addr, GError **error)
|
||||
nettools_create(NMDhcpNettools *self, GError **error)
|
||||
{
|
||||
NMDhcpNettoolsPrivate *priv = NM_DHCP_NETTOOLS_GET_PRIVATE(self);
|
||||
nm_auto(n_dhcp4_client_config_freep) NDhcp4ClientConfig *config = NULL;
|
||||
@@ -893,6 +893,8 @@ nettools_create(NMDhcpNettools *self, const char *dhcp_anycast_addr, GError **er
|
||||
|
||||
g_return_val_if_fail(!priv->client, FALSE);
|
||||
|
||||
/* TODO: honor nm_dhcp_client_get_anycast_address() */
|
||||
|
||||
hwaddr = nm_dhcp_client_get_hw_addr(NM_DHCP_CLIENT(self));
|
||||
if (!hwaddr || !(hwaddr_arr = g_bytes_get_data(hwaddr, &hwaddr_len))
|
||||
|| (arp_type = nm_utils_arp_type_detect_from_hwaddrlen(hwaddr_len)) < 0) {
|
||||
@@ -1035,10 +1037,7 @@ fqdn_flags_to_wire(NMDhcpHostnameFlags flags)
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ip4_start(NMDhcpClient *client,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * last_ip4_address,
|
||||
GError ** error)
|
||||
ip4_start(NMDhcpClient *client, const char *last_ip4_address, GError **error)
|
||||
{
|
||||
nm_auto(n_dhcp4_client_probe_config_freep) NDhcp4ClientProbeConfig *config = NULL;
|
||||
NMDhcpNettools * self = NM_DHCP_NETTOOLS(client);
|
||||
@@ -1052,7 +1051,7 @@ ip4_start(NMDhcpClient *client,
|
||||
|
||||
g_return_val_if_fail(!priv->probe, FALSE);
|
||||
|
||||
if (!nettools_create(self, dhcp_anycast_addr, error))
|
||||
if (!nettools_create(self, error))
|
||||
return FALSE;
|
||||
|
||||
r = n_dhcp4_client_probe_config_new(&config);
|
||||
|
@@ -543,10 +543,7 @@ dhcp_event_cb(sd_dhcp_client *client, int event, gpointer user_data)
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ip4_start(NMDhcpClient *client,
|
||||
const char * dhcp_anycast_addr,
|
||||
const char * last_ip4_address,
|
||||
GError ** error)
|
||||
ip4_start(NMDhcpClient *client, const char *last_ip4_address, GError **error)
|
||||
{
|
||||
nm_auto(sd_dhcp_client_unrefp) sd_dhcp_client *sd_client = NULL;
|
||||
NMDhcpSystemd * self = NM_DHCP_SYSTEMD(client);
|
||||
@@ -572,6 +569,8 @@ ip4_start(NMDhcpClient *client,
|
||||
g_return_val_if_fail(!priv->client4, FALSE);
|
||||
g_return_val_if_fail(!priv->client6, FALSE);
|
||||
|
||||
/* TODO: honor nm_dhcp_client_get_anycast_address() */
|
||||
|
||||
r = sd_dhcp_client_new(&sd_client, FALSE);
|
||||
if (r < 0) {
|
||||
nm_utils_error_set_errno(error, r, "failed to create dhcp-client: %s");
|
||||
@@ -912,7 +911,6 @@ dhcp6_event_cb(sd_dhcp6_client *client, int event, gpointer user_data)
|
||||
|
||||
static gboolean
|
||||
ip6_start(NMDhcpClient * client,
|
||||
const char * dhcp_anycast_addr,
|
||||
const struct in6_addr * ll_addr,
|
||||
NMSettingIP6ConfigPrivacy privacy,
|
||||
guint needed_prefixes,
|
||||
@@ -931,6 +929,8 @@ ip6_start(NMDhcpClient * client,
|
||||
g_return_val_if_fail(!priv->client4, FALSE);
|
||||
g_return_val_if_fail(!priv->client6, FALSE);
|
||||
|
||||
/* TODO: honor nm_dhcp_client_get_anycast_address() */
|
||||
|
||||
if (!(duid = nm_dhcp_client_get_client_id(client))
|
||||
|| !(duid_arr = g_bytes_get_data(duid, &duid_len)) || duid_len < 2) {
|
||||
nm_utils_error_set_literal(error, NM_UTILS_ERROR_UNKNOWN, "missing DUID");
|
||||
|
Reference in New Issue
Block a user