|
|
@ -10,23 +10,25 @@ |
|
|
|
# |
|
|
|
LC_ALL=C |
|
|
|
PATH="/usr/sbin:/usr/bin:/sbin:/bin" |
|
|
|
trm_ver="0.6.0" |
|
|
|
trm_ver="0.7.0" |
|
|
|
trm_sysver="$(ubus -S call system board | jsonfilter -e '@.release.description')" |
|
|
|
trm_enabled=0 |
|
|
|
trm_debug=0 |
|
|
|
trm_automatic=0 |
|
|
|
trm_maxwait=30 |
|
|
|
trm_automatic=1 |
|
|
|
trm_maxretry=3 |
|
|
|
trm_maxwait=30 |
|
|
|
trm_timeout=60 |
|
|
|
trm_iw=1 |
|
|
|
trm_rtfile="/tmp/trm_runtime.json" |
|
|
|
|
|
|
|
# source required system library |
|
|
|
# |
|
|
|
if [ -r "/lib/functions.sh" ] |
|
|
|
if [ -r "/lib/functions.sh" ] && [ -r "/usr/share/libubox/jshn.sh" ] |
|
|
|
then |
|
|
|
. "/lib/functions.sh" |
|
|
|
. "/usr/share/libubox/jshn.sh" |
|
|
|
else |
|
|
|
f_log "error" "required system library not found" |
|
|
|
f_log "error" "system libraries not found" |
|
|
|
fi |
|
|
|
|
|
|
|
# f_envload: load travelmate environment |
|
|
@ -134,28 +136,43 @@ f_check() |
|
|
|
f_log "debug" "mode: ${mode}, name: ${ifname}, status: ${trm_ifstatus}, count: ${cnt}, max-wait: ${trm_maxwait}, automatic: ${trm_automatic}" |
|
|
|
} |
|
|
|
|
|
|
|
# f_ubus: update ubus service |
|
|
|
# f_jsnupdate: update runtime information |
|
|
|
# |
|
|
|
f_ubus() |
|
|
|
f_jsnupdate() |
|
|
|
{ |
|
|
|
local active_triggers iface="${1}" radio="${2}" ssid="${3}" |
|
|
|
local iface="${1}" radio="${2}" ssid="${3}" |
|
|
|
|
|
|
|
for name in ${trm_iface} |
|
|
|
do |
|
|
|
active_triggers="${active_triggers}[\"interface.*.down\",[\"if\",[\"eq\",\"interface\",\"${name}\"],[\"run_script\",\"/etc/init.d/travelmate\",\"start\"],1000]]," |
|
|
|
done |
|
|
|
active_triggers="${active_triggers}[\"config.change\",[\"if\",[\"eq\",\"package\",\"travelmate\"],[\"run_script\",\"/etc/init.d/travelmate\",\"start\"],1000]]" |
|
|
|
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_interface" "${iface}" |
|
|
|
json_add_string "station_radio" "${radio}" |
|
|
|
json_add_string "last_rundate" "$(/bin/date "+%d.%m.%Y %H:%M:%S")" |
|
|
|
json_add_string "system" "${trm_sysver}" |
|
|
|
json_close_object |
|
|
|
json_dump > "${trm_rtfile}" |
|
|
|
} |
|
|
|
|
|
|
|
# f_status: output runtime information |
|
|
|
# |
|
|
|
f_status() |
|
|
|
{ |
|
|
|
local key keylist value |
|
|
|
|
|
|
|
ubus call service add "{\"name\":\"travelmate\", |
|
|
|
\"instances\":{\"travelmate\":{\"command\":[\"/usr/bin/travelmate.sh\"], |
|
|
|
\"data\":{\"travelmate_version\":\"${trm_ver}\", |
|
|
|
\"station_interface\":\"${iface}\", |
|
|
|
\"station_radio\":\"${radio}\", |
|
|
|
\"station_ssid\":\"${ssid}\", |
|
|
|
\"last_rundate\":\"$(/bin/date "+%d.%m.%Y %H:%M:%S")\", |
|
|
|
\"online_status\":\"${trm_ifstatus}\", |
|
|
|
\"system\":\"${trm_sysver}\"}}}, |
|
|
|
\"triggers\":[${active_triggers}]}" |
|
|
|
if [ -s "${trm_rtfile}" ] |
|
|
|
then |
|
|
|
printf "%s\n" "::: travelmate runtime information" |
|
|
|
json_load "$(cat "${trm_rtfile}" 2>/dev/null)" |
|
|
|
json_select data |
|
|
|
json_get_keys keylist |
|
|
|
for key in ${keylist} |
|
|
|
do |
|
|
|
json_get_var value ${key} |
|
|
|
printf " %-18s : %s\n" "${key}" "${value}" |
|
|
|
done |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# f_log: write to syslog, exit on error |
|
|
@ -191,7 +208,6 @@ f_main() |
|
|
|
then |
|
|
|
uci -q commit wireless |
|
|
|
ubus call network reload |
|
|
|
sleep 5 |
|
|
|
fi |
|
|
|
f_check "ap" |
|
|
|
f_log "debug" "ap-list: ${trm_aplist}, sta-list: ${trm_stalist}" |
|
|
@ -236,14 +252,13 @@ f_main() |
|
|
|
then |
|
|
|
uci -q commit wireless |
|
|
|
f_log "info " "interface '${sta_iface}' on '${sta_radio}' connected to uplink '${sta_ssid}' (${trm_sysver})" |
|
|
|
sleep 5 |
|
|
|
f_ubus "${sta_iface}" "${sta_radio}" "${sta_ssid}" |
|
|
|
f_jsnupdate "${sta_iface}" "${sta_radio}" "${sta_ssid}" |
|
|
|
return 0 |
|
|
|
else |
|
|
|
uci -q revert wireless |
|
|
|
ubus call network reload |
|
|
|
f_log "info " "interface '${sta_iface}' on '${sta_radio}' can't connect to uplink '${sta_ssid}' (${trm_sysver})" |
|
|
|
f_ubus "${sta_iface}" "${sta_radio}" "${sta_ssid}" |
|
|
|
f_jsnupdate "${sta_iface}" "${sta_radio}" "${sta_ssid}" |
|
|
|
fi |
|
|
|
fi |
|
|
|
done |
|
|
@ -255,12 +270,21 @@ f_main() |
|
|
|
fi |
|
|
|
} |
|
|
|
|
|
|
|
# handle different travelmate actions |
|
|
|
# |
|
|
|
f_envload |
|
|
|
f_main |
|
|
|
while [ ${trm_automatic} -eq 1 ] |
|
|
|
do |
|
|
|
sleep ${trm_timeout} |
|
|
|
f_envload |
|
|
|
f_main |
|
|
|
done |
|
|
|
case "${1}" in |
|
|
|
status) |
|
|
|
f_status |
|
|
|
;; |
|
|
|
*) |
|
|
|
f_main |
|
|
|
while [ ${trm_automatic} -eq 1 ] |
|
|
|
do |
|
|
|
sleep ${trm_timeout} |
|
|
|
f_envload |
|
|
|
f_main |
|
|
|
done |
|
|
|
;; |
|
|
|
esac |
|
|
|
exit 0 |