mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-29 17:20:11 +01:00
dhcp: refactor NMDhcpClient to use client flags
The DHCP client has potentially a large number of options, including boolean options (flags). It is cumbersome to implement them one by one. Instead, make more prominent use of NMDhcpClientFlags.
This commit is contained in:
parent
48a3cebce5
commit
a5cfa6e4f4
7 changed files with 53 additions and 55 deletions
|
|
@ -16154,7 +16154,8 @@ nm_device_spawn_iface_helper(NMDevice *self)
|
|||
|
||||
hostname = nm_dhcp_client_get_hostname(priv->dhcp_data_4.client);
|
||||
if (hostname) {
|
||||
if (nm_dhcp_client_get_use_fqdn(priv->dhcp_data_4.client))
|
||||
if (NM_FLAGS_HAS(nm_dhcp_client_get_client_flags(priv->dhcp_data_4.client),
|
||||
NM_DHCP_CLIENT_FLAGS_USE_FQDN))
|
||||
g_ptr_array_add(argv, g_strdup("--dhcp4-fqdn"));
|
||||
else
|
||||
g_ptr_array_add(argv, g_strdup("--dhcp4-hostname"));
|
||||
|
|
|
|||
|
|
@ -73,8 +73,7 @@ typedef struct _NMDhcpClientPrivate {
|
|||
guint32 iaid;
|
||||
NMDhcpState state;
|
||||
NMDhcpHostnameFlags hostname_flags;
|
||||
bool info_only : 1;
|
||||
bool use_fqdn : 1;
|
||||
NMDhcpClientFlags client_flags;
|
||||
bool iaid_explicit : 1;
|
||||
} NMDhcpClientPrivate;
|
||||
|
||||
|
|
@ -292,20 +291,12 @@ nm_dhcp_client_get_hostname_flags(NMDhcpClient *self)
|
|||
return NM_DHCP_CLIENT_GET_PRIVATE(self)->hostname_flags;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_dhcp_client_get_info_only(NMDhcpClient *self)
|
||||
NMDhcpClientFlags
|
||||
nm_dhcp_client_get_client_flags(NMDhcpClient *self)
|
||||
{
|
||||
g_return_val_if_fail(NM_IS_DHCP_CLIENT(self), FALSE);
|
||||
g_return_val_if_fail(NM_IS_DHCP_CLIENT(self), NM_DHCP_CLIENT_FLAGS_NONE);
|
||||
|
||||
return NM_DHCP_CLIENT_GET_PRIVATE(self)->info_only;
|
||||
}
|
||||
|
||||
gboolean
|
||||
nm_dhcp_client_get_use_fqdn(NMDhcpClient *self)
|
||||
{
|
||||
g_return_val_if_fail(NM_IS_DHCP_CLIENT(self), FALSE);
|
||||
|
||||
return NM_DHCP_CLIENT_GET_PRIVATE(self)->use_fqdn;
|
||||
return NM_DHCP_CLIENT_GET_PRIVATE(self)->client_flags;
|
||||
}
|
||||
|
||||
const char *
|
||||
|
|
@ -930,12 +921,12 @@ nm_dhcp_client_handle_event(gpointer unused,
|
|||
priv->route_metric));
|
||||
} else {
|
||||
prefix = nm_dhcp_utils_ip6_prefix_from_options(str_options);
|
||||
ip_config = NM_IP_CONFIG_CAST(
|
||||
nm_dhcp_utils_ip6_config_from_options(nm_dhcp_client_get_multi_idx(self),
|
||||
priv->ifindex,
|
||||
priv->iface,
|
||||
str_options,
|
||||
priv->info_only));
|
||||
ip_config = NM_IP_CONFIG_CAST(nm_dhcp_utils_ip6_config_from_options(
|
||||
nm_dhcp_client_get_multi_idx(self),
|
||||
priv->ifindex,
|
||||
priv->iface,
|
||||
str_options,
|
||||
NM_FLAGS_HAS(priv->client_flags, NM_DHCP_CLIENT_FLAGS_INFO_ONLY)));
|
||||
}
|
||||
} else
|
||||
g_warn_if_reached();
|
||||
|
|
@ -1052,11 +1043,8 @@ set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *ps
|
|||
case PROP_FLAGS:
|
||||
/* construct-only */
|
||||
flags = g_value_get_uint(value);
|
||||
nm_assert(
|
||||
(flags & ~((guint)(NM_DHCP_CLIENT_FLAGS_INFO_ONLY | NM_DHCP_CLIENT_FLAGS_USE_FQDN)))
|
||||
== 0);
|
||||
priv->info_only = NM_FLAGS_HAS(flags, NM_DHCP_CLIENT_FLAGS_INFO_ONLY);
|
||||
priv->use_fqdn = NM_FLAGS_HAS(flags, NM_DHCP_CLIENT_FLAGS_USE_FQDN);
|
||||
nm_assert(!NM_FLAGS_ANY(flags, ~((guint) NM_DHCP_CLIENT_FLAGS_ALL)));
|
||||
priv->client_flags = flags;
|
||||
break;
|
||||
case PROP_MULTI_IDX:
|
||||
/* construct-only */
|
||||
|
|
|
|||
|
|
@ -68,9 +68,14 @@ typedef struct {
|
|||
CList dhcp_client_lst;
|
||||
} NMDhcpClient;
|
||||
|
||||
typedef enum {
|
||||
typedef enum _nm_packed {
|
||||
NM_DHCP_CLIENT_FLAGS_NONE = 0,
|
||||
|
||||
NM_DHCP_CLIENT_FLAGS_INFO_ONLY = (1LL << 0),
|
||||
NM_DHCP_CLIENT_FLAGS_USE_FQDN = (1LL << 1),
|
||||
|
||||
_NM_DHCP_CLIENT_FLAGS_LAST,
|
||||
NM_DHCP_CLIENT_FLAGS_ALL = ((_NM_DHCP_CLIENT_FLAGS_LAST - 1) << 1) - 1,
|
||||
} NMDhcpClientFlags;
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -148,9 +153,7 @@ const char *const *nm_dhcp_client_get_reject_servers(NMDhcpClient *self);
|
|||
|
||||
NMDhcpHostnameFlags nm_dhcp_client_get_hostname_flags(NMDhcpClient *self);
|
||||
|
||||
gboolean nm_dhcp_client_get_info_only(NMDhcpClient *self);
|
||||
|
||||
gboolean nm_dhcp_client_get_use_fqdn(NMDhcpClient *self);
|
||||
NMDhcpClientFlags nm_dhcp_client_get_client_flags(NMDhcpClient *self);
|
||||
|
||||
GBytes *nm_dhcp_client_get_vendor_class_identifier(NMDhcpClient *self);
|
||||
|
||||
|
|
|
|||
|
|
@ -520,19 +520,20 @@ ip4_start(NMDhcpClient *client,
|
|||
|
||||
client_id = nm_dhcp_client_get_client_id(client);
|
||||
|
||||
priv->conf_file = create_dhclient_config(self,
|
||||
AF_INET,
|
||||
nm_dhcp_client_get_iface(client),
|
||||
nm_dhcp_client_get_uuid(client),
|
||||
client_id,
|
||||
dhcp_anycast_addr,
|
||||
nm_dhcp_client_get_hostname(client),
|
||||
nm_dhcp_client_get_timeout(client),
|
||||
nm_dhcp_client_get_use_fqdn(client),
|
||||
nm_dhcp_client_get_hostname_flags(client),
|
||||
nm_dhcp_client_get_mud_url(client),
|
||||
nm_dhcp_client_get_reject_servers(client),
|
||||
&new_client_id);
|
||||
priv->conf_file = create_dhclient_config(
|
||||
self,
|
||||
AF_INET,
|
||||
nm_dhcp_client_get_iface(client),
|
||||
nm_dhcp_client_get_uuid(client),
|
||||
client_id,
|
||||
dhcp_anycast_addr,
|
||||
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),
|
||||
nm_dhcp_client_get_hostname_flags(client),
|
||||
nm_dhcp_client_get_mud_url(client),
|
||||
nm_dhcp_client_get_reject_servers(client),
|
||||
&new_client_id);
|
||||
if (!priv->conf_file) {
|
||||
nm_utils_error_set_literal(error,
|
||||
NM_UTILS_ERROR_UNKNOWN,
|
||||
|
|
@ -582,7 +583,10 @@ ip6_start(NMDhcpClient * client,
|
|||
}
|
||||
|
||||
return dhclient_start(client,
|
||||
nm_dhcp_client_get_info_only(NM_DHCP_CLIENT(self)) ? "-S" : "-N",
|
||||
NM_FLAGS_HAS(nm_dhcp_client_get_client_flags(NM_DHCP_CLIENT(self)),
|
||||
NM_DHCP_CLIENT_FLAGS_INFO_ONLY)
|
||||
? "-S"
|
||||
: "-N",
|
||||
FALSE,
|
||||
NULL,
|
||||
needed_prefixes,
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ ip4_start(NMDhcpClient *client,
|
|||
hostname = nm_dhcp_client_get_hostname(client);
|
||||
|
||||
if (hostname) {
|
||||
if (nm_dhcp_client_get_use_fqdn(client)) {
|
||||
if (NM_FLAGS_HAS(nm_dhcp_client_get_client_flags(client), NM_DHCP_CLIENT_FLAGS_USE_FQDN)) {
|
||||
g_ptr_array_add(argv, (gpointer) "-h");
|
||||
g_ptr_array_add(argv, (gpointer) hostname);
|
||||
g_ptr_array_add(argv, (gpointer) "-F");
|
||||
|
|
|
|||
|
|
@ -1110,7 +1110,7 @@ ip4_start(NMDhcpClient *client,
|
|||
}
|
||||
hostname = nm_dhcp_client_get_hostname(client);
|
||||
if (hostname) {
|
||||
if (nm_dhcp_client_get_use_fqdn(client)) {
|
||||
if (NM_FLAGS_HAS(nm_dhcp_client_get_client_flags(client), NM_DHCP_CLIENT_FLAGS_USE_FQDN)) {
|
||||
uint8_t buffer[255];
|
||||
NMDhcpHostnameFlags flags;
|
||||
size_t fqdn_len;
|
||||
|
|
|
|||
|
|
@ -844,14 +844,16 @@ bound6_handle(NMDhcpSystemd *self)
|
|||
|
||||
_LOGD("lease available");
|
||||
|
||||
ip6_config = lease_to_ip6_config(nm_dhcp_client_get_multi_idx(NM_DHCP_CLIENT(self)),
|
||||
iface,
|
||||
nm_dhcp_client_get_ifindex(NM_DHCP_CLIENT(self)),
|
||||
lease,
|
||||
nm_dhcp_client_get_info_only(NM_DHCP_CLIENT(self)),
|
||||
&options,
|
||||
ts,
|
||||
&error);
|
||||
ip6_config =
|
||||
lease_to_ip6_config(nm_dhcp_client_get_multi_idx(NM_DHCP_CLIENT(self)),
|
||||
iface,
|
||||
nm_dhcp_client_get_ifindex(NM_DHCP_CLIENT(self)),
|
||||
lease,
|
||||
NM_FLAGS_HAS(nm_dhcp_client_get_client_flags(NM_DHCP_CLIENT(self)),
|
||||
NM_DHCP_CLIENT_FLAGS_INFO_ONLY),
|
||||
&options,
|
||||
ts,
|
||||
&error);
|
||||
|
||||
if (!ip6_config) {
|
||||
_LOGW("%s", error->message);
|
||||
|
|
@ -938,7 +940,7 @@ ip6_start(NMDhcpClient * client,
|
|||
|
||||
_LOGT("dhcp-client6: set %p", sd_client);
|
||||
|
||||
if (nm_dhcp_client_get_info_only(client)) {
|
||||
if (NM_FLAGS_HAS(nm_dhcp_client_get_client_flags(client), NM_DHCP_CLIENT_FLAGS_INFO_ONLY)) {
|
||||
sd_dhcp6_client_set_address_request(sd_client, 0);
|
||||
if (needed_prefixes == 0)
|
||||
sd_dhcp6_client_set_information_request(sd_client, 1);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue