1
0
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:
Lennart Poettering 2021-02-17 23:13:27 +01:00 committed by GitHub
commit 2840d6f61d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 255 additions and 201 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -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:",

View File

@ -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;

View File

@ -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);

View File

@ -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 */

View File

@ -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,

View File

@ -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;
}

View File

@ -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");

View File

@ -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;

View File

@ -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)

View File

@ -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,

View File

@ -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];

View File

@ -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.",

View File

@ -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");

View File

@ -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) {

View File

@ -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));
}

View File

@ -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));

View File

@ -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) {

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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 */

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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))

View File

@ -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))