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]"

Reply via email to