#include <linux/netfilter.h>
/* Prefixlen maps, by Jan Engelhardt */
-extern const union nf_inet_addr prefixlen_netmask_map[];
-extern const union nf_inet_addr prefixlen_hostmask_map[];
+extern const union nf_inet_addr ip_set_netmask_map[];
+extern const union nf_inet_addr ip_set_hostmask_map[];
-#define NETMASK(n) prefixlen_netmask_map[n].ip
-#define NETMASK6(n) prefixlen_netmask_map[n].ip6
-#define HOSTMASK(n) prefixlen_hostmask_map[n].ip
-#define HOSTMASK6(n) prefixlen_hostmask_map[n].ip6
+static inline __be32
+ip_set_netmask(u8 pfxlen)
+{
+ return ip_set_netmask_map[pfxlen].ip;
+}
+
+static inline const __be32 *
+ip_set_netmask6(u8 pfxlen)
+{
+ return &ip_set_netmask_map[pfxlen].ip6[0];
+}
+
+static inline __be32
+ip_set_hostmask(u8 pfxlen)
+{
+ return ip_set_hostmask_map[pfxlen].ip;
+}
+
+static inline const __be32 *
+ip_set_hostmask6(u8 pfxlen)
+{
+ return &ip_set_hostmask_map[pfxlen].ip6[0];
+}
#endif /*_PFXLEN_H */
};
static inline u32
-ip_to_id(const struct bitmap_ip *map, u32 ip)
+ip_to_id(const struct bitmap_ip *m, u32 ip)
{
- return ((ip & HOSTMASK(map->netmask)) - map->first_ip)/map->hosts;
+ return ((ip & ip_set_hostmask(m->netmask)) - m->first_ip)/m->hosts;
}
static inline int
if (cidr > 32)
return -IPSET_ERR_INVALID_CIDR;
- ip &= HOSTMASK(cidr);
- ip_to = ip | ~HOSTMASK(cidr);
+ ip &= ip_set_hostmask(cidr);
+ ip_to = ip | ~ip_set_hostmask(cidr);
} else
ip_to = ip;
if (cidr > 32)
return -IPSET_ERR_INVALID_CIDR;
- ip &= HOSTMASK(cidr);
- ip_to = ip | ~HOSTMASK(cidr);
+ ip &= ip_set_hostmask(cidr);
+ ip_to = ip | ~ip_set_hostmask(cidr);
} else
ip_to = ip;
if (cidr >= 32)
return -IPSET_ERR_INVALID_CIDR;
- last_ip = first_ip | ~HOSTMASK(cidr);
+ last_ip = first_ip | ~ip_set_hostmask(cidr);
} else
return -IPSET_ERR_PROTOCOL;
if (netmask > 32)
return -IPSET_ERR_INVALID_NETMASK;
- first_ip &= HOSTMASK(netmask);
- last_ip |= ~HOSTMASK(netmask);
+ first_ip &= ip_set_hostmask(netmask);
+ last_ip |= ~ip_set_hostmask(netmask);
}
if (netmask == 32) {
if (cidr >= 32)
return -IPSET_ERR_INVALID_CIDR;
- last_ip = first_ip | ~HOSTMASK(cidr);
+ last_ip = first_ip | ~ip_set_hostmask(cidr);
} else
return -IPSET_ERR_PROTOCOL;
u32 ip;
ip4addrptr(skb, flags & IPSET_DIM_ONE_SRC, &ip);
- ip &= NETMASK(h->netmask);
+ ip &= ip_set_netmask(h->netmask);
if (ip == 0)
return -EINVAL;
if (ret)
return ret;
- ip &= NETMASK(h->netmask);
+ ip &= ip_set_netmask(h->netmask);
if (ip == 0)
return -IPSET_ERR_HASH_ELEM;
if (cidr > 32)
return -IPSET_ERR_INVALID_CIDR;
- ip &= HOSTMASK(cidr);
- ip_to = ip | ~HOSTMASK(cidr);
+ ip &= ip_set_hostmask(cidr);
+ ip_to = ip | ~ip_set_hostmask(cidr);
} else
ip_to = ip;
static inline void
ip6_netmask(union nf_inet_addr *ip, u8 prefix)
{
- ip->ip6[0] &= NETMASK6(prefix)[0];
- ip->ip6[1] &= NETMASK6(prefix)[1];
- ip->ip6[2] &= NETMASK6(prefix)[2];
- ip->ip6[3] &= NETMASK6(prefix)[3];
+ ip->ip6[0] &= ip_set_netmask6(prefix)[0];
+ ip->ip6[1] &= ip_set_netmask6(prefix)[1];
+ ip->ip6[2] &= ip_set_netmask6(prefix)[2];
+ ip->ip6[3] &= ip_set_netmask6(prefix)[3];
}
static inline bool
if (cidr > 32)
return -IPSET_ERR_INVALID_CIDR;
- ip &= HOSTMASK(cidr);
- ip_to = ip | ~HOSTMASK(cidr);
+ ip &= ip_set_hostmask(cidr);
+ ip_to = ip | ~ip_set_hostmask(cidr);
} else
ip_to = ip;
if (cidr > 32)
return -IPSET_ERR_INVALID_CIDR;
- ip &= HOSTMASK(cidr);
- ip_to = ip | ~HOSTMASK(cidr);
+ ip &= ip_set_hostmask(cidr);
+ ip_to = ip | ~ip_set_hostmask(cidr);
} else
ip_to = ip;
static inline void
hash_ipportnet4_data_netmask(struct hash_ipportnet4_elem *elem, u8 cidr)
{
- elem->ip2 &= NETMASK(cidr);
+ elem->ip2 &= ip_set_netmask(cidr);
elem->cidr = cidr;
}
ip4addrptr(skb, flags & IPSET_DIM_ONE_SRC, &data.ip);
ip4addrptr(skb, flags & IPSET_DIM_THREE_SRC, &data.ip2);
- data.ip2 &= NETMASK(data.cidr);
+ data.ip2 &= ip_set_netmask(data.cidr);
return adtfn(set, &data, h->timeout);
}
if (!data.cidr)
return -IPSET_ERR_INVALID_CIDR;
- data.ip2 &= NETMASK(data.cidr);
+ data.ip2 &= ip_set_netmask(data.cidr);
if (tb[IPSET_ATTR_PORT])
data.port = ip_set_get_n16(tb[IPSET_ATTR_PORT]);
if (cidr > 32)
return -IPSET_ERR_INVALID_CIDR;
- ip &= HOSTMASK(cidr);
- ip_to = ip | ~HOSTMASK(cidr);
+ ip &= ip_set_hostmask(cidr);
+ ip_to = ip | ~ip_set_hostmask(cidr);
} else
ip_to = ip;
static inline void
ip6_netmask(union nf_inet_addr *ip, u8 prefix)
{
- ip->ip6[0] &= NETMASK6(prefix)[0];
- ip->ip6[1] &= NETMASK6(prefix)[1];
- ip->ip6[2] &= NETMASK6(prefix)[2];
- ip->ip6[3] &= NETMASK6(prefix)[3];
+ ip->ip6[0] &= ip_set_netmask6(prefix)[0];
+ ip->ip6[1] &= ip_set_netmask6(prefix)[1];
+ ip->ip6[2] &= ip_set_netmask6(prefix)[2];
+ ip->ip6[3] &= ip_set_netmask6(prefix)[3];
}
static inline void
static inline void
hash_net4_data_netmask(struct hash_net4_elem *elem, u8 cidr)
{
- elem->ip &= NETMASK(cidr);
+ elem->ip &= ip_set_netmask(cidr);
elem->cidr = cidr;
}
data.cidr = HOST_MASK;
ip4addrptr(skb, flags & IPSET_DIM_ONE_SRC, &data.ip);
- data.ip &= NETMASK(data.cidr);
+ data.ip &= ip_set_netmask(data.cidr);
return adtfn(set, &data, h->timeout);
}
if (!data.cidr)
return -IPSET_ERR_INVALID_CIDR;
- data.ip &= NETMASK(data.cidr);
+ data.ip &= ip_set_netmask(data.cidr);
if (tb[IPSET_ATTR_TIMEOUT]) {
if (!with_timeout(h->timeout))
static inline void
ip6_netmask(union nf_inet_addr *ip, u8 prefix)
{
- ip->ip6[0] &= NETMASK6(prefix)[0];
- ip->ip6[1] &= NETMASK6(prefix)[1];
- ip->ip6[2] &= NETMASK6(prefix)[2];
- ip->ip6[3] &= NETMASK6(prefix)[3];
+ ip->ip6[0] &= ip_set_netmask6(prefix)[0];
+ ip->ip6[1] &= ip_set_netmask6(prefix)[1];
+ ip->ip6[2] &= ip_set_netmask6(prefix)[2];
+ ip->ip6[3] &= ip_set_netmask6(prefix)[3];
}
static inline void
static inline void
hash_netport4_data_netmask(struct hash_netport4_elem *elem, u8 cidr)
{
- elem->ip &= NETMASK(cidr);
+ elem->ip &= ip_set_netmask(cidr);
elem->cidr = cidr;
}
return -EINVAL;
ip4addrptr(skb, flags & IPSET_DIM_ONE_SRC, &data.ip);
- data.ip &= NETMASK(data.cidr);
+ data.ip &= ip_set_netmask(data.cidr);
return adtfn(set, &data, h->timeout);
}
data.cidr = nla_get_u8(tb[IPSET_ATTR_CIDR]);
if (!data.cidr)
return -IPSET_ERR_INVALID_CIDR;
- data.ip &= NETMASK(data.cidr);
+ data.ip &= ip_set_netmask(data.cidr);
if (tb[IPSET_ATTR_PORT])
data.port = ip_set_get_n16(tb[IPSET_ATTR_PORT]);
static inline void
ip6_netmask(union nf_inet_addr *ip, u8 prefix)
{
- ip->ip6[0] &= NETMASK6(prefix)[0];
- ip->ip6[1] &= NETMASK6(prefix)[1];
- ip->ip6[2] &= NETMASK6(prefix)[2];
- ip->ip6[3] &= NETMASK6(prefix)[3];
+ ip->ip6[0] &= ip_set_netmask6(prefix)[0];
+ ip->ip6[1] &= ip_set_netmask6(prefix)[1];
+ ip->ip6[2] &= ip_set_netmask6(prefix)[2];
+ ip->ip6[3] &= ip_set_netmask6(prefix)[3];
}
static inline void
* This table works for both IPv4 and IPv6;
* just use prefixlen_netmask_map[prefixlength].ip.
*/
-const union nf_inet_addr prefixlen_netmask_map[] = {
+const union nf_inet_addr ip_set_netmask_map[] = {
E(0x00000000, 0x00000000, 0x00000000, 0x00000000),
E(0x80000000, 0x00000000, 0x00000000, 0x00000000),
E(0xC0000000, 0x00000000, 0x00000000, 0x00000000),
E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE),
E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF),
};
-EXPORT_SYMBOL_GPL(prefixlen_netmask_map);
+EXPORT_SYMBOL_GPL(ip_set_netmask_map);
#undef E
#define E(a, b, c, d) \
* This table works for both IPv4 and IPv6;
* just use prefixlen_hostmask_map[prefixlength].ip.
*/
-const union nf_inet_addr prefixlen_hostmask_map[] = {
+const union nf_inet_addr ip_set_hostmask_map[] = {
E(0x00000000, 0x00000000, 0x00000000, 0x00000000),
E(0x80000000, 0x00000000, 0x00000000, 0x00000000),
E(0xC0000000, 0x00000000, 0x00000000, 0x00000000),
E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE),
E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF),
};
-EXPORT_SYMBOL_GPL(prefixlen_hostmask_map);
+EXPORT_SYMBOL_GPL(ip_set_hostmask_map);