One last thing: The only user->kernel communication tool that I use regularly is PF (I'm an OpenBSD user). It has a pseudo device driver, pf(4), which use ioctl(2) syscalls. The userland program is pfctl(8).
So ioctl appears to be the right tool for the job.
Reviewing the source for the driver and the userland program may be helpful.