【问题标题】:How to read TENTATIVE flag of IPv6 Address?如何读取 IPv6 地址的 TENTATIVE 标志?
【发布时间】:2011-03-13 03:39:45
【问题描述】:

我正在使用 ioctl() 系统调用 prgramtically 分配 ipv6 地址。 我想知道是否有办法,我可以找到分配的 ip 是暂定/重复的?

谢谢。

【问题讨论】:

    标签: c linux ipv6


    【解决方案1】:

    主机:用getifaddrs()枚举接口。

    (edit) 看来您需要在getifaddrs() 之前调用sysctl(NET_IPV6_OPT_DAD_ENABLE)

    http://lwn.net/Articles/218597/

    网络:发送 ICMP ping 是 DHCP 服务器使用的典型但并非万无一失的方法。

    假设如果您正在设置 IP,那么您正在实施一种 DHCP 形式并且您控制该网段的所有地址。否则,只需使用链接本地范围已经唯一的地址。

    【讨论】:

    • 感谢您的回复。我正在检查主机。我分配了 IPv6 地址,然后我想知道它是否不是暂定/重复的。 getifaddrs() 函数仅给出不存在 IFA_F_TENTATIVE 的 SIOCGIFFLAGS。 “ip”命令告诉我 IP 是否是暂定的,使用命令“ip addr show
    • 我正在浏览构成“ip”的iproute包的来源。虽然没有任何运气...... :-(
    【解决方案2】:

    您可以阅读下面的 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.
    

    【讨论】:

    • 您好,感谢您的回复。我认为,这只适用于多播 IPv6 地址。我猜它不适用于链接本地、站点本地和全局地址。但是,我可以使用 netlink 套接字来检索标志。问候,-克里希纳
    【解决方案3】:

    获取地址状态的一种方法是通过 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2019-01-16
      相关资源
      最近更新 更多