network/netdev: set interface name only when creating a new netdev
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 13 Nov 2024 05:13:01 +0000 (14:13 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 14 Nov 2024 01:01:42 +0000 (10:01 +0900)
Otherwise, the kernel older than v6.2 will refuse the netlink message.

src/network/netdev/netdev.c

index 85760c741d02df2f2ac92a7f5fccdd878053a7a5..6c8ad1b3e9d05179344716ea09fd2d9874f8f8d4 100644 (file)
@@ -662,9 +662,14 @@ static bool netdev_can_set_mtu(NetDev *netdev, uint32_t mtu) {
 static int netdev_create_message(NetDev *netdev, Link *link, sd_netlink_message *m) {
         int r;
 
-        r = sd_netlink_message_append_string(m, IFLA_IFNAME, netdev->ifname);
-        if (r < 0)
-                return r;
+        if (netdev->ifindex <= 0) {
+                /* Set interface name when it is newly created. Otherwise, the kernel older than
+                 * bd039b5ea2a91ea707ee8539df26456bd5be80af (v6.2) will refuse the netlink message even if
+                 * the name is unchanged. */
+                r = sd_netlink_message_append_string(m, IFLA_IFNAME, netdev->ifname);
+                if (r < 0)
+                        return r;
+        }
 
         struct hw_addr_data hw_addr;
         r = netdev_generate_hw_addr(netdev, link, netdev->ifname, &netdev->hw_addr, &hw_addr);