sd-rtnl: never treat broadcasts as replies
Otherwise the sequence number of a broadcast may match the sequence number of a pending unicast message and cause confusion.
This commit is contained in:
@@ -295,6 +295,12 @@ int sd_rtnl_message_get_type(sd_rtnl_message *m, uint16_t *type) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_is_broadcast(sd_rtnl_message *m) {
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
return !m->hdr->nlmsg_pid;
|
||||
}
|
||||
|
||||
int sd_rtnl_message_link_get_ifindex(sd_rtnl_message *m, int *ifindex) {
|
||||
struct ifinfomsg *ifi;
|
||||
|
||||
|
||||
@@ -277,6 +277,9 @@ static int process_reply(sd_rtnl *rtnl, sd_rtnl_message *m) {
|
||||
assert(rtnl);
|
||||
assert(m);
|
||||
|
||||
if (sd_rtnl_message_is_broadcast(m))
|
||||
return 0;
|
||||
|
||||
serial = rtnl_message_get_serial(m);
|
||||
c = hashmap_remove(rtnl->reply_callbacks, &serial);
|
||||
if (!c)
|
||||
|
||||
@@ -78,6 +78,7 @@ sd_rtnl_message *sd_rtnl_message_unref(sd_rtnl_message *m);
|
||||
|
||||
int sd_rtnl_message_get_errno(sd_rtnl_message *m);
|
||||
int sd_rtnl_message_get_type(sd_rtnl_message *m, uint16_t *type);
|
||||
int sd_rtnl_message_is_broadcast(sd_rtnl_message *m);
|
||||
|
||||
int sd_rtnl_message_addr_set_prefixlen(sd_rtnl_message *m, unsigned char prefixlen);
|
||||
int sd_rtnl_message_addr_set_scope(sd_rtnl_message *m, unsigned char scope);
|
||||
|
||||
Reference in New Issue
Block a user