打印

问一个关于UIP ping 回应的问题

[复制链接]
3170|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
weicz|  楼主 | 2013-5-3 23:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
ui, ip, pi, ic, Echo
本帖最后由 weicz 于 2013-5-3 23:52 编辑

移植了uip在stm32上,ping的时候通过抓包发现uip能给出icmp request 响应的relpy,但是主机却一直超时,仔细看了一下发现icmp reply的checksum不对,请问是什么原因?
checksum计算的部分是uip源码里的没动过
抓包的截图如下:

uip中icmp reply的checksum计算如下:

  ICMPBUF->type = ICMP_ECHO_REPLY;

  if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) {
    ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1;
  } else {
    ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8);
  }
  谢谢。补充一下,我硬件用的是stm32f103c8+enc28j60





沙发
weicz|  楼主 | 2013-5-4 00:07 | 只看该作者
找到原因了,icmp request 的长度和icmp reply长度不一致,后来发现在网卡发送函数中,之前调试的时候设定了一个发送长度为64,本来应该是发送uip_len的,改过来就对了。
void etherdev_send(void)
{  
        u8_t *send_packet;
        u16_t send_len;
       
        send_packet = (u8_t *)uip_buf;

//这里错了,应该是send_len=uip_len
        send_len = 64;// uip_len;
        enc28j60PacketSend(send_len,send_packet);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

69

帖子

0

粉丝