xref: /aosp_15_r20/external/ot-br-posix/src/openwrt/controller/thread.lua (revision 4a64e381480ef79f0532b2421e44e6ee336b8e0d)
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