我的应用程序应该从内核获得netlink组播路由更新。我做了一些研究,发现多播使用不同的family:RTNL_FAMILY_IPMR和组是RTMGRP_IPV4_MROUTE。
但是,如果我使用:
sfd = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
snl.nl_groups |= RTMGRP_IPV4_MROUTE我没有得到任何更新。
但
sfd = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
snl.nl_family = RTNL_FAMILY_IPMR;
snl.nl_groups |= RTMGRP_IPV4_MROUTE;这会给出绑定错误“,绑定:无效参数
sfd = socket (RTNL_FAMILY_IPMR, SOCK_RAW, NETLINK_ROUTE);这给出了“协议不支持的地址系列”错误
我不确定如何从内核获取多播路由的更新。
发布于 2016-04-22 18:44:13
从我之前的项目中复制-粘贴:
struct sockaddr_nl naddr;
netlinkfd = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
naddr.nl_family = AF_NETLINK;
naddr.nl_groups = (1 << (RTNLGRP_LINK - 1)) |
(1 << (RTNLGRP_IPV4_ROUTE - 1)) |
(1 << (RTNLGRP_IPV6_ROUTE - 1)) |
(1 << (RTNLGRP_IPV4_IFADDR - 1)) |
(1 << (RTNLGRP_IPV6_IFADDR -1 ));
if (bind (netlinkfd, (struct sockaddr *)&naddr, sizeof (naddr)))
{
error_foo();
return;
}这一个工程为我接收链接,ip和路由表一般。(从这一点开始向我推送所有更改-如果我想接收当前状态,我也需要请求它们)。尝试同时使用ROUTE和MROUTE,因为您想要多播路由表,但它们可能会合并到普通路由表中
https://stackoverflow.com/questions/36746679
复制相似问题