3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-22 06:29:23 +01:00

test-runner: fix radio index 0 deletion

In the PCI/USB passthrough changes the wiphy ID was changed to be an
unsigned integer, where id zero corresponded to an error when in native
hardware mode. Along with this, the radio ID for hwsim was changed to a
pre-increment (only in test-runner), so the radio IDs would start at 1.
The repercussions were not fully investigated, but if they were it would
have been seen that hwsim creates radios IDs starting at zero. This left
test-runner and hwsim with unsynchronized radio IDs, and radio zero
never got deleted after each test causing each successive test to
discover old radio IDs.
This commit is contained in:
James Prestwood 2019-05-13 11:34:22 -07:00 committed by Denis Kenzior
parent 08ec88671a
commit 97ec50ce28

View File

@ -152,7 +152,7 @@ static const char * const qemu_table[] = { NULL };
struct wiphy { struct wiphy {
char name[20]; char name[20];
uint32_t id; int id;
unsigned int interface_index; unsigned int interface_index;
bool interface_created : 1; bool interface_created : 1;
bool used_by_hostapd : 1; bool used_by_hostapd : 1;
@ -742,14 +742,14 @@ static bool list_hwsim_radios(void)
return true; return true;
} }
static uint32_t read_radio_id(void) static int read_radio_id(void)
{ {
static int current_radio_id; static int current_radio_id;
return ++current_radio_id; return current_radio_id++;
} }
static uint32_t create_hwsim_radio(const char *radio_name, static int create_hwsim_radio(const char *radio_name,
const unsigned int channels, bool p2p_device, const unsigned int channels, bool p2p_device,
bool use_chanctx) bool use_chanctx)
{ {
@ -766,7 +766,7 @@ static uint32_t create_hwsim_radio(const char *radio_name,
pid = execute_program(argv, true, check_verbosity(BIN_HWSIM)); pid = execute_program(argv, true, check_verbosity(BIN_HWSIM));
if (pid < 0) if (pid < 0)
return 0; return -1;
return read_radio_id(); return read_radio_id();
} }
@ -1187,7 +1187,7 @@ configure:
wiphy->id = create_hwsim_radio(wiphy->name, channels, wiphy->id = create_hwsim_radio(wiphy->name, channels,
p2p_device, use_chanctx); p2p_device, use_chanctx);
if (wiphy->id == 0) { if (wiphy->id < 0) {
l_free(wiphy); l_free(wiphy);
goto exit; goto exit;
} }
@ -2301,14 +2301,14 @@ exit:
static bool wiphy_match(const void *a, const void *b) static bool wiphy_match(const void *a, const void *b)
{ {
const struct wiphy *wiphy = a; const struct wiphy *wiphy = a;
uint32_t id = L_PTR_TO_UINT(b); int id = L_PTR_TO_INT(b);
return (wiphy->id == id); return (wiphy->id == id);
} }
static struct wiphy *wiphy_find(int wiphy_id) static struct wiphy *wiphy_find(int wiphy_id)
{ {
return l_queue_find(wiphy_list, wiphy_match, L_UINT_TO_PTR(wiphy_id)); return l_queue_find(wiphy_list, wiphy_match, L_INT_TO_PTR(wiphy_id));
} }
static void wiphy_dump_callback(struct l_genl_msg *msg, void *user_data) static void wiphy_dump_callback(struct l_genl_msg *msg, void *user_data)