1 /* SPDX-License-Identifier: GPL-2.0 */
9 static inline uint64_t bpf_rand_mask(uint64_t mask
)
11 return (((uint64_t)(uint32_t)rand()) |
12 ((uint64_t)(uint32_t)rand() << 32)) & mask
;
15 #define bpf_rand_ux(x, m) \
16 static inline uint64_t bpf_rand_u##x(int shift) \
18 return bpf_rand_mask((m)) << shift; \
21 bpf_rand_ux( 8, 0xffULL
)
22 bpf_rand_ux(16, 0xffffULL
)
23 bpf_rand_ux(24, 0xffffffULL
)
24 bpf_rand_ux(32, 0xffffffffULL
)
25 bpf_rand_ux(40, 0xffffffffffULL
)
26 bpf_rand_ux(48, 0xffffffffffffULL
)
27 bpf_rand_ux(56, 0xffffffffffffffULL
)
28 bpf_rand_ux(64, 0xffffffffffffffffULL
)
30 static inline void bpf_semi_rand_init(void)
35 static inline uint64_t bpf_semi_rand_get(void)
37 switch (rand() % 39) {
38 case 0: return 0x000000ff00000000ULL
| bpf_rand_u8(0);
39 case 1: return 0xffffffff00000000ULL
| bpf_rand_u16(0);
40 case 2: return 0x00000000ffff0000ULL
| bpf_rand_u16(0);
41 case 3: return 0x8000000000000000ULL
| bpf_rand_u32(0);
42 case 4: return 0x00000000f0000000ULL
| bpf_rand_u32(0);
43 case 5: return 0x0000000100000000ULL
| bpf_rand_u24(0);
44 case 6: return 0x800ff00000000000ULL
| bpf_rand_u32(0);
45 case 7: return 0x7fffffff00000000ULL
| bpf_rand_u32(0);
46 case 8: return 0xffffffffffffff00ULL
^ bpf_rand_u32(24);
47 case 9: return 0xffffffffffffff00ULL
| bpf_rand_u8(0);
48 case 10: return 0x0000000010000000ULL
| bpf_rand_u32(0);
49 case 11: return 0xf000000000000000ULL
| bpf_rand_u8(0);
50 case 12: return 0x0000f00000000000ULL
| bpf_rand_u8(8);
51 case 13: return 0x000000000f000000ULL
| bpf_rand_u8(16);
52 case 14: return 0x0000000000000f00ULL
| bpf_rand_u8(32);
53 case 15: return 0x00fff00000000f00ULL
| bpf_rand_u8(48);
54 case 16: return 0x00007fffffffffffULL
^ bpf_rand_u32(1);
55 case 17: return 0xffff800000000000ULL
| bpf_rand_u8(4);
56 case 18: return 0xffff800000000000ULL
| bpf_rand_u8(20);
57 case 19: return (0xffffffc000000000ULL
+ 0x80000ULL
) | bpf_rand_u32(0);
58 case 20: return (0xffffffc000000000ULL
- 0x04000000ULL
) | bpf_rand_u32(0);
59 case 21: return 0x0000000000000000ULL
| bpf_rand_u8(55) | bpf_rand_u32(20);
60 case 22: return 0xffffffffffffffffULL
^ bpf_rand_u8(3) ^ bpf_rand_u32(40);
61 case 23: return 0x0000000000000000ULL
| bpf_rand_u8(bpf_rand_u8(0) % 64);
62 case 24: return 0x0000000000000000ULL
| bpf_rand_u16(bpf_rand_u8(0) % 64);
63 case 25: return 0xffffffffffffffffULL
^ bpf_rand_u8(bpf_rand_u8(0) % 64);
64 case 26: return 0xffffffffffffffffULL
^ bpf_rand_u40(bpf_rand_u8(0) % 64);
65 case 27: return 0x0000800000000000ULL
;
66 case 28: return 0x8000000000000000ULL
;
67 case 29: return 0x0000000000000000ULL
;
68 case 30: return 0xffffffffffffffffULL
;
69 case 31: return bpf_rand_u16(bpf_rand_u8(0) % 64);
70 case 32: return bpf_rand_u24(bpf_rand_u8(0) % 64);
71 case 33: return bpf_rand_u32(bpf_rand_u8(0) % 64);
72 case 34: return bpf_rand_u40(bpf_rand_u8(0) % 64);
73 case 35: return bpf_rand_u48(bpf_rand_u8(0) % 64);
74 case 36: return bpf_rand_u56(bpf_rand_u8(0) % 64);
75 case 37: return bpf_rand_u64(bpf_rand_u8(0) % 64);
76 default: return bpf_rand_u64(0);
80 #endif /* __BPF_RAND__ */