197 lines
5.3 KiB
Bash
Executable File
197 lines
5.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
TRY=0
|
|
HOSTAPD=`ps`
|
|
AMPK_AP=0
|
|
HOSTAPD=`echo $HOSTAPD | grep hostapd`
|
|
if [ -n "$HOSTAPD" ]; then
|
|
echo "hostapd is running. Try to stop it"
|
|
killall -9 hostapd
|
|
while [ 1 ]
|
|
do
|
|
HOSTAPD=`ps`
|
|
HOSTAPD=`echo $HOSTAPD | grep hostapd`
|
|
if [ -n "$HOSTAPD" ]; then
|
|
if [ $TRY -gt 5 ]; then
|
|
echo "can't stop hostapd"
|
|
exit 255
|
|
else
|
|
echo "TRY=$TRY"
|
|
TRY=$((${TRY}+1))
|
|
sleep 1
|
|
fi
|
|
else
|
|
echo "hostapd is stopped"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
TRY=0
|
|
WPA=`ps`
|
|
WPA=`echo $WPA | grep wpa_supplicant`
|
|
if [ -n "$WPA" ]; then
|
|
echo "wpa_supplicant is running. Try to stop it"
|
|
killall -9 wpa_supplicant
|
|
while [ 1 ]
|
|
do
|
|
WPA=`ps`
|
|
WPA=`echo $WPA | grep wpa_supplicant`
|
|
if [ -n "$WPA" ]; then
|
|
if [ $TRY -gt 5 ]; then
|
|
echo "can't stop wpa_supplicant"
|
|
exit 255
|
|
else
|
|
echo "TRY=$TRY"
|
|
TRY=$((${TRY}+1))
|
|
sleep 1
|
|
fi
|
|
else
|
|
echo "wpa_supplicant is stopped"
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ "$1" == "ap" ]; then
|
|
if [ "$2" == "0" ]; then
|
|
ifconfig wlan0 up
|
|
if [ "$3" == "2.4G" ]; then
|
|
/usr/local/bin/dhd_priv setband 2
|
|
elif [ "$3" == "5G" ]; then
|
|
/usr/local/bin/dhd_priv setband 1
|
|
else
|
|
/usr/local/bin/dhd_priv setband 0
|
|
fi
|
|
/usr/local/bin/dhd_priv get_best_channels|grep ret > /var/run/ACS.txt
|
|
filename="/var/run/ACS.txt"
|
|
exec < $filename
|
|
read str
|
|
channel_acs=$(echo $str | cut -d" " -f 4)
|
|
if [ "$3" == "2.4G" ]; then
|
|
echo channel=${channel_acs##*2g=} >> /var/run/hostapd.conf
|
|
elif [ "$3" == "5G" ]; then
|
|
echo channel=${channel_acs##*5g=} >> /var/run/hostapd.conf
|
|
else
|
|
echo channel=${channel_acs##*2g=} >> /var/run/hostapd.conf
|
|
fi
|
|
rm /var/run/ACS.txt
|
|
else
|
|
echo channel=$2 >> /var/run/hostapd.conf
|
|
fi
|
|
echo driver=nl80211 >> /var/run/hostapd.conf
|
|
echo wmm_enabled=1 >> /var/run/hostapd.conf
|
|
|
|
if [ "$AMPK_AP" == "0" ]; then
|
|
/usr/bin/hostapd /var/run/hostapd.conf &
|
|
elif [ "$AMPK_AP" == "1" ]; then
|
|
SSID=$(grep -w ssid /var/run/hostapd.conf|cut -d"=" -f 2)
|
|
CHANNEL=$(grep -w channel /var/run/hostapd.conf|cut -d"=" -f 2)
|
|
WPA=$(grep -w wpa /var/run/hostapd.conf|cut -d"=" -f 2)
|
|
if [ "$WPA" == "2" ]; then
|
|
PSK=$(grep -w wpa_passphrase /var/run/hostapd.conf|cut -d"=" -f 2)
|
|
/usr/local/bin/dhd_priv iapsta_init mode ap
|
|
/usr/local/bin/dhd_priv iapsta_config ifname wlan0 ssid $SSID chan $CHANNEL amode wpa2psk emode aes key $PSK
|
|
/usr/local/bin/dhd_priv iapsta_enable ifname wlan0
|
|
else
|
|
/usr/local/bin/dhd_priv iapsta_init mode ap
|
|
/usr/local/bin/dhd_priv iapsta_config ifname wlan0 ssid $SSID chan $CHANNEL amode open emode none
|
|
/usr/local/bin/dhd_priv iapsta_enable ifname wlan0
|
|
fi
|
|
fi
|
|
|
|
|
|
TRY=0
|
|
while [ 1 ]
|
|
do
|
|
UP=`ifconfig wlan0 | grep UP`
|
|
echo "UP=$UP"
|
|
|
|
if [ -z "$UP" ]; then
|
|
echo "TRY=$TRY"
|
|
if [ $TRY -gt 5 ]; then
|
|
hostapd stop
|
|
exit 255
|
|
else
|
|
TRY=$((${TRY}+1))
|
|
sleep 1
|
|
fi
|
|
else
|
|
echo "UP ok"
|
|
ifconfig wlan0 192.168.1.254
|
|
break
|
|
fi
|
|
done
|
|
|
|
udhcpd /etc/udhcpdw.conf
|
|
TRY=0
|
|
while [ 1 ]
|
|
do
|
|
DHCP=`ps`
|
|
DHCP=`echo $DHCP | grep udhcpd`
|
|
echo "DHCP=$DHCP"
|
|
|
|
if [ -z "$DHCP" ]; then
|
|
echo "TRY=$TRY"
|
|
if [ $TRY -gt 5 ]; then
|
|
echo "Can't run udhcpd"
|
|
exit 255
|
|
else
|
|
TRY=$((${TRY}+1))
|
|
sleep 1
|
|
fi
|
|
else
|
|
echo "udhcpd ok"
|
|
exit 0
|
|
fi
|
|
done
|
|
elif [ "$1" == "sta" ]; then
|
|
wpa_supplicant -Dnl80211 -i wlan0 -c /var/run/wpa_supplicant.conf &
|
|
TRY=0
|
|
while [ 1 ]
|
|
do
|
|
UP=`ifconfig wlan0 | grep UP`
|
|
echo "UP=$UP"
|
|
|
|
if [ -z "$UP" ]; then
|
|
echo "TRY=$TRY"
|
|
if [ $TRY -gt 5 ]; then
|
|
hostapd stop
|
|
exit 255
|
|
else
|
|
TRY=$((${TRY}+1))
|
|
sleep 1
|
|
fi
|
|
else
|
|
echo "UP ok"
|
|
ifconfig wlan0 192.168.1.1
|
|
break
|
|
fi
|
|
done
|
|
|
|
udhcpc -i wlan0
|
|
TRY=0
|
|
while [ 1 ]
|
|
do
|
|
DHCP=`ps`
|
|
DHCP=`echo $DHCP | grep udhcpc`
|
|
echo "DHCP=$DHCP"
|
|
|
|
if [ -z "$DHCP" ]; then
|
|
echo "TRY=$TRY"
|
|
if [ $TRY -gt 5 ]; then
|
|
echo "Can't run udhcpc"
|
|
exit 255
|
|
else
|
|
TRY=$((${TRY}+1))
|
|
sleep 1
|
|
fi
|
|
else
|
|
echo "udhcpd ok"
|
|
exit 0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
exit 255
|