Freebsd 11.1-我添加了自己的sysctl-但sysctl -a命令未列出它,手动调用时未显示任何值,并且我无法更改其值

时间:2018-08-23 04:03:16

标签: kernel freebsd bsd sysctl

代码库是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

这里缺少什么?我不知道怎么回事。是否缺少任何导出宏?还是我没有导入某些特定的标头,或者我也必须将该文件添加到其他位置?

似乎在源代码/手册/书和其他手册中没有足够公开地声明某些内容,或者最近对其进行了更改。我可以访问的所有资源都对sysctls的任何其他要求保持沉默。没有root用户,也没有普通用户能够加载他们的值或设置/更改它们。但是也许我想念一些东西。不知道。到目前为止,我可能还无法将其与任何特定原因联系起来。如果解决方案很简单,我至少需要一个提示或开放性地指出我可能很愚蠢。

0 个答案:

没有答案