【问题标题】:Access IF_RA_MANAGED and IF_RA_OTHERCONF from userspace从用户空间访问 IF_RA_MANAGED 和 IF_RA_OTHERCONF
【发布时间】:2011-07-01 12:38:38
【问题描述】:

我需要从用户空间访问IF_RA_MANAGEDIF_RA_OTHERCONF (in6_dev->if_flags)。

有人知道我该怎么做吗?

谢谢

【问题讨论】:

    标签: linux-kernel ipv6


    【解决方案1】:

    我认为您可以使用PF_NETLINK 套接字来做到这一点。

    ip 实用程序是iproute2 的一部分,它具有显示此信息的监控模式,例如:

    ajw@rapunzel:/tmp/iproute-20100519/ip > ip -6 monitor
    2: eth0    inet6 2001:XXXX:XXXX:0:XXXX:XXXX:XXXX:XXXX/64 scope global dynamic 
           valid_lft 86400sec preferred_lft 14400sec
    prefix 2001:XXXX:XXXX::X/64 dev eth0 onlink autoconf valid 14400 preferred 131084 
    

    (为了偏执,删除了一些确切的地址)。我没有在此 LAN 上设置这些标志的任何 RA,但我 99% 确定它们也会出现在那里。

    查看strace 显示有趣的调用似乎是:

    socket(PF_NETLINK, SOCK_RAW, 0)         = 3
    setsockopt(3, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
    setsockopt(3, SOL_SOCKET, SO_RCVBUF, [1048576], 4) = 0
    bind(3, {sa_family=AF_NETLINK, pid=0, groups=fffffff7}, 12) = 0
    getsockname(3, {sa_family=AF_NETLINK, pid=7151, groups=fffffff7}, [12]) = 0
    time(NULL)                              = 1309595579
    send(3, "...", 20, 0) = 20
    recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"...", 16384}], msg_controllen=0, msg_flags=0}, 0) = 864
    

    iproute2 的来源有一个文件 ip/ipmonitor.c,它似乎完成了大部分工作:

    int print_prefix(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg);
    
    int accept_msg(const struct sockaddr_nl *who,
                   struct nlmsghdr *n, void *arg)
    {
            // Snipped some unrelated stuff
            if (n->nlmsg_type == RTM_NEWPREFIX) {
                    if (prefix_banner)
                            fprintf(fp, "[PREFIX]");
                    print_prefix(who, n, arg);
                    return 0;
            }
    
    }
    

    所以我认为你应该能够使用这个来组合一个解决方案。

    【讨论】:

    • onlinkautoconf 是前缀标志,但 otherconf 和 manager 不是前缀标志。它们是 inet6_dev.if_flags
    【解决方案2】:

    这个问题现在在其副本“Where m flag and o flag will be stored in Linux”中得到了回答。具体来说,问题发布者找到了解决问题的方法,并将代码发布在 http://kumaran127.blogspot.jp/2013/05/get-m-and-o-flag-of-most-recently.html 的博客中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 2011-03-01
      • 1970-01-01
      相关资源
      最近更新 更多