recent MFC code to 6-STABLE kills ipv6
Sean McNeil
sean at mcneil.com
Thu Nov 10 09:18:57 PST 2005
On Thu, 2005-11-10 at 07:34 -0800, SUZUKI Shinsuke wrote:
> Hi,
>
> >>>>> On Wed, 09 Nov 2005 19:12:58 -0800
> >>>>> suz at 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;
> }
>
More information about the freebsd-current
mailing list