#!/usr/bin/lua local util = require("luci.util") local json = require("luci.json") local config = require 'gluon.sites' local uci = require('luci.model.uci').cursor() local site = require 'gluon.site_config' function is_site_valid(site) for _, tmp in pairs(config) do if tmp.site_code == site then return true end end return false end function set_currentsite(site) if site and is_site_valid(site) then uci:set('currentsite', 'current', 'name', site) uci:save('currentsite') uci:commit('currentsite') return true end return false end function neighbours(ifname) local info = util.exec("gluon-neighbour-info -d ff02::2:1001 -p 1001 -r nodeinfo -t 2 -i " .. ifname) local macs = {} for _, line in ipairs(util.split(info)) do local data = json.decode(line) if data and data["network"] then local mac = data["network"]["mac"] if mac then macs[mac] = data end end end return macs end function get_neighbour_site() local interfaces = util.split(util.trim(util.exec("batctl if | grep active | grep -v mesh-vpn | cut -d':' -f1"))) for _, ifname in ipairs(interfaces) do local macs = neighbours(ifname) for _, node in pairs(macs) do if node["system"] then local node_site = node["system"]["site_code"] if node_site and is_site_valid(node_site) then return node_site end end end end return nil end local currentsite = uci:get('currentsite', 'current', 'name') local configured = is_site_valid(currentsite) if configured == false then currentsite = get_neighbour_site() configured = set_currentsite(currentsite) end if configured then os.execute("rm -f /lib/gluon/cron/ffho-site-auto-select >/dev/null 2>&1") if site.site_code ~= currentsite then os.execute("/lib/gluon/site-select/site-upgrade >/dev/null 2>&1") os.execute("reboot >/dev/null 2>&1") end end