首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过ubus调用执行Openwrt UCI add_list

通过ubus调用执行Openwrt UCI add_list
EN

Stack Overflow用户
提问于 2019-12-31 12:17:43
回答 2查看 1.6K关注 0票数 1

我试图使用"ubus调用uci add_list ..“向network.lan.ifname添加一个新的接口。

用于直接运行它的语法是(它正在工作):

代码语言:javascript
复制
uci add_list network.lan.ifname="new_iface_name"

我尝试使用以下shell命令使用ubus调用将接口添加到列表中:

具有独立定义的选项的

代码语言:javascript
复制
ubus call uci add_list '{"config" : "network", "section" : "lan", "option" : "ifname", "values" : "new_iface_name"}}'

这将导致以下错误消息:

代码语言:javascript
复制
Command failed: Method not found

没有选项的

  1. (节和值)

代码语言:javascript
复制
ubus call uci add_list '{"config" : "network", "section" : "lan", "values" : {"ifname"="new_iface_name"}}'

这将产生相同的错误消息:

代码语言:javascript
复制
Command failed: Method not found

  1. improvisation

代码语言:javascript
复制
ubus call uci add_list '{"config" : "network", "section" : "lan", "valures" : {"ifname"="adam"}}

这将导致解析消息失败:

代码语言:javascript
复制
Failed to parse message data

预先感谢任何能说明正确语法要求的人。

EN

回答 2

Stack Overflow用户

发布于 2022-04-18 04:11:17

根据用例使用"set“或"add”方法:以system服务器为例:

代码语言:javascript
复制
ubus call uci set '{"config":"system","type":"timeserver","section":"ntp","values":{"enabled":"1","server":["0.openwrt.pool.ntp.org","1.openwrt.pool.ntp.org"]}}'

uci show system.ntp.server
system.ntp.server='0.openwrt.pool.ntp.org' '1.openwrt.pool.ntp.org'

使用set,您应该将list选项值作为数组对象传递给您想要设置的所有条目。它用新值重写整个list选项。

如果您只想添加一个值,请使用" add ",但请注意,您必须提供"name",否则将创建一个新的未命名部分。

代码语言:javascript
复制
ubus call uci add '{"config":"system","type":"timeserver","name":"ntp","values":{"server":["add4.openwrt.pool.ntp.org"]}}'

uci show system.ntp.server
system.ntp.server='0.openwrt.pool.ntp.org' '1.openwrt.pool.ntp.org' 'add4.openwrt.pool.ntp.org'
票数 1
EN

Stack Overflow用户

发布于 2020-09-01 08:44:32

您需要确保ubus上有"add_list“。

代码语言:javascript
复制
ubus -v list uci
'uci' @387e9297
        "configs":{}
        "get":{"config":"String","section":"String","option":"String","type":"String","match":"Table","ubus_rpc_session":"String"}
        "state":{"config":"String","section":"String","option":"String","type":"String","match":"Table","ubus_rpc_session":"String"}
        "add":{"config":"String","type":"String","name":"String","values":"Table","ubus_rpc_session":"String"}
        "set":{"config":"String","section":"String","type":"String","match":"Table","values":"Table","ubus_rpc_session":"String"}
        "delete":{"config":"String","section":"String","type":"String","match":"Table","option":"String","options":"Array","ubus_rpc_session":"String"}
        "rename":{"config":"String","section":"String","option":"String","name":"String","ubus_rpc_session":"String"}
        "order":{"config":"String","sections":"Array","ubus_rpc_session":"String"}
        "changes":{"config":"String","ubus_rpc_session":"String"}
        "revert":{"config":"String","ubus_rpc_session":"String"}
        "commit":{"config":"String","ubus_rpc_session":"String"}
        "apply":{"rollback":"Boolean","timeout":"Integer","ubus_rpc_session":"String"}
        "confirm":{"ubus_rpc_session":"String"}
        "rollback":{"ubus_rpc_session":"String"}
        "reload_config":{}

这是rpcd中的代码。

代码语言:javascript
复制
static const struct ubus_method uci_methods[] = {
        { .name = "configs", .handler = rpc_uci_configs },
        UBUS_METHOD("get",      rpc_uci_get,      rpc_uci_get_policy),
        UBUS_METHOD("state",    rpc_uci_state,    rpc_uci_get_policy),
        UBUS_METHOD("add",      rpc_uci_add,      rpc_uci_add_policy),
        UBUS_METHOD("set",      rpc_uci_set,      rpc_uci_set_policy),
        UBUS_METHOD("delete",   rpc_uci_delete,   rpc_uci_delete_policy),
        UBUS_METHOD("rename",   rpc_uci_rename,   rpc_uci_rename_policy),
        UBUS_METHOD("order",    rpc_uci_order,    rpc_uci_order_policy),
        UBUS_METHOD("changes",  rpc_uci_changes,  rpc_uci_config_policy),
        UBUS_METHOD("revert",   rpc_uci_revert,   rpc_uci_config_policy),
        UBUS_METHOD("commit",   rpc_uci_commit,   rpc_uci_config_policy),
        UBUS_METHOD("apply",    rpc_uci_apply,    rpc_uci_apply_policy),
        UBUS_METHOD("confirm",  rpc_uci_confirm,  rpc_uci_rollback_policy),
        UBUS_METHOD("rollback", rpc_uci_rollback, rpc_uci_rollback_policy),
        UBUS_METHOD_NOARG("reload_config", rpc_uci_reload),
    };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59544053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档