Доступ к IF_RA_MANAGED и IF_RA_OTHERCONF из пространства пользователя - PullRequest
1 голос
/ 01 июля 2011

Мне нужно получить доступ к IF_RA_MANAGED и IF_RA_OTHERCONF (in6_dev->if_flags) из пространства пользователя.

Кто-нибудь знает, как мне это сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 02 июля 2011

Я думаю, что вы можете сделать это с помощью 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 

(Некоторые точные адреса удалены из паранойи).У меня нет 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;
        }

}

Так что я думаю, что вы должны быть в состоянии собратьрешение с использованием этого.

0 голосов
/ 12 июня 2013

На этот вопрос теперь дается ответ в его дубликате " Где m flag и o flag будут храниться в Linux ".В частности, постер вопросов нашел решение своей проблемы и разместил код в блоге по адресу http://kumaran127.blogspot.jp/2013/05/get-m-and-o-flag-of-most-recently.html.

...