使用lwip如何让全零ip地址收到10.1.1.255的广播

问题描述:

开发板的ip地址0.0.0.0,想收到PC发送的广播指令,一直收不到。

基本设置:

开发板的本地ip地址为0.0.0.0, 子网掩码:255.255.255.0,网关:10.1.1.1;

使用lwip1.4.1;

PC发送的广播: PC的ip地址10.1.1.198,广播的目的地址:10.1.1.255;

网络协议为 UDP协议,只接收或发送UDP格式的数据;

 

解决办法:

修改ip_input()函数(在ip.c中),有一条判断语句:

if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) 如果ip为0.0.0.0,则通不过,

要改为:if ((netif_is_up(netif)) ) ,去掉后一个判断;

其次:if (ip_addr_cmp(&current_iphdr_dest, &(netif->ip_addr)) ||
            /* or broadcast on this interface network address? */
            ip_addr_isbroadcast(&current_iphdr_dest, netif)) 

这个语句判断 数据包的目的地址是不是广播,ip_addr_isbroadcast()这个函数不能把10.1.1.255判定为广播,因为它和0.0.0.0按位与完后是0,

需要修改ip_addr_isbroadcast()函数(在ip_addr.c文件中),加上一条判断,if(addr==0xff01010a),返回1,注意字节序;

这样0.0.0.0就可以收到10.1.1.255的广播了!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值