m 标志和 o 标志将存储在 Linux 中的位置
Posted
技术标签:
【中文标题】m 标志和 o 标志将存储在 Linux 中的位置【英文标题】:Where m flag and o flag will be stored in Linux 【发布时间】:2013-05-12 15:28:36 【问题描述】:我想知道最近收到的Router Advertisement的m flag和o flag的值。从内核源代码中我得知存储了 m 标志和 o 标志。
/*
* Remember the managed/otherconf flags from most recently
* received RA message (RFC 2462) -- yoshfuji
*/
in6_dev->if_flags = (in6_dev->if_flags & ~(IF_RA_MANAGED |
IF_RA_OTHERCONF)) |
(ra_msg->icmph.icmp6_addrconf_managed ?
IF_RA_MANAGED : 0) |
(ra_msg->icmph.icmp6_addrconf_other ?
IF_RA_OTHERCONF : 0);
.
.
.
那么我相信必须可以使用 ioctl 或 proc 文件系统或任何其他方法来检索这些值。谁能指点一下。
【问题讨论】:
你用什么语言工作? 当然我在 C 中工作。 【参考方案1】:我终于找到了路。感谢 Google,感谢 Shirley Ma。请从我的博客http://kumaran127.blogspot.jp/2013/05/get-m-and-o-flag-of-most-recently.html获取代码
【讨论】:
在您的博客中,您提到了 IBM 的一些库代码。你也可以链接到那个吗,提前谢谢。 这里是该代码link (dev.laptop.org/~mstone/sources/expanded_srpms/…) 的链接。我使用了 netlink.c 文件中的代码。【参考方案2】:我很确定您不会在 procfs 中找到它,但您可以使用 radvdump 分析这些数据包:请参阅 http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/hints-daemons-radvd.html 并参考其实现方式:http://svn.dd-wrt.com/browser/src/router/radvd/radvdump.c?rev=11491 .. 这是他们创建 icmp6 过滤器的方式在原始套接字 http://svn.dd-wrt.com/browser/src/router/radvd/socket.c?rev=11491 上,然后用于监听。
干杯
【讨论】:
您能否解释一下您是如何确定 proc 文件系统没有此信息的。并查看我共享的代码。它非常清楚,最新的 RA 标志被存储以供将来参考(如 RFC 所指定)。所以应该有办法找回它。 这是所有procfs
entries in /proc/sys/net/ipv6/ 的列表。不幸的是,没有为 RA 的标志列出条目。
您正在查看的源代码可能存储了在内核中使用的标志。如果你想从用户空间访问这些标志,你需要依赖诸如 radvd 之类的守护进程,或者滚动你自己的内核模块(不是特别难完成)来打印出标志到 /proc/.
否,标志不存储供内核内部使用。根据 RFC,dhcp6 客户端应根据最近收到的 RA 的 M 和 O 标志启动。所以这些标志是为 dhcp6 客户端的目的而存储的。所以应该有某种方法来检索它。您还可以阅读有关 Netlink 套接字的信息以了解更多信息。我正在使用 radvd 发送 RA。我不想手动读取这些值。我需要检查它并在我的代码中启动我的 dhcp6 客户端。
请原谅我的困惑,我对网络不是特别熟悉,您是想完全在用户空间中获取标志,还是在内核空间中获取标志,然后通过ioctl
、procfs
传递到用户空间,等等?以上是关于m 标志和 o 标志将存储在 Linux 中的位置的主要内容,如果未能解决你的问题,请参考以下文章
open(2) 中的 O_SYNC 和 O_DIRECT 标志有何不同/相似?