From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Krishna Kumar <krkumar2@in.ibm.com>
Cc: kaber@trash.net, vivk@us.ibm.com, svajipay@in.ibm.com,
fw@strlen.de, netfilter-devel@vger.kernel.org, sri@us.ibm.com
Subject: Re: [v2 PATCH 5/6] netfilter: GSO packet handling
Date: Tue, 8 May 2012 14:28:28 +0200 [thread overview]
Message-ID: <20120508122828.GA12801@1984> (raw)
In-Reply-To: <20120508094442.19531.56563.sendpatchset@localhost.localdomain>
On Tue, May 08, 2012 at 03:14:42PM +0530, Krishna Kumar wrote:
> Handle >0 return value from outfn in __nf_queue(). This value
> is not passed up the stack but intercepted by nf_queue(), which
> returns 0 to upper layers.
>
> Also add support for GSO skb. If __nf_queue() returns >0 to
> indicate fail-open, we call okfn() immediately.
>
> Signed-off-by: Krishna Kumar <krkumar2@in.ibm.com>
> Signed-off-by: Vivek Kashyap <vivk@us.ibm.com>
> Signed-off-by: Sridhar Samudrala <samudrala@us.ibm.com>
> ---
> net/netfilter/nf_queue.c | 33 +++++++++++++++++++++++++++------
> 1 file changed, 27 insertions(+), 6 deletions(-)
>
> diff -ruNp org/net/netfilter/nf_queue.c new/net/netfilter/nf_queue.c
> --- org/net/netfilter/nf_queue.c 2012-05-08 13:02:18.163816400 +0530
> +++ new/net/netfilter/nf_queue.c 2012-05-08 15:08:11.028555335 +0530
> @@ -189,7 +189,7 @@ static int __nf_queue(struct sk_buff *sk
>
> rcu_read_unlock();
>
> - if (status < 0) {
> + if (status) {
> nf_queue_entry_release_refs(entry);
> goto err;
> }
> @@ -236,9 +236,18 @@ int nf_queue(struct sk_buff *skb,
> int err = -EINVAL;
> unsigned int queued;
>
> - if (!skb_is_gso(skb))
> - return __nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
> + if (!skb_is_gso(skb)) {
> + err = __nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
> queuenum);
> + if (err > 0) {
> + /* Queue failed due to queue-full and handler
> + * returned >0 indicating fail-open - temporarily
> + * accept packets.
> + */
> + err = okfn(skb);
You cannot invoke okfn here. If you do so, you'll skip the remaining
hooks.
Return the error and handle the -ENOSPC in nf_hook_slow.
(Note that the -ENOSPC is the error value I'm proposing you to use for
this special case).
> + }
> + return err;
> + }
>
> switch (pf) {
> case NFPROTO_IPV4:
> @@ -268,14 +277,26 @@ int nf_queue(struct sk_buff *skb,
> err = __nf_queue(segs, elem, pf, hook, indev,
> outdev, okfn, queuenum);
> }
> - if (err == 0)
> +
> + if (err == 0) {
> queued++;
> - else
> + } else if (err > 0) {
> + /* Queue failed due to queue-full and handler
> + * returned >0 indicating fail-open - accept
> + * this and remaining segments.
> + */
> + okfn(segs);
> + } else {
> + /* Queue failed due to queue-full and handler
> + * returned <0 - free this and remaining skb
> + * segments.
> + */
> kfree_skb(segs);
> + }
> segs = nskb;
> } while (segs);
>
> - if (queued) {
> + if (queued || err > 0) {
> kfree_skb(skb);
> return 0;
> }
>
> --
> To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2012-05-08 12:28 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-08 9:43 [v2 PATCH 0/6] netfilter: "fail-open" feature support for NFQUEUE Krishna Kumar
2012-05-08 9:43 ` [v2 PATCH 1/6] netfilter: Add new netlink NFQA_CFG_FAIL_OPEN Krishna Kumar
2012-05-08 11:34 ` Pablo Neira Ayuso
2012-05-08 9:44 ` [v2 PATCH 2/6] netfilter: Change enqueue handlers return values Krishna Kumar
2012-05-08 9:44 ` [v2 PATCH 3/6] netfilter: Add support for per-queue fail-open Krishna Kumar
2012-05-08 9:44 ` [v2 PATCH 4/6] netfilter: Add fail-open support to handler Krishna Kumar
2012-05-08 11:58 ` Pablo Neira Ayuso
2012-05-08 9:44 ` [v2 PATCH 5/6] netfilter: GSO packet handling Krishna Kumar
2012-05-08 12:28 ` Pablo Neira Ayuso [this message]
2012-05-10 4:20 ` Krishna Kumar2
2012-05-08 9:44 ` [v2 PATCH 6/6] netfilter: Enable fail-open support Krishna Kumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120508122828.GA12801@1984 \
--to=pablo@netfilter.org \
--cc=fw@strlen.de \
--cc=kaber@trash.net \
--cc=krkumar2@in.ibm.com \
--cc=netfilter-devel@vger.kernel.org \
--cc=sri@us.ibm.com \
--cc=svajipay@in.ibm.com \
--cc=vivk@us.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.