我正在使用ioctl()系统调用程序化地分配ipv6地址。 我想知道是否有一种方法可以确定所分配的IP是暂定的/重复的?
谢谢。
主机:使用getifaddrs()
枚举接口。
(编辑)看起来你需要在调用getifaddrs()
之前调用sysctl(NET_IPV6_OPT_DAD_ENABLE)
?
http://lwn.net/Articles/218597/
网络:发送ICMP ping是DHCP服务器使用的典型但不是绝对可靠的方法。
假定您正在设置IP,则意味着您正在实现某种形式的DHCP,并且您控制该段所有地址。否则,只需使用本地链路范围内已唯一的地址。
获取地址状态的一种方法是通过使用rtnetlink库和RTM_GETADDR消息来检索ifa_flags包含的ifaddrmsg结构。有关详细信息,请查看此处的手册页面:
http://man7.org/linux/man-pages/man7/rtnetlink.7.html
在if_addr.h文件中展示了标志和ifaddrmsg结构:
https://github.com/torvalds/linux/blob/master/include/uapi/linux/if_addr.h
* 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.