]> granicus.if.org Git - ipset/commitdiff
NETMASK*, HOSTMASK* macros are too generic
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Thu, 20 Jan 2011 10:34:00 +0000 (11:34 +0100)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Thu, 20 Jan 2011 10:34:00 +0000 (11:34 +0100)
NETMASK*, HOSTMASK* macros are rewritten to small inline functions
ip_set_netmask* and ip_set_hostmask* (Patrick McHardy's review)

kernel/include/linux/netfilter/ipset/pfxlen.h
kernel/ip_set_bitmap_ip.c
kernel/ip_set_bitmap_ipmac.c
kernel/ip_set_hash_ip.c
kernel/ip_set_hash_ipport.c
kernel/ip_set_hash_ipportip.c
kernel/ip_set_hash_ipportnet.c
kernel/ip_set_hash_net.c
kernel/ip_set_hash_netport.c
kernel/pfxlen.c

index fe7153cc0851af775a3a1e77f0d8c087c782cbf6..08e605918af2d68cdcecd9b31d52e5a5b48fdbd4 100644 (file)
@@ -5,12 +5,31 @@
 #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 */
index a1fed99fcd83d2d51724bd7193e40532876360ce..fba4f7b00a6e45db54bda1cd57a438f3c37fdc83 100644 (file)
@@ -46,9 +46,9 @@ struct bitmap_ip {
 };
 
 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
@@ -155,8 +155,8 @@ bitmap_ip_uadt(struct ip_set *set, struct nlattr *head, int len,
 
                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;
 
@@ -391,8 +391,8 @@ bitmap_ip_timeout_uadt(struct ip_set *set, struct nlattr *head, int len,
 
                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;
 
@@ -623,7 +623,7 @@ bitmap_ip_create(struct ip_set *set, struct nlattr *head, int len,
 
                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;
 
@@ -633,8 +633,8 @@ bitmap_ip_create(struct ip_set *set, struct nlattr *head, int len,
                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) {
index a70c601cc090bb18662155e74845a03001596eaf..81f646e4ebe913e054d5c07405d9762047182265 100644 (file)
@@ -594,7 +594,7 @@ bitmap_ipmac_create(struct ip_set *set, struct nlattr *head, int len,
 
                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;
 
index 221abefc25422d54d70e2c94b6a9fa68e5821655..7e6af4293875770a3dad82973d4dba80724403a9 100644 (file)
@@ -126,7 +126,7 @@ hash_ip4_kadt(struct ip_set *set, const struct sk_buff *skb,
        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;
 
@@ -162,7 +162,7 @@ hash_ip4_uadt(struct ip_set *set, struct nlattr *head, int len,
        if (ret)
                return ret;
 
-       ip &= NETMASK(h->netmask);
+       ip &= ip_set_netmask(h->netmask);
        if (ip == 0)
                return -IPSET_ERR_HASH_ELEM;
 
@@ -188,8 +188,8 @@ hash_ip4_uadt(struct ip_set *set, struct nlattr *head, int len,
 
                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;
 
@@ -268,10 +268,10 @@ hash_ip6_data_zero_out(struct hash_ip6_elem *elem)
 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
index 494619b1bf708aa02b7df325e672e809ccb98b7a..035dad1f2c3f2f5d25c781ddcf2adecaa6fc8584 100644 (file)
@@ -238,8 +238,8 @@ hash_ipport4_uadt(struct ip_set *set, struct nlattr *head, int len,
 
                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;
 
index 0ac31c8256ca11db81828e304f238d6b5911b506..f7a9870d930f535c388428fde2efff1d06033797 100644 (file)
@@ -249,8 +249,8 @@ hash_ipportip4_uadt(struct ip_set *set, struct nlattr *head, int len,
 
                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;
 
index 908f580e05772980ac06c44cc7f5fc2b87b12347..2200b147e639ae9a3e0217ae3858810ad0fee283 100644 (file)
@@ -101,7 +101,7 @@ hash_ipportnet4_data_swap(struct hash_ipportnet4_elem *dst,
 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;
 }
 
@@ -174,7 +174,7 @@ hash_ipportnet4_kadt(struct ip_set *set, const struct sk_buff *skb,
 
        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);
 }
@@ -226,7 +226,7 @@ hash_ipportnet4_uadt(struct ip_set *set, struct nlattr *head, int len,
        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]);
@@ -278,8 +278,8 @@ hash_ipportnet4_uadt(struct ip_set *set, struct nlattr *head, int len,
 
                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;
 
@@ -379,10 +379,10 @@ hash_ipportnet6_data_zero_out(struct hash_ipportnet6_elem *elem)
 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
index f2d91a988436047fbbba1e430ebdc3e7562813b9..693eaf31f8fcd5c2bb889924a114ebbfdb9805f7 100644 (file)
@@ -91,7 +91,7 @@ hash_net4_data_swap(struct hash_net4_elem *dst,
 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;
 }
 
@@ -150,7 +150,7 @@ hash_net4_kadt(struct ip_set *set, const struct sk_buff *skb,
                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);
 }
@@ -189,7 +189,7 @@ hash_net4_uadt(struct ip_set *set, struct nlattr *head, int len,
        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))
@@ -271,10 +271,10 @@ hash_net6_data_zero_out(struct hash_net6_elem *elem)
 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
index ef06aff7fdb458845e647bd53943779a65e16ae2..93cc0e8c539a7d9ab30faa02d966d46f02234bd5 100644 (file)
@@ -99,7 +99,7 @@ hash_netport4_data_swap(struct hash_netport4_elem *dst,
 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;
 }
 
@@ -169,7 +169,7 @@ hash_netport4_kadt(struct ip_set *set, const struct sk_buff *skb,
                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);
 }
@@ -212,7 +212,7 @@ hash_netport4_uadt(struct ip_set *set, struct nlattr *head, int len,
                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]);
@@ -338,10 +338,10 @@ hash_netport6_data_zero_out(struct hash_netport6_elem *elem)
 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
index 5f16b6dbbdd20f3404698d9c6597ad6074018587..c6c9dcca7339867879f2a228e186cf4464d55325 100644 (file)
@@ -14,7 +14,7 @@
  * 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),
@@ -145,7 +145,7 @@ const union nf_inet_addr prefixlen_netmask_map[] = {
        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) \
@@ -155,7 +155,7 @@ EXPORT_SYMBOL_GPL(prefixlen_netmask_map);
  * 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),
@@ -286,4 +286,4 @@ const union nf_inet_addr prefixlen_hostmask_map[] = {
        E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE),
        E(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF),
 };
-EXPORT_SYMBOL_GPL(prefixlen_hostmask_map);
+EXPORT_SYMBOL_GPL(ip_set_hostmask_map);