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.
