首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux netlink多播路由更新

Linux netlink多播路由更新
EN

Stack Overflow用户
提问于 2016-04-20 22:17:42
回答 1查看 483关注 0票数 0

我的应用程序应该从内核获得netlink组播路由更新。我做了一些研究,发现多播使用不同的family:RTNL_FAMILY_IPMR和组是RTMGRP_IPV4_MROUTE。

但是,如果我使用:

代码语言:javascript
复制
    sfd = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
    snl.nl_groups |= RTMGRP_IPV4_MROUTE

我没有得到任何更新。

代码语言:javascript
复制
    sfd = socket (AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
    snl.nl_family = RTNL_FAMILY_IPMR;
    snl.nl_groups |= RTMGRP_IPV4_MROUTE;

这会给出绑定错误“,绑定:无效参数

代码语言:javascript
复制
    sfd = socket (RTNL_FAMILY_IPMR, SOCK_RAW, NETLINK_ROUTE);

这给出了“协议不支持的地址系列”错误

我不确定如何从内核获取多播路由的更新。

EN

回答 1

Stack Overflow用户

发布于 2016-04-22 18:44:13

从我之前的项目中复制-粘贴:

代码语言:javascript
复制
    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,因为您想要多播路由表,但它们可能会合并到普通路由表中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36746679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档