cannot change mtu size for ipv6

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Hi,

using kernel 2.4.17 I run into the following problem.

Using an ethernet device with ipv6 I cannot increase the mtu
size.
Lowering the mtu size is no problem.
BTW: After increasing the mtu size, ifconfig will display the
correct new size. But using tcpdump or a network sniffer, you can
see that the really used mtu size is the old one.

This IMHO buggy behavior is caused by the following code fragment
in file net/ipv6/route.c:

static int rt6_mtu_change_route(struct rt6_info *rt, void *p_arg)
{
        struct rt6_mtu_change_arg *arg = (struct rt6_mtu_change_arg *)
p_arg;

        /* In IPv6 pmtu discovery is not optional,
           so that RTAX_MTU lock cannot disable it.
           We still use this lock to block changes
           caused by addrconf/ndisc.
        */
        if (rt->rt6i_dev == arg->dev &&
            rt->u.dst.pmtu > arg->mtu &&
            !(rt->u.dst.mxlock&(1<<RTAX_MTU)))
                  rt->u.dst.pmtu = arg->mtu;

 [snip]

}


This function is called, if mtu size is changed using ifconfig.
(e.g. "ifconfig ethx mtu 5000" and mtu size was previously different
from 5000)

Because the if condition (rt->u.dst.pmtu > arg->mtu) must hold when
changing the mtu size, I am not able to increase the mtu size for a
network path for which the routing entry is already written.

To increase the mtu size for a device in ipv6 I have the following
choices:

(1) o change mtu size using ifconfig
    o delete all (relevant) entries in ipv6 routing table for the
      device
    o recreate all (relevant) entries in ipv6 routing table for the
      device
      (now all those routes will use the new mtu size)

(2) o change mtu size using ifconfig
    o ifconfig <dev> down
    o ifconfig <dev> up
    o add all relevant routing entries for that device
      (now all those routes will use the new mtu size)

(3) o set mtu size to desired value before any entry in the routing
      table is created

I don't have a patch to eliminate this messy behavior. (Because I am not
much familiar with this kernel network code and don't know much about
possible side effects when changing some if conditions here and
there ... ;-(

But maybe someone has an idea (solutions?) regarding this problem?


Thanks,


Andreas


--
Linux for eServer Development
Tel :  +49-7031-16-4640
Notes mail :  Andreas Herrmann/GERMANY/IBM@IBMDE
email :  aherrman@de.ibm.com


-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux