Re: regression: ip r change mss doesn't work in 2.6.38-git14

Eric Dumazet
2011-03-24T16:15:40Z

Le jeudi 24 mars 2011 à 16:52 +0100, Alessandro Suardi a écrit :
> On Thu, Mar 24, 2011 at 4:21 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> > Le jeudi 24 mars 2011 à 16:08 +0100, Alessandro Suardi a écrit :
> >> After fixing the display issue thanks to Chris Wilson, I now have
> >> another problem
> >> (which didn't exist in 2.6.38-git2); most websites outside of my DSL link don't
> >> work properly (connection packet goes through, but the page load times out
> >> within Firefox) unless I do
> >>
> >> ip r change default via 192.168.1.1 dev eth1 advmss 1400
> >>
> >> This however doesn't change advmss anymore:
> >>
> >> [root@duff ~]# ip r
> >> default via 192.168.1.1 dev eth1
> >> 169.254.0.0/16 dev eth1 scope link metric 1004
> >> 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.8
> >> [root@duff ~]# ip r change default via 192.168.1.1 dev eth1 advmss 1400
> >> [root@duff ~]# ip r
> >> default via 192.168.1.1 dev eth1
> >> 169.254.0.0/16 dev eth1 scope link metric 1004
> >> 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.8
> >
> > Indeed, we'll take a look, thanks for the report.
> >
> > In the time being you can do :
> >
> > ip ro change default via 192.168.1.1 dev eth1 advmss 1400 mtu 1500
>
> Thanks - this one works for me.
>
> I'm available to test patches if needed, though I have a feeling you
> already have a handle on the issue and won't need that ;)

;)

I am testing following patch :

diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
index 622ac4c..654ef5b 100644
--- a/net/ipv4/fib_semantics.c
+++ b/net/ipv4/fib_semantics.c
@@ -251,7 +251,7 @@ static struct fib_info *fib_find_info(const struct fib_info *nfi)
nfi->fib_prefsrc == fi->fib_prefsrc &&
nfi->fib_priority == fi->fib_priority &&
memcmp(nfi->fib_metrics, fi->fib_metrics,
- sizeof(fi->fib_metrics)) == 0 &&
+ sizeof(u32) * RTAX_MAX) == 0 &&
((nfi->fib_flags ^ fi->fib_flags) & ~RTNH_F_DEAD) == 0 &&
(nfi->fib_nhs == 0 || nh_comp(fi, nfi) == 0))
return fi;