openwrt中ubus的应用
参考连接: https://wiki.openwrt.org/zh-cn/doc/techref/ubus
参考例程1
利用devstatus命令读取某个接口的参数
root@OpenWrt:/# devstatus eth0 { "external": false, "present": true, "type": "Network device", "up": true, "carrier": true, "macaddr": "24:03:00:38:ae:02", "ipv6": false, "statistics": { "collisions": 0, "rx_frame_errors": 0, "tx_compressed": 0, "multicast": 0, "rx_length_errors": 0, "tx_dropped": 0, "rx_bytes": 162806383, "rx_missed_errors": 0, "tx_errors": 0, "rx_compressed": 0, "rx_over_errors": 0, "tx_fifo_errors": 0, "rx_crc_errors": 0, "rx_packets": 2623030, "tx_heartbeat_errors": 0, "rx_dropped": 3, "tx_aborted_errors": 0, "tx_packets": 5821690, "rx_errors": 0, "tx_bytes": 3384480192, "tx_window_errors": 0, "rx_fifo_errors": 0, "tx_carrier_errors": 0 } } root@OpenWrt:/#
LUA例程
--Load module require "ubus" --Establish connection local conn = ubus.connect() if not conn then error("Failed to connect to ubusd") end --Iterate all namespaces and procedures local namespaces = conn:objects() for i, n in ipairs(namespaces) do print("namespace=" .. n) local signatures = conn:signatures(n) for p, s in pairs(signatures) do print("\tprocedure=" .. p) for k, v in pairs(s) do print("\t\tattribute=" .. k .. " type=" .. v) end end end --Call a procedure local status = conn:call("network.device", "status", { name = "eth0" }) for k, v in pairs(status) do print("key=" .. k .. " value=" .. tostring(v)) end --Close connection conn:close()
输出结果
root@OpenWrt:/# lua 11.lua key=statistics value=table: 0x432e90 key=type value=Network device key=present value=true key=up value=true key=carrier value=true key=external value=false key=ipv6 value=false key=macaddr value=24:03:00:38:ae:02 root@OpenWrt:/#