travelmate: update 0.9.5
authorDirk Brenken <redacted>
Wed, 6 Dec 2017 15:53:43 +0000 (16:53 +0100)
committerDirk Brenken <redacted>
Wed, 6 Dec 2017 15:53:43 +0000 (16:53 +0100)
* change start priority to 25
* add support for hidden uplinks
* add support for wpa enterprise uplinks

Signed-off-by: Dirk Brenken <redacted>
net/travelmate/Makefile
net/travelmate/files/README.md
net/travelmate/files/travelmate.init
net/travelmate/files/travelmate.sh

index ea506987007d262d6b9e0deb04fe3089d6be22a3..93bde5d5fb71407f31e9d23001d8fd7269bccd4c 100644 (file)
@@ -6,7 +6,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=travelmate
-PKG_VERSION:=0.9.3
+PKG_VERSION:=0.9.5
 PKG_RELEASE:=1
 PKG_LICENSE:=GPL-3.0+
 PKG_MAINTAINER:=Dirk Brenken <dev@brenken.org>
index c739b492f252470de0e4c3081bc7da74386210ad..ad14024c6416ebeffec5a5764bc07d9bfd976c6f 100644 (file)
@@ -10,6 +10,7 @@ To avoid these kind of deadlocks, travelmate set all station interfaces in an "a
 * easy setup within normal OpenWrt/LEDE environment
 * strong LuCI-Support with builtin interface wizard and a wireless station manager
 * fast uplink connections
+* support all kinds of uplinks, incl. hidden and enterprise uplinks
 * manual / automatic mode support, the latter one checks the existing uplink connection regardless of ifdown event trigger actions every n seconds
 * support of devices with multiple radios
 * procd init and hotplug support
@@ -49,15 +50,14 @@ To avoid these kind of deadlocks, travelmate set all station interfaces in an "a
 
 **receive travelmate runtime information:**
 <pre><code>
-root@adb2go:~# /etc/init.d/travelmate status
 ::: travelmate runtime information
- travelmate_version : 0.9.1
+ travelmate_version : 0.9.5
  station_connection : true
- station_ssid       : blackhole.nl
+ station_id         : blackhole/04:F0:21:2F:B7:64
  station_interface  : trm_wwan
  station_radio      : radio1
- last_rundate       : 29.07.2017 18:02:01
- system             : LEDE Reboot SNAPSHOT r4639-eb43a817f7
+ last_rundate       : 06.12.2017 16:47:56
+ system             : LEDE Reboot SNAPSHOT r5422-9fe59abef8
 </code></pre>
 
 ## Manual Setup
index 40f57f24f1e227621c53759732920fc24008bd39..831ab8dc749402f3864b1e318c0afb4c9f3cb42e 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh /etc/rc.common
 
-START=90
+START=25
 USE_PROCD=1
 
 EXTRA_COMMANDS="status"
@@ -43,16 +43,15 @@ status()
 
 service_triggers()
 {
-    local auto="$(uci -q get travelmate.global.trm_automatic)"
+    local auto="$(uci_get travelmate.global.trm_automatic)"
 
     if [ "${auto}" = "0" ]
     then
-        local iface="$(uci -q get travelmate.global.trm_iface)"
-        local delay="$(uci -q get travelmate.global.trm_triggerdelay)"
+        local trigger="$(uci_get travelmate.global.trm_iface)"
+        local delay="$(uci_get travelmate.global.trm_triggerdelay)"
 
-        PROCD_RELOAD_DELAY=$((${delay:=2} * 1000))
-        procd_add_interface_trigger "interface.*.down" "${iface}" "${trm_init}" start
+        PROCD_RELOAD_DELAY=$((${delay:-2} * 1000))
+        procd_add_interface_trigger "interface.*.down" "${trigger}" "${trm_init}" start
     fi
-    PROCD_RELOAD_DELAY=1000
-    procd_add_config_trigger "config.change" "travelmate" "${trm_init}" start
+    procd_add_reload_trigger "travelmate"
 }
index e0d4d258eca5ab6b3181ffb6ee6a29b1c32854b6..ae9573c7756aca987c562a27fda50374f738bbce 100755 (executable)
@@ -10,7 +10,7 @@
 #
 LC_ALL=C
 PATH="/usr/sbin:/usr/bin:/sbin:/bin"
-trm_ver="0.9.3"
+trm_ver="0.9.5"
 trm_sysver="$(ubus -S call system board | jsonfilter -e '@.release.description')"
 trm_enabled=0
 trm_debug=0
