1 /* SPDX-License-Identifier: GPL-2.0 */
5 #include <asm/byteorder.h>
6 #include <linux/netfilter.h>
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
[];
14 ip_set_netmask(u8 pfxlen
)
16 return ip_set_netmask_map
[pfxlen
].ip
;
19 static inline const __be32
*
20 ip_set_netmask6(u8 pfxlen
)
22 return &ip_set_netmask_map
[pfxlen
].ip6
[0];
26 ip_set_hostmask(u8 pfxlen
)
28 return (__force u32
) ip_set_hostmask_map
[pfxlen
].ip
;
31 static inline const __be32
*
32 ip_set_hostmask6(u8 pfxlen
)
34 return &ip_set_hostmask_map
[pfxlen
].ip6
[0];
37 extern u32
ip_set_range_to_cidr(u32 from
, u32 to
, u8
*cidr
);
39 #define ip_set_mask_from_to(from, to, cidr) \
41 from &= ip_set_hostmask(cidr); \
42 to = from | ~ip_set_hostmask(cidr); \
46 ip6_netmask(union nf_inet_addr
*ip
, u8 prefix
)
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];