Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | #ifndef _PFXLEN_H |
3 | #define _PFXLEN_H |
4 | |
5 | #include <asm/byteorder.h> |
6 | #include <linux/netfilter.h> |
7 | #include <net/tcp.h> |
8 | |
9 | /* Prefixlen maps, by Jan Engelhardt */ |
10 | extern const union nf_inet_addr ip_set_netmask_map[]; |
11 | extern const union nf_inet_addr ip_set_hostmask_map[]; |
12 | |
13 | static inline __be32 |
14 | ip_set_netmask(u8 pfxlen) |
15 | { |
16 | return ip_set_netmask_map[pfxlen].ip; |
17 | } |
18 | |
19 | static inline const __be32 * |
20 | ip_set_netmask6(u8 pfxlen) |
21 | { |
22 | return &ip_set_netmask_map[pfxlen].ip6[0]; |
23 | } |
24 | |
25 | static inline u32 |
26 | ip_set_hostmask(u8 pfxlen) |
27 | { |
28 | return (__force u32) ip_set_hostmask_map[pfxlen].ip; |
29 | } |
30 | |
31 | static inline const __be32 * |
32 | ip_set_hostmask6(u8 pfxlen) |
33 | { |
34 | return &ip_set_hostmask_map[pfxlen].ip6[0]; |
35 | } |
36 | |
37 | extern u32 ip_set_range_to_cidr(u32 from, u32 to, u8 *cidr); |
38 | |
39 | #define ip_set_mask_from_to(from, to, cidr) \ |
40 | do { \ |
41 | from &= ip_set_hostmask(cidr); \ |
42 | to = from | ~ip_set_hostmask(cidr); \ |
43 | } while (0) |
44 | |
45 | static inline void |
46 | ip6_netmask(union nf_inet_addr *ip, u8 prefix) |
47 | { |
48 | ip->ip6[0] &= ip_set_netmask6(prefix)[0]; |
49 | ip->ip6[1] &= ip_set_netmask6(prefix)[1]; |
50 | ip->ip6[2] &= ip_set_netmask6(prefix)[2]; |
51 | ip->ip6[3] &= ip_set_netmask6(prefix)[3]; |
52 | } |
53 | |
54 | #endif /*_PFXLEN_H */ |
55 |
Warning: This file is not a C or C++ file. It does not have highlighting.