netdev
[Top] [All Lists]

Re: udp weirdness

To: jamal <hadi@xxxxxxxxxx>
Subject: Re: udp weirdness
From: Eric Lemoine <Eric.Lemoine@xxxxxxx>
Date: Mon, 30 Sep 2002 10:49:03 +0200
Cc: shell.cyberus.ca@xxxxxxxxxxxxxxxx, Eric Lemoine <Eric.Lemoine@xxxxxxxxxxx>, netdev@xxxxxxxxxxx
In-reply-to: <Pine.GSO.4.30.0209291044490.8253-200000@shell.cyberus.ca>
References: <20020927150412.GI30392@mea-ext.zmailer.org> <Pine.GSO.4.30.0209291044490.8253-200000@shell.cyberus.ca>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mutt/1.3.28i
> Ok, understood. Actually we already seem to have enobufs being returned.
> 
> Eric,
> Does the attached patch fix it? Not tested or even compiled.
> Someone going to change the manpages?

protinfo.af_inet.recverr is a flag (1-bit variable) to enable the
"extended reliable error message passing"; I dont see any reason 
for modifying it here. Setting this flag is the user's responsability, 
isn't it?

My patch would look like this:

--- ip_output.c.old     Mon Sep 30 10:34:07 2002
+++ ip_output.c Mon Sep 30 10:40:08 2002
@@ -604,7 +604,7 @@
                              skb->dst->dev, output_maybe_reroute);
                if (err) {
                        if (err > 0)
-                               err = sk->protinfo.af_inet.recverr ? 
net_xmit_errno(err) : 0;
+                               err = (err == NET_XMIT_DROP || 
sk->protinfo.af_inet.recverr ) ? net_xmit_errno(err) : 0;
                        if (err)
                                goto error;
                }
@@ -714,7 +714,7 @@
        err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL,
rt->u.dst.dev,
                      output_maybe_reroute);
        if (err > 0)
-               err = sk->protinfo.af_inet.recverr ? net_xmit_errno(err) : 0;
+               err = (err == NET_XMIT_DROP || sk->protinfo.af_inet.recverr ) ? 
net_xmit_errno(err) : 0;
        if (err)
                goto error;
 out:

> --- linux/net/ipv4/ip_output.c        2002/09/29 10:43:10     1.1
> +++ linux/net/ipv4/ip_output.c        2002/09/29 10:43:10
> @@ -603,8 +603,11 @@
>               err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, 
>                             skb->dst->dev, output_maybe_reroute);
>               if (err) {
> -                     if (err > 0)
> -                             err = sk->protinfo.af_inet.recverr ? 
> net_xmit_errno(err) : 0;
> +                     if (err > 0) {
> +                             err = net_xmit_errno(err);
> +                             if (err && sk->protinfo.af_inet.recverr)
> +                                    sk->protinfo.af_inet.recverr = err;
> +                     }
>                       if (err)
>                               goto error;
>               }
> @@ -713,8 +716,11 @@
>  
>       err = NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
>                     output_maybe_reroute);
> -     if (err > 0)
> -             err = sk->protinfo.af_inet.recverr ? net_xmit_errno(err) : 0;
> +     if (err > 0) {
> +             err = net_xmit_errno(err);
> +             if (err && sk->protinfo.af_inet.recverr)
> +                      sk->protinfo.af_inet.recverr = err;
> +     }
>       if (err)
>               goto error;
>  out:


<Prev in Thread] Current Thread [Next in Thread>