local ifname="$2"
cfgfile="/var/run/hostapd-$phy.conf"
- macfile="/var/run/hostapd-$phy.maclist"
- [ -e "$macfile" ] && rm -f "$macfile"
config_get device "$vif" device
config_get country "$device" country
config_get beacon_int "$device" beacon_int
config_get basic_rate_list "$device" basic_rate
config_get_bool noscan "$device" noscan
- config_get_bool short_preamble "$device" short_preamble "0"
hostapd_set_log_options base_cfg "$device"
config_get_bool country_ie "$device" country_ie "$country_ie"
[ "$country_ie" -gt 0 ] && append base_cfg "ieee80211d=1" "$N"
- config_get macfilter "$vif" macfilter
- case "$macfilter" in
- allow)
- append base_cfg "macaddr_acl=1" "$N"
- append base_cfg "accept_mac_file=$macfile" "$N"
- ;;
- deny)
- append base_cfg "macaddr_acl=0" "$N"
- append base_cfg "deny_mac_file=$macfile" "$N"
- ;;
- esac
- config_get maclist "$vif" maclist
- [ -n "$maclist" ] && {
- for mac in $maclist; do
- echo "$mac" >> $macfile
- done
- }
-
local br brval brstr
[ -n "$basic_rate_list" ] && {
for br in $basic_rate_list; do
done
}
- append base_cfg "preamble=$short_preamble" "$N"
-
cat >> "$cfgfile" <<EOF
ctrl_interface=/var/run/hostapd-$phy
driver=nl80211
lookup_phy() {
[ -n "$phy" ] && {
- [ -d /sys/class/ieee80211/phy ] && return
+ [ -d /sys/class/ieee80211/$phy ] && return
}
local devpath
}
mac80211_generate_mac() {
- local off="$1"
- local mac="$2"
- local oIFS="$IFS"; IFS=":"; set -- $mac; IFS="$oIFS"
+ local id="$1"
+ local ref="$2"
+ local mask="$3"
- local b2mask=0x00
- [ $off -gt 0 ] && b2mask=0x02
+ [ "$mask" = "00:00:00:00:00:00" ] && mask="ff:ff:ff:ff:ff:ff";
+ local oIFS="$IFS"; IFS=":"; set -- $mask; IFS="$oIFS"
+
+ local mask1=$1
+ local mask6=$6
+
+ local oIFS="$IFS"; IFS=":"; set -- $ref; IFS="$oIFS"
+ [ "$((0x$mask1))" -gt 0 ] && {
+ b1=$(((0x$1 | 0x2) ^ ($id << 2)))
+ printf "%02x:%s:%s:%s:%s:%s" $b1 $2 $3 $4 $5 $6
+ return
+ }
+
+ [ "$((0x$mask6))" -lt 255 ] && {
+ printf "%s:%s:%s:%s:%s:%02x" $1 $2 $3 $4 $5 $(( 0x$6 ^ $id ))
+ return
+ }
- printf "%02x:%s:%s:%s:%02x:%02x" \
- $(( 0x$1 | $b2mask )) $2 $3 $4 \
- $(( (0x$5 + ($off / 0x100)) % 0x100 )) \
- $(( (0x$6 + $off) % 0x100 ))
+ off2=$(( (0x$6 + $id) / 0x100 ))
+ printf "%s:%s:%s:%s:%02x:%02x" \
+ $1 $2 $3 $4 \
+ $(( (0x$5 + $off2) % 0x100 )) \
+ $(( (0x$6 + $id) % 0x100 ))
}
enable_mac80211() {
config_get macaddr "$device" macaddr
config_get vif_mac "$vif" macaddr
[ -n "$vif_mac" ] || {
- vif_mac="$(mac80211_generate_mac $macidx $macaddr)"
+ vif_mac="$(mac80211_generate_mac $macidx $macaddr $(cat /sys/class/ieee80211/${phy}/address_mask))"
macidx="$(($macidx + 1))"
}
[ "$mode" = "ap" ] || ifconfig "$ifname" hw ether "$vif_mac"
# make sure this wifi interface won't accidentally stay open without encryption
ifconfig "$ifname" down
}
- # wpa_supplicant will bring the iface up
+ mac80211_start_vif "$vif" "$ifname"
continue
fi
}