John Baldwin wrote:
On Thursday 11 August 2005 12:16 pm, Dirk GOUDERS wrote:
> > Thank you for advise. But I wonder: what is wrong with syscall
> > approach (via SYSCALL_MODULE macro)?
>
> I just haven't done one personally. I think there's also a lot more
> potenti al
> for collisions when trying to pick a syscall number versus picking a
> string name for a sysctl or /dev entry.
Shouldn't that be no problem if he sets the offset parameter to
SYSCALL_MODULE to NO_SYSCALL (get the next free offset)?
But then you have to communicate the syscall number out to your userland
applications somehow, and the applications have to know how to invoke a
syscall by hand (perhaps they could use the syscall() function, but still).
It is not a big problem. Look at the following piece of code:
/* Kernel module portion of code. */
static int my_syscall = NO_SYSCALL;
static struct sysent my_sysent = {
2, /* sy_arg */
(sy_call_t *)&my_func /* sy_call */
};
SYSCALL_MODULE(my_syscall_name, &my_syscall, &my_sysent,
NULL, NULL);
/* User-land portion of code. */
int get_syscall(const char *syscall_name)
{
struct module_stat stat;
int mod_id;
int syscall_num;
if ((mod_id = modfind(syscall_name)) < 0)
return (-1);
stat.version = sizeof(stat);
if (modstat(mod_id, &stat) < 0)
return (-1);
return (stat.data.intval);
}
...
syscall_num = get_syscall("my_syscall_name");
/* Issue a syscall with necessary parameters. */
syscall(syscall_num, ...);
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"