[Olsr-dev] mtu problem with multicast ipv6 packets
John Hay
(spam-protected)
Tue Dec 2 17:22:24 CET 2008
Was this ever committed or is something more needed?
John
On Wed, Nov 05, 2008 at 12:35:28PM +0200, John Hay wrote:
> On Thu, Oct 23, 2008 at 12:08:39PM +0200, Hannes Gredler wrote:
> > ok, do we have agreement on the final fix ?
> > if so please send it to me :-)
>
> Ok, here is my latest attempt. I have renamed OLSR_DEFAULT_MTU to
> OLSR_IPV4_DEFAULT_MTU. On Linux OLSR_IPV6_DEFAULT_MTU comes from
> IPV6_MIN_MTU and on the BSDs it comes from IPV6_MMTU. For the rest
> it is hardcoded to 1280.
>
> Lightly tested on FreeBSD.
>
> John
> --
> John Hay -- (spam-protected) / (spam-protected)
>
>
> --- src/unix/ifnet.c.orig 2008-10-03 14:45:07.000000000 +0200
> +++ src/unix/ifnet.c 2008-11-05 10:56:20.000000000 +0200
> @@ -237,6 +237,9 @@
> ifp->int_mtu = 0;
> else
> {
> + if ((olsr_cnf->ip_version == AF_INET6) &&
> + (ifr.ifr_mtu > OLSR_IPV6_DEFAULT_MTU))
> + ifr.ifr_mtu = OLSR_IPV6_DEFAULT_MTU;
> ifr.ifr_mtu -= (olsr_cnf->ip_version == AF_INET6) ? UDP_IPV6_HDRSIZE : UDP_IPV4_HDRSIZE;
>
> if(ifp->int_mtu != ifr.ifr_mtu)
> @@ -532,7 +535,9 @@
> olsr_syslog(OLSR_LOG_INFO, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->main_addr));
> }
>
> - ifp->int_mtu = OLSR_DEFAULT_MTU;
> + ifp->int_mtu = OLSR_IPV4_DEFAULT_MTU;
> + if (olsr_cnf->ip_version == AF_INET6)
> + ifp->int_mtu = OLSR_IPV6_DEFAULT_MTU;
>
> ifp->int_mtu -= (olsr_cnf->ip_version == AF_INET6) ? UDP_IPV6_HDRSIZE : UDP_IPV4_HDRSIZE;
>
> @@ -834,9 +839,12 @@
>
> /* Get MTU */
> if (ioctl(olsr_cnf->ioctl_s, SIOCGIFMTU, &ifr) < 0)
> - ifs.int_mtu = OLSR_DEFAULT_MTU;
> + ifs.int_mtu = OLSR_IPV4_DEFAULT_MTU;
> else
> ifs.int_mtu = ifr.ifr_mtu;
> + if ((olsr_cnf->ip_version == AF_INET6) &&
> + (ifr.ifr_mtu > OLSR_IPV6_DEFAULT_MTU))
> + ifr.ifr_mtu = OLSR_IPV6_DEFAULT_MTU;
>
> ifs.int_mtu -= (olsr_cnf->ip_version == AF_INET6) ? UDP_IPV6_HDRSIZE : UDP_IPV4_HDRSIZE;
>
> --- src/win32/ifnet.c.orig 2008-10-03 14:45:07.000000000 +0200
> +++ src/win32/ifnet.c 2008-11-05 10:56:20.000000000 +0200
> @@ -626,7 +626,7 @@
> OLSR_PRINTF(1, "New main address: %s\n", olsr_ip_to_string(&buf, &olsr_cnf->main_addr));
> }
>
> - ifp->int_mtu = OLSR_DEFAULT_MTU;
> + ifp->int_mtu = OLSR_IPV4_DEFAULT_MTU;
>
> ifp->int_mtu -= (olsr_cnf->ip_version == AF_INET6) ?
> UDP_IPV6_HDRSIZE : UDP_IPV4_HDRSIZE;
> --- src/interfaces.h.orig 2008-10-03 14:45:07.000000000 +0200
> +++ src/interfaces.h 2008-11-05 11:10:30.000000000 +0200
> @@ -54,6 +54,19 @@
> #include "olsr_types.h"
> #include "mantissa.h"
>
> +#if defined linux
> +#include <linux/ipv6.h>
> +#define OLSR_IPV6_DEFAULT_MTU IPV6_MIN_MTU
> +#endif
> +#if defined __MacOSX__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__
> +#include <netinet/ip6.h>
> +#define OLSR_IPV6_DEFAULT_MTU IPV6_MMTU
> +#endif
> +#ifndef OLSR_IPV6_DEFAULT_MTU
> +#define OLSR_IPV6_DEFAULT_MTU 1280
> +#endif
> +#define OLSR_IPV4_DEFAULT_MTU 1500
> +
> #define _PATH_PROCNET_IFINET6 "/proc/net/if_inet6"
>
>
> @@ -178,8 +191,6 @@
> };
>
>
> -#define OLSR_DEFAULT_MTU 1500
> -
> /* Ifchange actions */
>
> #define IFCHG_IF_ADD 1
>
> --
> Olsr-dev mailing list
> (spam-protected)
> http://lists.olsr.org/mailman/listinfo/olsr-dev
--
John Hay -- (spam-protected) / (spam-protected)
More information about the Olsr-dev
mailing list