mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-25 17:59:25 +01:00
hwsim: Radio id was not parsed properly
When a new radio is created, the kernel returns the new radio id in the error code. If the error < 0, then that means a real error and other values are used as a radio id. When a radio is destroyed, the error code 0 means a success and other values indicate an error.
This commit is contained in:
parent
89bacdbc08
commit
a052cb5d3c
@ -80,25 +80,25 @@ static void create_callback(struct l_genl_msg *msg, void *user_data)
|
|||||||
const void *data;
|
const void *data;
|
||||||
uint32_t radio_id = 0;
|
uint32_t radio_id = 0;
|
||||||
|
|
||||||
|
/* Note that the radio id is returned in the error field of
|
||||||
|
* the returned message.
|
||||||
|
*/
|
||||||
|
|
||||||
if (!l_genl_attr_init(&attr, msg)) {
|
if (!l_genl_attr_init(&attr, msg)) {
|
||||||
l_warn("Failed to initialize create return attributes");
|
int err = l_genl_msg_get_error(msg);
|
||||||
|
if (err < 0) {
|
||||||
|
l_warn("Failed to initialize create return attributes"
|
||||||
|
" [%d/%s]", -err, strerror(-err));
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (l_genl_attr_next(&attr, &type, &len, &data)) {
|
radio_id = err;
|
||||||
switch (type) {
|
|
||||||
case HWSIM_ATTR_RADIO_ID:
|
|
||||||
if (len != sizeof(uint32_t)) {
|
|
||||||
l_warn("Invalid radio id attribute");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
radio_id = *((uint32_t *) data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
l_info("Created new radio with id %u", radio_id);
|
l_info("Created new radio with id %u", radio_id);
|
||||||
|
} else {
|
||||||
|
l_warn("Failed to get create return value");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
l_main_quit();
|
l_main_quit();
|
||||||
@ -111,14 +111,19 @@ static void destroy_callback(struct l_genl_msg *msg, void *user_data)
|
|||||||
const void *data;
|
const void *data;
|
||||||
|
|
||||||
if (!l_genl_attr_init(&attr, msg)) {
|
if (!l_genl_attr_init(&attr, msg)) {
|
||||||
l_warn("Failed to initialize destroy return attributes");
|
int err = l_genl_msg_get_error(msg);
|
||||||
|
if (err < 0) {
|
||||||
|
l_warn("Failed to destroy radio [%d/%s]",
|
||||||
|
-err, strerror(-err));
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
l_info("Destroyed radio");
|
||||||
|
}
|
||||||
|
|
||||||
while (l_genl_attr_next(&attr, &type, &len, &data)) {
|
while (l_genl_attr_next(&attr, &type, &len, &data)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
l_info("Destroyed radio");
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
l_main_quit();
|
l_main_quit();
|
||||||
|
Loading…
Reference in New Issue
Block a user