static int route_scope_from_address(const Route *route, const struct in_addr *self_addr) { assert(route); assert(self_addr); if (in_addr_is_localhost(AF_INET, &route->dst) || (self_addr->s_addr && route->dst.in.s_addr == self_addr->s_addr)) return RT_SCOPE_HOST; else if (in4_addr_is_null(&route->gw.in)) return RT_SCOPE_LINK; else return RT_SCOPE_UNIVERSE; }
static int radv_get_ip6dns(Network *network, struct in6_addr **dns, size_t *n_dns) { _cleanup_free_ struct in6_addr *addresses = NULL; size_t i, n_addresses = 0, n_allocated = 0; assert(network); assert(dns); assert(n_dns); for (i = 0; i < network->n_dns; i++) { union in_addr_union *addr; if (network->dns[i].family != AF_INET6) continue; addr = &network->dns[i].address; if (in_addr_is_null(AF_INET6, addr) || in_addr_is_link_local(AF_INET6, addr) || in_addr_is_localhost(AF_INET6, addr)) continue; if (!GREEDY_REALLOC(addresses, n_allocated, n_addresses + 1)) return -ENOMEM; addresses[n_addresses++] = addr->in6; } if (addresses) { *dns = addresses; addresses = NULL; *n_dns = n_addresses; } return n_addresses; }