core: merge branch 'th/dns-ip-config-unify'
This commit is contained in:
@@ -429,6 +429,8 @@ NMSettingBluetooth *_nm_connection_get_setting_bluetooth_for_nap (NMConnection *
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
const char *nm_utils_inet_ntop (int addr_family, gconstpointer addr, char *dst);
|
||||||
|
|
||||||
gboolean _nm_utils_inet6_is_token (const struct in6_addr *in6addr);
|
gboolean _nm_utils_inet6_is_token (const struct in6_addr *in6addr);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@@ -3762,6 +3762,22 @@ nm_utils_is_uuid (const char *str)
|
|||||||
|
|
||||||
static char _nm_utils_inet_ntop_buffer[NM_UTILS_INET_ADDRSTRLEN];
|
static char _nm_utils_inet_ntop_buffer[NM_UTILS_INET_ADDRSTRLEN];
|
||||||
|
|
||||||
|
const char *
|
||||||
|
nm_utils_inet_ntop (int addr_family, gconstpointer addr, char *dst)
|
||||||
|
{
|
||||||
|
const char *s;
|
||||||
|
|
||||||
|
nm_assert_addr_family (addr_family);
|
||||||
|
nm_assert (addr);
|
||||||
|
|
||||||
|
s = inet_ntop (addr_family,
|
||||||
|
addr,
|
||||||
|
dst ? dst : _nm_utils_inet_ntop_buffer,
|
||||||
|
addr_family == AF_INET6 ? INET6_ADDRSTRLEN : INET_ADDRSTRLEN);
|
||||||
|
nm_assert (s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nm_utils_inet4_ntop: (skip)
|
* nm_utils_inet4_ntop: (skip)
|
||||||
* @inaddr: the address that should be converted to string.
|
* @inaddr: the address that should be converted to string.
|
||||||
|
@@ -7001,7 +7001,7 @@ nm_device_copy_ip6_dns_config (NMDevice *self, NMDevice *from_device)
|
|||||||
{
|
{
|
||||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||||
NMIP6Config *from_config = NULL;
|
NMIP6Config *from_config = NULL;
|
||||||
int i;
|
guint i, len;
|
||||||
|
|
||||||
if (priv->ac_ip6_config) {
|
if (priv->ac_ip6_config) {
|
||||||
nm_ip6_config_reset_nameservers (priv->ac_ip6_config);
|
nm_ip6_config_reset_nameservers (priv->ac_ip6_config);
|
||||||
@@ -7014,12 +7014,14 @@ nm_device_copy_ip6_dns_config (NMDevice *self, NMDevice *from_device)
|
|||||||
if (!from_config)
|
if (!from_config)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0; i < nm_ip6_config_get_num_nameservers (from_config); i++) {
|
len = nm_ip6_config_get_num_nameservers (from_config);
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
nm_ip6_config_add_nameserver (priv->ac_ip6_config,
|
nm_ip6_config_add_nameserver (priv->ac_ip6_config,
|
||||||
nm_ip6_config_get_nameserver (from_config, i));
|
nm_ip6_config_get_nameserver (from_config, i));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < nm_ip6_config_get_num_searches (from_config); i++) {
|
len = nm_ip6_config_get_num_searches (from_config);
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
nm_ip6_config_add_search (priv->ac_ip6_config,
|
nm_ip6_config_add_search (priv->ac_ip6_config,
|
||||||
nm_ip6_config_get_search (from_config, i));
|
nm_ip6_config_get_search (from_config, i));
|
||||||
}
|
}
|
||||||
|
@@ -275,135 +275,83 @@ add_string_item (GPtrArray *array, const char *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_dns_option_item (GPtrArray *array, const char *str, gboolean ipv6)
|
add_dns_option_item (GPtrArray *array, const char *str)
|
||||||
{
|
{
|
||||||
if (_nm_utils_dns_option_find_idx (array, str) < 0)
|
if (_nm_utils_dns_option_find_idx (array, str) < 0)
|
||||||
g_ptr_array_add (array, g_strdup (str));
|
g_ptr_array_add (array, g_strdup (str));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
|
merge_one_ip_config (NMResolvConfData *rc,
|
||||||
|
const NMIPConfig *config,
|
||||||
|
const char *iface)
|
||||||
{
|
{
|
||||||
guint32 num, num_domains, num_searches, i;
|
int addr_family;
|
||||||
|
guint num, num_domains, num_searches, i;
|
||||||
num = nm_ip4_config_get_num_nameservers (src);
|
|
||||||
for (i = 0; i < num; i++) {
|
|
||||||
add_string_item (rc->nameservers,
|
|
||||||
nm_utils_inet4_ntop (nm_ip4_config_get_nameserver (src, i), NULL));
|
|
||||||
}
|
|
||||||
|
|
||||||
num_domains = nm_ip4_config_get_num_domains (src);
|
|
||||||
num_searches = nm_ip4_config_get_num_searches (src);
|
|
||||||
|
|
||||||
for (i = 0; i < num_searches; i++) {
|
|
||||||
const char *search;
|
|
||||||
|
|
||||||
search = nm_ip4_config_get_search (src, i);
|
|
||||||
if (!domain_is_valid (search, FALSE))
|
|
||||||
continue;
|
|
||||||
add_string_item (rc->searches, search);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (num_domains > 1 || !num_searches) {
|
|
||||||
for (i = 0; i < num_domains; i++) {
|
|
||||||
const char *domain;
|
|
||||||
|
|
||||||
domain = nm_ip4_config_get_domain (src, i);
|
|
||||||
if (!domain_is_valid (domain, FALSE))
|
|
||||||
continue;
|
|
||||||
add_string_item (rc->searches, domain);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
num = nm_ip4_config_get_num_dns_options (src);
|
|
||||||
for (i = 0; i < num; i++) {
|
|
||||||
const char *option;
|
|
||||||
|
|
||||||
option = nm_ip4_config_get_dns_option (src, i);
|
|
||||||
add_dns_option_item (rc->options, option, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* NIS stuff */
|
|
||||||
num = nm_ip4_config_get_num_nis_servers (src);
|
|
||||||
for (i = 0; i < num; i++) {
|
|
||||||
add_string_item (rc->nis_servers,
|
|
||||||
nm_utils_inet4_ntop (nm_ip4_config_get_nis_server (src, i), NULL));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nm_ip4_config_get_nis_domain (src)) {
|
|
||||||
/* FIXME: handle multiple domains */
|
|
||||||
if (!rc->nis_domain)
|
|
||||||
rc->nis_domain = nm_ip4_config_get_nis_domain (src);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
merge_one_ip6_config (NMResolvConfData *rc, NMIP6Config *src, const char *iface)
|
|
||||||
{
|
|
||||||
guint32 num, num_domains, num_searches, i;
|
|
||||||
|
|
||||||
num = nm_ip6_config_get_num_nameservers (src);
|
|
||||||
for (i = 0; i < num; i++) {
|
|
||||||
const struct in6_addr *addr;
|
|
||||||
char buf[NM_UTILS_INET_ADDRSTRLEN + 50];
|
char buf[NM_UTILS_INET_ADDRSTRLEN + 50];
|
||||||
|
const char *str;
|
||||||
|
|
||||||
addr = nm_ip6_config_get_nameserver (src, i);
|
addr_family = nm_ip_config_get_addr_family (config);
|
||||||
|
|
||||||
/* inet_ntop is probably supposed to do this for us, but it doesn't */
|
nm_assert_addr_family (addr_family);
|
||||||
if (IN6_IS_ADDR_V4MAPPED (addr))
|
|
||||||
nm_utils_inet4_ntop (addr->s6_addr32[3], buf);
|
num = nm_ip_config_get_num_nameservers (config);
|
||||||
|
for (i = 0; i < num; i++) {
|
||||||
|
const NMIPAddr *addr;
|
||||||
|
|
||||||
|
addr = nm_ip_config_get_nameserver (config, i);
|
||||||
|
if (addr_family == AF_INET)
|
||||||
|
nm_utils_inet_ntop (addr_family, addr, buf);
|
||||||
|
else if (IN6_IS_ADDR_V4MAPPED (addr))
|
||||||
|
nm_utils_inet4_ntop (addr->addr6.s6_addr32[3], buf);
|
||||||
else {
|
else {
|
||||||
nm_utils_inet6_ntop (addr, buf);
|
nm_utils_inet6_ntop (&addr->addr6, buf);
|
||||||
if (IN6_IS_ADDR_LINKLOCAL (addr)) {
|
if (IN6_IS_ADDR_LINKLOCAL (addr)) {
|
||||||
g_strlcat (buf, "%", sizeof (buf));
|
g_strlcat (buf, "%", sizeof (buf));
|
||||||
g_strlcat (buf, iface, sizeof (buf));
|
g_strlcat (buf, iface, sizeof (buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
add_string_item (rc->nameservers, buf);
|
add_string_item (rc->nameservers, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
num_domains = nm_ip6_config_get_num_domains (src);
|
num_domains = nm_ip_config_get_num_domains (config);
|
||||||
num_searches = nm_ip6_config_get_num_searches (src);
|
num_searches = nm_ip_config_get_num_searches (config);
|
||||||
|
|
||||||
for (i = 0; i < num_searches; i++) {
|
for (i = 0; i < num_searches; i++) {
|
||||||
const char *search;
|
str = nm_ip_config_get_search (config, i);
|
||||||
|
if (domain_is_valid (str, FALSE))
|
||||||
search = nm_ip6_config_get_search (src, i);
|
add_string_item (rc->searches, str);
|
||||||
if (!domain_is_valid (search, FALSE))
|
|
||||||
continue;
|
|
||||||
add_string_item (rc->searches, search);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num_domains > 1 || !num_searches) {
|
if (num_domains > 1 || !num_searches) {
|
||||||
for (i = 0; i < num_domains; i++) {
|
for (i = 0; i < num_domains; i++) {
|
||||||
const char *domain;
|
str = nm_ip_config_get_domain (config, i);
|
||||||
|
if (domain_is_valid (str, FALSE))
|
||||||
domain = nm_ip6_config_get_domain (src, i);
|
add_string_item (rc->searches, str);
|
||||||
if (!domain_is_valid (domain, FALSE))
|
|
||||||
continue;
|
|
||||||
add_string_item (rc->searches, domain);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
num = nm_ip6_config_get_num_dns_options (src);
|
num = nm_ip_config_get_num_dns_options (config);
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
const char *option;
|
add_dns_option_item (rc->options,
|
||||||
|
nm_ip_config_get_dns_option (config, i));
|
||||||
option = nm_ip6_config_get_dns_option (src, i);
|
|
||||||
add_dns_option_item (rc->options, option, TRUE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
if (addr_family == AF_INET) {
|
||||||
merge_one_ip_config_data (NMResolvConfData *rc,
|
const NMIP4Config *config4 = (const NMIP4Config *) config;
|
||||||
NMDnsIPConfigData *data)
|
|
||||||
{
|
/* NIS stuff */
|
||||||
if (NM_IS_IP4_CONFIG (data->config))
|
num = nm_ip4_config_get_num_nis_servers (config4);
|
||||||
merge_one_ip4_config (rc, (NMIP4Config *) data->config);
|
for (i = 0; i < num; i++) {
|
||||||
else if (NM_IS_IP6_CONFIG (data->config))
|
add_string_item (rc->nis_servers,
|
||||||
merge_one_ip6_config (rc, (NMIP6Config *) data->config, data->iface);
|
nm_utils_inet4_ntop (nm_ip4_config_get_nis_server (config4, i), buf));
|
||||||
else
|
}
|
||||||
g_return_if_reached ();
|
|
||||||
|
if (nm_ip4_config_get_nis_domain (config4)) {
|
||||||
|
/* FIXME: handle multiple domains */
|
||||||
|
if (!rc->nis_domain)
|
||||||
|
rc->nis_domain = nm_ip4_config_get_nis_domain (config4);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GPid
|
static GPid
|
||||||
@@ -927,39 +875,27 @@ merge_global_dns_config (NMResolvConfData *rc, NMGlobalDnsConfig *global_conf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
get_nameserver_list (void *config, GString **str)
|
get_nameserver_list (const NMIPConfig *config, GString **str)
|
||||||
{
|
{
|
||||||
NMIP4Config *ip4;
|
|
||||||
NMIP6Config *ip6;
|
|
||||||
guint num, i;
|
guint num, i;
|
||||||
|
char buf[NM_UTILS_INET_ADDRSTRLEN];
|
||||||
nm_assert (str);
|
int addr_family;
|
||||||
|
|
||||||
if (*str)
|
if (*str)
|
||||||
g_string_truncate (*str, 0);
|
g_string_truncate (*str, 0);
|
||||||
else
|
else
|
||||||
*str = g_string_sized_new (64);
|
*str = g_string_sized_new (64);
|
||||||
|
|
||||||
if (NM_IS_IP4_CONFIG (config)) {
|
addr_family = nm_ip_config_get_addr_family (config);
|
||||||
ip4 = (NMIP4Config *) config;
|
num = nm_ip_config_get_num_nameservers (config);
|
||||||
num = nm_ip4_config_get_num_nameservers (ip4);
|
|
||||||
for (i = 0; i < num; i++) {
|
for (i = 0; i < num; i++) {
|
||||||
g_string_append (*str,
|
nm_utils_inet_ntop (addr_family,
|
||||||
nm_utils_inet4_ntop (nm_ip4_config_get_nameserver (ip4, i),
|
nm_ip_config_get_nameserver (config, i),
|
||||||
NULL));
|
buf);
|
||||||
|
if (i > 0)
|
||||||
g_string_append_c (*str, ' ');
|
g_string_append_c (*str, ' ');
|
||||||
|
g_string_append (*str, buf);
|
||||||
}
|
}
|
||||||
} else if (NM_IS_IP6_CONFIG (config)) {
|
|
||||||
ip6 = (NMIP6Config *) config;
|
|
||||||
num = nm_ip6_config_get_num_nameservers (ip6);
|
|
||||||
for (i = 0; i < num; i++) {
|
|
||||||
g_string_append (*str,
|
|
||||||
nm_utils_inet6_ntop (nm_ip6_config_get_nameserver (ip6, i),
|
|
||||||
NULL));
|
|
||||||
g_string_append_c (*str, ' ');
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
g_return_val_if_reached (NULL);
|
|
||||||
|
|
||||||
return (*str)->str;
|
return (*str)->str;
|
||||||
}
|
}
|
||||||
@@ -998,34 +934,31 @@ _collect_resolv_conf_data (NMDnsManager *self, /* only for logging context, no o
|
|||||||
nm_auto_free_gstring GString *tmp_gstring = NULL;
|
nm_auto_free_gstring GString *tmp_gstring = NULL;
|
||||||
int prio, first_prio = 0;
|
int prio, first_prio = 0;
|
||||||
NMDnsIPConfigData *current;
|
NMDnsIPConfigData *current;
|
||||||
gboolean v4;
|
|
||||||
|
|
||||||
for (i = 0, j = 0; i < configs->len; i++) {
|
for (i = 0, j = 0; i < configs->len; i++) {
|
||||||
gboolean skip = FALSE;
|
gboolean skip = FALSE;
|
||||||
|
|
||||||
current = configs->pdata[i];
|
current = configs->pdata[i];
|
||||||
|
|
||||||
prio = nm_ip_config_get_dns_priority (NM_IP_CONFIG_CAST (current->config));
|
prio = nm_ip_config_get_dns_priority (current->config);
|
||||||
|
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
first_prio = prio;
|
first_prio = prio;
|
||||||
else if (first_prio < 0 && first_prio != prio)
|
else if (first_prio < 0 && first_prio != prio)
|
||||||
skip = TRUE;
|
skip = TRUE;
|
||||||
|
|
||||||
v4 = NM_IS_IP4_CONFIG (current->config);
|
if (nm_ip_config_get_num_nameservers (current->config)) {
|
||||||
if ( ( v4 && nm_ip4_config_get_num_nameservers ((NMIP4Config *) current->config))
|
|
||||||
|| (!v4 && nm_ip6_config_get_num_nameservers ((NMIP6Config *) current->config))) {
|
|
||||||
_LOGT ("config: %8d %-7s v%c %-16s %s: %s",
|
_LOGT ("config: %8d %-7s v%c %-16s %s: %s",
|
||||||
prio,
|
prio,
|
||||||
_config_type_to_string (current->type),
|
_config_type_to_string (current->type),
|
||||||
v4 ? '4' : '6',
|
nm_utils_addr_family_to_char (nm_ip_config_get_addr_family (current->config)),
|
||||||
current->iface,
|
current->iface,
|
||||||
skip ? "<SKIP>" : "",
|
skip ? "<SKIP>" : "",
|
||||||
get_nameserver_list (current->config, &tmp_gstring));
|
get_nameserver_list (current->config, &tmp_gstring));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!skip)
|
if (!skip)
|
||||||
merge_one_ip_config_data (&rc, current);
|
merge_one_ip_config (&rc, current->config, current->iface);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1307,7 +1240,7 @@ nm_dns_manager_add_ip_config (NMDnsManager *self,
|
|||||||
g_return_val_if_fail (NM_IS_DNS_MANAGER (self), FALSE);
|
g_return_val_if_fail (NM_IS_DNS_MANAGER (self), FALSE);
|
||||||
g_return_val_if_fail (config, FALSE);
|
g_return_val_if_fail (config, FALSE);
|
||||||
g_return_val_if_fail (iface && iface[0], FALSE);
|
g_return_val_if_fail (iface && iface[0], FALSE);
|
||||||
nm_assert (NM_IP4_CONFIG (config) || NM_IS_IP6_CONFIG (config));
|
nm_assert (NM_IS_IP_CONFIG (config));
|
||||||
|
|
||||||
priv = NM_DNS_MANAGER_GET_PRIVATE (self);
|
priv = NM_DNS_MANAGER_GET_PRIVATE (self);
|
||||||
|
|
||||||
@@ -1365,7 +1298,7 @@ nm_dns_manager_remove_ip_config (NMDnsManager *self, gpointer config)
|
|||||||
|
|
||||||
g_return_val_if_fail (NM_IS_DNS_MANAGER (self), FALSE);
|
g_return_val_if_fail (NM_IS_DNS_MANAGER (self), FALSE);
|
||||||
g_return_val_if_fail (config, FALSE);
|
g_return_val_if_fail (config, FALSE);
|
||||||
nm_assert (NM_IP4_CONFIG (config) || NM_IS_IP6_CONFIG (config));
|
nm_assert (NM_IS_IP_CONFIG (config));
|
||||||
|
|
||||||
priv = NM_DNS_MANAGER_GET_PRIVATE (self);
|
priv = NM_DNS_MANAGER_GET_PRIVATE (self);
|
||||||
|
|
||||||
@@ -1885,42 +1818,39 @@ _get_config_variant (NMDnsManager *self)
|
|||||||
|
|
||||||
for (i = 0; i < priv->configs->len; i++) {
|
for (i = 0; i < priv->configs->len; i++) {
|
||||||
NMDnsIPConfigData *current = priv->configs->pdata[i];
|
NMDnsIPConfigData *current = priv->configs->pdata[i];
|
||||||
|
const NMIPConfig *config = current->config;
|
||||||
GVariantBuilder entry_builder;
|
GVariantBuilder entry_builder;
|
||||||
GVariantBuilder strv_builder;
|
GVariantBuilder strv_builder;
|
||||||
gboolean v4 = NM_IS_IP4_CONFIG (current->config);
|
guint num;
|
||||||
gint priority;
|
const int addr_family = nm_ip_config_get_addr_family (config);
|
||||||
|
char buf[NM_UTILS_INET_ADDRSTRLEN];
|
||||||
if (v4) {
|
const NMIPAddr *addr;
|
||||||
NMIP4Config *config = NM_IP4_CONFIG (current->config);
|
|
||||||
guint num = nm_ip4_config_get_num_nameservers (config);
|
|
||||||
guint32 ns;
|
|
||||||
|
|
||||||
|
num = nm_ip_config_get_num_nameservers (config);
|
||||||
if (!num)
|
if (!num)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
g_variant_builder_init (&entry_builder, G_VARIANT_TYPE ("a{sv}"));
|
g_variant_builder_init (&entry_builder, G_VARIANT_TYPE ("a{sv}"));
|
||||||
|
|
||||||
/* Add nameservers */
|
|
||||||
g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as"));
|
g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as"));
|
||||||
for (j = 0; j < num; j++) {
|
for (j = 0; j < num; j++) {
|
||||||
ns = nm_ip4_config_get_nameserver (config, j);
|
addr = nm_ip_config_get_nameserver (config, j);
|
||||||
g_variant_builder_add (&strv_builder,
|
g_variant_builder_add (&strv_builder,
|
||||||
"s",
|
"s",
|
||||||
nm_utils_inet4_ntop (ns, NULL));
|
nm_utils_inet_ntop (addr_family, addr, buf));
|
||||||
}
|
}
|
||||||
g_variant_builder_add (&entry_builder,
|
g_variant_builder_add (&entry_builder,
|
||||||
"{sv}",
|
"{sv}",
|
||||||
"nameservers",
|
"nameservers",
|
||||||
g_variant_builder_end (&strv_builder));
|
g_variant_builder_end (&strv_builder));
|
||||||
|
|
||||||
/* Add domains */
|
num = nm_ip_config_get_num_domains (config);
|
||||||
num = nm_ip4_config_get_num_domains (config);
|
|
||||||
if (num > 0) {
|
if (num > 0) {
|
||||||
g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as"));
|
g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as"));
|
||||||
for (j = 0; j < num; j++) {
|
for (j = 0; j < num; j++) {
|
||||||
g_variant_builder_add (&strv_builder,
|
g_variant_builder_add (&strv_builder,
|
||||||
"s",
|
"s",
|
||||||
nm_ip4_config_get_domain (config, j));
|
nm_ip_config_get_domain (config, j));
|
||||||
}
|
}
|
||||||
g_variant_builder_add (&entry_builder,
|
g_variant_builder_add (&entry_builder,
|
||||||
"{sv}",
|
"{sv}",
|
||||||
@@ -1928,49 +1858,6 @@ _get_config_variant (NMDnsManager *self)
|
|||||||
g_variant_builder_end (&strv_builder));
|
g_variant_builder_end (&strv_builder));
|
||||||
}
|
}
|
||||||
|
|
||||||
priority = nm_ip4_config_get_dns_priority (config);
|
|
||||||
} else {
|
|
||||||
NMIP6Config *config = NM_IP6_CONFIG (current->config);
|
|
||||||
guint num = nm_ip6_config_get_num_nameservers (config);
|
|
||||||
const struct in6_addr *ns;
|
|
||||||
|
|
||||||
if (!num)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
g_variant_builder_init (&entry_builder, G_VARIANT_TYPE ("a{sv}"));
|
|
||||||
|
|
||||||
/* Add nameservers */
|
|
||||||
g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as"));
|
|
||||||
for (j = 0; j < num; j++) {
|
|
||||||
ns = nm_ip6_config_get_nameserver (config, j);
|
|
||||||
g_variant_builder_add (&strv_builder,
|
|
||||||
"s",
|
|
||||||
nm_utils_inet6_ntop (ns, NULL));
|
|
||||||
}
|
|
||||||
g_variant_builder_add (&entry_builder,
|
|
||||||
"{sv}",
|
|
||||||
"nameservers",
|
|
||||||
g_variant_builder_end (&strv_builder));
|
|
||||||
|
|
||||||
/* Add domains */
|
|
||||||
num = nm_ip6_config_get_num_domains (config);
|
|
||||||
if (num > 0) {
|
|
||||||
g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as"));
|
|
||||||
for (j = 0; j < num; j++) {
|
|
||||||
g_variant_builder_add (&strv_builder,
|
|
||||||
"s",
|
|
||||||
nm_ip6_config_get_domain (config, j));
|
|
||||||
}
|
|
||||||
g_variant_builder_add (&entry_builder,
|
|
||||||
"{sv}",
|
|
||||||
"domains",
|
|
||||||
g_variant_builder_end (&strv_builder));
|
|
||||||
}
|
|
||||||
|
|
||||||
priority = nm_ip6_config_get_dns_priority (config);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add device */
|
|
||||||
if (current->iface) {
|
if (current->iface) {
|
||||||
g_variant_builder_add (&entry_builder,
|
g_variant_builder_add (&entry_builder,
|
||||||
"{sv}",
|
"{sv}",
|
||||||
@@ -1978,13 +1865,11 @@ _get_config_variant (NMDnsManager *self)
|
|||||||
g_variant_new_string (current->iface));
|
g_variant_new_string (current->iface));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add priority */
|
|
||||||
g_variant_builder_add (&entry_builder,
|
g_variant_builder_add (&entry_builder,
|
||||||
"{sv}",
|
"{sv}",
|
||||||
"priority",
|
"priority",
|
||||||
g_variant_new_int32 (priority));
|
g_variant_new_int32 (nm_ip_config_get_dns_priority (config)));
|
||||||
|
|
||||||
/* Add VPN */
|
|
||||||
g_variant_builder_add (&entry_builder,
|
g_variant_builder_add (&entry_builder,
|
||||||
"{sv}",
|
"{sv}",
|
||||||
"vpn",
|
"vpn",
|
||||||
|
@@ -2216,6 +2216,14 @@ nm_ip4_config_get_nameserver (const NMIP4Config *self, guint i)
|
|||||||
return g_array_index (priv->nameservers, guint32, 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
|
void
|
||||||
|
@@ -216,6 +216,7 @@ void nm_ip4_config_add_nameserver (NMIP4Config *self, guint32 nameserver);
|
|||||||
void nm_ip4_config_del_nameserver (NMIP4Config *self, guint i);
|
void nm_ip4_config_del_nameserver (NMIP4Config *self, guint i);
|
||||||
guint nm_ip4_config_get_num_nameservers (const NMIP4Config *self);
|
guint nm_ip4_config_get_num_nameservers (const NMIP4Config *self);
|
||||||
guint32 nm_ip4_config_get_nameserver (const NMIP4Config *self, guint i);
|
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_reset_domains (NMIP4Config *self);
|
||||||
void nm_ip4_config_add_domain (NMIP4Config *self, const char *domain);
|
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))
|
#define NM_IP_CONFIG_CAST(config) ((NMIPConfig *) (config))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline gboolean
|
||||||
|
NM_IS_IP_CONFIG (gconstpointer config)
|
||||||
|
{
|
||||||
|
return NM_IS_IP4_CONFIG (config) || NM_IS_IP6_CONFIG (config);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int
|
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))
|
if (NM_IS_IP4_CONFIG (config))
|
||||||
return nm_ip4_config_get_dns_priority ((const NMIP4Config *) config);
|
return AF_INET;
|
||||||
else if (NM_IS_IP6_CONFIG (config))
|
if (NM_IS_IP6_CONFIG (config))
|
||||||
return nm_ip6_config_get_dns_priority ((const NMIP6Config *) config);
|
return AF_INET6;
|
||||||
else
|
g_return_val_if_reached (AF_UNSPEC);
|
||||||
g_return_val_if_reached (0);
|
}
|
||||||
|
|
||||||
|
#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__ */
|
#endif /* __NETWORKMANAGER_IP4_CONFIG_H__ */
|
||||||
|
Reference in New Issue
Block a user