lwip发送组播数据问题

文章讲述了在使用LWIP时,遇到组播数据只在默认网卡发送的问题。作者发现`ip4_route`函数限制了发送网卡,并提供了解决方案:设置`ip4_default_multicast_netif`或修改相关代码以允许两个网卡同时发送组播。
摘要由CSDN通过智能技术生成

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、最后再贴一下这个数据流图

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值