Date: Thu, 6 May 2004 11:09:48 -0400 From: John Baldwin <jhb@FreeBSD.org> To: freebsd-hackers@FreeBSD.org Cc: Artis Caune <artis-ml@fbsd.lv> Subject: Re: ioctl Message-ID: <200405061109.48244.jhb@FreeBSD.org> In-Reply-To: <20040506075725.GA1056@fbsd.lv> References: <20040506075725.GA1056@fbsd.lv>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday 06 May 2004 03:57 am, Artis Caune wrote: > Is it correct to use code like this > instead of copyin() / copyout() ? > Kernel module gets pointer to structure > which resides in userland memory space > and modify it directly!!! No, that's probably bogus. > > userland: ioctl(tp_fd, TP_GET_TP_STATS, &tp_stats) > > kernel: tp_stats->hooked = hooked; > > (freebsd 5.x, KLD) > > > ----- START userland ----- > > #define TP_GET_TP_STATS _IOR('D', 200, struct tp_stats_s) > > struct tp_stats_s { > int hooked; > u_short policer_active_pipes; > } tp_stats; > > if (ioctl(tp_fd, TP_GET_TP_STATS, &tp_stats) != -1) { > > printf("Traffic Policer is %s\n", > tp_stats.hooked ? "enabled" : "disabled"); > printf("statistics:\n"); > printf(" %-30s%u\n", "pipes hash table depth", > tp_stats.policer_pipes_hash_depth); > printf(" %-30s%u\n", "active pipes", > tp_stats.policer_active_pipes); > } else > fprintf(stderr, "IOCTL error\n"); > > ----- END userland ----- > > > > ----- START kernel ----- > > static int > tp_dev_ioctl (dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread > *td) { > switch (cmd) { > case TP_GET_TP_STATS: > err = get_tp_stats((struct tp_stats_s *)addr); > break; > ... > } > > static int > get_tp_stats (struct tp_stats_s *tp_stats) > { > TP_LOCK; > tp_stats->hooked = hooked; > /* hash depth will be gone in -release, just for debug */ > tp_stats->policer_pipes_hash_depth = policer_pipes_hash_depth; > tp_stats->policer_active_pipes = policer_get_active_pipes(); > TP_UNLOCK; > > return (0); > } > ... > ----- END kernel ----- > > > > thanks, -- John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200405061109.48244.jhb>