簡體   English   中英

OpenWrt LibUbi實施

[英]OpenWrt LibUbi implementation

我正在嘗試使用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

有人打電話給我分享一些文檔或給我看一些例子嗎?

非常感謝

有關UCI的文檔非常少。 我發現的方法是使用uci結構中的uci_ptr的.value屬性。

從那開始,我改變了這一行:

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

至:

ptr.value = "1";

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

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

那對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM