ユーザ空間からIF_RA_MANAGED
とIF_RA_OTHERCONF
(in6_dev->if_flags
)にアクセスする必要があります。ユーザ空間からIF_RA_MANAGEDとIF_RA_OTHERCONFにアクセスする
どうすればいいですか?私はあなたがPF_NETLINK
ソケットでこれを行うことができると思い
おかげ
ユーザ空間からIF_RA_MANAGED
とIF_RA_OTHERCONF
(in6_dev->if_flags
)にアクセスする必要があります。ユーザ空間からIF_RA_MANAGEDとIF_RA_OTHERCONFにアクセスする
どうすればいいですか?私はあなたがPF_NETLINK
ソケットでこれを行うことができると思い
おかげ
。
[email protected]:/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
(パラノイアのために取り外さいくつかの正確なアドレス):iproute2
の一部である
ip
ユーティリティは、例えば、この情報を表示するように表示されるモニタモードを持っています。私はこのLANに設定されているフラグを持つRAを持っていませんが、99%はそこにも表示されることを確信しています。 strace
とチャンスをうかがっ
が面白いの呼び出しがあるように見える示しています。だから、
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;
}
}
:
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
を、持っています私はあなたがこれを使って解決策をまとめることができるはずだと思います。
この質問の回答は "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というコードを掲載しました。
'onlink'と' autoconf'はプレフィックスフラグですが、otherconfとmanagerはプレフィックスフラグではありません。彼らはinet6_dev.if_flagsです – drizzt