1*4a64e381SAndroid Build Coastguard Workermodule("luci.controller.admin.thread", package.seeall) 2*4a64e381SAndroid Build Coastguard Worker 3*4a64e381SAndroid Build Coastguard Workerfunction index() 4*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread"}, template("admin_thread/thread_overview"), translate("Thread"), 16) 5*4a64e381SAndroid Build Coastguard Worker page.leaf = true 6*4a64e381SAndroid Build Coastguard Worker 7*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_state"}, call("thread_state"), nil) 8*4a64e381SAndroid Build Coastguard Worker page.leaf = true 9*4a64e381SAndroid Build Coastguard Worker 10*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_neighbors"}, call("thread_neighbors"), nil) 11*4a64e381SAndroid Build Coastguard Worker page.leaf = true 12*4a64e381SAndroid Build Coastguard Worker 13*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_graph"}, call("thread_graph"), nil) 14*4a64e381SAndroid Build Coastguard Worker page.leaf = true 15*4a64e381SAndroid Build Coastguard Worker 16*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_scan"}, template("admin_thread/thread_scan"), nil) 17*4a64e381SAndroid Build Coastguard Worker page.leaf = true 18*4a64e381SAndroid Build Coastguard Worker 19*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_create"}, template("admin_thread/thread_setting"), nil) 20*4a64e381SAndroid Build Coastguard Worker page.leaf = true 21*4a64e381SAndroid Build Coastguard Worker 22*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_setting"}, template("admin_thread/thread_setting"), nil) 23*4a64e381SAndroid Build Coastguard Worker page.leaf = true 24*4a64e381SAndroid Build Coastguard Worker 25*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_add"}, post("thread_add"), nil) 26*4a64e381SAndroid Build Coastguard Worker page.leaf = true 27*4a64e381SAndroid Build Coastguard Worker 28*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_add_page"}, template("admin_thread/thread_add"), nil) 29*4a64e381SAndroid Build Coastguard Worker page.leaf = true 30*4a64e381SAndroid Build Coastguard Worker 31*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_view"}, template("admin_thread/thread_view"), nil) 32*4a64e381SAndroid Build Coastguard Worker page.leaf = true 33*4a64e381SAndroid Build Coastguard Worker 34*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_join"}, template("admin_thread/thread_join"), nil) 35*4a64e381SAndroid Build Coastguard Worker page.leaf = true 36*4a64e381SAndroid Build Coastguard Worker 37*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "joiner_remove"}, post("joiner_remove"), nil) 38*4a64e381SAndroid Build Coastguard Worker page.leaf = true 39*4a64e381SAndroid Build Coastguard Worker 40*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_attach"}, post("thread_attach"), nil) 41*4a64e381SAndroid Build Coastguard Worker page.leaf = true 42*4a64e381SAndroid Build Coastguard Worker 43*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_add_joiner"}, post("thread_add_joiner"), nil) 44*4a64e381SAndroid Build Coastguard Worker page.leaf = true 45*4a64e381SAndroid Build Coastguard Worker 46*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_handler_setting"}, post("thread_handler_setting"), nil) 47*4a64e381SAndroid Build Coastguard Worker page.leaf = true 48*4a64e381SAndroid Build Coastguard Worker 49*4a64e381SAndroid Build Coastguard Worker page = entry({"admin", "network", "thread_stop"}, post("thread_stop"), nil) 50*4a64e381SAndroid Build Coastguard Worker page.leaf = true 51*4a64e381SAndroid Build Coastguard Workerend 52*4a64e381SAndroid Build Coastguard Worker 53*4a64e381SAndroid Build Coastguard Workerfunction thread_handler_setting() 54*4a64e381SAndroid Build Coastguard Worker local ubus = require "ubus" 55*4a64e381SAndroid Build Coastguard Worker local tpl = require "luci.template" 56*4a64e381SAndroid Build Coastguard Worker local http = require "luci.http" 57*4a64e381SAndroid Build Coastguard Worker local networkname = luci.http.formvalue("threadname") 58*4a64e381SAndroid Build Coastguard Worker local channel = luci.http.formvalue("channel") + 0 59*4a64e381SAndroid Build Coastguard Worker local panid = luci.http.formvalue("panid") 60*4a64e381SAndroid Build Coastguard Worker local extpanid = luci.http.formvalue("extpanid") 61*4a64e381SAndroid Build Coastguard Worker local mode = luci.http.formvalue("mode") 62*4a64e381SAndroid Build Coastguard Worker local networkkey = luci.http.formvalue("networkkey") 63*4a64e381SAndroid Build Coastguard Worker local pskc = luci.http.formvalue("pskc") 64*4a64e381SAndroid Build Coastguard Worker local macfilter = luci.http.formvalue("macfilterselect") 65*4a64e381SAndroid Build Coastguard Worker local macfilteradd = luci.http.formvalue("macfilteradd") 66*4a64e381SAndroid Build Coastguard Worker local macfilterremove = luci.http.formvalue("macfilterremove") 67*4a64e381SAndroid Build Coastguard Worker local submitcontent = luci.http.formvalue("submitcontent") 68*4a64e381SAndroid Build Coastguard Worker local jumpflag = 0 69*4a64e381SAndroid Build Coastguard Worker 70*4a64e381SAndroid Build Coastguard Worker local vError = 0 71*4a64e381SAndroid Build Coastguard Worker local result 72*4a64e381SAndroid Build Coastguard Worker 73*4a64e381SAndroid Build Coastguard Worker local conn = ubus.connect() 74*4a64e381SAndroid Build Coastguard Worker 75*4a64e381SAndroid Build Coastguard Worker if not conn then 76*4a64e381SAndroid Build Coastguard Worker error("Failed to connect to ubusd") 77*4a64e381SAndroid Build Coastguard Worker end 78*4a64e381SAndroid Build Coastguard Worker 79*4a64e381SAndroid Build Coastguard Worker if submitcontent == "enable" then 80*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "threadstart", {}) 81*4a64e381SAndroid Build Coastguard Worker vError = result.Error 82*4a64e381SAndroid Build Coastguard Worker elseif submitcontent == "disable" then 83*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "threadstop", {}) 84*4a64e381SAndroid Build Coastguard Worker vError = result.Error 85*4a64e381SAndroid Build Coastguard Worker elseif submitcontent == "leave" then 86*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "leave", {}) 87*4a64e381SAndroid Build Coastguard Worker vError = result.Error 88*4a64e381SAndroid Build Coastguard Worker elseif submitcontent == "clearAddr" then 89*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "macfilterclear", {}) 90*4a64e381SAndroid Build Coastguard Worker vError = result.Error 91*4a64e381SAndroid Build Coastguard Worker jumpflag = 1 92*4a64e381SAndroid Build Coastguard Worker elseif submitcontent == "addAddr" then 93*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "macfilteradd", { addr = macfilteradd }) 94*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "macfiltersetstate", { state = macfilter }) 95*4a64e381SAndroid Build Coastguard Worker vError = result.Error 96*4a64e381SAndroid Build Coastguard Worker jumpflag = 1 97*4a64e381SAndroid Build Coastguard Worker elseif submitcontent == "removeAddr" then 98*4a64e381SAndroid Build Coastguard Worker if type(macfilterremove) == "table" then 99*4a64e381SAndroid Build Coastguard Worker local removeAddrIndex = luci.http.formvalue("removeAddrIndex") + 0 100*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "macfilterremove", { addr = macfilterremove[removeAddrIndex] }) 101*4a64e381SAndroid Build Coastguard Worker else 102*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "macfilterremove", { addr = macfilterremove }) 103*4a64e381SAndroid Build Coastguard Worker end 104*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "macfiltersetstate", { state = macfilter }) 105*4a64e381SAndroid Build Coastguard Worker vError = result.Error 106*4a64e381SAndroid Build Coastguard Worker jumpflag = 1 107*4a64e381SAndroid Build Coastguard Worker else 108*4a64e381SAndroid Build Coastguard Worker if(threadget("state").State == "disabled")then 109*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setnetworkname", { networkname = networkname }) 110*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setchannel", { channel = channel }) 111*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setpanid", { panid = panid }) 112*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setextpanid", { extpanid = extpanid }) 113*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setmode", { mode = mode }) 114*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setnetworkkey", { networkkey = networkkey }) 115*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setpskc", { pskc = pskc }) 116*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "macfiltersetstate", { state = macfilter }) 117*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "threadstart", {}) 118*4a64e381SAndroid Build Coastguard Worker else 119*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "mgmtset", { networkkey = networkkey, networkname = networkname, extpanid = extpanid, panid = panid, channel = tostring(channel), pskc = pskc }) 120*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "macfiltersetstate", { state = macfilter }) 121*4a64e381SAndroid Build Coastguard Worker end 122*4a64e381SAndroid Build Coastguard Worker vError = result.Error 123*4a64e381SAndroid Build Coastguard Worker end 124*4a64e381SAndroid Build Coastguard Worker 125*4a64e381SAndroid Build Coastguard Worker if(jumpflag == 0) then 126*4a64e381SAndroid Build Coastguard Worker local stat, dsp = pcall(require, "luci.dispatcher") 127*4a64e381SAndroid Build Coastguard Worker stat = 0 128*4a64e381SAndroid Build Coastguard Worker luci.http.redirect(stat and dsp.build_url("admin", "network", "thread") .. "?error=" .. vError) 129*4a64e381SAndroid Build Coastguard Worker else 130*4a64e381SAndroid Build Coastguard Worker local stat, dsp = pcall(require, "luci.dispatcher") 131*4a64e381SAndroid Build Coastguard Worker luci.http.redirect(stat and dsp.build_url("admin", "network", "thread_setting") .. "?error=" .. vError) 132*4a64e381SAndroid Build Coastguard Worker end 133*4a64e381SAndroid Build Coastguard Workerend 134*4a64e381SAndroid Build Coastguard Worker 135*4a64e381SAndroid Build Coastguard Workerfunction thread_add() 136*4a64e381SAndroid Build Coastguard Worker local ubus = require "ubus" 137*4a64e381SAndroid Build Coastguard Worker local tpl = require "luci.template" 138*4a64e381SAndroid Build Coastguard Worker local http = require "luci.http" 139*4a64e381SAndroid Build Coastguard Worker 140*4a64e381SAndroid Build Coastguard Worker local conn = ubus.connect() 141*4a64e381SAndroid Build Coastguard Worker 142*4a64e381SAndroid Build Coastguard Worker if not conn then 143*4a64e381SAndroid Build Coastguard Worker error("Failed to connect to ubusd") 144*4a64e381SAndroid Build Coastguard Worker end 145*4a64e381SAndroid Build Coastguard Worker 146*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "commissionerstart", {}) 147*4a64e381SAndroid Build Coastguard Worker local vError = result.Error 148*4a64e381SAndroid Build Coastguard Worker 149*4a64e381SAndroid Build Coastguard Worker local stat, dsp = pcall(require, "luci.dispatcher") 150*4a64e381SAndroid Build Coastguard Worker luci.http.redirect(stat and dsp.build_url("admin", "network", "thread_add_page") .. "?error=" .. vError) 151*4a64e381SAndroid Build Coastguard Workerend 152*4a64e381SAndroid Build Coastguard Worker 153*4a64e381SAndroid Build Coastguard Workerfunction thread_add_joiner() 154*4a64e381SAndroid Build Coastguard Worker local ubus = require "ubus" 155*4a64e381SAndroid Build Coastguard Worker local tpl = require "luci.template" 156*4a64e381SAndroid Build Coastguard Worker local http = require "luci.http" 157*4a64e381SAndroid Build Coastguard Worker local pskd = luci.http.formvalue("pskd") 158*4a64e381SAndroid Build Coastguard Worker local eui64 = luci.http.formvalue("eui64") 159*4a64e381SAndroid Build Coastguard Worker 160*4a64e381SAndroid Build Coastguard Worker local conn = ubus.connect() 161*4a64e381SAndroid Build Coastguard Worker 162*4a64e381SAndroid Build Coastguard Worker if not conn then 163*4a64e381SAndroid Build Coastguard Worker error("Failed to connect to ubusd") 164*4a64e381SAndroid Build Coastguard Worker end 165*4a64e381SAndroid Build Coastguard Worker 166*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "joineradd", { pskd = pskd, eui64 = eui64}) 167*4a64e381SAndroid Build Coastguard Worker vError = result.Error 168*4a64e381SAndroid Build Coastguard Worker 169*4a64e381SAndroid Build Coastguard Worker local stat, dsp = pcall(require, "luci.dispatcher") 170*4a64e381SAndroid Build Coastguard Worker luci.http.redirect(stat and dsp.build_url("admin", "network", "thread_view") .. "?error=" .. vError) 171*4a64e381SAndroid Build Coastguard Workerend 172*4a64e381SAndroid Build Coastguard Worker 173*4a64e381SAndroid Build Coastguard Workerfunction joiner_remove() 174*4a64e381SAndroid Build Coastguard Worker local ubus = require "ubus" 175*4a64e381SAndroid Build Coastguard Worker local tpl = require "luci.template" 176*4a64e381SAndroid Build Coastguard Worker local http = require "luci.http" 177*4a64e381SAndroid Build Coastguard Worker local eui64 = luci.http.formvalue("eui64") 178*4a64e381SAndroid Build Coastguard Worker 179*4a64e381SAndroid Build Coastguard Worker local conn = ubus.connect() 180*4a64e381SAndroid Build Coastguard Worker 181*4a64e381SAndroid Build Coastguard Worker if not conn then 182*4a64e381SAndroid Build Coastguard Worker error("Failed to connect to ubusd") 183*4a64e381SAndroid Build Coastguard Worker end 184*4a64e381SAndroid Build Coastguard Worker 185*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "joinerremove", { eui64 = eui64 }) 186*4a64e381SAndroid Build Coastguard Worker vError = result.Error 187*4a64e381SAndroid Build Coastguard Worker 188*4a64e381SAndroid Build Coastguard Worker local stat, dsp = pcall(require, "luci.dispatcher") 189*4a64e381SAndroid Build Coastguard Worker luci.http.redirect(stat and dsp.build_url("admin", "network", "thread_view") .. "?error=" .. vError) 190*4a64e381SAndroid Build Coastguard Workerend 191*4a64e381SAndroid Build Coastguard Worker 192*4a64e381SAndroid Build Coastguard Workerfunction thread_attach() 193*4a64e381SAndroid Build Coastguard Worker local ubus = require "ubus" 194*4a64e381SAndroid Build Coastguard Worker local tpl = require "luci.template" 195*4a64e381SAndroid Build Coastguard Worker local http = require "luci.http" 196*4a64e381SAndroid Build Coastguard Worker local panid = luci.http.formvalue("panid") 197*4a64e381SAndroid Build Coastguard Worker local channel = luci.http.formvalue("channel") + 0 198*4a64e381SAndroid Build Coastguard Worker local networkkey = luci.http.formvalue("networkkey") 199*4a64e381SAndroid Build Coastguard Worker 200*4a64e381SAndroid Build Coastguard Worker local conn = ubus.connect() 201*4a64e381SAndroid Build Coastguard Worker 202*4a64e381SAndroid Build Coastguard Worker if not conn then 203*4a64e381SAndroid Build Coastguard Worker error("Failed to connect to ubusd") 204*4a64e381SAndroid Build Coastguard Worker end 205*4a64e381SAndroid Build Coastguard Worker 206*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setpanid", { panid = panid }) 207*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setchannel", { channel = channel }) 208*4a64e381SAndroid Build Coastguard Worker conn:call("otbr", "setnetworkkey", { networkkey = networkkey }) 209*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "threadstart", {}) 210*4a64e381SAndroid Build Coastguard Worker vError = result.Error 211*4a64e381SAndroid Build Coastguard Worker 212*4a64e381SAndroid Build Coastguard Worker local stat, dsp = pcall(require, "luci.dispatcher") 213*4a64e381SAndroid Build Coastguard Worker luci.http.redirect(stat and dsp.build_url("admin", "network", "thread") .. "?error=" .. vError) 214*4a64e381SAndroid Build Coastguard Workerend 215*4a64e381SAndroid Build Coastguard Worker 216*4a64e381SAndroid Build Coastguard Workerfunction thread_stop() 217*4a64e381SAndroid Build Coastguard Worker local ubus = require "ubus" 218*4a64e381SAndroid Build Coastguard Worker local tpl = require "luci.template" 219*4a64e381SAndroid Build Coastguard Worker local http = require "luci.http" 220*4a64e381SAndroid Build Coastguard Worker 221*4a64e381SAndroid Build Coastguard Worker local conn = ubus.connect() 222*4a64e381SAndroid Build Coastguard Worker 223*4a64e381SAndroid Build Coastguard Worker if not conn then 224*4a64e381SAndroid Build Coastguard Worker error("Failed to connect to ubusd") 225*4a64e381SAndroid Build Coastguard Worker end 226*4a64e381SAndroid Build Coastguard Worker 227*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", "threadstop", {}) 228*4a64e381SAndroid Build Coastguard Worker vError = result.Error 229*4a64e381SAndroid Build Coastguard Worker 230*4a64e381SAndroid Build Coastguard Worker local stat, dsp = pcall(require, "luci.dispatcher") 231*4a64e381SAndroid Build Coastguard Worker luci.http.redirect(stat and dsp.build_url("admin", "network", "thread") .. "?error=" .. vError) 232*4a64e381SAndroid Build Coastguard Workerend 233*4a64e381SAndroid Build Coastguard Worker 234*4a64e381SAndroid Build Coastguard Workerfunction thread_join() 235*4a64e381SAndroid Build Coastguard Worker local tpl = require "luci.template" 236*4a64e381SAndroid Build Coastguard Worker local http = require "luci.http" 237*4a64e381SAndroid Build Coastguard Worker 238*4a64e381SAndroid Build Coastguard Worker local stat, dsp = pcall(require, "luci.dispatcher") 239*4a64e381SAndroid Build Coastguard Worker luci.http.redirect(stat and dsp.build_url("admin", "network", "thread_join")) 240*4a64e381SAndroid Build Coastguard Workerend 241*4a64e381SAndroid Build Coastguard Worker 242*4a64e381SAndroid Build Coastguard Workerfunction thread_state() 243*4a64e381SAndroid Build Coastguard Worker luci.http.prepare_content("application/json") 244*4a64e381SAndroid Build Coastguard Worker 245*4a64e381SAndroid Build Coastguard Worker local result = {} 246*4a64e381SAndroid Build Coastguard Worker result.state = threadget("state").State 247*4a64e381SAndroid Build Coastguard Worker 248*4a64e381SAndroid Build Coastguard Worker if(result.state ~= "disabled") then 249*4a64e381SAndroid Build Coastguard Worker result.panid = threadget("panid").PanId 250*4a64e381SAndroid Build Coastguard Worker result.channel = threadget("channel").Channel 251*4a64e381SAndroid Build Coastguard Worker result.networkname = threadget("networkname").NetworkName 252*4a64e381SAndroid Build Coastguard Worker end 253*4a64e381SAndroid Build Coastguard Worker luci.http.write_json(result) 254*4a64e381SAndroid Build Coastguard Workerend 255*4a64e381SAndroid Build Coastguard Worker 256*4a64e381SAndroid Build Coastguard Workerfunction thread_graph() 257*4a64e381SAndroid Build Coastguard Worker luci.http.prepare_content("application/json") 258*4a64e381SAndroid Build Coastguard Worker 259*4a64e381SAndroid Build Coastguard Worker luci.http.write_json(networkdata()) 260*4a64e381SAndroid Build Coastguard Workerend 261*4a64e381SAndroid Build Coastguard Worker 262*4a64e381SAndroid Build Coastguard Workerfunction thread_neighbors() 263*4a64e381SAndroid Build Coastguard Worker luci.http.prepare_content("application/json") 264*4a64e381SAndroid Build Coastguard Worker 265*4a64e381SAndroid Build Coastguard Worker local result = {} 266*4a64e381SAndroid Build Coastguard Worker local neighbor = neighborlist() 267*4a64e381SAndroid Build Coastguard Worker 268*4a64e381SAndroid Build Coastguard Worker result.neighbor = neighbor.neighborlist 269*4a64e381SAndroid Build Coastguard Worker 270*4a64e381SAndroid Build Coastguard Worker local joiner = joinerlist() 271*4a64e381SAndroid Build Coastguard Worker result.joinernum = joiner.joinernum 272*4a64e381SAndroid Build Coastguard Worker result.joinerlist = joiner.joinerlist 273*4a64e381SAndroid Build Coastguard Worker 274*4a64e381SAndroid Build Coastguard Worker result.state = threadget("state").State 275*4a64e381SAndroid Build Coastguard Worker 276*4a64e381SAndroid Build Coastguard Worker luci.http.write_json(result) 277*4a64e381SAndroid Build Coastguard Workerend 278*4a64e381SAndroid Build Coastguard Worker 279*4a64e381SAndroid Build Coastguard Workerfunction networkdata() 280*4a64e381SAndroid Build Coastguard Worker local k, v, m, n 281*4a64e381SAndroid Build Coastguard Worker local data = { } 282*4a64e381SAndroid Build Coastguard Worker local l = { } 283*4a64e381SAndroid Build Coastguard Worker 284*4a64e381SAndroid Build Coastguard Worker local result = connect_ubus("networkdata") 285*4a64e381SAndroid Build Coastguard Worker 286*4a64e381SAndroid Build Coastguard Worker for k, v in pairs(result) do 287*4a64e381SAndroid Build Coastguard Worker l[#l+1] = v 288*4a64e381SAndroid Build Coastguard Worker end 289*4a64e381SAndroid Build Coastguard Worker 290*4a64e381SAndroid Build Coastguard Worker data.connect = l 291*4a64e381SAndroid Build Coastguard Worker data.state = threadget("state").State 292*4a64e381SAndroid Build Coastguard Worker data.rloc16 = threadget("rloc16").rloc16 293*4a64e381SAndroid Build Coastguard Worker data.joinernum = threadget("joinernum").joinernum 294*4a64e381SAndroid Build Coastguard Worker data.leader = threadget("leaderdata").leaderdata.LeaderRouterId 295*4a64e381SAndroid Build Coastguard Worker return data 296*4a64e381SAndroid Build Coastguard Workerend 297*4a64e381SAndroid Build Coastguard Worker 298*4a64e381SAndroid Build Coastguard Workerfunction joinerlist() 299*4a64e381SAndroid Build Coastguard Worker local k, v, result 300*4a64e381SAndroid Build Coastguard Worker local l = { } 301*4a64e381SAndroid Build Coastguard Worker local data = { } 302*4a64e381SAndroid Build Coastguard Worker 303*4a64e381SAndroid Build Coastguard Worker result = connect_ubus("joinernum") 304*4a64e381SAndroid Build Coastguard Worker data.joinernum = result.joinernum 305*4a64e381SAndroid Build Coastguard Worker 306*4a64e381SAndroid Build Coastguard Worker if result.Joinernum ~= 0 then 307*4a64e381SAndroid Build Coastguard Worker for k, v in pairs(result.joinerList) do 308*4a64e381SAndroid Build Coastguard Worker l[#l+1] = v 309*4a64e381SAndroid Build Coastguard Worker end 310*4a64e381SAndroid Build Coastguard Worker end 311*4a64e381SAndroid Build Coastguard Worker 312*4a64e381SAndroid Build Coastguard Worker data.joinerlist = l 313*4a64e381SAndroid Build Coastguard Worker return data 314*4a64e381SAndroid Build Coastguard Workerend 315*4a64e381SAndroid Build Coastguard Worker 316*4a64e381SAndroid Build Coastguard Workerfunction neighborlist() 317*4a64e381SAndroid Build Coastguard Worker local k, v, result, tmpResult 318*4a64e381SAndroid Build Coastguard Worker local l = { } 319*4a64e381SAndroid Build Coastguard Worker local data = { } 320*4a64e381SAndroid Build Coastguard Worker 321*4a64e381SAndroid Build Coastguard Worker local state = threadget("state").State 322*4a64e381SAndroid Build Coastguard Worker 323*4a64e381SAndroid Build Coastguard Worker if state == 'child' then 324*4a64e381SAndroid Build Coastguard Worker tmpResult = connect_ubus("parent") 325*4a64e381SAndroid Build Coastguard Worker result = tmpResult.parent_list 326*4a64e381SAndroid Build Coastguard Worker else 327*4a64e381SAndroid Build Coastguard Worker tmpResult = connect_ubus("neighbor") 328*4a64e381SAndroid Build Coastguard Worker result = tmpResult.neighbor_list 329*4a64e381SAndroid Build Coastguard Worker end 330*4a64e381SAndroid Build Coastguard Worker 331*4a64e381SAndroid Build Coastguard Worker for k, v in pairs(result) do 332*4a64e381SAndroid Build Coastguard Worker l[#l+1] = v 333*4a64e381SAndroid Build Coastguard Worker end 334*4a64e381SAndroid Build Coastguard Worker 335*4a64e381SAndroid Build Coastguard Worker data.neighborlist = l 336*4a64e381SAndroid Build Coastguard Worker return data 337*4a64e381SAndroid Build Coastguard Workerend 338*4a64e381SAndroid Build Coastguard Worker 339*4a64e381SAndroid Build Coastguard Workerfunction connect_ubus(methods) 340*4a64e381SAndroid Build Coastguard Worker local ubus = require "ubus" 341*4a64e381SAndroid Build Coastguard Worker local result 342*4a64e381SAndroid Build Coastguard Worker local conn = ubus.connect() 343*4a64e381SAndroid Build Coastguard Worker 344*4a64e381SAndroid Build Coastguard Worker if not conn then 345*4a64e381SAndroid Build Coastguard Worker error("Failed to connect to ubusd") 346*4a64e381SAndroid Build Coastguard Worker end 347*4a64e381SAndroid Build Coastguard Worker 348*4a64e381SAndroid Build Coastguard Worker result = conn:call("otbr", methods, {}) 349*4a64e381SAndroid Build Coastguard Worker 350*4a64e381SAndroid Build Coastguard Worker return result 351*4a64e381SAndroid Build Coastguard Workerend 352*4a64e381SAndroid Build Coastguard Worker 353*4a64e381SAndroid Build Coastguard Workerfunction threadget(action) 354*4a64e381SAndroid Build Coastguard Worker local result = connect_ubus(action) 355*4a64e381SAndroid Build Coastguard Worker 356*4a64e381SAndroid Build Coastguard Worker return result 357*4a64e381SAndroid Build Coastguard Workerend 358