]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: IFA_FLAGS is supported since kernel v3.14
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 13 Apr 2025 20:56:09 +0000 (05:56 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Apr 2025 18:41:16 +0000 (03:41 +0900)
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
src/libsystemd/sd-netlink/test-netlink.c
src/resolve/resolved-link.c
src/resolve/resolved-link.h
src/shared/local-addresses.c
src/shared/loopback-setup.c
src/systemd/sd-netlink.h

index 986e10c6231c2dd404e51b265389030dca897b4e..06f246668ad5efd47d501897314f873f95a73176 100644 (file)
@@ -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);
 
index a68a37e2823b0f1f12047d07a2bad4dd7a816604..1468aabc0a59f2be06dbf1feb180c36a0e437b21 100644 (file)
@@ -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));
index df4b5993a3bb6a5e96e3d9e16f9cfc9bd2978e22..a4be3f051f67c5387669b86aded49bcbab5137c1 100644 (file)
@@ -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;
 
index 712a81d5ee7a6addf2c91f73d93e623921061c27..04c11bc4120afd281470e602b129ae3762c04a05 100644 (file)
@@ -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;
index 4e811ba2bf6cb564fbeae45fc4fe58c192365828..372f35f477f049a1730e7427eb907952964d47fc 100644 (file)
@@ -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)
index 84d723487a37536b2e417a2c129b6d618e47a5ed..4039c2629a52870c8a36b64e0969afa9f1952613 100644 (file)
@@ -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)
index 26633276da058ebe379f58a44bb5a0e067ff30ff..c758f9b1e41afd1f3552aa834e2227156b7b8f20 100644 (file)
@@ -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);