提交 9a0cb89a 编写于 作者: B Ben Greear 提交者: Johannes Berg

mac80211-hwsim: support creating wiphy w/out creating wlanX

Good for automated testing, where user can create wlan
interfaces with specified names.
Signed-off-by: NBen Greear <greearb@candelatech.com>
Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
上级 e27513fb
...@@ -2023,7 +2023,8 @@ static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2, ...@@ -2023,7 +2023,8 @@ static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2,
const struct ieee80211_regdomain *regd, const struct ieee80211_regdomain *regd,
bool reg_strict, bool p2p_device, bool reg_strict, bool p2p_device,
bool use_chanctx, bool destroy_on_close, bool use_chanctx, bool destroy_on_close,
u32 portid, const char *hwname) u32 portid, const char *hwname,
bool no_vif)
{ {
int err; int err;
u8 addr[ETH_ALEN]; u8 addr[ETH_ALEN];
...@@ -2230,6 +2231,9 @@ static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2, ...@@ -2230,6 +2231,9 @@ static int mac80211_hwsim_create_radio(int channels, const char *reg_alpha2,
schedule_timeout_interruptible(1); schedule_timeout_interruptible(1);
} }
if (no_vif)
hw->flags |= IEEE80211_HW_NO_AUTO_VIF;
err = ieee80211_register_hw(hw); err = ieee80211_register_hw(hw);
if (err < 0) { if (err < 0) {
printk(KERN_DEBUG "mac80211_hwsim: ieee80211_register_hw failed (%d)\n", printk(KERN_DEBUG "mac80211_hwsim: ieee80211_register_hw failed (%d)\n",
...@@ -2516,11 +2520,15 @@ static int hwsim_create_radio_nl(struct sk_buff *msg, struct genl_info *info) ...@@ -2516,11 +2520,15 @@ static int hwsim_create_radio_nl(struct sk_buff *msg, struct genl_info *info)
bool p2p_device = info->attrs[HWSIM_ATTR_SUPPORT_P2P_DEVICE]; bool p2p_device = info->attrs[HWSIM_ATTR_SUPPORT_P2P_DEVICE];
bool destroy_on_close = info->attrs[HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE]; bool destroy_on_close = info->attrs[HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE];
bool use_chanctx; bool use_chanctx;
bool no_vif = false;
const char *hwname = NULL; const char *hwname = NULL;
if (info->attrs[HWSIM_ATTR_CHANNELS]) if (info->attrs[HWSIM_ATTR_CHANNELS])
chans = nla_get_u32(info->attrs[HWSIM_ATTR_CHANNELS]); chans = nla_get_u32(info->attrs[HWSIM_ATTR_CHANNELS]);
if (info->attrs[HWSIM_ATTR_NO_VIF])
no_vif = true;
if (info->attrs[HWSIM_ATTR_RADIO_NAME]) if (info->attrs[HWSIM_ATTR_RADIO_NAME])
hwname = nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]); hwname = nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]);
...@@ -2543,7 +2551,7 @@ static int hwsim_create_radio_nl(struct sk_buff *msg, struct genl_info *info) ...@@ -2543,7 +2551,7 @@ static int hwsim_create_radio_nl(struct sk_buff *msg, struct genl_info *info)
return mac80211_hwsim_create_radio(chans, alpha2, regd, reg_strict, return mac80211_hwsim_create_radio(chans, alpha2, regd, reg_strict,
p2p_device, use_chanctx, p2p_device, use_chanctx,
destroy_on_close, info->snd_portid, destroy_on_close, info->snd_portid,
hwname); hwname, no_vif);
} }
static int hwsim_destroy_radio_nl(struct sk_buff *msg, struct genl_info *info) static int hwsim_destroy_radio_nl(struct sk_buff *msg, struct genl_info *info)
...@@ -2799,7 +2807,8 @@ static int __init init_mac80211_hwsim(void) ...@@ -2799,7 +2807,8 @@ static int __init init_mac80211_hwsim(void)
err = mac80211_hwsim_create_radio(channels, reg_alpha2, err = mac80211_hwsim_create_radio(channels, reg_alpha2,
regd, reg_strict, regd, reg_strict,
support_p2p_device, support_p2p_device,
channels > 1, false, 0, NULL); channels > 1, false, 0, NULL,
false);
if (err < 0) if (err < 0)
goto out_free_radios; goto out_free_radios;
} }
......
...@@ -114,6 +114,7 @@ enum { ...@@ -114,6 +114,7 @@ enum {
* @HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE: used with the %HWSIM_CMD_CREATE_RADIO * @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 * command to force radio removal when process that created the radio dies
* @HWSIM_ATTR_RADIO_NAME: Name of radio, e.g. phy666 * @HWSIM_ATTR_RADIO_NAME: Name of radio, e.g. phy666
* @HWSIM_ATTR_NO_VIF: Do not create vif (wlanX) when creating radio.
* @__HWSIM_ATTR_MAX: enum limit * @__HWSIM_ATTR_MAX: enum limit
*/ */
...@@ -137,6 +138,7 @@ enum { ...@@ -137,6 +138,7 @@ enum {
HWSIM_ATTR_USE_CHANCTX, HWSIM_ATTR_USE_CHANCTX,
HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE, HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE,
HWSIM_ATTR_RADIO_NAME, HWSIM_ATTR_RADIO_NAME,
HWSIM_ATTR_NO_VIF,
__HWSIM_ATTR_MAX, __HWSIM_ATTR_MAX,
}; };
#define HWSIM_ATTR_MAX (__HWSIM_ATTR_MAX - 1) #define HWSIM_ATTR_MAX (__HWSIM_ATTR_MAX - 1)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册