diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h index 741e3bd3c..a209c19d2 100644 --- a/include/sys/zfs_context.h +++ b/include/sys/zfs_context.h @@ -126,11 +126,11 @@ extern "C" { #include #include #include -#include #include #include #include #include +#include #include @@ -208,31 +208,8 @@ typedef off_t loff_t; #define NN_DIVISOR_1000 (1U << 0) #define NN_NUMBUF_SZ (6) -extern const char *random_path; -extern const char *urandom_path; - extern int highbit64(uint64_t i); extern int lowbit64(uint64_t i); -extern int random_get_bytes(uint8_t *ptr, size_t len); -extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len); - -static __inline__ uint32_t -random_in_range(uint32_t range) -{ - uint32_t r; - - ASSERT(range != 0); - - if (range == 1) - return (0); - - (void) random_get_pseudo_bytes((uint8_t *)&r, sizeof (r)); - - return (r % range); -} - -extern void random_init(void); -extern void random_fini(void); typedef struct callb_cpr { kmutex_t *cc_lockp; diff --git a/lib/libspl/include/Makefile.am b/lib/libspl/include/Makefile.am index dece09145..c7a39fccb 100644 --- a/lib/libspl/include/Makefile.am +++ b/lib/libspl/include/Makefile.am @@ -53,6 +53,7 @@ libspl_sys_HEADERS = \ %D%/sys/priv.h \ %D%/sys/processor.h \ %D%/sys/procfs_list.h \ + %D%/sys/random.h \ %D%/sys/rwlock.h \ %D%/sys/simd.h \ %D%/sys/stack.h \ diff --git a/lib/libspl/include/sys/misc.h b/lib/libspl/include/sys/misc.h index 171bbc1de..8f2f5f933 100644 --- a/lib/libspl/include/sys/misc.h +++ b/lib/libspl/include/sys/misc.h @@ -31,6 +31,9 @@ #include +extern const char *random_path; +extern const char *urandom_path; + /* * Hostname information */ diff --git a/lib/libspl/include/sys/random.h b/lib/libspl/include/sys/random.h new file mode 100644 index 000000000..27f2d4e3a --- /dev/null +++ b/lib/libspl/include/sys/random.h @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2011 Nexenta Systems, Inc. All rights reserved. + * Copyright (c) 2012, 2018 by Delphix. All rights reserved. + * Copyright (c) 2012, Joyent, Inc. All rights reserved. + */ + +#ifndef _SYS_RANDOM_H +#define _SYS_RANDOM_H + +extern int random_get_bytes(uint8_t *ptr, size_t len); +extern int random_get_pseudo_bytes(uint8_t *ptr, size_t len); + +static __inline__ uint32_t +random_in_range(uint32_t range) +{ + uint32_t r; + + ASSERT(range != 0); + + if (range == 1) + return (0); + + (void) random_get_pseudo_bytes((uint8_t *)&r, sizeof (r)); + + return (r % range); +} + +#endif /* _SYS_RANDOM_H */