}
static int address_set_netlink_message(const Address *address, sd_netlink_message *m, Link *link) {
- uint32_t flags;
int r;
assert(address);
* flags except tentative flag here unconditionally. Without setting the flag, the template
* addresses generated by kernel will not be removed automatically when the main address is
* removed. */
- flags = address->flags & ~IFA_F_TENTATIVE;
- r = sd_rtnl_message_addr_set_flags(m, flags & 0xff);
- if (r < 0)
- return r;
-
- if ((flags & ~0xff) != 0) {
+ uint32_t flags = address->flags & ~IFA_F_TENTATIVE;
+ if (flags != 0) {
r = sd_netlink_message_append_u32(m, IFA_FLAGS, flags);
if (r < 0)
return r;
for (sd_netlink_message *addr = reply; addr; addr = sd_netlink_message_next(addr)) {
_cleanup_(address_unrefp) Address *a = NULL;
- unsigned char flags, prefixlen;
+ unsigned char prefixlen;
struct in6_addr address;
int ifindex;
} else if (link->ifindex != ifindex)
continue;
- r = sd_rtnl_message_addr_get_flags(addr, &flags);
+ uint32_t flags;
+ r = sd_netlink_message_read_u32(addr, IFA_FLAGS, &flags);
if (r < 0) {
- log_link_debug_errno(link, r, "rtnl: received address message without valid flags, ignoring: %m");
+ log_link_debug_errno(link, r, "rtnl: Failed to read IFA_FLAGS attribute, ignoring: %m");
continue;
}
}
r = sd_netlink_message_read_u32(message, IFA_FLAGS, &address->flags);
- if (r == -ENODATA) {
- unsigned char flags;
-
- /* For old kernels. */
- r = sd_rtnl_message_addr_get_flags(message, &flags);
- if (r >= 0)
- address->flags = flags;
- } else if (r < 0)
+ if (r < 0)
log_link_debug_errno(link, r, "rtnl: failed to read IFA_FLAGS attribute, ignoring: %m");
struct ifa_cacheinfo cinfo;