当前位置: 首页 > article >正文

RTPS网卡白名单的一个BUG

        当我们创建RTPSParticipantImpl的时候,有时候会指定通信使用的网卡,将可以用于RTPS通信的网卡的IP添加到白名单中,这样,RTPS就只会在IP所在的网卡上进行PDP,EDP以及业务数据交互。

        如果我们的DDS应用在启动的时候,传递了网卡白名单给RTPSParticipantImpl,但是此时,白名单IP所在的网卡有没有被创建出来,那么会触发UDPv4Transport中的一个BUG

TCPv4Transport::TCPv4Transport(
        const TCPv4TransportDescriptor& descriptor)
    : TCPTransportInterface(LOCATOR_KIND_TCPv4)
    , configuration_(descriptor)
{
    if (!descriptor.interfaceWhiteList.empty())
    {
        const auto white_begin = descriptor.interfaceWhiteList.begin();
        const auto white_end = descriptor.interfaceWhiteList.end();

        std::vector<IPFinder::info_IP> local_interfaces;
        get_ipv4s(local_interfaces, true);
        for (const IPFinder::info_IP& infoIP : local_interfaces)
        {
            if (std::find_if(white_begin, white_end, [infoIP](const std::string& white_list_element)
                    {
                        return white_list_element == infoIP.dev || white_list_element == infoIP.name;
                    }) != white_end )
            {
                interface_whitelist_.emplace_back(ip::address_v4::from_string(infoIP.name));
            }
        }

        if (interface_whitelist_.empty())
        {
            EPROSIMA_LOG_ERROR(TRANSPORT, "All whitelist interfaces were filtered out");
            interface_whitelist_.emplace_back(ip::address_v4::from_string("192.0.2.0"));
        }
    }
    ...
}

       问题就在上面这段TCPv4Transport的构造函数中,轮询了白名单中的IP,根据IP找对应的网卡,如果没有找到网卡,则将IP从白名单中移除。最后,如果此时白名单中没有IP了(所有对应网卡都没有起来),那么会增加一条固定的IP("192.0.2.0“),也就是说后面只有当某一个网卡配置了"192.0.2.0“这个IP,才能让RTPS正常收发数据了。


http://www.kler.cn/a/393815.html

相关文章:

  • uniapp 微信小程序内嵌h5实时通信
  • FreePBX 17 on ubuntu24 with Asterisk 20
  • Three.js 渲染技术:打造逼真3D体验的幕后功臣
  • rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库
  • AI多模态技术介绍:视觉语言模型(VLMs)指南
  • CTFshow—文件包含
  • Mybatis经典面试题汇总
  • Altium Designer使用技巧(五)
  • SQL Server 的结构,现在看也不算差
  • 关于 Oracle Database Express Edition 的功能和安装
  • Golang | Leetcode Golang题解之第559题N叉树的最大深度
  • 什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性
  • 鸿蒙5.0版开发:命令行工具(mediatool工具)
  • 网络基础-超文本协议与内外网划分(超长版)
  • Jmeter中的定时器(一)
  • Chromium 中chrome.system.storage扩展接口定义c++
  • Docker入门系列——Docker-Compose
  • 【OpenGL】OpenGL简介
  • 大数据微服务方案
  • ROS2-python服务service和client节点(实现加法运算)
  • linux命令详解,openssl+历史命令详解
  • JDBC概述
  • 移动端【01】面试系统的MVVM重构实践
  • 重构代码之替换参数为显式方法
  • axios如何给某一个请求设置请求头信息
  • 让SQL更优雅!深入浅出【公用表表达式(CTE)】语法及实战案例