From d50cfa98aacd04f3f5f205469a330f814a4106e7 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 14 Apr 2025 05:56:09 +0900 Subject: [PATCH] tree-wide: IFA_FLAGS is supported since kernel v3.14 Now our baseline on the kernel is v5.4. Let's unconditionally use the IFA_FLAGS attribute, and drop the getter and setter for the deprecated header element. Continuation of 29c2d4e1587e03a4d7589d045b81f7bea91c283e. --- src/libsystemd/sd-netlink/netlink-message-rtnl.c | 2 -- src/libsystemd/sd-netlink/test-netlink.c | 5 +++-- src/resolve/resolved-link.c | 2 +- src/resolve/resolved-link.h | 3 ++- src/shared/local-addresses.c | 5 +++-- src/shared/loopback-setup.c | 11 +++-------- src/systemd/sd-netlink.h | 2 -- 7 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/libsystemd/sd-netlink/netlink-message-rtnl.c b/src/libsystemd/sd-netlink/netlink-message-rtnl.c index 986e10c6231..06f246668ad 100644 --- a/src/libsystemd/sd-netlink/netlink-message-rtnl.c +++ b/src/libsystemd/sd-netlink/netlink-message-rtnl.c @@ -136,8 +136,6 @@ DEFINE_RTNL_MESSAGE_ADDR_GETTER(ifa_index, ifindex, int); DEFINE_RTNL_MESSAGE_ADDR_GETTER(ifa_family, family, int); DEFINE_RTNL_MESSAGE_PREFIXLEN_SETTER(addr, struct ifaddrmsg, ifa_family, ifa_prefixlen, prefixlen, uint8_t); DEFINE_RTNL_MESSAGE_ADDR_GETTER(ifa_prefixlen, prefixlen, uint8_t); -DEFINE_RTNL_MESSAGE_ADDR_SETTER(ifa_flags, flags, uint8_t); -DEFINE_RTNL_MESSAGE_ADDR_GETTER(ifa_flags, flags, uint8_t); DEFINE_RTNL_MESSAGE_ADDR_SETTER(ifa_scope, scope, uint8_t); DEFINE_RTNL_MESSAGE_ADDR_GETTER(ifa_scope, scope, uint8_t); diff --git a/src/libsystemd/sd-netlink/test-netlink.c b/src/libsystemd/sd-netlink/test-netlink.c index a68a37e2823..1468aabc0a5 100644 --- a/src/libsystemd/sd-netlink/test-netlink.c +++ b/src/libsystemd/sd-netlink/test-netlink.c @@ -421,8 +421,9 @@ TEST(dump_addresses) { for (sd_netlink_message *m = reply; m; m = sd_netlink_message_next(m)) { uint16_t type; - unsigned char scope, flags; + unsigned char scope; int family, ifindex; + uint32_t flags; ASSERT_OK(sd_netlink_message_get_type(m, &type)); ASSERT_EQ(type, RTM_NEWADDR); @@ -430,7 +431,7 @@ TEST(dump_addresses) { ASSERT_OK(sd_rtnl_message_addr_get_ifindex(m, &ifindex)); ASSERT_OK(sd_rtnl_message_addr_get_family(m, &family)); ASSERT_OK(sd_rtnl_message_addr_get_scope(m, &scope)); - ASSERT_OK(sd_rtnl_message_addr_get_flags(m, &flags)); + ASSERT_OK(sd_netlink_message_read_u32(m, IFA_FLAGS, &flags)); ASSERT_GT(ifindex, 0); ASSERT_TRUE(IN_SET(family, AF_INET, AF_INET6)); diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c index df4b5993a3b..a4be3f051f6 100644 --- a/src/resolve/resolved-link.c +++ b/src/resolve/resolved-link.c @@ -1161,7 +1161,7 @@ int link_address_update_rtnl(LinkAddress *a, sd_netlink_message *m) { assert(a); assert(m); - r = sd_rtnl_message_addr_get_flags(m, &a->flags); + r = sd_netlink_message_read_u32(m, IFA_FLAGS, &a->flags); if (r < 0) return r; diff --git a/src/resolve/resolved-link.h b/src/resolve/resolved-link.h index 712a81d5ee7..04c11bc4120 100644 --- a/src/resolve/resolved-link.h +++ b/src/resolve/resolved-link.h @@ -29,7 +29,8 @@ struct LinkAddress { union in_addr_union in_addr_broadcast; unsigned char prefixlen; - unsigned char flags, scope; + unsigned char scope; + uint32_t flags; DnsResourceRecord *llmnr_address_rr; DnsResourceRecord *llmnr_ptr_rr; diff --git a/src/shared/local-addresses.c b/src/shared/local-addresses.c index 4e811ba2bf6..372f35f477f 100644 --- a/src/shared/local-addresses.c +++ b/src/shared/local-addresses.c @@ -154,7 +154,7 @@ int local_addresses( for (sd_netlink_message *m = reply; m; m = sd_netlink_message_next(m)) { union in_addr_union a; - unsigned char flags, scope; + unsigned char scope; uint16_t type; int ifi, family; @@ -182,7 +182,8 @@ int local_addresses( if (af != AF_UNSPEC && af != family) continue; - r = sd_rtnl_message_addr_get_flags(m, &flags); + uint32_t flags; + r = sd_netlink_message_read_u32(m, IFA_FLAGS, &flags); if (r < 0) return r; if ((flags & (IFA_F_DEPRECATED|IFA_F_TENTATIVE)) != 0) diff --git a/src/shared/loopback-setup.c b/src/shared/loopback-setup.c index 84d723487a3..4039c2629a5 100644 --- a/src/shared/loopback-setup.c +++ b/src/shared/loopback-setup.c @@ -79,11 +79,11 @@ static int add_ipv4_address(sd_netlink *rtnl, struct state *s) { if (r < 0) return r; - r = sd_rtnl_message_addr_set_flags(req, IFA_F_PERMANENT); + r = sd_rtnl_message_addr_set_scope(req, RT_SCOPE_HOST); if (r < 0) return r; - r = sd_rtnl_message_addr_set_scope(req, RT_SCOPE_HOST); + r = sd_netlink_message_append_u32(req, IFA_FLAGS, IFA_F_PERMANENT); if (r < 0) return r; @@ -115,14 +115,9 @@ static int add_ipv6_address(sd_netlink *rtnl, struct state *s) { return r; uint32_t flags = IFA_F_PERMANENT|IFA_F_NOPREFIXROUTE; - r = sd_rtnl_message_addr_set_flags(req, flags & 0xffu); /* rtnetlink wants low 8 bit of flags via regular flags field… */ + r = sd_netlink_message_append_u32(req, IFA_FLAGS, flags); if (r < 0) return r; - if ((flags & ~0xffu) != 0) { - r = sd_netlink_message_append_u32(req, IFA_FLAGS, flags); /* …and the rest of the flags via IFA_FLAGS */ - if (r < 0) - return r; - } r = sd_rtnl_message_addr_set_scope(req, RT_SCOPE_HOST); if (r < 0) diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index 26633276da0..c758f9b1e41 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -146,8 +146,6 @@ int sd_rtnl_message_addr_get_ifindex(sd_netlink_message *m, int *ret); /* ifa_in int sd_rtnl_message_addr_get_family(sd_netlink_message *m, int *ret); /* ifa_family */ int sd_rtnl_message_addr_set_prefixlen(sd_netlink_message *m, uint8_t prefixlen); /* ifa_prefixlen */ int sd_rtnl_message_addr_get_prefixlen(sd_netlink_message *m, uint8_t *ret); -int sd_rtnl_message_addr_set_flags(sd_netlink_message *m, uint8_t flags); /* ifa_flags */ -int sd_rtnl_message_addr_get_flags(sd_netlink_message *m, uint8_t *ret); int sd_rtnl_message_addr_set_scope(sd_netlink_message *m, uint8_t scope); /* ifa_scope */ int sd_rtnl_message_addr_get_scope(sd_netlink_message *m, uint8_t *ret); -- 2.47.3