1 #ifndef _PFXLEN_H 2 #define _PFXLEN_H 3 4 #include <asm/byteorder.h> 5 #include <linux/netfilter.h> 6 #include <net/tcp.h> 7 8 /* Prefixlen maps, by Jan Engelhardt */ 9 extern const union nf_inet_addr ip_set_netmask_map[]; 10 extern const union nf_inet_addr ip_set_hostmask_map[]; 11 12 static inline __be32 ip_set_netmask(u8 pfxlen)13ip_set_netmask(u8 pfxlen) 14 { 15 return ip_set_netmask_map[pfxlen].ip; 16 } 17 18 static inline const __be32 * ip_set_netmask6(u8 pfxlen)19ip_set_netmask6(u8 pfxlen) 20 { 21 return &ip_set_netmask_map[pfxlen].ip6[0]; 22 } 23 24 static inline u32 ip_set_hostmask(u8 pfxlen)25ip_set_hostmask(u8 pfxlen) 26 { 27 return (__force u32) ip_set_hostmask_map[pfxlen].ip; 28 } 29 30 static inline const __be32 * ip_set_hostmask6(u8 pfxlen)31ip_set_hostmask6(u8 pfxlen) 32 { 33 return &ip_set_hostmask_map[pfxlen].ip6[0]; 34 } 35 36 extern u32 ip_set_range_to_cidr(u32 from, u32 to, u8 *cidr); 37 38 #define ip_set_mask_from_to(from, to, cidr) \ 39 do { \ 40 from &= ip_set_hostmask(cidr); \ 41 to = from | ~ip_set_hostmask(cidr); \ 42 } while (0) 43 44 #endif /*_PFXLEN_H */ 45