diff options
Diffstat (limited to 'src/wireless')
-rw-r--r-- | src/wireless | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/src/wireless b/src/wireless deleted file mode 100644 index 71713e7..0000000 --- a/src/wireless +++ /dev/null @@ -1,193 +0,0 @@ -# Uses wireless_tools, to check for association to a network. -# wep_check interface [timeout] -wep_check() -{ - local INTERFACE="$1" TIMEOUT="${2:-15}" timeout=0 bssid - - while [[ $timeout -lt "$TIMEOUT" ]]; do - bssid=$(iwgetid "$INTERFACE" -ra) - [[ -n "$bssid" && "$bssid" != "00:00:00:00:00:00" ]] && return 0 - sleep 1 - let timeout++ - done - return 1 -} - -# Check if a particular network is within range -# find_essid interface essid connection -find_essid() { - local INTERFACE="$1" ESSID="$2" RETRIES=10 try=0 res scanned - while [[ "$try" -lt "$RETRIES" ]]; do - sleep 0.5 - let try++ - found=$( - res=$(iwlist "$INTERFACE" scan 2>/dev/null) - [[ -z "$res" ]] && exit 1 - # if results were non-null, process them and exit 0 - echo "$res" | sed -nr 's/^\s+ESSID:"([^"]*)"$/\1/p' | fgrep -xm1 "$ESSID" - ) && { - scanned=1 - report_debug find_essid "\"$found\"" - # we only bother with at most 5 successful scans - if (( try < RETRIES-4 )); then try=$((RETRIES-4)); fi - } - if [[ -n "$found" ]]; then - echo "$found" # JP: echo literal ESSID - return 0 # network found - fi - done - if [[ "$scanned" -ne 1 ]]; then - report_debug find_essid "unable to scan" - fi - return 1 -} - -# Check if a particular network is within range -# find_ap interface ap -find_ap() { - local INTERFACE="$1" ap=$(echo "$2" | tr 'abcdef' 'ABCDEF') RETRIES=10 try=0 res scanned - while [[ "$try" -lt "$RETRIES" ]]; do - sleep 0.5 - let try++ - found=$( - res=$(iwlist "$INTERFACE" scan 2> /dev/null) - [[ -z "$res" ]] && exit 1 - # if results were non-null, process them and exit 0 - echo "$res" | sed -nr '/^\s+Cell .. - Address: ([[:xdigit:]:]+)$/ { s//\1/; N; s/(.*)\n\s+ESSID:"([^"]*)"$/\1\t\2/p }' \ - | egrep -m1 "^$ap\t" - ) && { - scanned=1 - report_debug find_ap "\"$found\"" - # we only bother with at most 5 successful scans - if (( try < RETRIES-4 )); then try=$((RETRIES-4)); fi - } - if [[ -n "$found" ]]; then - echo "$found" | cut -f2 # JP: echo literal ESSID - return 0 - fi - done - if [[ "$scanned" -ne 1 ]]; then - report_debug find_ap "unable to scan" - fi - return 1 -} - -# Return a filename containing a list of network APs and ESSIDs found (sorted by decreasing signal strength) -# list_networks interface -list_networks() { - wpa_supplicant_scan_info "$1" 1,5 -} - -wpa_supplicant_scan_info() { - local INTERFACE="$1" fields="$2" essids - # temp file used, as keeping ESSID's with spaces in their name in arrays - # is hard, obscure and kinda nasty. This is simpler and clearer. - - [[ -z "$INTERFACE" ]] && return 1 - essids=$(mktemp --tmpdir essid.XXXXXXXX) - - wpa_supplicant -B -i"$INTERFACE" -Dnl80211,wext -C/run/wpa_supplicant -P/run/wpa_supplicant.pid || return 1 - wpa_cli -p /run/wpa_supplicant -i "$INTERFACE" scan &> /dev/null - sleep 2.5 - wpa_cli -p /run/wpa_supplicant -i "$INTERFACE" scan_results | - grep -v "^Selected" | - grep -v "^bssid" | - sort -rn -k3 | - sort -u -k5 | - sort -rn -k3 | - cut -f"$fields" > "$essids" - - # Fields are tab delimited - # Remove extraneous output from wpa_cli - # Sort by strength - # Remove duplicates - # Re-sort by strength as the removal disorders the list - # Cut to the AP/essid fields only - - kill "$(cat /run/wpa_supplicant.pid)" - - # File of 0 length, ie. no ssid's. - if [[ ! -s "$essids" ]]; then - rm -f "$essids" - return 1 - fi - - echo $essids - return 0 -} - -set_rf_state() { - local INTERFACE="$1" state="$2" RFKILL_NAME="$3" - - if [[ "$RFKILL" == "hard" ]]; then - report_fail "Cannot set state on hardware rfkill switch" - return 1 - fi - local path=$(get_rf_path "$INTERFACE" "$RFKILL_NAME") || return 1 - case "$state" in - enabled) - echo 1 > "$path/state" - ;; - disabled) - echo 0 > "$path/state" - ;; - esac -} - -get_rf_path() { - local INTERFACE="$1" RFKILL_NAME="$2" path - - if [[ -n "$RFKILL_NAME" ]]; then - for path in /sys/class/rfkill/*; do - if [[ "$(cat "$path/name")" == "$RFKILL_NAME" ]]; then - echo "$path" - return 0 - fi - done - report_fail "no rfkill switch with name $RFKILL_NAME" - else - path="/sys/class/net/$INTERFACE/rfkill" - if [[ -d "$path" ]]; then - echo "$path" - return 0 - fi - report_fail "no rfkill switch available on interface $INTERFACE" - fi - return 1 -} - -get_rf_state() { - local INTERFACE="$1" PROFILE="$2" path state - - path=$(get_rf_path "$INTERFACE" "$RFKILL_NAME") || return 1 - state=$(cat "$path/state") - - case "$state" in - 0|2) - echo "disabled";; - 1) - echo "enabled";; - *) - echo "$state";; - esac -} - -enable_rf() { - local INTERFACE="$1" RFKILL="$2" RFKILL_NAME="$3" - # Enable rfkill if necessary, or fail if it is hardware - if [[ -n "$RFKILL" ]]; then - local state=$(get_rf_state "$INTERFACE") || return 1 - if [[ "$state" != "enabled" ]]; then - if [[ "$RFKILL" == "soft" ]]; then - set_rf_state "$INTERFACE" enabled $RFKILL_NAME - sleep 1 - else - report_fail "radio is disabled on $INTERFACE" - return 1 - fi - fi - fi -} - -# vim: ft=sh ts=4 et sw=4: - |