aboutsummaryrefslogtreecommitdiffstats
path: root/package/mac80211/files/lib/wifi/mac80211.sh
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-03-02 21:08:28 +0000
committerFelix Fietkau <nbd@openwrt.org>2011-03-02 21:08:28 +0000
commit3494bdc59a1f68a79c8ab268737e4513b4a801ce (patch)
tree2d1ee904d276cd690f691d47a84b0a8b7cb06f92 /package/mac80211/files/lib/wifi/mac80211.sh
parent13333a67423e02e4cb3e23ccf18ebdecf24a14dd (diff)
downloadupstream-3494bdc59a1f68a79c8ab268737e4513b4a801ce.tar.gz
upstream-3494bdc59a1f68a79c8ab268737e4513b4a801ce.tar.bz2
upstream-3494bdc59a1f68a79c8ab268737e4513b4a801ce.zip
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
Diffstat (limited to 'package/mac80211/files/lib/wifi/mac80211.sh')
-rw-r--r--package/mac80211/files/lib/wifi/mac80211.sh37
1 files changed, 33 insertions, 4 deletions
diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh
index ac1562fb24..386bda8e52 100644
--- a/package/mac80211/files/lib/wifi/mac80211.sh
+++ b/package/mac80211/files/lib/wifi/mac80211.sh
@@ -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}
;;