summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-11-08 18:12:36 +0100
committerThomas Haller <thaller@redhat.com>2017-11-09 09:28:49 +0100
commit9e25538ff57fa6aa46f542ace387d67eb3ca00a9 (patch)
treeb1f94e11fb14186a701ccf29545e5e7457a7099e
parentffcab3f653fc89d609693577166d2511e39df434 (diff)
downloadNetworkManager-9e25538ff57fa6aa46f542ace387d67eb3ca00a9.tar.gz
core: add NMIPConfig helpers
For now, hack some generic accessors to the NMIP4Config/NMIP6Config type. Eventually, NMIP4Config and NMIP6Config should get merged in one class.
-rw-r--r--src/nm-ip4-config.c8
-rw-r--r--src/nm-ip4-config.h84
2 files changed, 86 insertions, 6 deletions
diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
index e2f99e24d0..06137764f5 100644
--- a/src/nm-ip4-config.c
+++ b/src/nm-ip4-config.c
@@ -2216,6 +2216,14 @@ nm_ip4_config_get_nameserver (const NMIP4Config *self, guint i)
return g_array_index (priv->nameservers, guint32, i);
}
+const in_addr_t *
+_nm_ip4_config_get_nameserver (const NMIP4Config *self, guint i)
+{
+ const NMIP4ConfigPrivate *priv = NM_IP4_CONFIG_GET_PRIVATE (self);
+
+ return &g_array_index (priv->nameservers, guint32, i);
+}
+
/*****************************************************************************/
void
diff --git a/src/nm-ip4-config.h b/src/nm-ip4-config.h
index b559352dc4..e7fb2703eb 100644
--- a/src/nm-ip4-config.h
+++ b/src/nm-ip4-config.h
@@ -216,6 +216,7 @@ void nm_ip4_config_add_nameserver (NMIP4Config *self, guint32 nameserver);
void nm_ip4_config_del_nameserver (NMIP4Config *self, guint i);
guint nm_ip4_config_get_num_nameservers (const NMIP4Config *self);
guint32 nm_ip4_config_get_nameserver (const NMIP4Config *self, guint i);
+const in_addr_t *_nm_ip4_config_get_nameserver (const NMIP4Config *self, guint i);
void nm_ip4_config_reset_domains (NMIP4Config *self);
void nm_ip4_config_add_domain (NMIP4Config *self, const char *domain);
@@ -300,15 +301,86 @@ gboolean nm_ip4_config_equal (const NMIP4Config *a, const NMIP4Config *b);
#define NM_IP_CONFIG_CAST(config) ((NMIPConfig *) (config))
#endif
+static inline gboolean
+NM_IS_IP_CONFIG (gconstpointer config)
+{
+ return NM_IS_IP4_CONFIG (config) || NM_IS_IP6_CONFIG (config);
+}
+
static inline int
-nm_ip_config_get_dns_priority (const NMIPConfig *config)
+nm_ip_config_get_addr_family (const NMIPConfig *config)
{
if (NM_IS_IP4_CONFIG (config))
- return nm_ip4_config_get_dns_priority ((const NMIP4Config *) config);
- else if (NM_IS_IP6_CONFIG (config))
- return nm_ip6_config_get_dns_priority ((const NMIP6Config *) config);
- else
- g_return_val_if_reached (0);
+ return AF_INET;
+ if (NM_IS_IP6_CONFIG (config))
+ return AF_INET6;
+ g_return_val_if_reached (AF_UNSPEC);
+}
+
+#define _NM_IP_CONFIG_DISPATCH(config, v4_func, v6_func, dflt, ...) \
+ G_STMT_START { \
+ gconstpointer _config = (config); \
+ \
+ if (NM_IS_IP4_CONFIG (_config)) { \
+ return v4_func ((NMIP4Config *) _config, ##__VA_ARGS__); \
+ } else { \
+ nm_assert (NM_IS_IP6_CONFIG (_config)); \
+ return v6_func ((NMIP6Config *) _config, ##__VA_ARGS__); \
+ } \
+ } G_STMT_END
+
+static inline int
+nm_ip_config_get_dns_priority (const NMIPConfig *self)
+{
+ _NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_dns_priority, nm_ip6_config_get_dns_priority, 0);
+}
+
+static inline guint
+nm_ip_config_get_num_nameservers (const NMIPConfig *self)
+{
+ _NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_num_nameservers, nm_ip6_config_get_num_nameservers, 0);
+}
+
+static inline gconstpointer
+nm_ip_config_get_nameserver (const NMIPConfig *self, guint i)
+{
+ _NM_IP_CONFIG_DISPATCH (self, _nm_ip4_config_get_nameserver, nm_ip6_config_get_nameserver, 0, i);
+}
+
+static inline guint
+nm_ip_config_get_num_domains (const NMIPConfig *self)
+{
+ _NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_num_domains, nm_ip6_config_get_num_domains, 0);
+}
+
+static inline const char *
+nm_ip_config_get_domain (const NMIPConfig *self, guint i)
+{
+ _NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_domain, nm_ip6_config_get_domain, NULL, i);
+}
+
+static inline guint
+nm_ip_config_get_num_searches (const NMIPConfig *self)
+{
+ _NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_num_searches, nm_ip6_config_get_num_searches, 0);
+}
+
+static inline const char *
+nm_ip_config_get_search (const NMIPConfig *self, guint i)
+{
+ _NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_search, nm_ip6_config_get_search, NULL, i);
+}
+
+static inline guint
+nm_ip_config_get_num_dns_options (const NMIPConfig *self)
+{
+ _NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_num_dns_options, nm_ip6_config_get_num_dns_options, 0);
+}
+
+static inline const char *
+nm_ip_config_get_dns_option (const NMIPConfig *self, guint i)
+{
+ _NM_IP_CONFIG_DISPATCH (self, nm_ip4_config_get_dns_option, nm_ip6_config_get_dns_option, NULL, i);
}
#endif /* __NETWORKMANAGER_IP4_CONFIG_H__ */