Date: Thu, 11 Aug 2005 21:50:02 +0400 From: Sergey Uvarov <uvarovsl@mail.pnpi.spb.ru> To: John Baldwin <jhb@freebsd.org> Cc: freebsd-hackers@freebsd.org, Dirk GOUDERS <gouders@et.bocholt.fh-ge.de> Subject: Re: preferable way to control kernel module Message-ID: <42FB8FCA.2050803@mail.pnpi.spb.ru> In-Reply-To: <200508111329.42154.jhb@FreeBSD.org> References: <200508111616.j7BGGZWG055221@sora.hank.home> <200508111329.42154.jhb@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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, ...);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?42FB8FCA.2050803>