Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Nov 2005 09:18:50 -0800
From:      Sean McNeil <sean@mcneil.com>
To:        SUZUKI Shinsuke <suz@freebsd.org>
Cc:        jr@opal.com, ume@freebsd.org, current@freebsd.org
Subject:   Re: recent MFC code to 6-STABLE kills ipv6
Message-ID:  <1131643130.1444.2.camel@triton.mcneil.com>
In-Reply-To: <x764r0h5ya.wl%suz@alaxala.net>
References:  <1131161768.8571.9.camel@server.mcneil.com> <ygehdaqhnnv.wl%ume@mahoroba.org> <8427EC93-6788-4659-B769-3703FF2AAA9A@mcneil.com> <x7acgim9hi.wl%suz@alaxala.net> <1131359967.1874.6.camel@server.mcneil.com> <x7mzkfsy87.wl%suz@alaxala.net> <1131424479.1341.3.camel@server.mcneil.com> <20051110024941.GA987@linwhf.opal.com> <1131591746.24065.3.camel@triton.mcneil.com> <x7r79pkxfp.wl%suz@alaxala.net>  <x764r0h5ya.wl%suz@alaxala.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2005-11-10 at 07:34 -0800, SUZUKI Shinsuke wrote:
> Hi,
> 
> >>>>> On Wed, 09 Nov 2005 19:12:58 -0800
> >>>>> suz@freebsd.org(SUZUKI Shinsuke)  said:
> 
> > Oh Boy!  This is very interesting.  I took a look at my ipfw show during
> > a ping6 and see the problem.  The revpath is messed up.  I took out my
> > rule:
> > add deny all from any to any not verrevpath in via dc0
> > and ping6 now works.
> suz> I'll check it from this point of view.
> 
> I think I've found the problem.
> Could you please try the following patch?
> 
> If it's okay, I'll commit and MFC it.

The patch does indeed allow me to put my revpath check back in ipfw.

Thank you so much for all your hard work!

Cheers,
Sean

> -----
> Index: ip_fw2.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/netinet/ip_fw2.c,v
> retrieving revision 1.106.2.4
> diff -u -r1.106.2.4 ip_fw2.c
> --- ip_fw2.c	4 Nov 2005 20:26:14 -0000	1.106.2.4
> +++ ip_fw2.c	10 Nov 2005 14:44:06 -0000
> @@ -639,8 +639,14 @@
>  	if (ro.ro_rt == NULL)
>  		return 0;
>  
> -	/* if ifp is provided, check for equality with rtentry */
> -	if (ifp != NULL && ro.ro_rt->rt_ifp != ifp) {
> +	/* 
> +	 * if ifp is provided, check for equality with rtentry
> +	 * We should use rt->rt_ifa->ifa_ifp, instead of rt->rt_ifp,
> +	 * to support the case of sending packets to an address of our own.
> +	 * (where the former interface is the first argument of if_simloop()
> +	 *  (=ifp), the latter is lo0)
> +	 */
> +	if (ifp != NULL && ro.ro_rt->rt_ifa->ifa_ifp != ifp) {
>  		RTFREE(ro.ro_rt);
>  		return 0;
>  	}
> 




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1131643130.1444.2.camel>