Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 从用户空间访问IF_RA_MANAGED和IF_RA_OTHERCONF_Linux Kernel_Ipv6 - Fatal编程技术网

Linux kernel 从用户空间访问IF_RA_MANAGED和IF_RA_OTHERCONF

Linux kernel 从用户空间访问IF_RA_MANAGED和IF_RA_OTHERCONF,linux-kernel,ipv6,Linux Kernel,Ipv6,我需要从用户空间访问IF_RA_MANAGED和IF_RA_OTHERCONF(in6_dev->IF_flags) 有人知道我怎么做吗 谢谢我想你可以用PF\u NETLINK插座来实现这一点 ip实用程序是iproute2的一部分,它有一个显示此信息的监控模式,例如: ajw@rapunzel:/tmp/iproute-20100519/ip > ip -6 monitor 2: eth0 inet6 2001:XXXX:XXXX:0:XXXX:XXXX:XXXX:XXXX/64

我需要从用户空间访问
IF_RA_MANAGED
IF_RA_OTHERCONF
in6_dev->IF_flags

有人知道我怎么做吗


谢谢

我想你可以用
PF\u 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 
(为了偏执狂,一些确切的地址被删除了)。我没有在这个局域网上设置这些标志的RAs,但我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;
        }

}

因此,我认为您应该能够使用它来组合解决方案。

我认为您可以使用
PF\u 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 
(为了偏执狂,一些确切的地址被删除了)。我没有在这个局域网上设置这些标志的RAs,但我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;
        }

}

因此,我认为您应该能够使用这个方法来制定解决方案。

现在,这个问题的答案是重复的“”。具体来说,问题海报找到了问题的解决方案,并将代码发布在了一个博客上。

这个问题的答案现在是重复的“”。具体而言,问题海报找到了问题的解决方案,并将代码发布在博客上。

onlink
autoconf
是前缀标志,而otherconf和manager不是前缀标志。如果标志
onlink
autoconf
是前缀标志,而otherconf和manager不是前缀标志,那么它们就是inet6开发。它们是inet6\u dev.if\u标志