lwip发送组播数据问题
2024-01-03 18:49:53
1、今天测试组播包发现,组播数据只能在默认网卡发送成功,多次交叉测试依然这样,所以和网卡的配置无关
(我的是双网卡)
2、最后搜源码看,才发现有一段代码如下:
struct netif *
ip4_route(const ip4_addr_t *dest)
{
#if !LWIP_SINGLE_NETIF
struct 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、最后再贴一下这个数据流图
文章来源:https://blog.csdn.net/baowxz/article/details/135369605
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!