openwrt ubus (OpenWrt micro bus 架构)

转载 2016年05月30日 20:21:34

转载:http://www.jianshu.com/p/4dd1cfd3a33b

openwrt ubus (OpenWrt micro bus 架构)


为了在OpenWrt中提供守护进程和应用程序间的通讯,开发了ubus项目工程。它包含了守护进程、库以及一些额外的帮助程序。

核心部分是ubusd守护进程,它提供了其他守护进程将自己注册以及发送消息的接口。因为这个,接口通过使用Unix socket来实现,并使用TLV(type-length-value)消息。

为了简化软件的开发,可以使用已有的libubus库来使用ubus(连接ubus)。

每个守护进程在自己的名称空间中注册自有的路径。每个路径可以提供多个带有不定数量参数的方法,方法可以通过消息回复调用。

代码在LGPL 2.1授权方法下发布,你可以通过git在git://nbd.name/luci2/ubus.git或通过http在http://nbd.name/gitweb.cgi?p=luci2/ubus.git;a=summary获取。 ubus从r28499起被包含在OpenWrt中。

ubus命令行工具

ubus可以和ubusd服务器交互(和当前所有已经注册的服务). 它对研究和调试注册的命名空间以及编写脚本非常有用。对于调用带参数和返回信息的方法,它使用友好的JSON格式。下面是它的命令说明。

list
缺省列出所有通过RPC服务器注册的命名空间:

root@uplink:~# ubus list
network
network.device
network.interface.lan
network.interface.loopback
network.interface.wan
root@uplink:~#

如果调用时包含参数-v,将会显示指定命名空间更多方法参数等信息:

root@uplink:~# ubus -v list network.interface.lan
'network.interface.lan' @099f0c8b
    "up": {  }
    "down": {  }
    "status": {  }
    "prepare": {  }
    "add_device": { "name": "String" }
    "remove_device": { "name": "String" }
    "notify_proto": {  }
    "remove": {  }
    "set_data": {  }
root@uplink:~#

call
调用指定命名空间中指定的方法,并且通过消息传递给它:

root@uplink:~# ubus call network.interface.wan status
{
    "up": true,
    "pending": false,
    "available": true,
    "autostart": true,
    "uptime": 86017,
    "l3_device": "eth1",
    "device": "eth1",
    "address": [
        {
            "address": "178.25.65.236",
            "mask": 21
        }
    ],
    "route": [
        {
            "target": "0.0.0.0",
            "mask": 0,
            "nexthop": "178.25.71.254"
        }
    ],
    "data": {

    }
}
root@uplink:~#

消息参数必须是有效的JSON字符串,并且携带函数所要求的键及值:

root@uplink:~# ubus call network.device status '{ "name": "eth0" }'
{
    "type": "Network device",
    "up": true,
    "link": true,
    "mtu": 1500,
    "macaddr": "c6:3d:c7:90:aa:da",
    "txqueuelen": 1000,
    "statistics": {
        "collisions": 0,
        "rx_frame_errors": 0,
        "tx_compressed": 0,
        "multicast": 0,
        "rx_length_errors": 0,
        "tx_dropped": 0,
        "rx_bytes": 0,
        "rx_missed_errors": 0,
        "tx_errors": 0,
        "rx_compressed": 0,
        "rx_over_errors": 0,
        "tx_fifo_errors": 0,
        "rx_crc_errors": 0,
        "rx_packets": 0,
        "tx_heartbeat_errors": 0,
        "rx_dropped": 0,
        "tx_aborted_errors": 0,
        "tx_packets": 184546,
        "rx_errors": 0,
        "tx_bytes": 17409452,
        "tx_window_errors": 0,
        "rx_fifo_errors": 0,
        "tx_carrier_errors": 0
    }
}
root@uplink:~#

listen
设置一个监听socket并观察进入的事件:

