lwip发送组播数据问题

1、今天测试组播包发现,组播数据只能在默认网卡发送成功,多次交叉测试依然这样,所以和网卡的配置无关

(我的是双网卡)

2、最后搜源码看,才发现有一段代码如下:

struct netif *
ip4_route(const ip4_addr_t *dest)
{
#if !LWIP_SINGLE_NETIFstruct netif *netif;LWIP_ASSERT_CORE_LOCKED();#if LWIP_MULTICAST_TX_OPTIONS/* Use administratively selected interface for multicast by default */if (ip4_addr_ismulticast(dest) && ip4_default_multicast_netif) {return ip4_default_multicast_netif;}
#endif /* LWIP_MULTICAST_TX_OPTIONS */

在ip4_route函数中,使能组播后(LWIP_MULTICAST_TX_OPTIONS=1),貌似这个代码

限制死了发送数据的网卡啊,

所以可以通过

1)

void
ip4_set_default_multicast_netif(struct netif *default_multicast_netif)
{
  ip4_default_multicast_netif = default_multicast_netif;
}

函数,将ip4_default_multicast_netif设置为NULL,则取消这个限制,

2)或者通过ip4_set_default_multicast_netif,强制设置一个网卡为默认组播网卡

3、问题来了,怎么让两个网卡都发送组播数据呢?

需要改ip4_route,或者ip4_route_src 函数代码啊??!!

默认的lwip中,未定义LWIP_HOOK_IP4_ROUTE_SRC,也未定义ip4_default_multicast_netif,所以组播过程也会按照正常发包的流程,目的ip因为是组播的,所以和任何网卡的ip网段都不匹配,所以会定位到默认网卡发送数据

4、最后再贴一下这个数据流图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/317377.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vivado JESD204B与AD9162建立通信实战总结

一、FPGA与AD9162的JESD204B接口 FPGA作为JESD204B接口的发送端,AD9162作为JESD204B接口的接收端。FPGA和AD9162的device clk、SYSREF由同源时钟芯片产生。其中,FPGA和AD9162的divice clk时钟不同,并且FPGA的decive clk等同于JESD204B IP的co…

Ubuntu 22.04/20.04 安装 SSH

OpenSSH 是安全远程通信的重要工具,提供了一种安全的方式来访问和管理服务器。对于那些计划在 Ubuntu 22.04 Jammy Jellyfish 或其较旧的稳定版本的 Ubuntu 20.04 Focal Fossa 上安装 SSH 并启用它的人来说,了解其功能和优势至关重要。 OpenSSH的主要特…

x-cmd pkg | zellij - 比 tmux 更容易上手的终端多路复用器

简介 zellij 是一个面向开发、运营以及任何热爱终端的人的终端多路复用器 (Terminal Multiplexers),类似于 tmux 和 screen,内置许多功能,允许用户扩展并创建自己的个性化环境。 zellij 的设计理念是不牺牲简单性来换…

Excel·VBA二维数组组合函数的应用实例之概率计算

看到一个视频《李永乐老师的抖音 - 骰子概率问题》,计算投出6个骰子恰好出现1、2、3、4、5、6这6个点数的概率 李永乐老师的计算方法是,第1个概率为1即6/6,第2个不与之前相同的概率为5/6,第3个同理概率为4/6,因此该问…

【WPF.NET开发】WPF中的输入

本文内容 输入 API事件路由处理输入事件文本输入触摸和操作侧重点鼠标位置鼠标捕获命令输入系统和基元素 Windows Presentation Foundation (WPF) 子系统提供了一个功能强大的 API,用于从各种设备(包括鼠标、键盘、触摸和触笔)获取输入。 本…

【随手查】TINA-TI

快速导航 一、如何导入TI中的器件1、如果TI官网直接给了TSM文件2、如果官网没有直接给TSM文件 一、如何导入TI中的器件 1、如果TI官网直接给了TSM文件 以芯片THS4303为例,在TI中搜索元器件THS4303后 然后可以看到,这里直接给出了TINA的模型&#xf…

JAVA对象、List、Map和JSON之间的相互转换

JAVA对象、List、Map和JSON之间的相互转换 1.Java中对象和json互转2.Java中list和json互转3.Java中map和json互转 1.Java中对象和json互转 Object obj new Object(); String objJson JSONObject.toJSONString(obj);//java对象转json Object newObj JSONObject.parseObject(…

用户管理第2节课 -- idea 2023.2 创建表--鱼皮

二、【先确定idea版本&鱼皮是否一致,再决定看不看这行】建表 2.1 idea 里连接数据库,通过可视化建表 2.1.1 清空表中数据 的 命令 truncate 清空 2.1.2 先输入删除表,的命令,再选中这行命令,执行,…

平安人寿新疆分公司:深化消费帮扶,为乡村振兴注入平安力量

为深入贯彻关于“三农”工作的重要论述,落实自治区乡村振兴局的指导部署,近日,平安人寿新疆分公司一把手刘湑杰总一行赴和田县访惠聚驻村工作队走访,慰问了驻村工作队、五老人员及困难村民。 期间,刘湑杰总一行调研了…

解决burpsuite代理8080端口无法勾选以及卸载NI系列软件的方法

使用burpsuite中遇到这样一个问题 默认的8080端口无法绑定 提示端口已经被占用 尝试绑定其他端口,是可行的,也可以正常抓包 但是总感觉每次进来都设置添加一次,有点麻烦不舒服 那么我们来看一下8080端口到底被什么进程占用了 使用如下命令…

实验三-HBase数据库操作

第一步:首先登陆ssh,之前设置了无密码登陆,因此这里不需要密码;再切换目录至/usr/local/hadoop ;再启动hadoop ssh localhost cd /usr/local/hadoop ./sbin/start-dfs.sh 输入命令jps,能看到NameNode,Data…

每日HiveSQL_求解运动员最大连胜的次数_15

1.现需要从运动员比赛结果表中统计每个运动员最大连胜的次数 需求结果: 2.所用到的表和数据 --表创建 CREATE TABLE athlete_results (athlete_id INT,match_time TIMESTAMP,result VARCHAR(10) -- win, lose, draw );--数据装载 INSERT INTO athlete_results …