Реализация OpenWrt LibUbi
Я пытаюсь разработать приложение (написанное на ANSI C) для маршрутизатора OpenWrt, используя libuci. Я прочитал этот полезный пост: Как узнать, является ли режим eth0 статическим или dhcp?
и я разработал часть моего приложения, которое может читать сетевые данные (в этом случае я читаю, если включен ppp), используя библиотеку uci.
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.
Кто-нибудь позвонил, поделитесь со мной небольшим количеством документации или покажите мне несколько примеров?
большое спасибо
1 ответ
Документация по UCI очень тонкая. Я понял это с помощью свойства .value uci_ptr из структуры uci.
С этого момента я меняю строку:
ptr.o->v.string = "1";
чтобы:
ptr.value = "1";
Я также изменил вашу строку коммита следующим образом:
uci_commit(ctx, &ptr.p, false);
Это сработало для меня.