Freebsd 11.1 - я добавил собственный sysctl - но он не указан командой sysctl -a, когда вызывается вручную, никакое значение не отображается, и я не могу изменить его значение

Кодовая база FreeBSD11.1

Код:

****
 * Attempt on implementing own sycstl
 ****/

#include<sys/cdefs.h>
#include<sys/param.h>
#include<sys/kernel.h>
#include<sys/systm.h>
#include<sys/types.h>`
#include<sys/sysctl.h>

int thats_my_stat_var=1; /*it won't work also when declared as static int*/
int thats_my_stat_var2=2;

/*I tried with this and without this, it's unrolls to an extern anyway*/
SYSCTL_DECL(_user);  

SYSCTL_INT(_user,OID_AUTO, 
    thats_my_stat_var,CTLFLAG_RW|CTLFLAG_ANYBODY,
    &thats_my_stat_var,1,"Static one");

SYSCTL_INT(_user,OID_AUTO, 
    thats_my_stat_var2,CTLFLAG_RW|CTLFLAG_ANYBODY,
    &thats_my_stat_var2,2,"Static two");

Я добавил его как файл kern/subr_examplectl.c в список файлов sys/conf/files, он размещен примерно так - 3 строки до и 3 строки после, чтобы дать вам представление о том, куда я поместил этот код:

kern/vfs_subr.c            standard 
kern/vfs_syscalls.c        standard
kern/vfs_vnops.c           standard
kern/subr_examplectl.c     standard


#

Он не показывает новые переменные в списке, но я могу отобразить его, когда я указываю имя переменной sysctl - но он не имеет значения, и почему я пытаюсь установить значение, это просто ошибка

$sysctl user.thats_my_stat_var #yes nothing is displayed as result of this command 

Давайте проверим, возможно ли получить описание.

$sysctl -d user.thats_my_stat_var #this one prints out description 
user.thats_my_stat_var: Static one 

Хорошо, это на самом деле работает.

Попытка установить значение.

$ sysctl user.thats_my_stat_var2=11 
sysctl: user.thats_my_stat_var2=11: Operation not permitted

Нет, это не работает.

Безопасный уровень, кажется, не является проблемой здесь:

$sysctl kern.securelevel 
kern.securelevel: -1

Чего здесь не хватает? Я не могу понять, в чем дело. Отсутствует ли макрос экспорта? Или я не импортировал какой-то конкретный заголовок или, может быть, или мне нужно добавить этот файл куда-нибудь еще?

Похоже, что-то недостаточно открыто указано в источниках / руководствах / книгах и других руководствах или недавно было изменено. Все источники, к которым у меня есть доступ, ничего не говорят о каких-либо дополнительных требованиях для обеспечения доступности sysctl. Нет root и ни один обычный пользователь не может загрузить их значения или установить / изменить их. Но, может быть, я что-то упустил. Без понятия. Возможно, я пока не могу связать это с какой-либо конкретной причиной. Мне нужен хотя бы намек или откровенное указание на то, что я, возможно, глуп, если решение довольно простое.

0 ответов

Другие вопросы по тегам