root@uplink:~# ubus listen &
root@uplink:~# ubus call network.interface.wan down
{ "network.interface": { "action": "ifdown", "interface": "wan" } }
root@uplink:~# ubus call network.interface.wan up
{ "network.interface": { "action": "ifup", "interface": "wan" } }
{ "network.interface": { "action": "ifdown", "interface": "he" } }
{ "network.interface": { "action": "ifdown", "interface": "v6" } }
{ "network.interface": { "action": "ifup", "interface": "he" } }
{ "network.interface": { "action": "ifup", "interface": "v6" } }
root@uplink:~# 

send
发送一个事件提醒:

root@uplink:~# ubus listen &
root@uplink:~# ubus send foo '{ "bar": "baz" }'
{ "foo": { "bar": "baz" } }
root@uplink:~# 

ubus (OpenWrt micro bus 架构)

为了在OpenWrt中提供守护进程和应用程序间的通讯,开发了ubus项目工程。它包含了守护进程、库以及一些额外的帮助程序。 核心部分是ubusd守护进程,它提供了其他守护进程将自己注册以及发送消...
  • relijin
  • relijin
  • 2017年03月15日 16:31
  • 2286

openwrt ubus简介以及libubus开发说明

转载:http://gofly.blog.51cto.com/4344767/1685199 简介     ubus是新openwrt引入的一个消息总线,主要作用是实现不同应用程序之间的信...
  • u011980566
  • u011980566
  • 2016年05月26日 11:08
  • 1894

Openwrt学习笔记(一)——系统架构

下表是OpenWrt系统架构和其他系统架构的对比:   Desktop Distributions OpenWrt Android Replicant mer-based ...
  • lee244868149
  • lee244868149
  • 2016年12月11日 12:18
  • 2348

openwrt之ubus例子

root@LEDE:/# ubus call test_ubus helloworld '{"id":1,"msg":"hi","array":["a","b"]}' {         "id": ...
  • strugglelg
  • strugglelg
  • 2017年03月08日 21:58
  • 1370

openwrt中ubus的应用(四)

openwrt中ubus的应用参考连接: https://wiki.openwrt.org/zh-cn/doc/techref/ubus 参考例程1利用devstatus命令读取某个接口的参数roo...
  • bingyu9875
  • bingyu9875
  • 2017年03月16日 14:54
  • 389

openwrt ubus 移植到ARM上

由于项目的需要,需要把openwrt 上的ubus库移植到ARM上,ubus是用于openwrt内部模块间通信的库,类似于D-BUS,不过是它的一个精简版,具体的可以到openwrt官网上去了解。 ...
  • h893529689
  • h893529689
  • 2015年07月14日 09:47
  • 1550

Openwrt netifd解析

Overview Openwrt为网络接口管理和配置创建了一个单独的project,netifd。不同于其他发行版上针对同样问题领域采用的方案,netifd的目标是更适合在嵌入式的home-gate...
  • bailyzheng
  • bailyzheng
  • 2014年11月30日 20:31
  • 15394

学习笔记:openwrt listen & send 方式实现进程间通信源码

学习笔记:openwrt listen & send 方式实现进程间通信源码 源码: git clone https://github.com/heenbo/ubus_listen_send_tes...
  • oHeEnBo
  • oHeEnBo
  • 2016年10月18日 20:42
  • 754

openwrt中使用ubus实现进程通信

ubus为openwrt平台开发中的进程间通信提供了一个通用的框架。它让进程间通信的实现变得非常简单,并且ubus具有很强的可移植性,可以很方便的移植到其他linux平台上使用。本文描述了ubus的实...
  • jasonchen_gbd
  • jasonchen_gbd
  • 2015年05月10日 22:55
  • 17578

openwrt ubus注册

libubus 数据结构 struct ubus_event_handler { struct ubus_object obj; ubus_event_handler_t cb; }; struc...
  • Simple_JD
  • Simple_JD
  • 2016年04月14日 16:08
  • 1086
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:openwrt ubus (OpenWrt micro bus 架构)
举报原因:
原因补充:

(最多只允许输入30个字)