Author: hummen Date: Thu Apr 8 17:36:05 2010 New Revision: 2261 Log: added auto-handover script for n900 please test, if this also works on other devices and rename Added: trunk/tools/auto-handover-n900.sh (contents, props changed) Modified: trunk/tools/iwlist_parser.c Added: trunk/tools/auto-handover-n900.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/tools/auto-handover-n900.sh Thu Apr 8 17:36:05 2010 (r2261) @@ -0,0 +1,77 @@ +#!/bin/sh + +WIFI_IF="wlan0" +PATTERN="pisa-testbed-demo" +SLEEP_TIME=1 + +set -u + +echo "This file searches APs with SSID $PATTERN* and switches to the strongest signal" + +## internal parameters +LAST_AP="00:00:00:00:00:00" +CURRENT_AP="00:00:00:00:00:00" +UNASSOC_COUNTER=0 +OOR_COUNTER=0 +DO_HANDOVER=0 +CHECK_DELAY=10 + +get_current_ap () { + CURRENT_AP=$(iwconfig ${WIFI_IF} | grep "Access Point:" | tr -s " " | cut -d" " -f 7) +} + +check_legacy_handover () { + if [ "${CURRENT_AP}" = "Not-Associated" ]; then + UNASSOC_COUNTER=$((${UNASSOC_COUNTER} + 1)) + echo "WARNING: client not associated (count=${UNASSOC_COUNTER})" + LAST_AP="00:00:00:00:00:00" + elif [ "${LAST_AP}" = "00:00:00:00:00:00" ]; then + echo "connected to: ${CURRENT_AP}" + LAST_AP=${CURRENT_AP} + DO_HANDOVER=1 + elif [ "${CURRENT_AP}" != "${LAST_AP}" ]; then + echo "legacy handover to: ${CURRENT_AP}" + DO_HANDOVER=1 + fi +} + +check_best_ap () { + CURRENT_AP=$(iwlist $WIFI_IF scan | iwlist_parser -s $PATTERN | tr -s " " | cut -d" " -f 1) + + if [ "${CURRENT_AP}" = "NONE" ]; then + OOR_COUNTER=$((${OOR_COUNTER} + 1)) + echo "WARNING: PISA APs out of range (count=${OOR_COUNTER})" + elif [ "${LAST_AP}" != "${CURRENT_AP}" ]; then + echo "forced handover to: ${CURRENT_AP}" + iwconfig ${WIFI_IF} ap ${CURRENT_AP} # essid ${result[1]} + DO_HANDOVER=1 + fi +} + +trigger_hip_update () { + if ps | grep "hipd" | grep -v "grep"; then + echo "triggering HIP update" + hipconf manual-update $WIFI_IF + fi +} + +while sleep ${SLEEP_TIME}; do + get_current_ap + check_legacy_handover + if [ ${CHECK_DELAY} -gt 0 ]; then + CHECK_DELAY=$((${CHECK_DELAY} - 1)) + fi + if [ $DO_HANDOVER = 0 -a ${CHECK_DELAY} = 0 ]; then + check_best_ap + CHECK_DELAY=2 + fi + if [ $DO_HANDOVER = 1 ]; then + trigger_hip_update + LAST_AP=${CURRENT_AP} + UNASSOC_COUNTER=0 + OOR_COUNTER=0 + CHECK_DELAY=10 + DO_HANDOVER=0 + fi +done + Modified: trunk/tools/iwlist_parser.c ============================================================================== --- trunk/tools/iwlist_parser.c Thu Apr 8 15:20:36 2010 (r2260) +++ trunk/tools/iwlist_parser.c Thu Apr 8 17:36:05 2010 (r2261) @@ -163,7 +163,7 @@ j++; } strEssid[iCellNumber - 1][j] = '\0'; - printf("Essid: %s \n", strEssid[iCellNumber - 1]); + dbg_printf("Essid: %s \n", strEssid[iCellNumber - 1]); step = 4; pTokens = strtok(NULL, " "); continue;