register_sysctl_table — register a sysctl hierarchy
struct ctl_table_header * register_sysctl_table ( | ctl_table * | table, |
int | insert_at_head) ; |
table
the top-level table structure
insert_at_head
whether the entry should be inserted in front or at the end
Register a sysctl table hierarchy. table
should be a filled in ctl_table
array. An entry with a ctl_name of 0 terminates the table.
The members of the &ctl_table structure are used as follows:
ctl_name - This is the numeric sysctl value used by sysctl(2). The number must be unique within that level of sysctl
procname - the name of the sysctl file under /proc/sys. Set to NULL
to not
enter a sysctl file
data - a pointer to data for use by proc_handler
maxlen - the maximum size in bytes of the data
mode - the file permissions for the /proc/sys file, and for sysctl(2)
child - a pointer to the child sysctl table if this entry is a directory, or
NULL
.
proc_handler - the text handler routine (described below)
strategy - the strategy routine (described below)
de - for internal use by the sysctl routines
extra1, extra2 - extra pointers usable by the proc handler routines
Leaf nodes in the sysctl tree will be represented by a single file under /proc; non-leaf nodes will be represented by directories.
sysctl(2) can automatically manage read and write requests through the sysctl table. The data and maxlen fields of the ctl_table struct enable minimal validation of the values being written to be performed, and the mode field allows minimal authentication.
More sophisticated management can be enabled by the provision of a strategy routine with the table entry. This will be called before any automatic read or write of the data is performed.
The strategy routine may return
< 0 - Error occurred (error is passed to user process)
0 - OK - proceed with automatic read or write.
> 0 - OK - read or write has been done by the strategy routine, so return immediately.
There must be a proc_handler routine for any terminal nodes mirrored under /proc/sys (non-terminals are handled by a built-in directory handler). Several default handlers are available to cover common cases -
proc_dostring
, proc_dointvec
, proc_dointvec_jiffies
,
proc_dointvec_userhz_jiffies
, proc_dointvec_minmax
,
proc_doulongvec_ms_jiffies_minmax
, proc_doulongvec_minmax
It is the handler's job to read the input buffer from user memory and process it. The handler should return 0 on success.
This routine returns NULL
on a failure to register, and a pointer
to the table header on success.