125 lines
3.6 KiB
Bash
125 lines
3.6 KiB
Bash
|
#! /bin/sh
|
||
|
###################################################################################
|
||
|
# Choose and enable wifi-interface with uci
|
||
|
# Usage: choose_wifi.sh [ssid]
|
||
|
# when argument is passed, script tries to activate wifi interface with that ssid
|
||
|
# else script tries to activate first match from iwlist scanning results
|
||
|
#
|
||
|
# author: Christian Ulrich
|
||
|
# version: 0.1
|
||
|
###################################################################################
|
||
|
|
||
|
|
||
|
# function search_ssid( ssid, number_of_ifaces )
|
||
|
#################################################
|
||
|
search_ssid(){
|
||
|
found=false
|
||
|
current=0
|
||
|
index_to_return=0
|
||
|
while [ $found = false -a $current -lt $2 ]
|
||
|
do
|
||
|
uci_result=`uci get wireless.@wifi-iface[$current].ssid 2>&1`
|
||
|
if [ $uci_result = $1 ]; then
|
||
|
index_to_return=`expr $current + 1`
|
||
|
found=true
|
||
|
fi
|
||
|
current=`expr $current + 1` #increment counter
|
||
|
done
|
||
|
return $index_to_return
|
||
|
}
|
||
|
|
||
|
# Count interfaces in /etc/config/wireless (result in $iface_counter)
|
||
|
# and check if any of them is enabled
|
||
|
######################################################################
|
||
|
uci_result="0"
|
||
|
value_exists=true
|
||
|
iface_counter=0
|
||
|
enabled_iface_exists=false
|
||
|
while [ $value_exists = true ]
|
||
|
do
|
||
|
uci_result=`uci get wireless.@wifi-iface[$iface_counter].ssid 2>&1`
|
||
|
if [ $? -eq 0 ]; then
|
||
|
#iface_counter=`expr $iface_counter + 1` #increment iface_counter
|
||
|
#uci_result=`uci get wireless.@wifi-iface[$iface_counter].disabled 2>/dev/null`
|
||
|
if [ `uci get wireless.@wifi-iface[$iface_counter].disabled 2>/dev/null` = 0 ]; then
|
||
|
enabled_iface_exists=true
|
||
|
fi
|
||
|
iface_counter=`expr $iface_counter + 1` #increment iface_counter
|
||
|
else
|
||
|
value_exists=false
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Get Wifi interface
|
||
|
#####################
|
||
|
#wifi_iface=$(cat /proc/net/wireless | grep : )
|
||
|
#wifi_iface=$(echo $wifi_iface | cut -c1-$(expr $(expr index "$wifi_iface" :) - 1 ))
|
||
|
|
||
|
# Check commandline options and start searching
|
||
|
################################################
|
||
|
if [ $# -eq 0 ]; then
|
||
|
if [ $enabled_iface_exists = false ]; then # if no interface is enabled, enable first one
|
||
|
uci set wireless.@wifi-iface[0].disabled=0
|
||
|
/etc/init.d/network reload
|
||
|
sleep 1
|
||
|
fi
|
||
|
|
||
|
#scan_result=`iwlist ${wifi_iface} scanning | grep ESSID`
|
||
|
scan_result=`iwlist scanning 2>/dev/null | grep ESSID`
|
||
|
if [ $? -eq 1 ]; then
|
||
|
sleep 1
|
||
|
scan_result=`iwlist scanning 2>/dev/null | grep ESSID`
|
||
|
fi
|
||
|
#echo ${scan_result[1]}
|
||
|
scan_result=`echo $scan_result | tr -d 'ESSID:"'`
|
||
|
#scan_result=`echo $scan_result | tr -d '" '`
|
||
|
|
||
|
index_of_ssid_to_activate=0
|
||
|
for j in $scan_result
|
||
|
do
|
||
|
if [ $index_of_ssid_to_activate -eq 0 ]; then
|
||
|
search_ssid $j $iface_counter
|
||
|
index_of_ssid_to_activate=$?
|
||
|
if [ $index_of_ssid_to_activate -ne 0 ]; then
|
||
|
#ssid=$j
|
||
|
break
|
||
|
fi
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
elif [ $# -eq 1 ]; then
|
||
|
index_of_ssid_to_activate=0
|
||
|
search_ssid $1 $iface_counter
|
||
|
index_of_ssid_to_activate=$?
|
||
|
|
||
|
else
|
||
|
echo "usage: choose_wifi.sh [ssid]"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
|
||
|
# Evaluate results and enable the right interface with uci
|
||
|
###########################################################
|
||
|
|
||
|
if [ $index_of_ssid_to_activate -eq 0 ]; then
|
||
|
echo "Network with SSID ${1} not defined in /etc/config/wireless."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
i=1
|
||
|
while [ $i -le $iface_counter ]
|
||
|
do
|
||
|
if [ $i -eq $index_of_ssid_to_activate ]; then
|
||
|
uci set wireless.@wifi-iface[`expr $i - 1`].disabled=0
|
||
|
ssid=$(uci get wireless.@wifi-iface[`expr $i - 1`].ssid)
|
||
|
else
|
||
|
uci set wireless.@wifi-iface[`expr $i - 1`].disabled=1
|
||
|
fi
|
||
|
i=`expr $i + 1`
|
||
|
done
|
||
|
|
||
|
# Activate interface
|
||
|
##########################################
|
||
|
echo "Activating wifi-interface ${ssid}..."
|
||
|
/etc/init.d/network reload
|