1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-03-09 15:40:03 +00:00
openmptcprouter-feeds/qaa/qca/net/qca-wrapd/files/qwrap.sh
2022-09-10 05:47:47 +08:00

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
}