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:
Tom Gundersen
2014-03-16 13:05:04 +01:00
parent e09826dcf1
commit 1f0db3ed88
3 changed files with 10 additions and 0 deletions
+6
View File
@@ -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;
+3
View File
@@ -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)
+1
View File
@@ -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);