1

我已经使用 netlink 套接字向内核发送了 RTM_GETROUTE 消息。现在我正在听内核消息。

内核通过 netlink 套接字发送nlmsghdr结构作为回复。我需要知道它的消息类型(nlmsg_type)是什么?(我的代码也在监听 rout 删除/创建事件,我要区分)。

又是 RTM_GETROUTE 回复吗?任何示例代码或链接表示赞赏。

对于路由,我只能找到 NEWROUTE、DELROUTE 和 GETROUTE 消息,但所有 3 个似乎都有其他用途。(第一个创建路由时,第二个删除一个路由,第三个用于请求我使用的。)

这是我发送消息的代码。

struct nlmsghdr* hdr;
struct rtmsg* nl_p;

nl_p = (struct rtmsg*) NLMSG_DATA(hdr);
memset(&nl_p, 0, sizeof(nl_p));

hdr->nlmsg_pid = 0;
hdr->nlmsg_seq = ++seq_num;
hdr->nlmsg_type = RTM_GETROUTE;

nl_p->rtm_family = AF_INET;
nl_p->rtm_dst_len = 0;
nl_p->rtm_src_len = 0;
nl_pload->rtm_table = RT_TABLE_MAIN;

rtable_success = send(fd, hdr, hdr->nlmsg_len, 0)

一个解析接收到的消息的示例,但我需要知道我需要的消息类型(nlmsg_type)才能过滤掉其他消息。

4

1 回答 1

3

libdnet 项目位于: http: //libdnet.sourceforge.net/

您可以在 route_get 函数中找到问题的答案。

于 2016-10-14T12:29:41.853 回答