core: add never-default field to NMIP{4,6}Config

This commit is contained in:
Beniamino Galvani 2020-09-29 12:06:11 +02:00
parent e05550c34c
commit 9eba457426
4 changed files with 74 additions and 0 deletions

View file

@ -283,6 +283,7 @@ NM_GOBJECT_PROPERTIES_DEFINE(NMIP4Config,
typedef struct {
bool metered : 1;
bool never_default : 1;
guint32 mtu;
int ifindex;
NMIPConfigSource mtu_source;
@ -895,6 +896,8 @@ nm_ip4_config_merge_setting(NMIP4Config * self,
nm_ip4_config_mdns_set(self, mdns);
nm_ip4_config_llmnr_set(self, llmnr);
nm_ip4_config_set_never_default(self, nm_setting_ip_config_get_never_default(setting));
g_object_thaw_notify(G_OBJECT(self));
}
@ -1122,6 +1125,11 @@ nm_ip4_config_merge(NMIP4Config * dst,
nm_ip4_config_set_metered(dst,
nm_ip4_config_get_metered(dst) || nm_ip4_config_get_metered(src));
/* never default */
nm_ip4_config_set_never_default(dst,
nm_ip4_config_get_never_default(dst)
|| nm_ip4_config_get_never_default(src));
/* DNS priority */
if (nm_ip4_config_get_dns_priority(src))
nm_ip4_config_set_dns_priority(dst, nm_ip4_config_get_dns_priority(src));
@ -1856,6 +1864,12 @@ nm_ip4_config_replace(NMIP4Config *dst, const NMIP4Config *src, gboolean *releva
has_minor_changes = TRUE;
}
/* never default */
if (src_priv->never_default != dst_priv->never_default) {
dst_priv->never_default = src_priv->never_default;
has_minor_changes = TRUE;
}
#if NM_MORE_ASSERTS
/* config_equal does not compare *all* the fields, therefore, we might have has_minor_changes
* regardless of config_equal. But config_equal must correspond to has_relevant_changes. */
@ -2729,6 +2743,24 @@ nm_ip4_config_get_metered(const NMIP4Config *self)
/*****************************************************************************/
void
nm_ip4_config_set_never_default(NMIP4Config *self, gboolean never_default)
{
NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE(self);
priv->never_default = never_default;
}
gboolean
nm_ip4_config_get_never_default(const NMIP4Config *self)
{
const NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE(self);
return priv->never_default;
}
/*****************************************************************************/
const NMPObject *
nm_ip4_config_nmpobj_lookup(const NMIP4Config *self, const NMPObject *needle)
{

View file

@ -244,6 +244,9 @@ NMIPConfigSource nm_ip4_config_get_mtu_source(const NMIP4Config *self);
void nm_ip4_config_set_metered(NMIP4Config *self, gboolean metered);
gboolean nm_ip4_config_get_metered(const NMIP4Config *self);
void nm_ip4_config_set_never_default(NMIP4Config *self, gboolean never_default);
gboolean nm_ip4_config_get_never_default(const NMIP4Config *self);
const NMPObject *nm_ip4_config_nmpobj_lookup(const NMIP4Config *self, const NMPObject *needle);
gboolean nm_ip4_config_nmpobj_remove(NMIP4Config *self, const NMPObject *needle);
@ -519,6 +522,21 @@ nm_ip_config_set_config_flags(NMIPConfig *self, NMIPConfigFlags flags, NMIPConfi
mask);
}
static inline gboolean
nm_ip_config_get_never_default(const NMIPConfig *self)
{
_NM_IP_CONFIG_DISPATCH(self, nm_ip4_config_get_never_default, nm_ip6_config_get_never_default);
}
static inline void
nm_ip_config_set_never_default(NMIPConfig *self, gboolean never_default)
{
_NM_IP_CONFIG_DISPATCH_VOID(self,
nm_ip4_config_set_never_default,
nm_ip6_config_set_never_default,
never_default);
}
#define _NM_IP_CONFIG_DISPATCH_SET_OP(_return, dst, src, v4_func, v6_func, ...) \
G_STMT_START \
{ \

View file

@ -64,6 +64,7 @@ typedef struct {
NMDedupMultiIdxType idx_ip6_routes;
};
NMIPConfigFlags config_flags;
bool never_default : 1;
} NMIP6ConfigPrivate;
struct _NMIP6Config {
@ -128,6 +129,24 @@ nm_ip6_config_set_privacy(NMIP6Config *self, NMSettingIP6ConfigPrivacy privacy)
/*****************************************************************************/
void
nm_ip6_config_set_never_default(NMIP6Config *self, gboolean never_default)
{
NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE(self);
priv->never_default = never_default;
}
gboolean
nm_ip6_config_get_never_default(const NMIP6Config *self)
{
const NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE(self);
return priv->never_default;
}
/*****************************************************************************/
const NMDedupMultiHeadEntry *
nm_ip6_config_lookup_addresses(const NMIP6Config *self)
{
@ -635,6 +654,8 @@ nm_ip6_config_merge_setting(NMIP6Config * self,
if (priority)
nm_ip6_config_set_dns_priority(self, priority);
nm_ip6_config_set_never_default(self, nm_setting_ip_config_get_never_default(setting));
g_object_thaw_notify(G_OBJECT(self));
}

View file

@ -175,6 +175,9 @@ const char *nm_ip6_config_get_dns_option(const NMIP6Config *self, guint i);
void nm_ip6_config_set_dns_priority(NMIP6Config *self, int priority);
int nm_ip6_config_get_dns_priority(const NMIP6Config *self);
void nm_ip6_config_set_never_default(NMIP6Config *self, gboolean never_default);
gboolean nm_ip6_config_get_never_default(const NMIP6Config *self);
const NMPObject *nm_ip6_config_nmpobj_lookup(const NMIP6Config *self, const NMPObject *needle);
gboolean nm_ip6_config_nmpobj_remove(NMIP6Config *self, const NMPObject *needle);