mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-08 07:10:23 +01:00
device: refactor ndisc_set_router_config()
- only record @now timestamp if we actually need it. - use gint32 for @now. It seems wrong that NMNDiscDNSServer uses guint32 for the timestamp. We keep nm_utils_get_monotonic_timestamp_s() as gint32 for a reason. - ensure the arrays are initialized to zero. E.g. ndisc_addr->dad_counter was uninitalized. - set the size for arrays outside the loop - use g_array_unref(). I think that is usually better. It makes only a difference when somebody else holds a reference to the array. And in that case, it usually seems better not to clear the array, just release your refrence.
This commit is contained in:
parent
2b304d82d7
commit
de52c25cfd
1 changed files with 11 additions and 12 deletions
|
|
@ -1821,16 +1821,17 @@ static void
|
|||
ndisc_set_router_config (NMNDisc *ndisc, NMDevice *self)
|
||||
{
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||
guint32 now = nm_utils_get_monotonic_timestamp_s ();
|
||||
gint32 now;
|
||||
GArray *addresses, *dns_servers, *dns_domains;
|
||||
guint len, i;
|
||||
|
||||
if (nm_ndisc_get_node_type (ndisc) != NM_NDISC_NODE_TYPE_ROUTER)
|
||||
return;
|
||||
|
||||
/* Addresses whose prefixes we announce. */
|
||||
now = nm_utils_get_monotonic_timestamp_s ();
|
||||
|
||||
len = nm_ip6_config_get_num_addresses (priv->ip6_config);
|
||||
addresses = g_array_sized_new (FALSE, FALSE, sizeof (NMNDiscAddress), len);
|
||||
addresses = g_array_sized_new (FALSE, TRUE, sizeof (NMNDiscAddress), len);
|
||||
for (i = 0; i < len; i++) {
|
||||
const NMPlatformIP6Address *addr = nm_ip6_config_get_address (priv->ip6_config, i);
|
||||
NMNDiscAddress *ndisc_addr;
|
||||
|
|
@ -1853,28 +1854,26 @@ ndisc_set_router_config (NMNDisc *ndisc, NMDevice *self)
|
|||
ndisc_addr->preferred = addr->preferred;
|
||||
}
|
||||
|
||||
/* DNS servers. */
|
||||
len = nm_ip6_config_get_num_nameservers (priv->ip6_config);
|
||||
dns_servers = g_array_sized_new (FALSE, FALSE, sizeof (NMNDiscDNSServer), len);
|
||||
dns_servers = g_array_sized_new (FALSE, TRUE, sizeof (NMNDiscDNSServer), len);
|
||||
g_array_set_size (dns_servers, len);
|
||||
for (i = 0; i < len; i++) {
|
||||
const struct in6_addr *nameserver = nm_ip6_config_get_nameserver (priv->ip6_config, i);
|
||||
NMNDiscDNSServer *ndisc_nameserver;
|
||||
|
||||
g_array_set_size (dns_servers, dns_servers->len+1);
|
||||
ndisc_nameserver = &g_array_index (dns_servers, NMNDiscDNSServer, dns_servers->len-1);
|
||||
ndisc_nameserver->address = *nameserver;
|
||||
ndisc_nameserver->timestamp = now;
|
||||
ndisc_nameserver->lifetime = NM_NDISC_ROUTER_LIFETIME;
|
||||
}
|
||||
|
||||
/* DNS domains. */
|
||||
len = nm_ip6_config_get_num_searches (priv->ip6_config);
|
||||
dns_domains = g_array_sized_new (FALSE, FALSE, sizeof (NMNDiscDNSDomain), len);
|
||||
dns_domains = g_array_sized_new (FALSE, TRUE, sizeof (NMNDiscDNSDomain), len);
|
||||
g_array_set_size (dns_domains, len);
|
||||
for (i = 0; i < len; i++) {
|
||||
const char *search = nm_ip6_config_get_search (priv->ip6_config, i);
|
||||
NMNDiscDNSDomain *ndisc_search;
|
||||
|
||||
g_array_set_size (dns_domains, dns_domains->len+1);
|
||||
ndisc_search = &g_array_index (dns_domains, NMNDiscDNSDomain, dns_domains->len-1);
|
||||
ndisc_search->domain = g_strdup (search);
|
||||
ndisc_search->timestamp = now;
|
||||
|
|
@ -1882,9 +1881,9 @@ ndisc_set_router_config (NMNDisc *ndisc, NMDevice *self)
|
|||
}
|
||||
|
||||
nm_ndisc_set_config (ndisc, addresses, dns_servers, dns_domains);
|
||||
g_array_free (addresses, TRUE);
|
||||
g_array_free (dns_servers, TRUE);
|
||||
g_array_free (dns_domains, TRUE);
|
||||
g_array_unref (addresses);
|
||||
g_array_unref (dns_servers);
|
||||
g_array_unref (dns_domains);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue