From: Yu Watanabe Date: Tue, 21 Sep 2021 07:22:29 +0000 (+0900) Subject: sd-netlink: also check multicast group to find suitable match callback X-Git-Tag: v250-rc1~599^2~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4d4d898a4b820f2abd076403a820b4373f4023a1;p=thirdparty%2Fsystemd.git sd-netlink: also check multicast group to find suitable match callback --- diff --git a/src/libsystemd/sd-netlink/netlink-internal.h b/src/libsystemd/sd-netlink/netlink-internal.h index 299b7d660bc..80d28258e24 100644 --- a/src/libsystemd/sd-netlink/netlink-internal.h +++ b/src/libsystemd/sd-netlink/netlink-internal.h @@ -123,8 +123,8 @@ struct sd_netlink_message { struct nlmsghdr *hdr; struct netlink_container containers[NETLINK_CONTAINER_DEPTH]; unsigned n_containers; /* number of containers */ + uint32_t multicast_group; bool sealed:1; - bool broadcast:1; sd_netlink_message *next; /* next in a chain of multi-part messages */ }; diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index 735018e12b7..27c7910566e 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -166,7 +166,7 @@ int sd_netlink_message_set_flags(sd_netlink_message *m, uint16_t flags) { int sd_netlink_message_is_broadcast(sd_netlink_message *m) { assert_return(m, -EINVAL); - return m->broadcast; + return m->multicast_group != 0; } /* If successful the updated message will be correctly aligned, if diff --git a/src/libsystemd/sd-netlink/netlink-socket.c b/src/libsystemd/sd-netlink/netlink-socket.c index 4edd7d8f85b..718073bb8fe 100644 --- a/src/libsystemd/sd-netlink/netlink-socket.c +++ b/src/libsystemd/sd-netlink/netlink-socket.c @@ -363,8 +363,7 @@ int socket_read_message(sd_netlink *nl) { if (r < 0) return r; - m->broadcast = group != 0; - + m->multicast_group = group; m->hdr = memdup(new_msg, new_msg->nlmsg_len); if (!m->hdr) return -ENOMEM; diff --git a/src/libsystemd/sd-netlink/sd-netlink.c b/src/libsystemd/sd-netlink/sd-netlink.c index 4218a385f30..2bf26523bde 100644 --- a/src/libsystemd/sd-netlink/sd-netlink.c +++ b/src/libsystemd/sd-netlink/sd-netlink.c @@ -445,12 +445,22 @@ static int process_match(sd_netlink *nl, sd_netlink_message *m) { LIST_FOREACH(match_callbacks, c, nl->match_callbacks) { sd_netlink_slot *slot; + bool found = false; if (c->type != type) continue; if (c->cmd != 0 && c->cmd != cmd) continue; + for (size_t i = 0; i < c->n_groups; i++) + if (c->groups[i] == m->multicast_group) { + found = true; + break; + } + + if (!found) + continue; + slot = container_of(c, sd_netlink_slot, match_callback); r = c->callback(nl, m, slot->userdata);