使用rtnetlink,将消息类型回复给RTM_GETROUTE消息?

时间:2014-08-17 10:35:24

标签: c routing netlink reply

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

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

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

对于路由,我只能找到NEWROUTE,DELROUTE和GETROUTE消息,但所有3个似乎都有其他用途。 (创建路径时为第1个,删除时为第2个,使用时为第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)

解析收到的消息有an example,但我需要知道我所需的消息类型( nlmsg_type )才能过滤掉其他消息。

1 个答案:

答案 0 :(得分:2)

有libdnet项目: http://libdnet.sourceforge.net/

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