Home | History | Annotate | Download | only in linux
      1 /*
      2  * include/linux/random.h
      3  *
      4  * Include file for the random number generator.
      5  */
      6 
      7 #ifndef _LINUX_RANDOM_H
      8 #define _LINUX_RANDOM_H
      9 
     10 #include <linux/ioctl.h>
     11 
     12 /* ioctl()'s for the random number generator */
     13 
     14 /* Get the entropy count. */
     15 #define RNDGETENTCNT	_IOR( 'R', 0x00, int )
     16 
     17 /* Add to (or subtract from) the entropy count.  (Superuser only.) */
     18 #define RNDADDTOENTCNT	_IOW( 'R', 0x01, int )
     19 
     20 /* Get the contents of the entropy pool.  (Superuser only.) */
     21 #define RNDGETPOOL	_IOR( 'R', 0x02, int [2] )
     22 
     23 /*
     24  * Write bytes into the entropy pool and add to the entropy count.
     25  * (Superuser only.)
     26  */
     27 #define RNDADDENTROPY	_IOW( 'R', 0x03, int [2] )
     28 
     29 /* Clear entropy count to 0.  (Superuser only.) */
     30 #define RNDZAPENTCNT	_IO( 'R', 0x04 )
     31 
     32 /* Clear the entropy pool and associated counters.  (Superuser only.) */
     33 #define RNDCLEARPOOL	_IO( 'R', 0x06 )
     34 
     35 struct rand_pool_info {
     36 	int	entropy_count;
     37 	int	buf_size;
     38 	__u32	buf[0];
     39 };
     40 
     41 /* Exported functions */
     42 
     43 #ifdef __KERNEL__
     44 
     45 extern void rand_initialize_irq(int irq);
     46 
     47 extern void add_input_randomness(unsigned int type, unsigned int code,
     48 				 unsigned int value);
     49 extern void add_interrupt_randomness(int irq);
     50 
     51 extern void get_random_bytes(void *buf, int nbytes);
     52 void generate_random_uuid(unsigned char uuid_out[16]);
     53 
     54 extern __u32 secure_ip_id(__u32 daddr);
     55 extern u32 secure_ipv4_port_ephemeral(__u32 saddr, __u32 daddr, __u16 dport);
     56 extern u32 secure_ipv6_port_ephemeral(const __u32 *saddr, const __u32 *daddr,
     57 				      __u16 dport);
     58 extern __u32 secure_tcp_sequence_number(__u32 saddr, __u32 daddr,
     59 					__u16 sport, __u16 dport);
     60 extern __u32 secure_tcpv6_sequence_number(__u32 *saddr, __u32 *daddr,
     61 					  __u16 sport, __u16 dport);
     62 extern u64 secure_dccp_sequence_number(__u32 saddr, __u32 daddr,
     63 				       __u16 sport, __u16 dport);
     64 
     65 #ifndef MODULE
     66 extern struct file_operations random_fops, urandom_fops;
     67 #endif
     68 
     69 unsigned int get_random_int(void);
     70 unsigned long randomize_range(unsigned long start, unsigned long end, unsigned long len);
     71 
     72 #endif /* __KERNEL___ */
     73 
     74 #endif /* _LINUX_RANDOM_H */
     75