diff options
author | Florian Westphal <fw@strlen.de> | 2013-04-19 00:58:27 -0400 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2013-04-29 14:09:07 -0400 |
commit | 00bd1cc24a7dd295ee095dc50791aab6ede46c7a (patch) | |
tree | 0802df661d7b8d4d6bfc47dfd6230607c8f92af1 /net | |
parent | 7237190df8c4129241697530a4eecabdc4ecc66e (diff) |
netfilter: nfnetlink_queue: avoid expensive gso segmentation and checksum fixup
Userspace can now indicate that it can cope with larger-than-mtu sized
packets and packets that have invalid ipv4/tcp checksums.
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/nfnetlink_queue_core.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c index d052cd6da5d2..2e0e835baf72 100644 --- a/net/netfilter/nfnetlink_queue_core.c +++ b/net/netfilter/nfnetlink_queue_core.c | |||
@@ -327,7 +327,8 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue, | |||
327 | break; | 327 | break; |
328 | 328 | ||
329 | case NFQNL_COPY_PACKET: | 329 | case NFQNL_COPY_PACKET: |
330 | if (entskb->ip_summed == CHECKSUM_PARTIAL && | 330 | if (!(queue->flags & NFQA_CFG_F_GSO) && |
331 | entskb->ip_summed == CHECKSUM_PARTIAL && | ||
331 | skb_checksum_help(entskb)) | 332 | skb_checksum_help(entskb)) |
332 | return NULL; | 333 | return NULL; |
333 | 334 | ||
@@ -636,7 +637,7 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum) | |||
636 | if (queue->copy_mode == NFQNL_COPY_NONE) | 637 | if (queue->copy_mode == NFQNL_COPY_NONE) |
637 | return -EINVAL; | 638 | return -EINVAL; |
638 | 639 | ||
639 | if (!skb_is_gso(entry->skb)) | 640 | if ((queue->flags & NFQA_CFG_F_GSO) || !skb_is_gso(entry->skb)) |
640 | return __nfqnl_enqueue_packet(net, queue, entry); | 641 | return __nfqnl_enqueue_packet(net, queue, entry); |
641 | 642 | ||
642 | skb = entry->skb; | 643 | skb = entry->skb; |