[pisa-src] r2261 - in trunk/tools: auto-handover-n900.sh iwlist_parser.c

  • From: René Hummen <rene.hummen@xxxxxxxxxxxxxx>
  • To: pisa-src@xxxxxxxxxxxxx
  • Date: Thu, 08 Apr 2010 17:36:06 +0200

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;

Other related posts: