问题描述:
开发板的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(¤t_iphdr_dest, &(netif->ip_addr)) ||
/* or broadcast on this interface network address? */
ip_addr_isbroadcast(¤t_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的广播了!!