【发布时间】:2011-03-13 03:39:45
【问题描述】:
我正在使用 ioctl() 系统调用 prgramtically 分配 ipv6 地址。 我想知道是否有办法,我可以找到分配的 ip 是暂定/重复的?
谢谢。
【问题讨论】:
我正在使用 ioctl() 系统调用 prgramtically 分配 ipv6 地址。 我想知道是否有办法,我可以找到分配的 ip 是暂定/重复的?
谢谢。
【问题讨论】:
主机:用getifaddrs()枚举接口。
(edit) 看来您需要在getifaddrs() 之前调用sysctl(NET_IPV6_OPT_DAD_ENABLE)?
http://lwn.net/Articles/218597/
网络:发送 ICMP ping 是 DHCP 服务器使用的典型但并非万无一失的方法。
假设如果您正在设置 IP,那么您正在实施一种 DHCP 形式并且您控制该网段的所有地址。否则,只需使用链接本地范围已经唯一的地址。
【讨论】:
您可以阅读下面的 IPv6 地址的 TENTATIVE 标志:
表示在多播地址上设置的标志。从 RFC 2373 开始,唯一定义的标志是瞬态 (T) 标志。 T标志使用标志字段的低位。
* 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.
【讨论】:
获取地址状态的一种方法是通过 RTM_GETADDR 消息使用 rtnetlink 库,该消息检索包含 ifa_flags 的 ifaddrmsg 结构。请查看此处的手册页以获取信息:
http://man7.org/linux/man-pages/man7/rtnetlink.7.html
标志和 ifaddrmsg 结构显示在 if_addr.h 中:
https://github.com/torvalds/linux/blob/master/include/uapi/linux/if_addr.h
【讨论】: