uip:uip1.0 ping不通解决方案 2024-04-30 20:56:22 0 0 最近移植uip1.0到stm32上,能udp收发数据,但是ping不通。感觉到很奇怪。以前移植的0.9都能ping通。 于是通过抓包分析。发现icmp echo reply返回的校验值为incorrect。如下图: ping request ping reply: 较uip 1.0和uip 0.9移植比较。在uip-conf.h里多了一个 #define CHECKSUM_BY_HARDWARE //add by eric 当然是我自己罗。 也就是说由硬件来完成校验和计算。然后再看stm32数据参考手册第667页的 TCP/UDP/ICMP校验和章节。有下面一段文字 然后将 #define CHECKSUM_BY_HARDWARE 注释掉 编译下载。ping通了。 但既然有硬件校验检测,为什么不采用呢,于是将这一行重新打开。并在uip核心代码上uip_process 函数里icmp报文计算校验和时作出如下修改 ICMPBUF->type = ICMP_ECHO_REPLY; #ifdef CHECKSUM_BY_HARDWARE // ICMPBUF->icmpchksum = 0; //add by eric/ #else if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) { ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1; } else { ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8); } #endif /* Swap IP addresses. */ 编译下载。 ping通了。。。。。。。。。。。。。。。。。。。。ho~ho~ 收藏(0)