diff options
author | sjg <sjg@FreeBSD.org> | 2013-09-11 18:16:18 +0000 |
---|---|---|
committer | sjg <sjg@FreeBSD.org> | 2013-09-11 18:16:18 +0000 |
commit | ff87b5d1477fd150ff715e5c3c2a205deb66804f (patch) | |
tree | a3620d99f472deaa7f019c4324bb8f4e38ac4272 /share/examples | |
parent | 62bb1062226d3ce6a2350808256a25508978352d (diff) | |
parent | 4d92de31b23f33109e1fa7f0b1499ed6c3501ee1 (diff) | |
download | FreeBSD-src-ff87b5d1477fd150ff715e5c3c2a205deb66804f.zip FreeBSD-src-ff87b5d1477fd150ff715e5c3c2a205deb66804f.tar.gz |
Merge head
Diffstat (limited to 'share/examples')
-rw-r--r-- | share/examples/kld/Makefile | 2 | ||||
-rw-r--r-- | share/examples/kld/random_adaptor/Makefile | 6 | ||||
-rw-r--r-- | share/examples/kld/random_adaptor/random_adaptor_example.c | 94 |
3 files changed, 101 insertions, 1 deletions
diff --git a/share/examples/kld/Makefile b/share/examples/kld/Makefile index 4e3b641..5e6fc74 100644 --- a/share/examples/kld/Makefile +++ b/share/examples/kld/Makefile @@ -67,6 +67,6 @@ # $FreeBSD$ # -SUBDIR= cdev dyn_sysctl firmware khelp syscall +SUBDIR= cdev dyn_sysctl firmware khelp random_adaptor syscall .include <bsd.subdir.mk> diff --git a/share/examples/kld/random_adaptor/Makefile b/share/examples/kld/random_adaptor/Makefile new file mode 100644 index 0000000..d19b4dc --- /dev/null +++ b/share/examples/kld/random_adaptor/Makefile @@ -0,0 +1,6 @@ +# $FreeBSD$ + +KMOD= random_adaptor_example +SRCS= ${KMOD}.c + +.include <bsd.kmod.mk> diff --git a/share/examples/kld/random_adaptor/random_adaptor_example.c b/share/examples/kld/random_adaptor/random_adaptor_example.c new file mode 100644 index 0000000..c0ab10a --- /dev/null +++ b/share/examples/kld/random_adaptor/random_adaptor_example.c @@ -0,0 +1,94 @@ +/*- + * Copyright (c) 2013 Arthur Mesh <arthurmesh@gmail.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer + * in this position and unchanged. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <sys/kernel.h> +#include <sys/module.h> +#include <sys/selinfo.h> +#include <sys/systm.h> + +#include <dev/random/random_adaptors.h> +#include <dev/random/randomdev.h> + +#define RNG_NAME "example" + +static int random_example_read(void *, int); + +struct random_adaptor random_example = { + .ident = "Example RNG", + .init = (random_init_func_t *)random_null_func, + .deinit = (random_deinit_func_t *)random_null_func, + .read = random_example_read, + .write = (random_write_func_t *)random_null_func, + .reseed = (random_reseed_func_t *)random_null_func, + .seeded = 1, +}; + +/* + * Used under the license provided @ http://xkcd.com/221/ + * http://creativecommons.org/licenses/by-nc/2.5/ + */ +static u_char +getRandomNumber(void) +{ + return 4; /* chosen by fair dice roll, guaranteed to be random */ +} + +static int +random_example_read(void *buf, int c) +{ + u_char *b; + int count; + + b = buf; + + for (count = 0; count < c; count++) { + b[count] = getRandomNumber(); + } + + printf("returning %d bytes of pure randomness\n", c); + return (c); +} + +static int +random_example_modevent(module_t mod, int type, void *unused) +{ + + switch (type) { + case MOD_LOAD: + random_adaptor_register(RNG_NAME, &random_example); + EVENTHANDLER_INVOKE(random_adaptor_attach, &random_example); + return (0); + } + + return (EINVAL); +} + +RANDOM_ADAPTOR_MODULE(random_example, random_example_modevent, 1); |