1.基于LWIP协议栈的同网段双网口通讯
原因:lwip协议栈中的路由机制只比较掩码有效位的ip地址,对于同网段的最后一位IP不做比较。
解决:基于zynq ultrascale硬件平台 vivodo sdk 2018.1软件
更改ip4.c文件中struct netif * ip4_route(const ip4_addr_t *dest)函数
if (ip4_addr_netcmp(dest, netif_ip4_addr(netif), netif_ip4_netmask(netif))) {
if(ip4_addr_ipcmp(dest, netif_ip4_addr(netif))){
/* return netif on which to forward IP packet */
return netif;
}
}
}
其中, #define ip4_addr_ipcmp(addr1, addr2) ( (addr1)->addr == (((addr2)->addr)+0x01000000) )
该方法可以比较全位ip地址的相似性,为防止ip冲突,服务器与客户端最后一位IP地址设置为固定差值1
即:服务器ip:192.168.1.10 客户端ip:192.168.1.11