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 */
};
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
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;
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);