I tried to ask upstream (dhcp-workers mailing list) https://lists.isc.org/pipermail/dhcp-workers/2010-February/000108.html but no answer.
DAD is performed by the kernel. So you'll need to query the kernel to figure out what is going on. I have sent a patch to make the kernel send a notification when DAD fails. The kernel will also send a notification when DAD succeeds. So you could either listen to those notifications, or just poll the kernel at set intervals.
kernel already passed the test: Section 3: RFC 4862 - IPv6 Stateless Address Autoconfiguration That means kernel can deal with DAD correctly. SO the problem should be how our dhclient discover address duplicate on the link. It's easy to send the Declient msg. But if only client know address duplicate. client will not do it.
The idea is to get the dhclient shell script to either wait for a notification from the kernel, at which point it can send a decline message if the kernel DAD had failed, or for it to poll the kernel at set intervals to determine whether DAD succeeded or failed.
(In reply to comment #4) > The idea is to get the dhclient shell script to either wait for a notification > from the kernel, at which point it can send a decline message if the kernel DAD > had failed, or for it to poll the kernel at set intervals to determine whether > DAD succeeded or failed. Hi Herbert, thanks for your advices. I found that 'ip addr show' shows 'tentative' flag in address info when DAD is still not complete or failed. So I use this code in dhclient-script to check whether the address passed DAD: ip -f inet6 addr add ${new_ip6_address}/${new_ip6_prefixlen} \ dev ${interface} scope global # repeatedly test whether newly added address passed # duplicate address detection (DAD) for i in $(seq 5); do sleep 1 # give the DAD some time # tentative flag = DAD is still not complete or failed duplicate=$(ip -6 addr show dev ${interface} tentative \ | grep ${new_ip6_address}/${new_ip6_prefixlen}) # if there's no tentative flag, address passed DAD if [ -z "${duplicate}" ]; then break fi done # if there's still tentative flag = address didn't pass DAD = it's duplicate = remove it and exit with error if [ -n "${duplicate}" ]; then ip -6 addr del ${new_ip6_address}/${new_ip6_prefixlen} dev ${interface} exit_with_hooks 3 fi
dhcp-4.1.1-14.fc13 has been submitted as an update for Fedora 13. http://admin.fedoraproject.org/updates/dhcp-4.1.1-14.fc13
dhcp-4.1.1-12.fc12 has been submitted as an update for Fedora 12. http://admin.fedoraproject.org/updates/dhcp-4.1.1-12.fc12
dhcp-4.1.1-12.fc12 has been pushed to the Fedora 12 testing repository. If problems still persist, please make note of it in this bug report. If you want to test the update, you can install it with su -c 'yum --enablerepo=updates-testing update dhcp'. You can provide feedback for this update here: http://admin.fedoraproject.org/updates/dhcp-4.1.1-12.fc12
Verified in dhcp-4.1.1-12.fc12
dhcp-4.1.1-13.fc12 has been pushed to the Fedora 12 testing repository. If problems still persist, please make note of it in this bug report. If you want to test the update, you can install it with su -c 'yum --enablerepo=updates-testing update dhcp'. You can provide feedback for this update here: http://admin.fedoraproject.org/updates/dhcp-4.1.1-13.fc12
dhcp-4.1.1-15.fc13 has been pushed to the Fedora 13 stable repository. If problems still persist, please make note of it in this bug report.
dhcp-4.1.1-13.fc12 has been pushed to the Fedora 12 stable repository. If problems still persist, please make note of it in this bug report.