0

我正在尝试使用 libuci 为 OpenWrt 路由器开发一个应用程序(用 ANSI C 编写)。我读过这篇有用的帖子:如何确定 eth0 模式是静态还是 dhcp?

我已经开发了一个我的应用程序,它能够使用 uci 库读取网络数据(在这种情况下,如果启用了 ppp,我会读取)。

char path[]="network.ppp.enabled";
struct  uci_ptr ptr;
struct  uci_context *c = uci_alloc_context();       

if(!c) return;

if (strcmp(typeCmd, "GET") == 0){

    if ((uci_lookup_ptr(c, &ptr, path, true) != UCI_OK) || (ptr.o==NULL || ptr.o->v.string==NULL)) {
            uci_free_context(c);
            return;
        }

    if(ptr.flags & UCI_LOOKUP_COMPLETE)
            strcpy(buffer, ptr.o->v.string);

    uci_free_context(c);

    printf("\n\nUCI result data: %s\n\n", buffer);
}

现在我想尝试设置新的网络数据(所以我想启用 ppp -> 将 ppp 设置为 1)我写过:

}else if (strcmp(typeCmd, "SET") == 0){

    if ((uci_lookup_ptr(c, &ptr, path, true) != UCI_OK) || (ptr.o==NULL || ptr.o->v.string==NULL)) {
            uci_free_context(c);
            return;
        }

    ptr.o->v.string = "1";
    if ((uci_set(c, &ptr) != UCI_OK) || (ptr.o==NULL || ptr.o->v.string==NULL)) {
            uci_free_context(c);
            return;
        }

    if (uci_commit(c, struct uci_package **p, true) != UCI_OK){
            uci_free_context(c);
            return;
        }
}

LibUci 文档不存在,文件 uci.h 中只有一些信息,我不知道如何填充 uci_ptr 结构,所以我从uci_lookup_ptr检索它,我更改了 ptr.o->v.string并使用新参数启动uci_set,但关于uci_commit我不知道struct uci_package **p

有人打电话给我分享一些文档或给我看一些例子吗?

非常感谢

4

1 回答 1

2

UCI 的文档非常薄。我想出来的方法是使用 uci 结构中的 uci_ptr 的.value属性。

从此,我改变了这一行:

ptr.o->v.string = "1";

到:

ptr.value = "1";

我还更改了您的提交行,如下所示:

uci_commit(ctx, &ptr.p, false);

这对我有用。

于 2015-10-13T20:02:02.570 回答