mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-03-09 15:40:03 +00:00
246 lines
6.9 KiB
Bash
246 lines
6.9 KiB
Bash
#
|
|
# Copyright (c) 2010, 2017 Qualcomm Technologies, Inc.
|
|
# All Rights Reserved.
|
|
# Confidential and Proprietary - Qualcomm Technologies, Inc.
|
|
#
|
|
# 2014 Qualcomm Atheros, Inc.
|
|
#
|
|
# All Rights Reserved.
|
|
# Qualcomm Atheros Confidential and Proprietary.
|
|
#
|
|
|
|
. /lib/functions.sh
|
|
|
|
check_qwrap_enabled() {
|
|
local device=$1
|
|
config_get disabled "$device" disabled 0
|
|
config_get qwrap_enable "$device" qwrap_enable 0
|
|
|
|
[[ "$disabled" -eq 0 && "$qwrap_enable" -gt 0 ]] || return
|
|
|
|
start_qwrap=1
|
|
}
|
|
|
|
qwrap_setup_wifi() {
|
|
local device=$1
|
|
local wrapd_vma_conf="NONE"
|
|
wrapd_global_ctrl_iface="/var/run/wrapdglobal"
|
|
|
|
config_get wrapd_vma $device wrapd_vma 0
|
|
if [ "$wrapd_vma" -ne 0 ]; then
|
|
wrapd_vma_conf="/etc/ath/wrap-vma-$device.conf"
|
|
fi
|
|
|
|
config_get disabled "$device" disabled 0
|
|
config_get qwrap_enable "$device" qwrap_enable 0
|
|
|
|
[[ "$disabled" -eq 0 && "$qwrap_enable" -gt 0 ]] || return
|
|
|
|
wrapd -S -g $wrapd_global_ctrl_iface wifi_add $device $wrapd_vma_conf
|
|
}
|
|
|
|
qwrap_parse_ap() {
|
|
local device=$1
|
|
local radioidx=${device#wifi}
|
|
conf="OPEN"
|
|
local cmd_type="INIT"
|
|
|
|
config_get disabled "$device" disabled 0
|
|
config_get qwrap_enable "$device" qwrap_enable 0
|
|
|
|
[ "$disabled" -eq 0 ] || return
|
|
|
|
config_get vifs $device vifs
|
|
|
|
for vif in $vifs; do
|
|
local vifname
|
|
|
|
config_get vifname "$vif" ifname
|
|
|
|
config_get enc "$vif" encryption "none"
|
|
|
|
case "$enc" in
|
|
mixed*|psk*|wpa*|8021x|none|wep*|ccmp*|gcmp*)
|
|
conf="/var/run/hostapd-$vifname.conf"
|
|
;;
|
|
esac
|
|
|
|
config_get mode "$vif" mode
|
|
|
|
case "$mode" in
|
|
wrap|ap)
|
|
config_get extender_device "$vif" extender_device $device
|
|
[ -z "$extender_device" ] || {
|
|
wrapd -S -g $wrapd_global_ctrl_iface ap_add $extender_device $vifname $conf $cmd_type
|
|
}
|
|
;;
|
|
esac
|
|
done
|
|
|
|
config_get_bool ap_isolation_enabled $device ap_isolation_enabled 0
|
|
|
|
if [ $ap_isolation_enabled -ne 0 ]; then
|
|
iso="-I"
|
|
echo '1 1' > /proc/wrap$radioidx
|
|
fi
|
|
|
|
}
|
|
|
|
qwrap_parse_sta() {
|
|
local device=$1
|
|
local radioidx=${device#wifi}
|
|
local sta_vap=0
|
|
local cmd_type="INIT"
|
|
|
|
config_get disabled "$device" disabled 0
|
|
config_get qwrap_enable "$device" qwrap_enable 0
|
|
|
|
[ "$disabled" -eq 0 ] || return
|
|
|
|
config_get vifs $device vifs
|
|
|
|
for vif in $vifs; do
|
|
local vifname
|
|
|
|
config_get vifname "$vif" ifname
|
|
|
|
config_get mode "$vif" mode
|
|
|
|
case "$mode" in
|
|
sta)
|
|
[ "$qwrap_enable" -gt 0 ] || continue
|
|
echo "sta_vap is there for " $device
|
|
sta_vap=1
|
|
|
|
wrap_sta_macaddr="$(cat /sys/class/net/${vifname}/address)"
|
|
|
|
config_load network
|
|
net_cfg="$(find_net_config "$vif")"
|
|
config_set "$net_cfg" macaddr "$wrap_sta_macaddr"
|
|
|
|
[ -z "$net_cfg" ] || {
|
|
if [ $sta_mac_set_to_bridge -eq 0 ]; then
|
|
echo "QWRAP-Adding mac address to bridge sta_mac" $wrap_sta_macaddr
|
|
sta_mac_set_to_bridge=1
|
|
bridge="$(bridge_interface "$net_cfg")"
|
|
ifconfig "$bridge" hw ether "$wrap_sta_macaddr"
|
|
else
|
|
echo "QWRAP-Already bridge mac is set ignoring mac" $wrap_sta_macaddr
|
|
fi
|
|
}
|
|
tmp_conf_file=$(cat "/tmp/qwrap_conf_filename-$vifname.conf")
|
|
wrapd -S -g $wrapd_global_ctrl_iface sta_add $device $vifname $tmp_conf_file $cmd_type
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
qwrap_setup() {
|
|
|
|
local start_qwrap=0
|
|
local sta_mac_set_to_bridge=0
|
|
local aprim=""
|
|
local qwrap_eth_list=""
|
|
local driver_mode=""
|
|
config_load wireless
|
|
local enable_cfg80211=`uci show qcacfg80211.config.enable |grep "qcacfg80211.config.enable='1'"`
|
|
local wrapd_psta_config=0
|
|
|
|
config_foreach check_qwrap_enabled wifi-device
|
|
|
|
if [ "$start_qwrap" -eq 0 ]; then
|
|
return 1
|
|
fi
|
|
wpa_supplicant_global_ctrl_iface="/var/run/wpa_supplicantglobal"
|
|
hostapd_global_ctrl_iface="/var/run/hostapd/global"
|
|
wrapd_global_ctrl_iface="/var/run/wrapdglobal"
|
|
config_get alwaysprimary qcawifi alwaysprimary 0
|
|
config_get qwrap_br_name qcawifi qwrap_br_name "br-lan"
|
|
config_get qwrap_sta_limit qcawifi qwrap_sta_limit 20
|
|
config_get qwrap_poll_timer qcawifi qwrap_poll_timer 1
|
|
config_get qwrap_eth_sta_del_en qcawifi qwrap_eth_sta_del_en 1
|
|
config_get qwrap_eth_sta_add_en qcawifi qwrap_eth_sta_add_en 1
|
|
config_get qwrap_eth_name qcawifi qwrap_eth_name "eth1"
|
|
config_get qwrap_dbglvl qcawifi qwrap_dbglvl 0
|
|
config_get qwrap_dbglvl_high qcawifi qwrap_dbglvl_high 0
|
|
[ -n "$enable_cfg80211" ] && driver_mode="-m"
|
|
|
|
for eth in $qwrap_eth_name; do
|
|
append qwrap_eth_list "-i $eth "
|
|
done
|
|
|
|
bridge_conf_file="-b $qwrap_br_name $qwrap_eth_list
|
|
-l $qwrap_sta_limit -t $qwrap_poll_timer
|
|
-e $qwrap_eth_sta_add_en -r $qwrap_eth_sta_del_en"
|
|
|
|
qwrap_debug="-F l:$qwrap_dbglvl -F h:$qwrap_dbglvl_high"
|
|
|
|
if [ "$alwaysprimary" -eq 0 ]; then
|
|
wrapd_psta_config=0
|
|
fi
|
|
if [ "$alwaysprimary" -eq 1 ]; then
|
|
wrapd_psta_config=2
|
|
fi
|
|
aprim="-a $wrapd_psta_config"
|
|
|
|
wrapd_pid="/var/run/wrapd-global.pid"
|
|
if [ -f "/var/run/wrapd-global.pid" ] && [ -e /proc/$(cat "/var/run/wrapd-global.pid") ]; then
|
|
echo "Not starting 2nd wrapd since process is already running"
|
|
return 1
|
|
fi
|
|
wrapd ${iso} -P $wrapd_pid -g $wrapd_global_ctrl_iface -H $hostapd_global_ctrl_iface -w $wpa_supplicant_global_ctrl_iface $bridge_conf_file $qwrap_debug $aprim $driver_mode > /dev/console 2>&1 &
|
|
|
|
config_foreach qwrap_setup_wifi wifi-device
|
|
config_foreach qwrap_parse_sta wifi-device
|
|
config_load wireless
|
|
config_foreach qwrap_parse_ap wifi-device
|
|
|
|
return 1
|
|
}
|
|
|
|
qwrap_unconfig() {
|
|
local device=$1
|
|
local radioidx=${device#wifi}
|
|
|
|
config_get vifs $device vifs
|
|
|
|
for vif in $vifs; do
|
|
local vifname
|
|
|
|
config_get vifname "$vif" ifname
|
|
|
|
config_get mode "$vif" mode
|
|
|
|
case "$mode" in
|
|
sta)
|
|
config_load network
|
|
net_cfg="$(find_net_config "$vif")"
|
|
|
|
[ -z "$net_cfg" ] || {
|
|
|
|
bridge="$(bridge_interface "$net_cfg")"
|
|
cd /sys/class/net/${bridge}/brif
|
|
|
|
for eth in $(ls -d eth* 2>&-); do
|
|
br_macaddr="$(cat /sys/class/net/${eth}/address)"
|
|
[ -n "$br_macaddr" ] && break
|
|
done
|
|
|
|
ifconfig "$bridge" hw ether "$br_macaddr"
|
|
}
|
|
[ -f "/tmp/qwrap_conf_filename-$vifname.conf" ] &&
|
|
rm /tmp/qwrap_conf_filename-$vifname.conf
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
qwrap_teardown() {
|
|
config_load wireless
|
|
if [ -f "/var/run/wrapd-global.pid" ] && [ -e /proc/$(cat "/var/run/wrapd-global.pid") ]; then
|
|
kill "$(cat "/var/run/wrapd-global.pid")"
|
|
rm -rf /var/run/wrapd-global.pid
|
|
rm -rf $wrapd_global_ctrl_iface
|
|
config_foreach qwrap_unconfig wifi-device
|
|
fi
|
|
}
|