]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-netlink,sd-device: drop old kernels (<4.2) support
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 13 Apr 2025 20:42:24 +0000 (05:42 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Apr 2025 18:40:40 +0000 (03:40 +0900)
NETLINK_LIST_MEMBERSHIPS is supported since kernel v4.2, specifically
https://github.com/torvalds/linux/commit/b42be38b2778eda2237fc759e55e3b698b05b315

Our baseline on the kernel is v5.4. Let's drop unnecessary conditions.

src/basic/socket-util.c
src/libsystemd/sd-device/device-monitor.c
src/libsystemd/sd-netlink/netlink-internal.h
src/libsystemd/sd-netlink/netlink-socket.c

index 3160f9229888014deca47253d06861b46f648135..10b7bc7df5c066d6a8029ca7af452ccf6ccf0264 100644 (file)
@@ -1819,8 +1819,6 @@ int netlink_socket_get_multicast_groups(int fd, size_t *ret_len, uint32_t **ret_
 
         assert(fd >= 0);
 
-        /* This returns ENOPROTOOPT if the kernel is older than 4.2. */
-
         if (getsockopt(fd, SOL_NETLINK, NETLINK_LIST_MEMBERSHIPS, NULL, &len) < 0)
                 return -errno;
 
index d2892c4d3c09b1018658b50b5e6ac854fe34717f..1d5fa2c113c31215d62e23a4bff760284f1d77b3 100644 (file)
@@ -305,7 +305,7 @@ _public_ int sd_device_monitor_stop(sd_device_monitor *m) {
 
                 /* Save multicast groups. */
                 r = netlink_socket_get_multicast_groups(m->sock, &m->multicast_group_len, &m->multicast_groups);
-                if (r < 0 && r != -ENOPROTOOPT)
+                if (r < 0)
                         return r;
 
                 /* Leave from all multicast groups to prevent the buffer is filled. */
index 891d3e841345f0ba1cb3ba2f7709ff30d56c377f..5b9ccb336ec964806f296f147e5d37858f45a10d 100644 (file)
@@ -71,7 +71,6 @@ struct sd_netlink {
         int protocol;
 
         Hashmap *broadcast_group_refs;
-        bool broadcast_group_dont_leave:1; /* until we can rely on 4.2 */
 
         OrderedSet *rqueue;
         Hashmap *rqueue_by_serial;
index 55a80e0f4c91bdf4e4592dfa11b200804baeb82c..9d2b3984c2b11dd6271a7e3995e6b57d32816c5f 100644 (file)
@@ -24,10 +24,6 @@ static int broadcast_groups_get(sd_netlink *nl) {
         assert(nl->fd >= 0);
 
         r = netlink_socket_get_multicast_groups(nl->fd, &len, &groups);
-        if (r == -ENOPROTOOPT) {
-                nl->broadcast_group_dont_leave = true;
-                return 0;
-        }
         if (r < 0)
                 return r;
 
@@ -106,18 +102,6 @@ int socket_broadcast_group_ref(sd_netlink *nl, unsigned group) {
         return broadcast_group_join(nl, group);
 }
 
-static int broadcast_group_leave(sd_netlink *nl, unsigned group) {
-        assert(nl);
-        assert(nl->fd >= 0);
-        assert(group > 0);
-
-        if (nl->broadcast_group_dont_leave)
-                return 0;
-
-        /* group is "unsigned", but netlink(7) says the argument for NETLINK_DROP_MEMBERSHIP is "int" */
-        return setsockopt_int(nl->fd, SOL_NETLINK, NETLINK_DROP_MEMBERSHIP, group);
-}
-
 int socket_broadcast_group_unref(sd_netlink *nl, unsigned group) {
         unsigned n_ref;
         int r;
@@ -138,7 +122,8 @@ int socket_broadcast_group_unref(sd_netlink *nl, unsigned group) {
                 /* still refs left */
                 return 0;
 
-        return broadcast_group_leave(nl, group);
+        /* group is "unsigned", but netlink(7) says the argument for NETLINK_DROP_MEMBERSHIP is "int" */
+        return setsockopt_int(nl->fd, SOL_NETLINK, NETLINK_DROP_MEMBERSHIP, group);
 }
 
 /* returns the number of bytes sent, or a negative error code */