mac80211: allow AP configuration of beacon interval, DTIM period, maximum permissible STA listen interval, and basic rates
This introduces beacon_int and basic_rate (per wifi-device), and dtim_period and max_listen_int (per wifi-iface) for mac80211. These configure the beacon interval, basic rate specification, DTIM period (one DTIM per this many beacon frames), and maximum listen interval that a STA will be permitted to associate with. All of the new settings are optional; if they're absent, the existing hostapd (or, in the case of basic_rate, driver) defaults will be used. The existing bintval property only used for type adhoc is moved from wifi-iface to wifi-device, and is renamed to beacon_interval because bintval isn't a great name. The beacon interval is property of the wifi-device; while the choice between wifi-device and wifi-iface may not be relevant with an adhoc network, there's no reason to configure the same property one way for type adhoc and another for type ap. This change isn't expected to cause many problems, as bintval was added recently, in r25111. Similarly, the list of basic rates, also added for type adhoc in r25111, is a property of the device and not the interface. Further, it ought to be represented in UCI as a list, not a string dependent on the format that iw uses. I’ve moved it onto the device, renamed it to basic_rate, and made it configurable for APs via hostapd. Finally, I adapted it to use the same kb/s representation as mcast_rate; there's precedent for this format in that it's also how madwifi interprets mcast_rate. Neither bintval nor basicrates were ever documented in the UCI wireless configuration page on the wiki. When this change is committed, I'll update the documentation as needed. Signed-off-by: Mark Mentovai <mark@moxienet.com> SVN-Revision: 25837
This commit is contained in:
parent
13333a6742
commit
3494bdc59a
1 changed files with 33 additions and 4 deletions
|
@ -13,6 +13,8 @@ mac80211_hostapd_setup_base() {
|
|||
config_get country "$device" country
|
||||
config_get hwmode "$device" hwmode
|
||||
config_get channel "$device" channel
|
||||
config_get beacon_int "$device" beacon_int
|
||||
config_get basic_rate_list "$device" basic_rate
|
||||
config_get_bool noscan "$device" noscan
|
||||
[ -n "$channel" -a -z "$hwmode" ] && wifi_fixup_hwmode "$device"
|
||||
[ "$channel" = auto ] && channel=
|
||||
|
@ -51,6 +53,16 @@ mac80211_hostapd_setup_base() {
|
|||
echo "$mac" >> $macfile
|
||||
done
|
||||
}
|
||||
|
||||
local br brval brstr
|
||||
[ -n "$basic_rate_list" ] && {
|
||||
for br in $basic_rate_list; do
|
||||
brval="$(($br / 100))"
|
||||
[ -n "$brstr" ] && brstr="$brstr "
|
||||
brstr="$brstr$brval"
|
||||
done
|
||||
}
|
||||
|
||||
cat >> "$cfgfile" <<EOF
|
||||
ctrl_interface=/var/run/hostapd-$phy
|
||||
driver=nl80211
|
||||
|
@ -92,8 +104,10 @@ tx_queue_data0_cwmax=7
|
|||
tx_queue_data0_burst=1.5
|
||||
${hwmode:+hw_mode=$hwmode}
|
||||
${channel:+channel=$channel}
|
||||
${beacon_int:+beacon_int=$beacon_int}
|
||||
${country:+country_code=$country}
|
||||
${noscan:+noscan=$noscan}
|
||||
${brstr:+basic_rates=$brstr}
|
||||
$base_cfg
|
||||
|
||||
EOF
|
||||
|
@ -127,6 +141,8 @@ mac80211_hostapd_setup_bss() {
|
|||
local macaddr hidden maxassoc wmm
|
||||
config_get macaddr "$vif" macaddr
|
||||
config_get maxassoc "$vif" maxassoc
|
||||
config_get dtim_period "$vif" dtim_period
|
||||
config_get max_listen_int "$vif" max_listen_int
|
||||
config_get_bool hidden "$vif" hidden 0
|
||||
config_get_bool wmm "$vif" wmm 1
|
||||
cat >> /var/run/hostapd-$phy.conf <<EOF
|
||||
|
@ -134,6 +150,8 @@ $hostapd_cfg
|
|||
wmm_enabled=$wmm
|
||||
bssid=$macaddr
|
||||
ignore_broadcast_ssid=$hidden
|
||||
${dtim_period:+dtim_period=$dtim_period}
|
||||
${max_listen_int:+max_listen_interval=$max_listen_int}
|
||||
${maxassoc:+max_num_sta=$maxassoc}
|
||||
EOF
|
||||
}
|
||||
|
@ -390,8 +408,8 @@ enable_mac80211() {
|
|||
adhoc)
|
||||
config_get bssid "$vif" bssid
|
||||
config_get ssid "$vif" ssid
|
||||
config_get bintval "$vif" bintval
|
||||
config_get basicrates "$vif" basicrates
|
||||
config_get beacon_int "$device" beacon_int
|
||||
config_get basic_rate_list "$device" basic_rate
|
||||
config_get encryption "$vif" encryption
|
||||
config_get key "$vif" key 1
|
||||
config_get mcast_rate "$vif" mcast_rate
|
||||
|
@ -416,6 +434,17 @@ enable_mac80211() {
|
|||
esac
|
||||
}
|
||||
|
||||
local br brval brsub brstr
|
||||
[ -n "$basic_rate_list" ] && {
|
||||
for br in $basic_rate_list; do
|
||||
brval="$(($br / 1000))"
|
||||
brsub="$((($br / 100) % 10))"
|
||||
[ "$brsub" -gt 0 ] && brval="$brval.$brsub"
|
||||
[ -n "$brstr" ] && brstr="$brstr,"
|
||||
brstr="$brstr$brval"
|
||||
done
|
||||
}
|
||||
|
||||
local mcval=""
|
||||
[ -n "$mcast_rate" ] && {
|
||||
mcval="$(($mcast_rate / 1000))"
|
||||
|
@ -425,8 +454,8 @@ enable_mac80211() {
|
|||
|
||||
iw dev "$ifname" ibss join "$ssid" $freq \
|
||||
${fixed:+fixed-freq} $bssid \
|
||||
${bintval:+beacon-interval $bintval} \
|
||||
${basicrates:+basic-rates $basicrates} \
|
||||
${beacon_int:+beacon-interval $beacon_int} \
|
||||
${brstr:+basic-rates $brstr} \
|
||||
${mcval:+mcast-rate $mcval} \
|
||||
${keyspec:+keys $keyspec}
|
||||
;;
|
||||
|
|
Loading…
Reference in a new issue