码迷,mamicode.com
首页 > 其他好文 > 详细

uip1.0 ping不通解决方案

时间:2014-05-21 14:45:33      阅读:658      评论:0      收藏:0      [点我收藏+]

标签:blog   c   ext   http   a   2014   

最近移植uip1.0到stm32上,能udp收发数据,但是ping不通。感觉到很奇怪。以前移植的0.9都能ping通。

于是通过抓包分析。发现icmp echo reply返回的校验值为incorrect。如下图:

ping request  

bubuko.com,布布扣




ping reply:

bubuko.com,布布扣



较uip 1.0和uip 0.9移植比较。在uip-conf.h里多了一个

#define CHECKSUM_BY_HARDWARE   //add by eric   当然是我自己罗。

也就是说由硬件来完成校验和计算。然后再看stm32数据参考手册第667页的 TCP/UDP/ICMP校验和章节。有下面一段文字bubuko.com,布布扣

然后将

#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~

uip1.0 ping不通解决方案,布布扣,bubuko.com

uip1.0 ping不通解决方案

标签:blog   c   ext   http   a   2014   

原文地址:http://blog.csdn.net/brotherwyz/article/details/26333223

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!