mac80211: standardize adding supported rates IEs
Relocate the mesh implementation of adding the (extended) supported rates IE to util.c, anticipating its use by other parts of mac80211. Signed-off-by: Arik Nemtsov <arik@wizery.com> Cc: Kalyan C Gaddam <chakkal@iit.edu> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
109086ce0b
commit
768db3438b
@ -3444,4 +3444,9 @@ void ieee80211_enable_rssi_reports(struct ieee80211_vif *vif,
|
||||
int rssi_max_thold);
|
||||
|
||||
void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif);
|
||||
|
||||
int ieee80211_add_srates_ie(struct ieee80211_vif *vif, struct sk_buff *skb);
|
||||
|
||||
int ieee80211_add_ext_srates_ie(struct ieee80211_vif *vif,
|
||||
struct sk_buff *skb);
|
||||
#endif /* MAC80211_H */
|
||||
|
@ -320,64 +320,6 @@ mesh_add_rsn_ie(struct sk_buff *skb, struct ieee80211_sub_if_data *sdata)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
mesh_add_srates_ie(struct sk_buff *skb, struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct ieee80211_supported_band *sband;
|
||||
int rate;
|
||||
u8 i, rates, *pos;
|
||||
|
||||
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
||||
rates = sband->n_bitrates;
|
||||
if (rates > 8)
|
||||
rates = 8;
|
||||
|
||||
if (skb_tailroom(skb) < rates + 2)
|
||||
return -ENOMEM;
|
||||
|
||||
pos = skb_put(skb, rates + 2);
|
||||
*pos++ = WLAN_EID_SUPP_RATES;
|
||||
*pos++ = rates;
|
||||
for (i = 0; i < rates; i++) {
|
||||
rate = sband->bitrates[i].bitrate;
|
||||
*pos++ = (u8) (rate / 5);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
mesh_add_ext_srates_ie(struct sk_buff *skb,
|
||||
struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct ieee80211_supported_band *sband;
|
||||
int rate;
|
||||
u8 i, exrates, *pos;
|
||||
|
||||
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
||||
exrates = sband->n_bitrates;
|
||||
if (exrates > 8)
|
||||
exrates -= 8;
|
||||
else
|
||||
exrates = 0;
|
||||
|
||||
if (skb_tailroom(skb) < exrates + 2)
|
||||
return -ENOMEM;
|
||||
|
||||
if (exrates) {
|
||||
pos = skb_put(skb, exrates + 2);
|
||||
*pos++ = WLAN_EID_EXT_SUPP_RATES;
|
||||
*pos++ = exrates;
|
||||
for (i = 8; i < sband->n_bitrates; i++) {
|
||||
rate = sband->bitrates[i].bitrate;
|
||||
*pos++ = (u8) (rate / 5);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mesh_add_ds_params_ie(struct sk_buff *skb,
|
||||
struct ieee80211_sub_if_data *sdata)
|
||||
{
|
||||
|
@ -210,10 +210,6 @@ int mesh_add_rsn_ie(struct sk_buff *skb,
|
||||
struct ieee80211_sub_if_data *sdata);
|
||||
int mesh_add_vendor_ies(struct sk_buff *skb,
|
||||
struct ieee80211_sub_if_data *sdata);
|
||||
int mesh_add_srates_ie(struct sk_buff *skb,
|
||||
struct ieee80211_sub_if_data *sdata);
|
||||
int mesh_add_ext_srates_ie(struct sk_buff *skb,
|
||||
struct ieee80211_sub_if_data *sdata);
|
||||
int mesh_add_ds_params_ie(struct sk_buff *skb,
|
||||
struct ieee80211_sub_if_data *sdata);
|
||||
void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
|
||||
|
@ -185,8 +185,8 @@ static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata,
|
||||
pos = skb_put(skb, 2);
|
||||
memcpy(pos + 2, &plid, 2);
|
||||
}
|
||||
if (mesh_add_srates_ie(skb, sdata) ||
|
||||
mesh_add_ext_srates_ie(skb, sdata) ||
|
||||
if (ieee80211_add_srates_ie(&sdata->vif, skb) ||
|
||||
ieee80211_add_ext_srates_ie(&sdata->vif, skb) ||
|
||||
mesh_add_rsn_ie(skb, sdata) ||
|
||||
mesh_add_meshid_ie(skb, sdata) ||
|
||||
mesh_add_meshconf_ie(skb, sdata))
|
||||
|
@ -2307,9 +2307,9 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
|
||||
*pos++ = WLAN_EID_SSID;
|
||||
*pos++ = 0x0;
|
||||
|
||||
if (mesh_add_srates_ie(skb, sdata) ||
|
||||
if (ieee80211_add_srates_ie(&sdata->vif, skb) ||
|
||||
mesh_add_ds_params_ie(skb, sdata) ||
|
||||
mesh_add_ext_srates_ie(skb, sdata) ||
|
||||
ieee80211_add_ext_srates_ie(&sdata->vif, skb) ||
|
||||
mesh_add_rsn_ie(skb, sdata) ||
|
||||
mesh_add_meshid_ie(skb, sdata) ||
|
||||
mesh_add_meshconf_ie(skb, sdata) ||
|
||||
|
@ -1364,3 +1364,60 @@ void ieee80211_disable_rssi_reports(struct ieee80211_vif *vif)
|
||||
_ieee80211_enable_rssi_reports(sdata, 0, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_disable_rssi_reports);
|
||||
|
||||
int ieee80211_add_srates_ie(struct ieee80211_vif *vif, struct sk_buff *skb)
|
||||
{
|
||||
struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct ieee80211_supported_band *sband;
|
||||
int rate;
|
||||
u8 i, rates, *pos;
|
||||
|
||||
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
||||
rates = sband->n_bitrates;
|
||||
if (rates > 8)
|
||||
rates = 8;
|
||||
|
||||
if (skb_tailroom(skb) < rates + 2)
|
||||
return -ENOMEM;
|
||||
|
||||
pos = skb_put(skb, rates + 2);
|
||||
*pos++ = WLAN_EID_SUPP_RATES;
|
||||
*pos++ = rates;
|
||||
for (i = 0; i < rates; i++) {
|
||||
rate = sband->bitrates[i].bitrate;
|
||||
*pos++ = (u8) (rate / 5);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ieee80211_add_ext_srates_ie(struct ieee80211_vif *vif, struct sk_buff *skb)
|
||||
{
|
||||
struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct ieee80211_supported_band *sband;
|
||||
int rate;
|
||||
u8 i, exrates, *pos;
|
||||
|
||||
sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
|
||||
exrates = sband->n_bitrates;
|
||||
if (exrates > 8)
|
||||
exrates -= 8;
|
||||
else
|
||||
exrates = 0;
|
||||
|
||||
if (skb_tailroom(skb) < exrates + 2)
|
||||
return -ENOMEM;
|
||||
|
||||
if (exrates) {
|
||||
pos = skb_put(skb, exrates + 2);
|
||||
*pos++ = WLAN_EID_EXT_SUPP_RATES;
|
||||
*pos++ = exrates;
|
||||
for (i = 8; i < sband->n_bitrates; i++) {
|
||||
rate = sband->bitrates[i].bitrate;
|
||||
*pos++ = (u8) (rate / 5);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user