Я назначаю адрес ipv6 с помощью системного вызова ioctl () программно. Я хочу знать, если есть способ, я могу найти назначенный IP-адрес является предварительным / дубликатом?
Спасибо.
Host: Перечислите интерфейсы с помощью getifaddrs()
.
(edit) Похоже, вам нужно вызвать sysctl(NET_IPV6_OPT_DAD_ENABLE)
перед getifaddrs()
?
http://lwn.net/Articles/218597/
Сеть: Отправить ICMP ping - это типичный, но не надежный метод, который используют серверы DHCP.
Предполагается, что если вы устанавливаете IP, то вы используете форму DHCP и контролируете все адреса для этого сегмента. В противном случае просто используйте уже уникальные адреса link-local scope.
Вы можете прочитать предварительный флаг IPv6-адреса, как показано ниже:
Указывает флаги, установленные на адресе многоадресной рассылки. Начиная с RFC 2373, единственным определенным флагом является флаг Transient (T). Флаг T использует бит низкого порядка поля Flags.
* If 0, the multicast address is a permanently assigned, well-known multicast address allocated by the Internet Assigned Numbers Authority (IANA).
* If 1, the multicast address is a not permanently assigned, or transient.