Issue solved.
Thank you all :)

Heiko

Am 13.09.2015 um 15:44 schrieb Martin Pieuchot:
> On 13/09/15(Sun) 12:55, Heiko Zimmermann wrote:
>> Hello Team,
>>
>> with today's snapshot (tested i386 and amd64) is access to hostname.re0
>> IPs broken. Also can't ping.
>>
>> 127.0.0.1 is ok.
>>
>> With cvs -d anon...@anoncvs.ca.openbsd.org:/cvs -q up -D "2 days ago"
>> all works fine.
>>
>> Best Regards,
>> Heiko
>>
>>
>> # ping 176.9.157.76
>> PING 176.9.157.76 (176.9.157.76): 56 data bytes
>> --- 176.9.157.76 ping statistics ---
>> 9 packets transmitted, 0 packets received, 100.0% packet loss
> 
> Thanks for the report and the provided informations.  The problem is
> due to a mismatch of interface in pf_test() between input and output
> for local traffic.
> 
> Diff below corrects that, ok?
> 
> Index: netinet/ip_output.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet/ip_output.c,v
> retrieving revision 1.296
> diff -u -p -r1.296 ip_output.c
> --- netinet/ip_output.c       12 Sep 2015 20:26:07 -0000      1.296
> +++ netinet/ip_output.c       13 Sep 2015 13:33:54 -0000
> @@ -201,7 +201,10 @@ reroute:
>               }
>  
>               ia = ifatoia(ro->ro_rt->rt_ifa);
> -             ifp = if_ref(ro->ro_rt->rt_ifp);
> +             if (ISSET(ro->ro_rt->rt_flags, RTF_LOCAL))
> +                     ifp = if_ref(lo0ifp);
> +             else
> +                     ifp = if_ref(ro->ro_rt->rt_ifp);
>               if ((mtu = ro->ro_rt->rt_rmx.rmx_mtu) == 0)
>                       mtu = ifp->if_mtu;
>               ro->ro_rt->rt_use++;
> Index: netinet6/ip6_output.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/ip6_output.c,v
> retrieving revision 1.187
> diff -u -p -r1.187 ip6_output.c
> --- netinet6/ip6_output.c     12 Sep 2015 20:26:07 -0000      1.187
> +++ netinet6/ip6_output.c     13 Sep 2015 13:34:11 -0000
> @@ -550,7 +550,10 @@ reroute:
>                       error = EHOSTUNREACH;
>                       goto bad;
>               }
> -             ifp = if_ref(rt->rt_ifp);
> +             if (ISSET(rt->rt_flags, RTF_LOCAL))
> +                     ifp = if_ref(lo0ifp);
> +             else
> +                     ifp = if_ref(rt->rt_ifp);
>       } else {
>               *dst = dstsock;
>       }
> 

Reply via email to