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!!!
The copyout() is just hidden. The ioctl request codes are magic and contain the size of the argument and if the argument should be copied in/out by the kernel ioctl function. ( see ioctl(td, uap) in sys_generic.c ) Stephan > > 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, > > -- > Artis > > _______________________________________________ > [EMAIL PROTECTED] mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "[EMAIL PROTECTED]" > _______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"