netfilter: xt_NFQUEUE: remove modulo operations
authorChangli Gao <xiaosuo@gmail.com>
Fri, 12 Nov 2010 16:34:17 +0000 (17:34 +0100)
committerPatrick McHardy <kaber@trash.net>
Fri, 12 Nov 2010 16:34:17 +0000 (17:34 +0100)
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
net/netfilter/xt_NFQUEUE.c

index 039cce1bde3dc60ccdbb3e6857bb2685dc123079..39627706aac677853fae0e2499f4668b493ef8c3 100644 (file)
@@ -72,10 +72,12 @@ nfqueue_tg_v1(struct sk_buff *skb, const struct xt_action_param *par)
 
        if (info->queues_total > 1) {
                if (par->family == NFPROTO_IPV4)
-                       queue = hash_v4(skb) % info->queues_total + queue;
+                       queue = (((u64) hash_v4(skb) * info->queues_total) >>
+                                32) + queue;
 #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE)
                else if (par->family == NFPROTO_IPV6)
-                       queue = hash_v6(skb) % info->queues_total + queue;
+                       queue = (((u64) hash_v6(skb) * info->queues_total) >>
+                                32) + queue;
 #endif
        }
        return NF_QUEUE_NR(queue);