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 и ни один обычный пользователь не может загрузить их значения или установить / изменить их. Но, может быть, я что-то упустил. Без понятия. Возможно, я пока не могу связать это с какой-либо конкретной причиной. Мне нужен хотя бы намек или откровенное указание на то, что я, возможно, глуп, если решение довольно простое.