@@ -123,13 +123,13 @@ f_check()
 #
 f_jsnupdate()
 {
-    local iface="${1}" radio="${2}" ssid="${3}"
+    local iface="${1}" radio="${2}" essid="${3:-"n/a"}" bssid="${4:-"n/a"}"
 
     json_init
     json_add_object "data"
     json_add_string "travelmate_version" "${trm_ver}"
     json_add_string "station_connection" "${trm_ifstatus}"
-    json_add_string "station_ssid" "${ssid}"
+    json_add_string "station_id" "${essid}/${bssid}"
     json_add_string "station_interface" "${iface}"
     json_add_string "station_radio" "${radio}"
     json_add_string "last_rundate" "$(/bin/date "+%d.%m.%Y %H:%M:%S")"
@@ -180,7 +180,7 @@ f_log()
 #
 f_main()
 {
-    local dev config ssid_list sta_ssid sta_radio sta_iface cnt=1
+    local dev config raw_scan essid_list bssid_list sta_essid sta_bssid sta_radio sta_iface cnt=1
 
     f_check "initial"
     if [ "${trm_ifstatus}" != "true" ]
@@ -203,33 +203,44 @@ f_main()
             fi
             while [ ${trm_maxretry} -eq 0 ] || [ ${cnt} -le ${trm_maxretry} ]
             do
-                ssid_list="$(${trm_iwinfo} "${dev}" scan | awk '/ESSID: "/{ORS=" ";if (!seen[$0]++) for(i=2; i<=NF; i++) print $i}')"
-                f_log "debug" "main: ${trm_iwinfo}, dev: ${dev}, ssids: ${ssid_list}"
-                if [ -n "${ssid_list}" ]
+                raw_scan="$(${trm_iwinfo} "${dev}" scan)"
+                essid_list="$(printf "%s" "${raw_scan}" | awk '/ESSID: "/{ORS=" ";if (!seen[$0]++) for(i=2; i<=NF; i++) print $i}')"
+                bssid_list="$(printf "%s" "${raw_scan}" | awk '/Address: /{ORS=" ";if (!seen[$5]++) print $5}')"
+                f_log "debug" "main: ${trm_iwinfo}, dev: ${dev}, essid-list: ${essid_list}, bssid-list: ${bssid_list}"
+                if [ -n "${essid_list}" ] || [ -n "${bssid_list}" ]
                 then
                     for sta in ${trm_stalist}
                     do
                         config="${sta%%_*}"
                         sta_radio="${sta##*_}"
-                        sta_ssid="$(uci -q get wireless."${config}".ssid)"
+                        sta_essid="$(uci -q get wireless."${config}".ssid)"
+                        sta_bssid="$(uci -q get wireless."${config}".bssid)"
                         sta_iface="$(uci -q get wireless."${config}".network)"
-                        if [ -n "$(printf "%s" "${ssid_list}" | grep -Fo "\"${sta_ssid}\"")" ] && [ "${dev}" = "${sta_radio}" ]
+                        if ([ -n "$(printf "%s" "${essid_list}" | grep -Fo "\"${sta_essid}\"")" ] ||\
+                            [ -n "$(printf "%s" "${bssid_list}" | grep -Fo "${sta_bssid}")" ]) && [ "${dev}" = "${sta_radio}" ]
                         then
                             uci -q set wireless."${config}".disabled=0
                             f_check "sta"
                             if [ "${trm_ifstatus}" = "true" ]
                             then
                                 uci -q commit wireless
-                                f_log "info " "interface '${sta_iface}' on '${sta_radio}' connected to uplink '${sta_ssid}' (${trm_sysver})"
-                                f_jsnupdate "${sta_iface}" "${sta_radio}" "${sta_ssid}"
+                                f_log "info " "interface '${sta_iface}' on '${sta_radio}' connected to uplink '${sta_essid:-"-"}/${sta_bssid:-"-"}' (${trm_sysver})"
+                                f_jsnupdate "${sta_iface}" "${sta_radio}" "${sta_essid}" "${sta_bssid}"
                                 return 0
                             elif [ ${trm_maxretry} -ne 0 ] && [ ${cnt} -eq ${trm_maxretry} ]
                             then
                                 uci -q set wireless."${config}".disabled=1
-                                uci -q set wireless."${config}".ssid="${sta_ssid}_err"
+                                if [ -n "${sta_essid}" ]
+                                then
+                                    uci -q set wireless."${config}".ssid="${sta_essid}_err"
+                                fi
+                                if [ -n "${sta_bssid}" ]
+                                then
+                                    uci -q set wireless."${config}".bssid="${sta_bssid}_err"
+                                fi
                                 uci -q commit wireless
                                 f_check "dev"
-                                f_log "info " "can't connect to uplink '${sta_ssid}' (${cnt}/${trm_maxretry}), uplink disabled (${trm_sysver})"
+                                f_log "info " "can't connect to uplink '${sta_essid:-"-"}/${sta_bssid:-"-"}' (${cnt}/${trm_maxretry}), uplink disabled (${trm_sysver})"
                             else
                                 if [ ${trm_maxretry} -eq 0 ]
                                 then
@@ -237,9 +248,9 @@ f_main()
                                 fi
                                 uci -q revert wireless
                                 f_check "dev"
-                                f_log "info " "can't connect to uplink '${sta_ssid}' (${cnt}/${trm_maxretry}) (${trm_sysver})"
+                                f_log "info " "can't connect to uplink '${sta_essid:-"-"}/${sta_bssid:-"-"}' (${cnt}/${trm_maxretry}) (${trm_sysver})"
                             fi
-                            f_jsnupdate "${sta_iface}" "${sta_radio}" "${sta_ssid}"
+                            f_jsnupdate "${sta_iface}" "${sta_radio}" "${sta_essid}" "${sta_bssid}"
                         fi
                     done
                 fi
@@ -250,16 +261,17 @@ f_main()
         if [ ! -s "${trm_rtfile}" ]
         then
             trm_ifstatus="false"
-            f_jsnupdate "n/a" "n/a" "n/a"
+            f_jsnupdate "n/a" "n/a" "n/a" "n/a"
         fi
     else
         if [ ! -s "${trm_rtfile}" ]
         then
             config="$(ubus -S call network.wireless status | jsonfilter -l1 -e '@.*.interfaces[@.config.mode="sta"].section')"
             sta_radio="$(uci -q get wireless."${config}".device)"
-            sta_ssid="$(uci -q get wireless."${config}".ssid)"
+            sta_essid="$(uci -q get wireless."${config}".ssid)"
+            sta_bssid="$(uci -q get wireless."${config}".bssid)"
             sta_iface="$(uci -q get wireless."${config}".network)"
-            f_jsnupdate "${sta_iface}" "${sta_radio}" "${sta_ssid}"
+            f_jsnupdate "${sta_iface}" "${sta_radio}" "${sta_essid}" "${sta_bssid}"
         fi
     fi
 }
git clone https://git.99rst.org/PROJECT