diff options
Diffstat (limited to 'sys/netinet6/nd6.c')
-rw-r--r-- | sys/netinet6/nd6.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c index b4485a6..d907505 100644 --- a/sys/netinet6/nd6.c +++ b/sys/netinet6/nd6.c @@ -1838,17 +1838,20 @@ nd6_output(ifp, origifp, m0, dst, rt0) /* * next hop determination. This routine is derived from ether_outpout. */ +again: if (rt) { if ((rt->rt_flags & RTF_UP) == 0) { rt0 = rt = rtalloc1((struct sockaddr *)dst, 1, 0UL); if (rt != NULL) { RT_REMREF(rt); RT_UNLOCK(rt); - if (rt->rt_ifp != ifp) { - /* XXX: loop care? */ - return nd6_output(ifp, origifp, m0, - dst, rt); - } + if (rt->rt_ifp != ifp) + /* + * XXX maybe we should update ifp too, + * but the original code didn't and I + * don't know what is correct here. + */ + goto again; } else senderr(EHOSTUNREACH); } |