I’ve been running with the patch to dhcp6c.c for a while 1378,1381d1377 < /* < * failed send. Possible change of interface id per Bug#1035395 < * Try reseting and resend < */ 1384,1398d1379 < if (ifreset(ifp)) { < debug_printf(LOG_ERR, FNAME, < "reset failed: %s", strerror(errno)); < } else { < dst.sin6_scope_id = ifp->linkid; < < if (sendto(sock, buf, len, 0, (struct sockaddr *)&dst, < sysdep_sa_len((struct sockaddr *)&dst)) == -1) { < debug_printf(LOG_ERR, FNAME, < "retransmit failed: %s", strerror(errno)); < } else { < debug_printf(LOG_DEBUG, FNAME, "resend %s to %s", < dhcp6msgstr(dh6->dh6_msgtype), addr2str((struct sockaddr *)&dst)); < } < }
I’m still not sure if this is over thinking the solution. It is tempting to just run the ifreset(ifs) before every send. Behaviour is pretty good when the interface is down. The ifreset fails and the slow retry loop fixes it up next time. dhcp6c[1844536]: client6_send: transmit failed: Network is unreachable dhcp6c[1844536]: ifreset: invalid interface(ppp0): No such device dhcp6c[1844536]: client6_send: reset failed: No such device