]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
loopback-setup: set IFA_F_NOPREFIXROUTE when configuring 'lo' ipv6 address
authorLennart Poettering <lennart@poettering.net>
Wed, 31 May 2023 07:42:45 +0000 (09:42 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 31 May 2023 09:11:45 +0000 (11:11 +0200)
Otherwise the kernel will set up two routes to ::1, one in the "main",
and one in the "local" routing table.

Fixes: #25819
src/shared/loopback-setup.c

index 5dbc4b1af23af2d56f3c6879cef9ec4539729f03..d01d8b0676728c89a17d7ec045a0521356cbb579 100644 (file)
@@ -114,9 +114,15 @@ static int add_ipv6_address(sd_netlink *rtnl, struct state *s) {
         if (r < 0)
                 return r;
 
-        r = sd_rtnl_message_addr_set_flags(req, IFA_F_PERMANENT);
+        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… */
         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)