summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-04-22 10:35:16 +0200
committerThomas Haller <thaller@redhat.com>2020-04-22 10:52:59 +0200
commite8b86f8445cd621c21ccf87833f4c49c74c325d9 (patch)
tree648b11492b42e8b7a9dd9e868e64f1eb6150807f
parentb2a5b179fd131161925a7f2bea1c6b0a973b1a8e (diff)
downloadNetworkManager-e8b86f8445cd621c21ccf87833f4c49c74c325d9.tar.gz
core: add NMIPConfigFlags for NMIPConfig flags
This will be useful to set future options on the NMIPConfig. Yes, the code duplication of NMIP[46]Config is horrible. Needs to be unified in the future.
-rw-r--r--src/nm-ip4-config.c23
-rw-r--r--src/nm-ip4-config.h19
-rw-r--r--src/nm-ip6-config.c23
-rw-r--r--src/nm-ip6-config.h5
4 files changed, 70 insertions, 0 deletions
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
index ae637aeedc..8c16d0bfae 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -303,6 +303,7 @@ typedef struct {
NMIPConfigDedupMultiIdxType idx_ip4_routes_;
NMDedupMultiIdxType idx_ip4_routes;
};
+ NMIPConfigFlags config_flags;
} NMIP4ConfigPrivate;
struct _NMIP4Config {
@@ -2659,6 +2660,28 @@ nm_ip4_config_llmnr_set (NMIP4Config *self,
/*****************************************************************************/
+NMIPConfigFlags
+nm_ip4_config_get_config_flags (const NMIP4Config *self)
+{
+ return NM_IP4_CONFIG_GET_PRIVATE (self)->config_flags;
+}
+
+void
+nm_ip4_config_set_config_flags (NMIP4Config *self, NMIPConfigFlags flags, NMIPConfigFlags mask)
+{
+ NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (self);
+
+ if (mask == 0) {
+ /* for convenience, accept 0 mask to set any flags. */
+ mask = flags;
+ }
+
+ nm_assert (!NM_FLAGS_ANY (flags, ~mask));
+ priv->config_flags = (flags & mask) | (priv->config_flags & ~mask);
+}
+
+/*****************************************************************************/
+
void
nm_ip4_config_set_dns_priority (NMIP4Config *self, int priority)
{
diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h
index 01a42e5464..b2845da3bb 100644
--- a/src/nm-ip4-config.h
+++ b/src/nm-ip4-config.h
@@ -15,6 +15,10 @@
/*****************************************************************************/
+typedef enum _NMIPConfigFlags {
+ NM_IP_CONFIG_FLAG_NONE = 0,
+} NMIPConfigFlags;
+
typedef struct {
NMDedupMultiIdxType parent;
NMPObjectType obj_type;
@@ -196,6 +200,9 @@ NMSettingConnectionLlmnr nm_ip4_config_llmnr_get (const NMIP4Config *self);
void nm_ip4_config_llmnr_set (NMIP4Config *self,
NMSettingConnectionLlmnr llmnr);
+void nm_ip4_config_set_config_flags (NMIP4Config *self, NMIPConfigFlags flags, NMIPConfigFlags mask);
+NMIPConfigFlags nm_ip4_config_get_config_flags (const NMIP4Config *self);
+
const NMDedupMultiHeadEntry *nm_ip4_config_lookup_addresses (const NMIP4Config *self);
void nm_ip4_config_reset_addresses (NMIP4Config *self);
void nm_ip4_config_add_address (NMIP4Config *self, const NMPlatformIP4Address *address);
@@ -513,6 +520,18 @@ nm_ip_config_best_default_route_get (const NMIPConfig *self)
_NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_best_default_route_get, nm_ip6_config_best_default_route_get);
}
+static inline NMIPConfigFlags
+nm_ip_config_get_config_flags (const NMIPConfig *self)
+{
+ _NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_config_flags, nm_ip6_config_get_config_flags);
+}
+
+static inline void
+nm_ip_config_set_config_flags (NMIPConfig *self, NMIPConfigFlags flags, NMIPConfigFlags mask)
+{
+ _NM_IP_CONFIG_DISPATCH_VOID (self, nm_ip4_config_set_config_flags, nm_ip6_config_set_config_flags, flags, mask);
+}
+
#define _NM_IP_CONFIG_DISPATCH_SET_OP(_return, dst, src, v4_func, v6_func, ...) \
G_STMT_START { \
gpointer _dst = (dst); \
diff --git a/src/nm-ip6-config.c b/src/nm-ip6-config.c
index 5acb3932d0..3f2c465bda 100644
--- a/src/nm-ip6-config.c
+++ b/src/nm-ip6-config.c
@@ -63,6 +63,7 @@ typedef struct {
NMIPConfigDedupMultiIdxType idx_ip6_routes_;
NMDedupMultiIdxType idx_ip6_routes;
};
+ NMIPConfigFlags config_flags;
bool ipv6_disabled;
} NMIP6ConfigPrivate;
@@ -2296,6 +2297,28 @@ nm_ip6_config_get_dns_option (const NMIP6Config *self, guint i)
/*****************************************************************************/
+NMIPConfigFlags
+nm_ip6_config_get_config_flags (const NMIP6Config *self)
+{
+ return NM_IP6_CONFIG_GET_PRIVATE (self)->config_flags;
+}
+
+void
+nm_ip6_config_set_config_flags (NMIP6Config *self, NMIPConfigFlags flags, NMIPConfigFlags mask)
+{
+ NMIP6ConfigPrivate *priv = NM_IP6_CONFIG_GET_PRIVATE (self);
+
+ if (mask == 0) {
+ /* for convenience, accept 0 mask to set any flags. */
+ mask = flags;
+ }
+
+ nm_assert (!NM_FLAGS_ANY (flags, ~mask));
+ priv->config_flags = (flags & mask) | (priv->config_flags & ~mask);
+}
+
+/*****************************************************************************/
+
void
nm_ip6_config_set_dns_priority (NMIP6Config *self, int priority)
{
diff --git a/src/nm-ip6-config.h b/src/nm-ip6-config.h
index a9fa8f14a0..36e8518a86 100644
--- a/src/nm-ip6-config.h
+++ b/src/nm-ip6-config.h
@@ -128,6 +128,11 @@ gboolean nm_ip6_config_replace (NMIP6Config *dst, const NMIP6Config *src, gboole
const NMPObject *nm_ip6_config_best_default_route_get (const NMIP6Config *self);
const NMPObject *_nm_ip6_config_best_default_route_find (const NMIP6Config *self);
+enum _NMIPConfigFlags;
+
+void nm_ip6_config_set_config_flags (NMIP6Config *self, enum _NMIPConfigFlags flags, enum _NMIPConfigFlags mask);
+enum _NMIPConfigFlags nm_ip6_config_get_config_flags (const NMIP6Config *self);
+
const NMDedupMultiHeadEntry *nm_ip6_config_lookup_addresses (const NMIP6Config *self);
void nm_ip6_config_reset_addresses (NMIP6Config *self);
void nm_ip6_config_add_address (NMIP6Config *self, const NMPlatformIP6Address *address);