On 24/03/17(Fri) 12:30, Sebastien Marie wrote:
> Hi,
>
> First, I am unsure to properly report the problem, so sorry about that.
> Feel free to require additionnal commands output...
>
> Since approx 1 mounth, I experiment ipv6 connectivity failure on
> localnet.
>
> Symptoms are simple:
>
> clyde$ ping6 bert
> PING bert (2001:41d0:fe39:c05c:215:c5ff:fe0b:8b7a): 56 data bytes
> ^C
> --- bert ping statistics ---
> 3 packets transmitted, 0 packets received, 100.0% packet loss
I believe this is a regression introduced in r1.206 of netinet6/nd6.c.
It's wrong to call nd6_invalidate() at the beginning of nd6_free() since
the default router selection logic check for the ND state of the entry.
> [...]
> On other amd64 host (which has same problem), it has followed the snapshot
> upgrades:
>
> - OpenBSD 6.0-current (GENERIC.MP) #198: Mon Feb 27 09:18:18 MST 2017
> - OpenBSD 6.0-current (GENERIC.MP) #204: Thu Mar 2 11:20:38 MST 2017
> should have worked (#198 at least - not sure anymore for #204)
>
> - OpenBSD 6.1-beta (GENERIC.MP) #224: Thu Mar 9 18:50:15 MST 2017
> - OpenBSD 6.1-beta (GENERIC.MP) #49: Wed Mar 22 04:40:48 MDT 2017
> doesn't work some time
The change I'm talking about has been committed the 8 of March, so it
fits in your time frame.
Could you tell me if the diff below solve the issue?
Index: netinet6//nd6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/nd6.c,v
retrieving revision 1.206
diff -u -p -r1.206 nd6.c
--- netinet6//nd6.c 8 Mar 2017 09:34:43 -0000 1.206
+++ netinet6//nd6.c 24 Mar 2017 14:24:51 -0000
@@ -748,8 +748,6 @@ nd6_free(struct rtentry *rt, int gc)
splsoftassert(IPL_SOFTNET);
- nd6_invalidate(rt);
-
/*
* we used to have pfctlinput(PRC_HOSTDEAD) here.
* even though it is not harmful, it was not really necessary.
@@ -830,6 +828,8 @@ nd6_free(struct rtentry *rt, int gc)
* a side effect (XXX).
*/
next = TAILQ_NEXT(ln, ln_list);
+
+ nd6_invalidate(rt);
/*
* Detach the route from the routing tree and the list of neighbor