OpenWrt的LibUbi实施(OpenWrt LibUbi implementation)

2019-11-03 11:14发布

我试图开发使用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我不知道结构uci_package ** p。

有人叫跟我分享一下有点文档或展示一些例子吗?

非常感谢

Answer 1:

该文件是在UCI非常薄。 我计算出来的方法是使用uci_ptr的.value的财产从UCI结构。

Fromt,我改线:

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

至:

ptr.value = "1";

我也改变了你提交的行,如下所示:

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

这为我工作。



文章来源: OpenWrt LibUbi implementation