mac80211-hwsim: support destroying radio by name

It is not always convenient to have to know the device-id,
so allow deleting by name as well.

Signed-off-by: Ben Greear <greearb@candelatech.com>
[use wiphy_name() instead of dev_name()]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Ben Greear 2014-10-22 12:22:59 -07:00 committed by Johannes Berg
parent 2155c3f823
commit 8cdd9e1c37
2 changed files with 18 additions and 5 deletions

View File

@ -2544,16 +2544,27 @@ static int hwsim_create_radio_nl(struct sk_buff *msg, struct genl_info *info)
static int hwsim_destroy_radio_nl(struct sk_buff *msg, struct genl_info *info)
{
struct mac80211_hwsim_data *data;
int idx;
s64 idx = -1;
const char *hwname = NULL;
if (!info->attrs[HWSIM_ATTR_RADIO_ID])
if (info->attrs[HWSIM_ATTR_RADIO_ID])
idx = nla_get_u32(info->attrs[HWSIM_ATTR_RADIO_ID]);
else if (info->attrs[HWSIM_ATTR_RADIO_NAME])
hwname = (void *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]);
else
return -EINVAL;
idx = nla_get_u32(info->attrs[HWSIM_ATTR_RADIO_ID]);
spin_lock_bh(&hwsim_radio_lock);
list_for_each_entry(data, &hwsim_radios, list) {
if (data->idx != idx)
continue;
if (idx >= 0) {
if (data->idx != idx)
continue;
} else {
if (hwname &&
strcmp(hwname, wiphy_name(data->hw->wiphy)))
continue;
}
list_del(&data->list);
spin_unlock_bh(&hwsim_radio_lock);
mac80211_hwsim_destroy_radio(data);

View File

@ -113,6 +113,7 @@ enum {
* single channel is supported
* @HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE: used with the %HWSIM_CMD_CREATE_RADIO
* command to force radio removal when process that created the radio dies
* @HWSIM_ATTR_RADIO_NAME: Name of radio, e.g. phy666
* @__HWSIM_ATTR_MAX: enum limit
*/
@ -135,6 +136,7 @@ enum {
HWSIM_ATTR_SUPPORT_P2P_DEVICE,
HWSIM_ATTR_USE_CHANCTX,
HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE,
HWSIM_ATTR_RADIO_NAME,
__HWSIM_ATTR_MAX,
};
#define HWSIM_ATTR_MAX (__HWSIM_ATTR_MAX - 1)