network/address: IFA_FLAGS is supported since kernel v3.14

Our kernel base line is now v5.4.
This commit is contained in:
Yu Watanabe
2025-02-17 06:20:46 +09:00
parent 7d1a8da719
commit 29c2d4e158
+7 -18
View File
@@ -1148,7 +1148,6 @@ static void address_forget(Link *link, Address *address, bool removed_by_us, con
}
static int address_set_netlink_message(const Address *address, sd_netlink_message *m, Link *link) {
uint32_t flags;
int r;
assert(address);
@@ -1163,12 +1162,8 @@ static int address_set_netlink_message(const Address *address, sd_netlink_messag
* 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;
@@ -1339,7 +1334,7 @@ int link_drop_ipv6ll_addresses(Link *link) {
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;
@@ -1352,9 +1347,10 @@ int link_drop_ipv6ll_addresses(Link *link) {
} 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;
}
@@ -1971,14 +1967,7 @@ int manager_rtnl_process_address(sd_netlink *rtnl, sd_netlink_message *message,
}
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;