FreeBSD manual
download PDF document: syscall_helper_register.9.pdf
SYSCALL_HELPER_REGISTER(9) FreeBSD Kernel Developer's Manual
NAME
syscall_helper_register, syscall_helper_unregister - kernel syscall
registration routines
SYNOPSIS
#include <sys/sysent.h>
int
syscall_helper_register(struct syscall_helper_data *sd, int flags);
int
syscall_helper_unregister(struct syscall_helper_data *sd);
INITIALIZER MACROS
struct syscall_helper_data
SYSCALL_INIT_HELPER(syscallname);
struct syscall_helper_data
SYSCALL_INIT_HELPER_F(syscallname, int flags);
COMPATIBILITY INITIALIZER MACROS
struct syscall_helper_data
SYSCALL_INIT_HELPER_COMPAT(syscallname);
struct syscall_helper_data
SYSCALL_INIT_HELPER_COMPAT_F(syscallname, int flags);
DESCRIPTION
The syscall_helper_register() registers a system call. This function
takes the structure struct syscall_helper_data sd, which specifies the
parameters for syscall registration:
struct syscall_helper_data {
struct sysent new_sysent;
struct sysent old_sysent;
int syscall_no;
int registered;
};
The only valid flag for the flags argument to syscall_helper_register()
is SY_THR_STATIC. This flag prevents the syscall from being
unregistered.
Before use, the structure must be initialized with one of the
SYSCALL_INIT_HELPER*() macros. In new code, syscall implementation
functions shall be named sys_syscallname() and the regular macros shall
be used.
For legacy syscall functions named without "sys_" prefixes, the "COMPAT"
versions of the macros may be used.
The only valid flag for the flags argument to the "F" variants of the
initializer macros is SYF_CAPENABLED. This flag indicates that the
syscall is allowed in capability mode.
The syscall_helper_unregister() unregisters a system call. This function
takes the same structure struct syscall_helper_data sd that was
ERRORS
The syscall_helper_register() call will fail and the syscall will not be
registered if:
[EINVAL] The flags argument contained a value other than
SY_THR_STATIC.
[EINVAL] The specified syscall number, sd.syscall_no
(SYS_syscallname), was outside of the valid range of
system call numbers (zero through SYS_MAXSYSCALL).
[ENFILE] The system call table does not have any available
slots.
[EEXIST] The specified syscall number, sd.syscall_no
(SYS_syscallname), was already in use.
SEE ALSO
SYSCALL_MODULE(9)
FreeBSD 14.0-RELEASE-p11 February 10, 2018 FreeBSD 14.0-RELEASE-p11