mirror of
https://github.com/systemd/systemd.git
synced 2024-10-31 16:21:26 +03:00
Merge pull request #18662 from yuwata/in-addr-is-set
in-addr-util: introduce in_addr_is_set() or friends
This commit is contained in:
commit
2840d6f61d
@ -24,6 +24,12 @@ bool in4_addr_is_null(const struct in_addr *a) {
|
||||
return a->s_addr == 0;
|
||||
}
|
||||
|
||||
bool in6_addr_is_null(const struct in6_addr *a) {
|
||||
assert(a);
|
||||
|
||||
return IN6_IS_ADDR_UNSPECIFIED(a);
|
||||
}
|
||||
|
||||
int in_addr_is_null(int family, const union in_addr_union *u) {
|
||||
assert(u);
|
||||
|
||||
@ -31,7 +37,7 @@ int in_addr_is_null(int family, const union in_addr_union *u) {
|
||||
return in4_addr_is_null(&u->in);
|
||||
|
||||
if (family == AF_INET6)
|
||||
return IN6_IS_ADDR_UNSPECIFIED(&u->in6);
|
||||
return in6_addr_is_null(&u->in6);
|
||||
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
@ -42,6 +48,12 @@ bool in4_addr_is_link_local(const struct in_addr *a) {
|
||||
return (be32toh(a->s_addr) & UINT32_C(0xFFFF0000)) == (UINT32_C(169) << 24 | UINT32_C(254) << 16);
|
||||
}
|
||||
|
||||
bool in6_addr_is_link_local(const struct in6_addr *a) {
|
||||
assert(a);
|
||||
|
||||
return IN6_IS_ADDR_LINKLOCAL(a);
|
||||
}
|
||||
|
||||
int in_addr_is_link_local(int family, const union in_addr_union *u) {
|
||||
assert(u);
|
||||
|
||||
@ -49,7 +61,7 @@ int in_addr_is_link_local(int family, const union in_addr_union *u) {
|
||||
return in4_addr_is_link_local(&u->in);
|
||||
|
||||
if (family == AF_INET6)
|
||||
return IN6_IS_ADDR_LINKLOCAL(&u->in6);
|
||||
return in6_addr_is_link_local(&u->in6);
|
||||
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
@ -116,6 +128,13 @@ bool in4_addr_equal(const struct in_addr *a, const struct in_addr *b) {
|
||||
return a->s_addr == b->s_addr;
|
||||
}
|
||||
|
||||
bool in6_addr_equal(const struct in6_addr *a, const struct in6_addr *b) {
|
||||
assert(a);
|
||||
assert(b);
|
||||
|
||||
return IN6_ARE_ADDR_EQUAL(a, b);
|
||||
}
|
||||
|
||||
int in_addr_equal(int family, const union in_addr_union *a, const union in_addr_union *b) {
|
||||
assert(a);
|
||||
assert(b);
|
||||
@ -124,7 +143,7 @@ int in_addr_equal(int family, const union in_addr_union *a, const union in_addr_
|
||||
return in4_addr_equal(&a->in, &b->in);
|
||||
|
||||
if (family == AF_INET6)
|
||||
return IN6_ARE_ADDR_EQUAL(&a->in6, &b->in6);
|
||||
return in6_addr_equal(&a->in6, &b->in6);
|
||||
|
||||
return -EAFNOSUPPORT;
|
||||
}
|
||||
|
@ -21,11 +21,29 @@ struct in_addr_data {
|
||||
};
|
||||
|
||||
bool in4_addr_is_null(const struct in_addr *a);
|
||||
static inline bool in4_addr_is_set(const struct in_addr *a) {
|
||||
return !in4_addr_is_null(a);
|
||||
}
|
||||
bool in6_addr_is_null(const struct in6_addr *a);
|
||||
static inline bool in6_addr_is_set(const struct in6_addr *a) {
|
||||
return !in6_addr_is_null(a);
|
||||
}
|
||||
int in_addr_is_null(int family, const union in_addr_union *u);
|
||||
static inline bool in_addr_is_set(int family, const union in_addr_union *u) {
|
||||
return in_addr_is_null(family, u) == 0;
|
||||
}
|
||||
static inline int in_addr_data_is_null(const struct in_addr_data *a) {
|
||||
assert(a);
|
||||
return in_addr_is_null(a->family, &a->address);
|
||||
}
|
||||
static inline bool in_addr_data_is_set(const struct in_addr_data *a) {
|
||||
return in_addr_data_is_null(a);
|
||||
}
|
||||
|
||||
int in_addr_is_multicast(int family, const union in_addr_union *u);
|
||||
|
||||
bool in4_addr_is_link_local(const struct in_addr *a);
|
||||
bool in6_addr_is_link_local(const struct in6_addr *a);
|
||||
int in_addr_is_link_local(int family, const union in_addr_union *u);
|
||||
bool in6_addr_is_link_local_all_nodes(const struct in6_addr *a);
|
||||
|
||||
@ -36,6 +54,7 @@ bool in4_addr_is_local_multicast(const struct in_addr *a);
|
||||
bool in4_addr_is_non_local(const struct in_addr *a);
|
||||
|
||||
bool in4_addr_equal(const struct in_addr *a, const struct in_addr *b);
|
||||
bool in6_addr_equal(const struct in6_addr *a, const struct in6_addr *b);
|
||||
int in_addr_equal(int family, const union in_addr_union *a, const union in_addr_union *b);
|
||||
int in_addr_prefix_intersect(int family, const union in_addr_union *a, unsigned aprefixlen, const union in_addr_union *b, unsigned bprefixlen);
|
||||
int in_addr_prefix_next(int family, union in_addr_union *u, unsigned prefixlen);
|
||||
|
@ -145,8 +145,8 @@ int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *dst,
|
||||
triple_timestamp *timestamp) {
|
||||
int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
|
||||
triple_timestamp *ret_timestamp) {
|
||||
|
||||
CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(int)) + /* ttl */
|
||||
CMSG_SPACE(sizeof(struct timeval))) control;
|
||||
@ -161,6 +161,8 @@ int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *dst,
|
||||
.msg_controllen = sizeof(control),
|
||||
};
|
||||
struct cmsghdr *cmsg;
|
||||
struct in6_addr addr = {};
|
||||
triple_timestamp t;
|
||||
ssize_t len;
|
||||
|
||||
iov = IOVEC_MAKE(buffer, size);
|
||||
@ -175,8 +177,8 @@ int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *dst,
|
||||
if (msg.msg_namelen == sizeof(struct sockaddr_in6) &&
|
||||
sa.in6.sin6_family == AF_INET6) {
|
||||
|
||||
*dst = sa.in6.sin6_addr;
|
||||
if (in_addr_is_link_local(AF_INET6, (union in_addr_union*) dst) <= 0)
|
||||
addr = sa.in6.sin6_addr;
|
||||
if (!in6_addr_is_link_local(&addr))
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
} else if (msg.msg_namelen > 0)
|
||||
@ -200,11 +202,13 @@ int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *dst,
|
||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||
cmsg->cmsg_type == SO_TIMESTAMP &&
|
||||
cmsg->cmsg_len == CMSG_LEN(sizeof(struct timeval)))
|
||||
triple_timestamp_from_realtime(timestamp, timeval_load((struct timeval*) CMSG_DATA(cmsg)));
|
||||
triple_timestamp_from_realtime(&t, timeval_load((struct timeval*) CMSG_DATA(cmsg)));
|
||||
}
|
||||
|
||||
if (!triple_timestamp_is_set(timestamp))
|
||||
triple_timestamp_get(timestamp);
|
||||
if (!triple_timestamp_is_set(&t))
|
||||
triple_timestamp_get(&t);
|
||||
|
||||
*ret_dst = addr;
|
||||
*ret_timestamp = t;
|
||||
return 0;
|
||||
}
|
||||
|
@ -20,5 +20,5 @@
|
||||
int icmp6_bind_router_solicitation(int ifindex);
|
||||
int icmp6_bind_router_advertisement(int ifindex);
|
||||
int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr);
|
||||
int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *dst,
|
||||
triple_timestamp *timestamp);
|
||||
int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
|
||||
triple_timestamp *ret_timestamp);
|
||||
|
@ -56,7 +56,7 @@ _public_ int sd_ndisc_router_get_address(sd_ndisc_router *rt, struct in6_addr *r
|
||||
assert_return(rt, -EINVAL);
|
||||
assert_return(ret_addr, -EINVAL);
|
||||
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&rt->address))
|
||||
if (in6_addr_is_null(&rt->address))
|
||||
return -ENODATA;
|
||||
|
||||
*ret_addr = rt->address;
|
||||
|
@ -171,7 +171,7 @@ int sd_dhcp6_client_set_local_address(
|
||||
|
||||
assert_return(client, -EINVAL);
|
||||
assert_return(local_address, -EINVAL);
|
||||
assert_return(in_addr_is_link_local(AF_INET6, (const union in_addr_union *) local_address) > 0, -EINVAL);
|
||||
assert_return(in6_addr_is_link_local(local_address) > 0, -EINVAL);
|
||||
|
||||
assert_return(IN_SET(client->state, DHCP6_STATE_STOPPED), -EBUSY);
|
||||
|
||||
@ -1693,7 +1693,7 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) {
|
||||
assert_return(client, -EINVAL);
|
||||
assert_return(client->event, -EINVAL);
|
||||
assert_return(client->ifindex > 0, -EINVAL);
|
||||
assert_return(in_addr_is_link_local(AF_INET6, (const union in_addr_union *) &client->local_address) > 0, -EINVAL);
|
||||
assert_return(in6_addr_is_link_local(&client->local_address) > 0, -EINVAL);
|
||||
|
||||
if (!IN_SET(client->state, DHCP6_STATE_STOPPED))
|
||||
return -EBUSY;
|
||||
|
@ -186,7 +186,7 @@ int sd_ipv4ll_is_running(sd_ipv4ll *ll) {
|
||||
static bool ipv4ll_address_is_valid(const struct in_addr *address) {
|
||||
assert(address);
|
||||
|
||||
if (!in_addr_is_link_local(AF_INET, (const union in_addr_union *) address))
|
||||
if (!in4_addr_is_link_local(address))
|
||||
return false;
|
||||
|
||||
return !IN_SET(be32toh(address->s_addr) & 0x0000FF00U, 0x0000U, 0xFF00U);
|
||||
|
@ -225,7 +225,7 @@ static int ndisc_recv(sd_event_source *s, int fd, uint32_t revents, void *userda
|
||||
if (r < 0) {
|
||||
switch (r) {
|
||||
case -EADDRNOTAVAIL:
|
||||
(void) in_addr_to_string(AF_INET6, (union in_addr_union*) &rt->address, &addr);
|
||||
(void) in_addr_to_string(AF_INET6, (const union in_addr_union*) &rt->address, &addr);
|
||||
log_ndisc("Received RA from non-link-local address %s. Ignoring", addr);
|
||||
break;
|
||||
|
||||
|
@ -167,7 +167,7 @@ static int radv_send(sd_radv *ra, const struct in6_addr *dst, uint32_t router_li
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (dst && !IN6_IS_ADDR_UNSPECIFIED(dst))
|
||||
if (dst && in6_addr_is_set(dst))
|
||||
dst_addr.sin6_addr = *dst;
|
||||
|
||||
adv.nd_ra_type = ND_ROUTER_ADVERT;
|
||||
@ -244,7 +244,7 @@ static int radv_recv(sd_event_source *s, int fd, uint32_t revents, void *userdat
|
||||
if (r < 0) {
|
||||
switch (r) {
|
||||
case -EADDRNOTAVAIL:
|
||||
(void) in_addr_to_string(AF_INET6, (union in_addr_union*) &src, &addr);
|
||||
(void) in_addr_to_string(AF_INET6, (const union in_addr_union*) &src, &addr);
|
||||
log_radv("Received RS from non-link-local address %s. Ignoring", addr);
|
||||
break;
|
||||
|
||||
@ -272,7 +272,7 @@ static int radv_recv(sd_event_source *s, int fd, uint32_t revents, void *userdat
|
||||
return 0;
|
||||
}
|
||||
|
||||
(void) in_addr_to_string(AF_INET6, (union in_addr_union*) &src, &addr);
|
||||
(void) in_addr_to_string(AF_INET6, (const union in_addr_union*) &src, &addr);
|
||||
|
||||
r = radv_send(ra, &src, ra->lifetime);
|
||||
if (r < 0)
|
||||
@ -536,35 +536,36 @@ _public_ int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, int dynamic) {
|
||||
return -EINVAL;
|
||||
|
||||
/* Refuse prefixes that don't have a prefix set */
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&p->opt.in6_addr))
|
||||
if (in6_addr_is_null(&p->opt.in6_addr))
|
||||
return -ENOEXEC;
|
||||
|
||||
(void) in_addr_prefix_to_string(AF_INET6,
|
||||
(const union in_addr_union*) &p->opt.in6_addr,
|
||||
p->opt.prefixlen, &addr_p);
|
||||
|
||||
LIST_FOREACH(prefix, cur, ra->prefixes) {
|
||||
|
||||
r = in_addr_prefix_intersect(AF_INET6,
|
||||
(union in_addr_union*) &cur->opt.in6_addr,
|
||||
(const union in_addr_union*) &cur->opt.in6_addr,
|
||||
cur->opt.prefixlen,
|
||||
(union in_addr_union*) &p->opt.in6_addr,
|
||||
(const union in_addr_union*) &p->opt.in6_addr,
|
||||
p->opt.prefixlen);
|
||||
if (r > 0) {
|
||||
_cleanup_free_ char *addr_cur = NULL;
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
continue;
|
||||
|
||||
(void) in_addr_to_string(AF_INET6,
|
||||
(union in_addr_union*) &p->opt.in6_addr,
|
||||
&addr_p);
|
||||
if (dynamic && cur->opt.prefixlen == p->opt.prefixlen)
|
||||
goto update;
|
||||
|
||||
if (dynamic && cur->opt.prefixlen == p->opt.prefixlen)
|
||||
goto update;
|
||||
_cleanup_free_ char *addr_cur = NULL;
|
||||
(void) in_addr_prefix_to_string(AF_INET6,
|
||||
(const union in_addr_union*) &cur->opt.in6_addr,
|
||||
cur->opt.prefixlen, &addr_cur);
|
||||
log_radv("IPv6 prefix %s already configured, ignoring %s",
|
||||
strna(addr_cur), strna(addr_p));
|
||||
|
||||
(void) in_addr_to_string(AF_INET6,
|
||||
(union in_addr_union*) &cur->opt.in6_addr,
|
||||
&addr_cur);
|
||||
log_radv("IPv6 prefix %s/%u already configured, ignoring %s/%u",
|
||||
addr_cur, cur->opt.prefixlen,
|
||||
addr_p, p->opt.prefixlen);
|
||||
|
||||
return -EEXIST;
|
||||
}
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
p = sd_radv_prefix_ref(p);
|
||||
@ -573,10 +574,8 @@ _public_ int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, int dynamic) {
|
||||
|
||||
ra->n_prefixes++;
|
||||
|
||||
(void) in_addr_to_string(AF_INET6, (union in_addr_union*) &p->opt.in6_addr, &addr_p);
|
||||
|
||||
if (!dynamic) {
|
||||
log_radv("Added prefix %s/%d", addr_p, p->opt.prefixlen);
|
||||
log_radv("Added prefix %s", strna(addr_p));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -609,8 +608,8 @@ _public_ int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p, int dynamic) {
|
||||
cur->valid_until = valid_until;
|
||||
cur->preferred_until = preferred_until;
|
||||
|
||||
log_radv("Updated prefix %s/%u preferred %s valid %s",
|
||||
addr_p, p->opt.prefixlen,
|
||||
log_radv("Updated prefix %s preferred %s valid %s",
|
||||
strna(addr_p),
|
||||
format_timespan(time_string_preferred, FORMAT_TIMESPAN_MAX,
|
||||
preferred, USEC_PER_SEC),
|
||||
format_timespan(time_string_valid, FORMAT_TIMESPAN_MAX,
|
||||
@ -631,9 +630,7 @@ _public_ sd_radv_prefix *sd_radv_remove_prefix(sd_radv *ra,
|
||||
if (prefixlen != cur->opt.prefixlen)
|
||||
continue;
|
||||
|
||||
if (!in_addr_equal(AF_INET6,
|
||||
(union in_addr_union *)prefix,
|
||||
(union in_addr_union *)&cur->opt.in6_addr))
|
||||
if (!in6_addr_equal(prefix, &cur->opt.in6_addr))
|
||||
continue;
|
||||
|
||||
LIST_REMOVE(prefix, ra->prefixes, cur);
|
||||
@ -658,17 +655,16 @@ _public_ int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p, int
|
||||
if (!p)
|
||||
return -EINVAL;
|
||||
|
||||
(void) in_addr_to_string(AF_INET6,
|
||||
(union in_addr_union*) &p->opt.in6_addr,
|
||||
&pretty);
|
||||
(void) in_addr_prefix_to_string(AF_INET6,
|
||||
(const union in_addr_union*) &p->opt.in6_addr,
|
||||
p->opt.prefixlen, &pretty);
|
||||
|
||||
LIST_FOREACH(prefix, cur, ra->route_prefixes) {
|
||||
_cleanup_free_ char *addr = NULL;
|
||||
|
||||
r = in_addr_prefix_intersect(AF_INET6,
|
||||
(union in_addr_union*) &cur->opt.in6_addr,
|
||||
(const union in_addr_union*) &cur->opt.in6_addr,
|
||||
cur->opt.prefixlen,
|
||||
(union in_addr_union*) &p->opt.in6_addr,
|
||||
(const union in_addr_union*) &p->opt.in6_addr,
|
||||
p->opt.prefixlen);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -678,12 +674,12 @@ _public_ int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p, int
|
||||
if (dynamic && cur->opt.prefixlen == p->opt.prefixlen)
|
||||
goto update;
|
||||
|
||||
(void) in_addr_to_string(AF_INET6,
|
||||
(union in_addr_union*) &cur->opt.in6_addr,
|
||||
&addr);
|
||||
log_radv("IPv6 route prefix %s/%u already configured, ignoring %s/%u",
|
||||
strempty(addr), cur->opt.prefixlen,
|
||||
strempty(pretty), p->opt.prefixlen);
|
||||
_cleanup_free_ char *addr = NULL;
|
||||
(void) in_addr_prefix_to_string(AF_INET6,
|
||||
(const union in_addr_union*) &cur->opt.in6_addr,
|
||||
cur->opt.prefixlen, &addr);
|
||||
log_radv("IPv6 route prefix %s already configured, ignoring %s",
|
||||
strna(addr), strna(pretty));
|
||||
|
||||
return -EEXIST;
|
||||
}
|
||||
@ -694,7 +690,7 @@ _public_ int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p, int
|
||||
ra->n_route_prefixes++;
|
||||
|
||||
if (!dynamic) {
|
||||
log_radv("Added prefix %s/%u", strempty(pretty), p->opt.prefixlen);
|
||||
log_radv("Added prefix %s", strna(pretty));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -717,8 +713,8 @@ _public_ int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p, int
|
||||
if (valid_until == USEC_INFINITY)
|
||||
return -EOVERFLOW;
|
||||
|
||||
log_radv("Updated route prefix %s/%u valid %s",
|
||||
strempty(pretty), p->opt.prefixlen,
|
||||
log_radv("Updated route prefix %s valid %s",
|
||||
strna(pretty),
|
||||
format_timespan(time_string_valid, FORMAT_TIMESPAN_MAX, valid, USEC_PER_SEC));
|
||||
|
||||
return 0;
|
||||
|
@ -360,7 +360,7 @@ static int network_set_address(Context *context, const char *ifname, int family,
|
||||
union in_addr_union *addr, union in_addr_union *peer) {
|
||||
Network *network;
|
||||
|
||||
if (in_addr_is_null(family, addr) != 0)
|
||||
if (!in_addr_is_set(family, addr))
|
||||
return 0;
|
||||
|
||||
network = network_get(context, ifname);
|
||||
@ -375,7 +375,7 @@ static int network_set_route(Context *context, const char *ifname, int family, u
|
||||
Network *network;
|
||||
int r;
|
||||
|
||||
if (in_addr_is_null(family, gateway) != 0)
|
||||
if (!in_addr_is_set(family, gateway))
|
||||
return 0;
|
||||
|
||||
network = network_get(context, ifname);
|
||||
@ -1000,7 +1000,7 @@ static int address_dump(Address *address, FILE *f) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (in_addr_is_null(address->family, &address->peer) == 0) {
|
||||
if (in_addr_is_set(address->family, &address->peer)) {
|
||||
r = in_addr_to_string(address->family, &address->peer, &peer);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -1021,7 +1021,7 @@ static int route_dump(Route *route, FILE *f) {
|
||||
_cleanup_free_ char *dest = NULL, *gateway = NULL;
|
||||
int r;
|
||||
|
||||
if (in_addr_is_null(route->family, &route->dest) == 0) {
|
||||
if (in_addr_is_set(route->family, &route->dest)) {
|
||||
r = in_addr_prefix_to_string(route->family, &route->dest, route->prefixlen, &dest);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -90,7 +90,7 @@ static int netdev_geneve_create(NetDev *netdev) {
|
||||
return log_netdev_error_errno(netdev, r, "Could not append IFLA_GENEVE_ID attribute: %m");
|
||||
}
|
||||
|
||||
if (in_addr_is_null(v->remote_family, &v->remote) == 0) {
|
||||
if (in_addr_is_set(v->remote_family, &v->remote)) {
|
||||
if (v->remote_family == AF_INET)
|
||||
r = sd_netlink_message_append_in_addr(m, IFLA_GENEVE_REMOTE, &v->remote.in);
|
||||
else
|
||||
|
@ -252,7 +252,7 @@ static int l2tp_acquire_local_address_one(L2tpTunnel *t, Address *a, union in_ad
|
||||
if (a->family != t->family)
|
||||
return -EINVAL;
|
||||
|
||||
if (in_addr_is_null(a->family, &a->in_addr_peer) <= 0)
|
||||
if (in_addr_is_set(a->family, &a->in_addr_peer))
|
||||
return -EINVAL;
|
||||
|
||||
if (t->local_address_type == NETDEV_L2TP_LOCAL_ADDRESS_STATIC &&
|
||||
@ -275,7 +275,7 @@ static int l2tp_acquire_local_address(L2tpTunnel *t, Link *link, union in_addr_u
|
||||
assert(ret);
|
||||
assert(IN_SET(t->family, AF_INET, AF_INET6));
|
||||
|
||||
if (!in_addr_is_null(t->family, &t->local)) {
|
||||
if (in_addr_is_set(t->family, &t->local)) {
|
||||
/* local address is explicitly specified. */
|
||||
*ret = t->local;
|
||||
return 0;
|
||||
@ -435,7 +435,7 @@ int config_parse_l2tp_tunnel_address(
|
||||
addr_type = l2tp_local_address_type_from_string(rvalue);
|
||||
|
||||
if (addr_type >= 0) {
|
||||
if (in_addr_is_null(t->family, &t->remote) != 0)
|
||||
if (!in_addr_is_set(t->family, &t->remote))
|
||||
/* If Remote= is not specified yet, then also clear family. */
|
||||
t->family = AF_UNSPEC;
|
||||
|
||||
@ -682,7 +682,7 @@ static int netdev_l2tp_tunnel_verify(NetDev *netdev, const char *filename) {
|
||||
"%s: L2TP tunnel with invalid address family configured. Ignoring",
|
||||
filename);
|
||||
|
||||
if (in_addr_is_null(t->family, &t->remote))
|
||||
if (!in_addr_is_set(t->family, &t->remote))
|
||||
return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
|
||||
"%s: L2TP tunnel without a remote address configured. Ignoring",
|
||||
filename);
|
||||
|
@ -468,7 +468,7 @@ static int netdev_tunnel_verify(NetDev *netdev, const char *filename) {
|
||||
"vti/ipip/sit/gre tunnel without a local/remote IPv4 address configured in %s. Ignoring", filename);
|
||||
|
||||
if (IN_SET(netdev->kind, NETDEV_KIND_GRETAP, NETDEV_KIND_ERSPAN) &&
|
||||
(t->family != AF_INET || in_addr_is_null(t->family, &t->remote)))
|
||||
(t->family != AF_INET || !in_addr_is_set(t->family, &t->remote)))
|
||||
return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
|
||||
"gretap/erspan tunnel without a remote IPv4 address configured in %s. Ignoring", filename);
|
||||
|
||||
@ -478,7 +478,7 @@ static int netdev_tunnel_verify(NetDev *netdev, const char *filename) {
|
||||
"vti6/ip6tnl/ip6gre tunnel without a local/remote IPv6 address configured in %s. Ignoring", filename);
|
||||
|
||||
if (netdev->kind == NETDEV_KIND_IP6GRETAP &&
|
||||
(t->family != AF_INET6 || in_addr_is_null(t->family, &t->remote)))
|
||||
(t->family != AF_INET6 || !in_addr_is_set(t->family, &t->remote)))
|
||||
return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
|
||||
"ip6gretap tunnel without a remote IPv6 address configured in %s. Ignoring", filename);
|
||||
|
||||
@ -530,11 +530,9 @@ int config_parse_tunnel_address(const char *unit,
|
||||
*addr = IN_ADDR_NULL;
|
||||
|
||||
/* As a special case, if both the local and remote addresses are
|
||||
* unspecified, also clear the address family.
|
||||
*/
|
||||
if (t->family != AF_UNSPEC &&
|
||||
in_addr_is_null(t->family, &t->local) != 0 &&
|
||||
in_addr_is_null(t->family, &t->remote) != 0)
|
||||
* unspecified, also clear the address family. */
|
||||
if (!in_addr_is_set(t->family, &t->local) &&
|
||||
!in_addr_is_set(t->family, &t->remote))
|
||||
t->family = AF_UNSPEC;
|
||||
return 0;
|
||||
}
|
||||
|
@ -37,14 +37,14 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli
|
||||
return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_ID attribute: %m");
|
||||
}
|
||||
|
||||
if (in_addr_is_null(v->group_family, &v->group) == 0) {
|
||||
if (in_addr_is_set(v->group_family, &v->group)) {
|
||||
if (v->group_family == AF_INET)
|
||||
r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_GROUP, &v->group.in);
|
||||
else
|
||||
r = sd_netlink_message_append_in6_addr(m, IFLA_VXLAN_GROUP6, &v->group.in6);
|
||||
if (r < 0)
|
||||
return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GROUP attribute: %m");
|
||||
} else if (in_addr_is_null(v->remote_family, &v->remote) == 0) {
|
||||
} else if (in_addr_is_set(v->remote_family, &v->remote)) {
|
||||
if (v->remote_family == AF_INET)
|
||||
r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_GROUP, &v->remote.in);
|
||||
else
|
||||
@ -53,7 +53,7 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli
|
||||
return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GROUP attribute: %m");
|
||||
}
|
||||
|
||||
if (in_addr_is_null(v->local_family, &v->local) == 0) {
|
||||
if (in_addr_is_set(v->local_family, &v->local)) {
|
||||
if (v->local_family == AF_INET)
|
||||
r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_LOCAL, &v->local.in);
|
||||
else
|
||||
@ -354,7 +354,7 @@ static int netdev_vxlan_verify(NetDev *netdev, const char *filename) {
|
||||
if (!v->dest_port && v->generic_protocol_extension)
|
||||
v->dest_port = 4790;
|
||||
|
||||
if (in_addr_is_null(v->group_family, &v->group) == 0 && in_addr_is_null(v->remote_family, &v->remote) == 0)
|
||||
if (in_addr_is_set(v->group_family, &v->group) && in_addr_is_set(v->remote_family, &v->remote))
|
||||
return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
|
||||
"%s: VXLAN both 'Group=' and 'Remote=' cannot be specified. Ignoring.",
|
||||
filename);
|
||||
|
@ -1787,7 +1787,7 @@ static int link_status_one(
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
} else if (STRPTR_IN_SET(info->netdev_kind, "ipip", "sit", "gre", "gretap", "erspan", "vti")) {
|
||||
if (!in_addr_is_null(AF_INET, &info->local)) {
|
||||
if (in_addr_is_set(AF_INET, &info->local)) {
|
||||
r = table_add_many(table,
|
||||
TABLE_EMPTY,
|
||||
TABLE_STRING, "Local:",
|
||||
@ -1796,7 +1796,7 @@ static int link_status_one(
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
|
||||
if (!in_addr_is_null(AF_INET, &info->remote)) {
|
||||
if (in_addr_is_set(AF_INET, &info->remote)) {
|
||||
r = table_add_many(table,
|
||||
TABLE_EMPTY,
|
||||
TABLE_STRING, "Remote:",
|
||||
@ -1805,7 +1805,7 @@ static int link_status_one(
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
} else if (STRPTR_IN_SET(info->netdev_kind, "ip6gre", "ip6gretap", "ip6erspan", "vti6")) {
|
||||
if (!in_addr_is_null(AF_INET6, &info->local)) {
|
||||
if (in_addr_is_set(AF_INET6, &info->local)) {
|
||||
r = table_add_many(table,
|
||||
TABLE_EMPTY,
|
||||
TABLE_STRING, "Local:",
|
||||
@ -1814,7 +1814,7 @@ static int link_status_one(
|
||||
return table_log_add_error(r);
|
||||
}
|
||||
|
||||
if (!in_addr_is_null(AF_INET6, &info->remote)) {
|
||||
if (in_addr_is_set(AF_INET6, &info->remote)) {
|
||||
r = table_add_many(table,
|
||||
TABLE_EMPTY,
|
||||
TABLE_STRING, "Remote:",
|
||||
@ -1830,14 +1830,14 @@ static int link_status_one(
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
|
||||
if (info->has_tunnel_ipv4 && !in_addr_is_null(AF_INET, &info->remote)) {
|
||||
if (info->has_tunnel_ipv4 && in_addr_is_set(AF_INET, &info->remote)) {
|
||||
r = table_add_many(table,
|
||||
TABLE_EMPTY,
|
||||
TABLE_STRING, "Remote:",
|
||||
TABLE_IN_ADDR, &info->remote);
|
||||
if (r < 0)
|
||||
return table_log_add_error(r);
|
||||
} else if (!in_addr_is_null(AF_INET6, &info->remote)) {
|
||||
} else if (in_addr_is_set(AF_INET6, &info->remote)) {
|
||||
r = table_add_many(table,
|
||||
TABLE_EMPTY,
|
||||
TABLE_STRING, "Remote:",
|
||||
|
@ -167,8 +167,8 @@ static int address_pool_acquire_one(AddressPool *p, int family, unsigned prefixl
|
||||
if (DEBUG_LOGGING) {
|
||||
_cleanup_free_ char *s = NULL;
|
||||
|
||||
(void) in_addr_to_string(p->family, &u, &s);
|
||||
log_debug("Found range %s/%u", strna(s), prefixlen);
|
||||
(void) in_addr_prefix_to_string(p->family, &u, prefixlen, &s);
|
||||
log_debug("Found range %s", strna(s));
|
||||
}
|
||||
|
||||
*found = u;
|
||||
|
@ -130,7 +130,8 @@ Address *address_free(Address *address) {
|
||||
if (n->address == address)
|
||||
free(set_remove(address->link->ndisc_addresses, n));
|
||||
|
||||
if (in_addr_equal(AF_INET6, &address->in_addr, (const union in_addr_union *) &address->link->ipv6ll_address))
|
||||
if (address->family == AF_INET6 &&
|
||||
in6_addr_equal(&address->in_addr.in6, &address->link->ipv6ll_address))
|
||||
memzero(&address->link->ipv6ll_address, sizeof(struct in6_addr));
|
||||
}
|
||||
|
||||
@ -147,7 +148,9 @@ static bool address_may_have_broadcast(const Address *a) {
|
||||
/* A /31 or /32 IPv4 address does not have a broadcast address.
|
||||
* See https://tools.ietf.org/html/rfc3021 */
|
||||
|
||||
return a->family == AF_INET && in4_addr_is_null(&a->in_addr_peer.in) && a->prefixlen <= 30;
|
||||
return a->family == AF_INET &&
|
||||
in_addr_is_null(AF_INET, &a->in_addr_peer) &&
|
||||
a->prefixlen <= 30;
|
||||
}
|
||||
|
||||
static uint32_t address_prefix(const Address *a) {
|
||||
@ -397,7 +400,7 @@ static int address_update(Address *address, const Address *src) {
|
||||
|
||||
if (address->family == AF_INET6 &&
|
||||
in_addr_is_link_local(AF_INET6, &address->in_addr) > 0 &&
|
||||
IN6_IS_ADDR_UNSPECIFIED(&address->link->ipv6ll_address) > 0) {
|
||||
in6_addr_is_null(&address->link->ipv6ll_address)) {
|
||||
|
||||
r = link_ipv6ll_gained(address->link, &address->in_addr.in6);
|
||||
if (r < 0)
|
||||
@ -487,7 +490,7 @@ static void log_address_debug(const Address *address, const char *str, const Lin
|
||||
bool has_peer;
|
||||
|
||||
(void) in_addr_to_string(address->family, &address->in_addr, &addr);
|
||||
has_peer = in_addr_is_null(address->family, &address->in_addr_peer) == 0;
|
||||
has_peer = in_addr_is_set(address->family, &address->in_addr_peer);
|
||||
if (has_peer)
|
||||
(void) in_addr_to_string(address->family, &address->in_addr_peer, &peer);
|
||||
|
||||
@ -788,10 +791,7 @@ static int address_acquire(Link *link, const Address *original, Address **ret) {
|
||||
assert(ret);
|
||||
|
||||
/* Something useful was configured? just use it */
|
||||
r = in_addr_is_null(original->family, &original->in_addr);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0) {
|
||||
if (in_addr_is_set(original->family, &original->in_addr)) {
|
||||
*ret = NULL;
|
||||
return 0;
|
||||
}
|
||||
@ -891,7 +891,7 @@ int address_configure(
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not set scope: %m");
|
||||
|
||||
if (in_addr_is_null(address->family, &address->in_addr_peer) == 0) {
|
||||
if (in_addr_is_set(address->family, &address->in_addr_peer)) {
|
||||
r = netlink_message_append_in_addr_union(req, IFA_ADDRESS, address->family, &address->in_addr_peer);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not append IFA_ADDRESS attribute: %m");
|
||||
@ -956,8 +956,8 @@ static int static_address_ready_callback(Address *address) {
|
||||
if (!address_is_ready(a)) {
|
||||
_cleanup_free_ char *str = NULL;
|
||||
|
||||
(void) in_addr_to_string(a->family, &a->in_addr, &str);
|
||||
log_link_debug(link, "an address %s/%u is not ready", strnull(str), a->prefixlen);
|
||||
(void) in_addr_prefix_to_string(a->family, &a->in_addr, a->prefixlen, &str);
|
||||
log_link_debug(link, "an address %s is not ready", strnull(str));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1263,9 +1263,9 @@ int manager_rtnl_process_address(sd_netlink *rtnl, sd_netlink_message *message,
|
||||
if (r < 0) {
|
||||
_cleanup_free_ char *buf = NULL;
|
||||
|
||||
(void) in_addr_to_string(tmp->family, &tmp->in_addr, &buf);
|
||||
log_link_warning_errno(link, r, "Failed to remember foreign address %s/%u, ignoring: %m",
|
||||
strnull(buf), tmp->prefixlen);
|
||||
(void) in_addr_prefix_to_string(tmp->family, &tmp->in_addr, tmp->prefixlen, &buf);
|
||||
log_link_warning_errno(link, r, "Failed to remember foreign address %s, ignoring: %m",
|
||||
strnull(buf));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -1457,6 +1457,7 @@ int config_parse_broadcast(
|
||||
|
||||
Network *network = userdata;
|
||||
_cleanup_(address_free_or_set_invalidp) Address *n = NULL;
|
||||
union in_addr_union u;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
@ -1480,13 +1481,14 @@ int config_parse_broadcast(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = in_addr_from_string(AF_INET, rvalue, (union in_addr_union*) &n->broadcast);
|
||||
r = in_addr_from_string(AF_INET, rvalue, &u);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, r,
|
||||
"Broadcast is invalid, ignoring assignment: %s", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
n->broadcast = u.in;
|
||||
n->family = AF_INET;
|
||||
TAKE_PTR(n);
|
||||
|
||||
|
@ -47,7 +47,7 @@ static Address* link_find_dhcp_server_address(Link *link) {
|
||||
/* The first statically configured address if there is any */
|
||||
ORDERED_HASHMAP_FOREACH(address, link->network->addresses_by_section)
|
||||
if (address->family == AF_INET &&
|
||||
!in_addr_is_null(address->family, &address->in_addr))
|
||||
in_addr_is_set(address->family, &address->in_addr))
|
||||
return address;
|
||||
|
||||
/* If that didn't work, find a suitable address we got from the pool */
|
||||
|
@ -122,7 +122,7 @@ static int route_scope_from_address(const Route *route, const struct in_addr *se
|
||||
assert(self_addr);
|
||||
|
||||
if (in4_addr_is_localhost(&route->dst.in) ||
|
||||
(!in4_addr_is_null(self_addr) && in4_addr_equal(&route->dst.in, self_addr)))
|
||||
(in4_addr_is_set(self_addr) && in4_addr_equal(&route->dst.in, self_addr)))
|
||||
return RT_SCOPE_HOST;
|
||||
else if (in4_addr_is_null(&route->gw.in))
|
||||
return RT_SCOPE_LINK;
|
||||
@ -835,7 +835,7 @@ static int dhcp4_update_address(Link *link, bool announce) {
|
||||
if (r < 0 && r != -ENODATA)
|
||||
return log_link_error_errno(link, r, "DHCP error: Could not get gateway: %m");
|
||||
|
||||
if (r > 0 && !in4_addr_is_null(&router[0]))
|
||||
if (r > 0 && in4_addr_is_set(&router[0]))
|
||||
log_struct(LOG_INFO,
|
||||
LOG_LINK_INTERFACE(link),
|
||||
LOG_LINK_MESSAGE(link, "DHCPv4 address "IPV4_ADDRESS_FMT_STR"/%u via "IPV4_ADDRESS_FMT_STR,
|
||||
|
@ -379,7 +379,7 @@ static int dhcp6_set_pd_address(
|
||||
|
||||
address->in_addr = *prefix;
|
||||
|
||||
if (!in_addr_is_null(AF_INET6, &link->network->dhcp6_pd_token))
|
||||
if (in_addr_is_set(AF_INET6, &link->network->dhcp6_pd_token))
|
||||
memcpy(address->in_addr.in6.s6_addr + 8, link->network->dhcp6_pd_token.in6.s6_addr + 8, 8);
|
||||
else {
|
||||
r = generate_ipv6_eui_64_address(link, &address->in_addr.in6);
|
||||
@ -785,23 +785,21 @@ static int dhcp6_set_unreachable_route(Link *link, const union in_addr_union *ad
|
||||
assert(link);
|
||||
assert(addr);
|
||||
|
||||
(void) in_addr_to_string(AF_INET6, addr, &buf);
|
||||
(void) in_addr_prefix_to_string(AF_INET6, addr, prefixlen, &buf);
|
||||
|
||||
if (prefixlen > 64) {
|
||||
log_link_debug(link, "PD Prefix length > 64, ignoring prefix %s/%u",
|
||||
strna(buf), prefixlen);
|
||||
log_link_debug(link, "PD Prefix length > 64, ignoring prefix %s", strna(buf));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (prefixlen == 64) {
|
||||
log_link_debug(link, "Not adding a blocking route for DHCPv6 delegated subnet %s/64 since distributed prefix is 64",
|
||||
log_link_debug(link, "Not adding a blocking route for DHCPv6 delegated subnet %s since distributed prefix is 64",
|
||||
strna(buf));
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (prefixlen < 48)
|
||||
log_link_warning(link, "PD Prefix length < 48, looks unusual %s/%u",
|
||||
strna(buf), prefixlen);
|
||||
log_link_warning(link, "PD Prefix length < 48, looks unusual: %s", strna(buf));
|
||||
|
||||
r = route_new(&route);
|
||||
if (r < 0)
|
||||
@ -816,8 +814,8 @@ static int dhcp6_set_unreachable_route(Link *link, const union in_addr_union *ad
|
||||
|
||||
r = route_configure(route, link, dhcp6_route_handler, &ret);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Failed to set unreachable route for DHCPv6 delegated subnet %s/%u: %m",
|
||||
strna(buf), prefixlen);
|
||||
return log_link_error_errno(link, r, "Failed to set unreachable route for DHCPv6 delegated subnet %s: %m",
|
||||
strna(buf));
|
||||
if (r > 0)
|
||||
link->dhcp6_route_configured = false;
|
||||
|
||||
@ -825,8 +823,8 @@ static int dhcp6_set_unreachable_route(Link *link, const union in_addr_union *ad
|
||||
|
||||
r = set_ensure_put(&link->dhcp6_routes, &route_hash_ops, ret);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Failed to store unreachable route for DHCPv6 delegated subnet %s/%u: %m",
|
||||
strna(buf), prefixlen);
|
||||
return log_link_error_errno(link, r, "Failed to store unreachable route for DHCPv6 delegated subnet %s: %m",
|
||||
strna(buf));
|
||||
|
||||
(void) set_remove(link->dhcp6_routes_old, ret);
|
||||
|
||||
@ -885,9 +883,9 @@ static int dhcp6_pd_prefix_acquired(Link *dhcp6_link) {
|
||||
uint64_t n_prefixes = UINT64_C(1) << (64 - pd_prefix_len);
|
||||
_cleanup_free_ char *buf = NULL;
|
||||
|
||||
(void) in_addr_to_string(AF_INET6, &prefix, &buf);
|
||||
log_link_debug(dhcp6_link, "Assigning up to %" PRIu64 " prefixes from %s/%u",
|
||||
n_prefixes, strna(buf), pd_prefix_len);
|
||||
(void) in_addr_prefix_to_string(AF_INET6, &prefix, pd_prefix_len, &buf);
|
||||
log_link_debug(dhcp6_link, "Assigning up to %" PRIu64 " prefixes from %s",
|
||||
n_prefixes, strna(buf));
|
||||
}
|
||||
|
||||
dhcp6_pd_prefix_distribute(dhcp6_link,
|
||||
@ -962,7 +960,7 @@ static void log_dhcp6_address(Link *link, const Address *address, char **ret) {
|
||||
assert(link);
|
||||
assert(address);
|
||||
|
||||
(void) in_addr_to_string(address->family, &address->in_addr, &buffer);
|
||||
(void) in_addr_prefix_to_string(address->family, &address->in_addr, address->prefixlen, &buffer);
|
||||
if (address->cinfo.ifa_valid != CACHE_INFO_INFINITY_LIFE_TIME)
|
||||
valid_str = format_timespan(valid_buf, FORMAT_TIMESPAN_MAX,
|
||||
address->cinfo.ifa_valid * USEC_PER_SEC,
|
||||
@ -994,18 +992,18 @@ static void log_dhcp6_address(Link *link, const Address *address, char **ret) {
|
||||
break;
|
||||
}
|
||||
|
||||
log_link_warning(link, "DHCPv6 address %s/%u (valid %s%s, preferred %s%s) conflicts the existing address %s/%u%s.",
|
||||
strnull(buffer), address->prefixlen,
|
||||
log_link_warning(link, "DHCPv6 address %s (valid %s%s, preferred %s%s) conflicts the existing address %s %s.",
|
||||
strna(buffer),
|
||||
valid_str ? "for " : "forever", strempty(valid_str),
|
||||
preferred_str ? "for " : "forever", strempty(preferred_str),
|
||||
strnull(buffer), existing->prefixlen,
|
||||
strna(buffer),
|
||||
by_ndisc ? "assigned by NDISC. Please try to use or update IPv6Token= setting "
|
||||
"to change the address generated by NDISC, or disable UseAutonomousPrefix=" : "");
|
||||
goto finalize;
|
||||
|
||||
simple_log:
|
||||
log_link_full(link, log_level, "DHCPv6 address %s/%u (valid %s%s, preferred %s%s)",
|
||||
strnull(buffer), address->prefixlen,
|
||||
log_link_full(link, log_level, "DHCPv6 address %s (valid %s%s, preferred %s%s)",
|
||||
strna(buffer),
|
||||
valid_str ? "for " : "forever", strempty(valid_str),
|
||||
preferred_str ? "for " : "forever", strempty(preferred_str));
|
||||
|
||||
@ -1040,8 +1038,7 @@ static int dhcp6_update_address(
|
||||
|
||||
r = address_configure(addr, link, dhcp6_address_handler, &ret);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Failed to set DHCPv6 address %s/%u: %m",
|
||||
strnull(buffer), addr->prefixlen);
|
||||
return log_link_error_errno(link, r, "Failed to set DHCPv6 address %s: %m", strna(buffer));
|
||||
if (r > 0)
|
||||
link->dhcp6_address_configured = false;
|
||||
|
||||
@ -1049,8 +1046,7 @@ static int dhcp6_update_address(
|
||||
|
||||
r = set_ensure_put(&link->dhcp6_addresses, &address_hash_ops, ret);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Failed to store DHCPv6 address %s/%u: %m",
|
||||
strnull(buffer), addr->prefixlen);
|
||||
return log_link_error_errno(link, r, "Failed to store DHCPv6 address %s: %m", strna(buffer));
|
||||
|
||||
(void) set_remove(link->dhcp6_addresses_old, ret);
|
||||
|
||||
@ -1235,7 +1231,7 @@ int dhcp6_request_address(Link *link, int ir) {
|
||||
assert(link);
|
||||
assert(link->dhcp6_client);
|
||||
assert(link->network);
|
||||
assert(in_addr_is_link_local(AF_INET6, (const union in_addr_union*) &link->ipv6ll_address) > 0);
|
||||
assert(in6_addr_is_link_local(&link->ipv6ll_address));
|
||||
|
||||
r = sd_dhcp6_client_is_running(link->dhcp6_client);
|
||||
if (r < 0)
|
||||
@ -1613,6 +1609,8 @@ int config_parse_dhcp6_pd_hint(
|
||||
void *userdata) {
|
||||
|
||||
Network *network = data;
|
||||
union in_addr_union u;
|
||||
unsigned char prefixlen;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
@ -1620,18 +1618,22 @@ int config_parse_dhcp6_pd_hint(
|
||||
assert(rvalue);
|
||||
assert(data);
|
||||
|
||||
r = in_addr_prefix_from_string(rvalue, AF_INET6, (union in_addr_union *) &network->dhcp6_pd_address, &network->dhcp6_pd_length);
|
||||
r = in_addr_prefix_from_string(rvalue, AF_INET6, &u, &prefixlen);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse PrefixDelegationHint=%s, ignoring assignment", rvalue);
|
||||
log_syntax(unit, LOG_WARNING, filename, line, r,
|
||||
"Failed to parse %s=%s, ignoring assignment.", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (network->dhcp6_pd_length < 1 || network->dhcp6_pd_length > 128) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid prefix length='%d', ignoring assignment", network->dhcp6_pd_length);
|
||||
network->dhcp6_pd_length = 0;
|
||||
if (prefixlen < 1 || prefixlen > 128) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0,
|
||||
"Invalid prefix length in %s=%s, ignoring assignment.", lvalue, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
network->dhcp6_pd_address = u.in6;
|
||||
network->dhcp6_pd_length = prefixlen;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -142,7 +142,7 @@ static int fdb_entry_configure(Link *link, FdbEntry *fdb_entry) {
|
||||
return log_link_error_errno(link, r, "Could not append NDA_VLAN attribute: %m");
|
||||
}
|
||||
|
||||
if (!in_addr_is_null(fdb_entry->family, &fdb_entry->destination_addr)) {
|
||||
if (in_addr_is_set(fdb_entry->family, &fdb_entry->destination_addr)) {
|
||||
r = netlink_message_append_in_addr_union(req, NDA_DST, fdb_entry->family, &fdb_entry->destination_addr);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not append NDA_DST attribute: %m");
|
||||
|
@ -740,8 +740,8 @@ void link_check_ready(Link *link) {
|
||||
if (!address_is_ready(a)) {
|
||||
_cleanup_free_ char *str = NULL;
|
||||
|
||||
(void) in_addr_to_string(a->family, &a->in_addr, &str);
|
||||
return (void) log_link_debug(link, "%s(): an address %s/%d is not ready.", __func__, strnull(str), a->prefixlen);
|
||||
(void) in_addr_prefix_to_string(a->family, &a->in_addr, a->prefixlen, &str);
|
||||
return (void) log_link_debug(link, "%s(): an address %s is not ready.", __func__, strna(str));
|
||||
}
|
||||
|
||||
if (!link->static_routes_configured)
|
||||
@ -766,9 +766,8 @@ void link_check_ready(Link *link) {
|
||||
bool has_ndisc_address = false;
|
||||
NDiscAddress *n;
|
||||
|
||||
if (link_ipv6ll_enabled(link) &&
|
||||
in_addr_is_null(AF_INET6, (const union in_addr_union*) &link->ipv6ll_address))
|
||||
return (void) log_link_debug(link, "%s(): IPv6LL is not configured.", __func__);
|
||||
if (link_ipv6ll_enabled(link) && !in6_addr_is_set(&link->ipv6ll_address))
|
||||
return (void) log_link_debug(link, "%s(): IPv6LL is not configured yet.", __func__);
|
||||
|
||||
SET_FOREACH(n, link->ndisc_addresses)
|
||||
if (!n->marked) {
|
||||
@ -1156,7 +1155,7 @@ static int link_acquire_ipv6_conf(Link *link) {
|
||||
|
||||
if (link->radv) {
|
||||
assert(link->radv);
|
||||
assert(in_addr_is_link_local(AF_INET6, (const union in_addr_union*)&link->ipv6ll_address) > 0);
|
||||
assert(in6_addr_is_link_local(&link->ipv6ll_address));
|
||||
|
||||
log_link_debug(link, "Starting IPv6 Router Advertisements");
|
||||
|
||||
@ -1173,7 +1172,7 @@ static int link_acquire_ipv6_conf(Link *link) {
|
||||
DHCP6_CLIENT_START_MODE_INFORMATION_REQUEST,
|
||||
DHCP6_CLIENT_START_MODE_SOLICIT)) {
|
||||
assert(link->dhcp6_client);
|
||||
assert(in_addr_is_link_local(AF_INET6, (const union in_addr_union*)&link->ipv6ll_address) > 0);
|
||||
assert(in6_addr_is_link_local(&link->ipv6ll_address));
|
||||
|
||||
r = dhcp6_request_address(link, link->network->dhcp6_without_ra == DHCP6_CLIENT_START_MODE_INFORMATION_REQUEST);
|
||||
if (r < 0 && r != -EBUSY)
|
||||
@ -1223,7 +1222,7 @@ static int link_acquire_conf(Link *link) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (!in_addr_is_null(AF_INET6, (const union in_addr_union*) &link->ipv6ll_address)) {
|
||||
if (in6_addr_is_set(&link->ipv6ll_address)) {
|
||||
r = link_acquire_ipv6_conf(link);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -95,12 +95,12 @@ static int ndisc_address_callback(Address *address) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&router)) {
|
||||
if (in6_addr_is_null(&router)) {
|
||||
_cleanup_free_ char *buf = NULL;
|
||||
|
||||
(void) in_addr_to_string(address->family, &address->in_addr, &buf);
|
||||
log_link_debug(address->link, "%s is called for %s/%u, but it is already removed, ignoring.",
|
||||
__func__, strna(buf), address->prefixlen);
|
||||
(void) in_addr_prefix_to_string(address->family, &address->in_addr, address->prefixlen, &buf);
|
||||
log_link_debug(address->link, "%s is called for %s, but it is already removed, ignoring.",
|
||||
__func__, strna(buf));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -150,7 +150,7 @@ static int ndisc_remove_old_one(Link *link, const struct in6_addr *router, bool
|
||||
if (DEBUG_LOGGING) {
|
||||
_cleanup_free_ char *buf = NULL;
|
||||
|
||||
(void) in_addr_to_string(AF_INET6, (union in_addr_union *) router, &buf);
|
||||
(void) in_addr_to_string(AF_INET6, (const union in_addr_union*) router, &buf);
|
||||
log_link_debug(link, "No SLAAC address obtained from %s is ready. "
|
||||
"The old NDisc information will be removed later.",
|
||||
strna(buf));
|
||||
@ -162,7 +162,7 @@ static int ndisc_remove_old_one(Link *link, const struct in6_addr *router, bool
|
||||
if (DEBUG_LOGGING) {
|
||||
_cleanup_free_ char *buf = NULL;
|
||||
|
||||
(void) in_addr_to_string(AF_INET6, (union in_addr_union *) router, &buf);
|
||||
(void) in_addr_to_string(AF_INET6, (const union in_addr_union*) router, &buf);
|
||||
log_link_debug(link, "Removing old NDisc information obtained from %s.", strna(buf));
|
||||
}
|
||||
|
||||
@ -649,12 +649,11 @@ static int ndisc_router_generate_addresses(Link *link, struct in6_addr *address,
|
||||
_cleanup_free_ struct in6_addr *new_address = NULL;
|
||||
|
||||
if (j->address_generation_type == IPV6_TOKEN_ADDRESS_GENERATION_PREFIXSTABLE
|
||||
&& (IN6_IS_ADDR_UNSPECIFIED(&j->prefix) || IN6_ARE_ADDR_EQUAL(&j->prefix, address))) {
|
||||
&& (in6_addr_is_null(&j->prefix) || IN6_ARE_ADDR_EQUAL(&j->prefix, address))) {
|
||||
/* While this loop uses dad_counter and a retry limit as specified in RFC 7217, the loop
|
||||
does not actually attempt Duplicate Address Detection; the counter will be incremented
|
||||
only when the address generation algorithm produces an invalid address, and the loop
|
||||
may exit with an address which ends up being unusable due to duplication on the link.
|
||||
*/
|
||||
* does not actually attempt Duplicate Address Detection; the counter will be incremented
|
||||
* only when the address generation algorithm produces an invalid address, and the loop
|
||||
* may exit with an address which ends up being unusable due to duplication on the link. */
|
||||
for (; j->dad_counter < DAD_CONFLICTS_IDGEN_RETRIES_RFC7217; j->dad_counter++) {
|
||||
r = make_stableprivate_address(link, address, prefixlen, j->dad_counter, &new_address);
|
||||
if (r < 0)
|
||||
|
@ -279,7 +279,7 @@ static int nexthop_configure(NextHop *nexthop, Link *link) {
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not append NHA_OIF attribute: %m");
|
||||
|
||||
if (in_addr_is_null(nexthop->family, &nexthop->gw) == 0) {
|
||||
if (in_addr_is_set(nexthop->family, &nexthop->gw)) {
|
||||
r = netlink_message_append_in_addr_union(req, NHA_GATEWAY, nexthop->family, &nexthop->gw);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not append NHA_GATEWAY attribute: %m");
|
||||
@ -591,7 +591,7 @@ int config_parse_nexthop_family(
|
||||
return log_oom();
|
||||
|
||||
if (isempty(rvalue) &&
|
||||
in_addr_is_null(n->family, &n->gw) != 0) {
|
||||
!in_addr_is_set(n->family, &n->gw)) {
|
||||
/* Accept an empty string only when Gateway= is null or not specified. */
|
||||
n->family = AF_UNSPEC;
|
||||
TAKE_PTR(n);
|
||||
@ -605,7 +605,7 @@ int config_parse_nexthop_family(
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (in_addr_is_null(n->family, &n->gw) == 0 &&
|
||||
if (in_addr_is_set(n->family, &n->gw) &&
|
||||
((a == ADDRESS_FAMILY_IPV4 && n->family == AF_INET6) ||
|
||||
(a == ADDRESS_FAMILY_IPV6 && n->family == AF_INET))) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0,
|
||||
|
@ -525,8 +525,8 @@ static int radv_set_dns(Link *link, Link *uplink) {
|
||||
|
||||
p = dns;
|
||||
for (size_t i = 0; i < link->network->n_router_dns; i++)
|
||||
if (IN6_IS_ADDR_UNSPECIFIED(&link->network->router_dns[i])) {
|
||||
if (!IN6_IS_ADDR_UNSPECIFIED(&link->ipv6ll_address))
|
||||
if (in6_addr_is_null(&link->network->router_dns[i])) {
|
||||
if (in6_addr_is_set(&link->ipv6ll_address))
|
||||
*(p++) = link->ipv6ll_address;
|
||||
} else
|
||||
*(p++) = link->network->router_dns[i];
|
||||
|
@ -614,26 +614,24 @@ static void log_route_debug(const Route *route, const char *str, const Link *lin
|
||||
/* link may be NULL. */
|
||||
|
||||
if (DEBUG_LOGGING) {
|
||||
_cleanup_free_ char *dst = NULL, *dst_prefixlen = NULL, *src = NULL, *gw = NULL,
|
||||
*prefsrc = NULL, *table = NULL, *scope = NULL, *proto = NULL;
|
||||
_cleanup_free_ char *dst = NULL, *src = NULL, *gw = NULL, *prefsrc = NULL,
|
||||
*table = NULL, *scope = NULL, *proto = NULL;
|
||||
|
||||
if (!in_addr_is_null(route->family, &route->dst)) {
|
||||
(void) in_addr_to_string(route->family, &route->dst, &dst);
|
||||
(void) asprintf(&dst_prefixlen, "/%u", route->dst_prefixlen);
|
||||
}
|
||||
if (!in_addr_is_null(route->family, &route->src))
|
||||
if (in_addr_is_set(route->family, &route->dst))
|
||||
(void) in_addr_prefix_to_string(route->family, &route->dst, route->dst_prefixlen, &dst);
|
||||
if (in_addr_is_set(route->family, &route->src))
|
||||
(void) in_addr_to_string(route->family, &route->src, &src);
|
||||
if (in_addr_is_null(route->gw_family, &route->gw) == 0)
|
||||
if (in_addr_is_set(route->gw_family, &route->gw))
|
||||
(void) in_addr_to_string(route->gw_family, &route->gw, &gw);
|
||||
if (!in_addr_is_null(route->family, &route->prefsrc))
|
||||
if (in_addr_is_set(route->family, &route->prefsrc))
|
||||
(void) in_addr_to_string(route->family, &route->prefsrc, &prefsrc);
|
||||
(void) route_scope_to_string_alloc(route->scope, &scope);
|
||||
(void) manager_get_route_table_to_string(m, route->table, &table);
|
||||
(void) route_protocol_full_to_string_alloc(route->protocol, &proto);
|
||||
|
||||
log_link_debug(link,
|
||||
"%s route: dst: %s%s, src: %s, gw: %s, prefsrc: %s, scope: %s, table: %s, proto: %s, type: %s",
|
||||
str, strna(dst), strempty(dst_prefixlen), strna(src), strna(gw), strna(prefsrc),
|
||||
"%s route: dst: %s, src: %s, gw: %s, prefsrc: %s, scope: %s, table: %s, proto: %s, type: %s",
|
||||
str, strna(dst), strna(src), strna(gw), strna(prefsrc),
|
||||
strna(scope), strna(table), strna(proto),
|
||||
strna(route_type_to_string(route->type)));
|
||||
}
|
||||
@ -648,7 +646,7 @@ static int route_set_netlink_message(const Route *route, sd_netlink_message *req
|
||||
|
||||
/* link may be NULL */
|
||||
|
||||
if (in_addr_is_null(route->gw_family, &route->gw) == 0) {
|
||||
if (in_addr_is_set(route->gw_family, &route->gw)) {
|
||||
if (route->gw_family == route->family) {
|
||||
r = netlink_message_append_in_addr_union(req, RTA_GATEWAY, route->gw_family, &route->gw);
|
||||
if (r < 0)
|
||||
@ -685,7 +683,7 @@ static int route_set_netlink_message(const Route *route, sd_netlink_message *req
|
||||
return log_link_error_errno(link, r, "Could not set source prefix length: %m");
|
||||
}
|
||||
|
||||
if (in_addr_is_null(route->family, &route->prefsrc) == 0) {
|
||||
if (in_addr_is_set(route->family, &route->prefsrc)) {
|
||||
r = netlink_message_append_in_addr_union(req, RTA_PREFSRC, route->family, &route->prefsrc);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not append RTA_PREFSRC attribute: %m");
|
||||
@ -1260,7 +1258,7 @@ int link_set_routes(Link *link) {
|
||||
if (rt->gateway_from_dhcp_or_ra)
|
||||
continue;
|
||||
|
||||
if ((in_addr_is_null(rt->gw_family, &rt->gw) != 0 && ordered_set_isempty(rt->multipath_routes)) != (phase == PHASE_NON_GATEWAY))
|
||||
if ((!in_addr_is_set(rt->gw_family, &rt->gw) && ordered_set_isempty(rt->multipath_routes)) != (phase == PHASE_NON_GATEWAY))
|
||||
continue;
|
||||
|
||||
r = route_configure(rt, link, route_handler, NULL);
|
||||
@ -2565,7 +2563,7 @@ static int route_section_verify(Route *route, Network *network) {
|
||||
route->priority = IP6_RT_PRIO_USER;
|
||||
|
||||
if (ordered_hashmap_isempty(network->addresses_by_section) &&
|
||||
in_addr_is_null(route->gw_family, &route->gw) == 0 &&
|
||||
in_addr_is_set(route->gw_family, &route->gw) &&
|
||||
route->gateway_onlink < 0) {
|
||||
log_warning("%s: Gateway= without static address configured. "
|
||||
"Enabling GatewayOnLink= option.",
|
||||
|
@ -401,13 +401,13 @@ static void log_routing_policy_rule_debug(const RoutingPolicyRule *rule, int fam
|
||||
if (DEBUG_LOGGING) {
|
||||
_cleanup_free_ char *from = NULL, *to = NULL, *table = NULL;
|
||||
|
||||
(void) in_addr_to_string(family, &rule->from, &from);
|
||||
(void) in_addr_to_string(family, &rule->to, &to);
|
||||
(void) in_addr_prefix_to_string(family, &rule->from, rule->from_prefixlen, &from);
|
||||
(void) in_addr_prefix_to_string(family, &rule->to, rule->to_prefixlen, &to);
|
||||
(void) manager_get_route_table_to_string(m, rule->table, &table);
|
||||
|
||||
log_link_debug(link,
|
||||
"%s routing policy rule: priority: %"PRIu32", %s/%u -> %s/%u, iif: %s, oif: %s, table: %s",
|
||||
str, rule->priority, strna(from), rule->from_prefixlen, strna(to), rule->to_prefixlen,
|
||||
"%s routing policy rule: priority: %"PRIu32", %s -> %s, iif: %s, oif: %s, table: %s",
|
||||
str, rule->priority, strna(from), strna(to),
|
||||
strna(rule->iif), strna(rule->oif), strna(table));
|
||||
}
|
||||
}
|
||||
@ -420,7 +420,7 @@ static int routing_policy_rule_set_netlink_message(const RoutingPolicyRule *rule
|
||||
|
||||
/* link may be NULL. */
|
||||
|
||||
if (in_addr_is_null(rule->family, &rule->from) == 0) {
|
||||
if (in_addr_is_set(rule->family, &rule->from)) {
|
||||
r = netlink_message_append_in_addr_union(m, FRA_SRC, rule->family, &rule->from);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not append FRA_SRC attribute: %m");
|
||||
@ -430,7 +430,7 @@ static int routing_policy_rule_set_netlink_message(const RoutingPolicyRule *rule
|
||||
return log_link_error_errno(link, r, "Could not set source prefix length: %m");
|
||||
}
|
||||
|
||||
if (in_addr_is_null(rule->family, &rule->to) == 0) {
|
||||
if (in_addr_is_set(rule->family, &rule->to)) {
|
||||
r = netlink_message_append_in_addr_union(m, FRA_DST, rule->family, &rule->to);
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Could not append FRA_DST attribute: %m");
|
||||
|
@ -34,15 +34,15 @@ static void test_deserialize_in_addr(void) {
|
||||
|
||||
assert_se((size = deserialize_in_addrs(&addresses, addresses_string)) >= 0);
|
||||
assert_se(size == 3);
|
||||
assert_se(in_addr_equal(AF_INET, &a, (union in_addr_union *) &addresses[0]));
|
||||
assert_se(in_addr_equal(AF_INET, &b, (union in_addr_union *) &addresses[1]));
|
||||
assert_se(in_addr_equal(AF_INET, &c, (union in_addr_union *) &addresses[2]));
|
||||
assert_se(in4_addr_equal(&a.in, &addresses[0]));
|
||||
assert_se(in4_addr_equal(&b.in, &addresses[1]));
|
||||
assert_se(in4_addr_equal(&c.in, &addresses[2]));
|
||||
|
||||
assert_se((size = deserialize_in6_addrs(&addresses6, addresses_string)) >= 0);
|
||||
assert_se(size == 3);
|
||||
assert_se(in_addr_equal(AF_INET6, &d, (union in_addr_union *) &addresses6[0]));
|
||||
assert_se(in_addr_equal(AF_INET6, &e, (union in_addr_union *) &addresses6[1]));
|
||||
assert_se(in_addr_equal(AF_INET6, &f, (union in_addr_union *) &addresses6[2]));
|
||||
assert_se(in6_addr_equal(&d.in6, &addresses6[0]));
|
||||
assert_se(in6_addr_equal(&e.in6, &addresses6[1]));
|
||||
assert_se(in6_addr_equal(&f.in6, &addresses6[2]));
|
||||
}
|
||||
|
||||
static void test_deserialize_dhcp_routes(void) {
|
||||
|
@ -92,7 +92,7 @@ int expose_port_flush(FirewallContext **fw_ctx, ExposePort* l, int af, union in_
|
||||
if (!l)
|
||||
return 0;
|
||||
|
||||
if (in_addr_is_null(af, exposed))
|
||||
if (!in_addr_is_set(af, exposed))
|
||||
return 0;
|
||||
|
||||
log_debug("Lost IP address.");
|
||||
@ -159,7 +159,7 @@ int expose_port_execute(sd_netlink *rtnl, FirewallContext **fw_ctx, ExposePort *
|
||||
p->host_port,
|
||||
&new_exposed,
|
||||
p->container_port,
|
||||
in_addr_is_null(af, exposed) ? NULL : exposed);
|
||||
in_addr_is_set(af, exposed) ? exposed : NULL);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to modify %s firewall: %m", af_to_name(af));
|
||||
}
|
||||
|
@ -134,7 +134,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
|
||||
r_tuple->next = r_tuple_prev;
|
||||
r_tuple->name = r_name;
|
||||
r_tuple->family = a->family;
|
||||
r_tuple->scopeid = a->family == AF_INET6 && IN6_IS_ADDR_LINKLOCAL(&a->address.in6) ? a->ifindex : 0;
|
||||
r_tuple->scopeid = a->family == AF_INET6 && in6_addr_is_link_local(&a->address.in6) ? a->ifindex : 0;
|
||||
memcpy(r_tuple->addr, &a->address, 16);
|
||||
|
||||
idx += ALIGN(sizeof(struct gaih_addrtuple));
|
||||
|
@ -77,7 +77,7 @@ static uint32_t ifindex_to_scopeid(int family, const void *a, int ifindex) {
|
||||
assert(sizeof(in6) == FAMILY_ADDRESS_SIZE(AF_INET6));
|
||||
memcpy(&in6, a, sizeof(struct in6_addr));
|
||||
|
||||
return IN6_IS_ADDR_LINKLOCAL(&in6) ? ifindex : 0;
|
||||
return in6_addr_is_link_local(&in6) ? ifindex : 0;
|
||||
}
|
||||
|
||||
static int json_dispatch_ifindex(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
|
||||
|
@ -1730,7 +1730,7 @@ bool dns_resource_record_is_link_local_address(DnsResourceRecord *rr) {
|
||||
return in4_addr_is_link_local(&rr->a.in_addr);
|
||||
|
||||
if (rr->key->type == DNS_TYPE_AAAA)
|
||||
return IN6_IS_ADDR_LINKLOCAL(&rr->aaaa.in6_addr);
|
||||
return in6_addr_is_link_local(&rr->aaaa.in6_addr);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -920,10 +920,10 @@ void dns_scope_process_query(DnsScope *s, DnsStream *stream, DnsPacket *p) {
|
||||
* the LLMNR multicast addresses. See RFC 4795,
|
||||
* section 2.5. */
|
||||
|
||||
if (p->family == AF_INET && !in_addr_equal(AF_INET, &p->destination, (union in_addr_union*) &LLMNR_MULTICAST_IPV4_ADDRESS))
|
||||
if (p->family == AF_INET && !in4_addr_equal(&p->destination.in, &LLMNR_MULTICAST_IPV4_ADDRESS))
|
||||
return;
|
||||
|
||||
if (p->family == AF_INET6 && !in_addr_equal(AF_INET6, &p->destination, (union in_addr_union*) &LLMNR_MULTICAST_IPV6_ADDRESS))
|
||||
if (p->family == AF_INET6 && !in6_addr_equal(&p->destination.in6, &LLMNR_MULTICAST_IPV6_ADDRESS))
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -187,7 +187,7 @@ static int dns_stream_identify(DnsStream *s) {
|
||||
/* If we don't know the interface index still, we look for the
|
||||
* first local interface with a matching address. Yuck! */
|
||||
if (s->ifindex <= 0)
|
||||
s->ifindex = manager_find_ifindex(s->manager, s->local.sa.sa_family, s->local.sa.sa_family == AF_INET ? (union in_addr_union*) &s->local.in.sin_addr : (union in_addr_union*) &s->local.in6.sin6_addr);
|
||||
s->ifindex = manager_find_ifindex(s->manager, s->local.sa.sa_family, sockaddr_in_addr(&s->local.sa));
|
||||
|
||||
if (s->protocol == DNS_PROTOCOL_LLMNR && s->ifindex > 0) {
|
||||
/* Make sure all packets for this connection are sent on the same interface */
|
||||
|
@ -61,7 +61,7 @@ static int parse_line(EtcHosts *hosts, unsigned nr, const char *line) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = in_addr_is_null(address.family, &address.address);
|
||||
r = in_addr_data_is_null(&address);
|
||||
if (r < 0) {
|
||||
log_warning_errno(r, "/etc/hosts:%u: address '%s' is invalid, ignoring: %m", nr, address_str);
|
||||
return 0;
|
||||
|
@ -697,6 +697,12 @@ LinkAddress *link_find_address(Link *l, int family, const union in_addr_union *i
|
||||
|
||||
assert(l);
|
||||
|
||||
if (!IN_SET(family, AF_INET, AF_INET6))
|
||||
return NULL;
|
||||
|
||||
if (!in_addr)
|
||||
return NULL;
|
||||
|
||||
LIST_FOREACH(addresses, a, l->addresses)
|
||||
if (a->family == family && in_addr_equal(family, &a->in_addr, in_addr))
|
||||
return a;
|
||||
|
@ -1153,6 +1153,12 @@ int manager_find_ifindex(Manager *m, int family, const union in_addr_union *in_a
|
||||
|
||||
assert(m);
|
||||
|
||||
if (!IN_SET(family, AF_INET, AF_INET6))
|
||||
return 0;
|
||||
|
||||
if (!in_addr)
|
||||
return 0;
|
||||
|
||||
a = manager_find_link_address(m, family, in_addr);
|
||||
if (a)
|
||||
return a->link->ifindex;
|
||||
@ -1248,6 +1254,12 @@ LinkAddress* manager_find_link_address(Manager *m, int family, const union in_ad
|
||||
|
||||
assert(m);
|
||||
|
||||
if (!IN_SET(family, AF_INET, AF_INET6))
|
||||
return NULL;
|
||||
|
||||
if (!in_addr)
|
||||
return NULL;
|
||||
|
||||
HASHMAP_FOREACH(l, m->links) {
|
||||
LinkAddress *a;
|
||||
|
||||
|
@ -33,7 +33,7 @@ bool dns_server_address_valid(int family, const union in_addr_union *sa) {
|
||||
|
||||
/* Refuses the 0 IP addresses as well as 127.0.0.53 (which is our own DNS stub) */
|
||||
|
||||
if (in_addr_is_null(family, sa))
|
||||
if (!in_addr_is_set(family, sa))
|
||||
return false;
|
||||
|
||||
if (family == AF_INET && sa->in.s_addr == htobe32(INADDR_DNS_STUB))
|
||||
|
@ -1474,7 +1474,7 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m
|
||||
if (prefixlen > FAMILY_ADDRESS_SIZE(family) * 8)
|
||||
continue;
|
||||
|
||||
if (in_addr_prefix_to_string(family, (union in_addr_union *) ap, prefixlen, &str) < 0)
|
||||
if (in_addr_prefix_to_string(family, (const union in_addr_union*) ap, prefixlen, &str) < 0)
|
||||
continue;
|
||||
|
||||
if (!strextend_with_separator(&addresses, " ", str))
|
||||
|
Loading…
Reference in New Issue
Block a user