完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
引子:[C] 纯文本查看 复制代码
/** * Send an icmp packet in response to an incoming packet. * * @param p the input packet for which the 'unreachable' should be sent, * p->payload pointing to the IP header * @param type Type of the ICMP header * @param code Code of the ICMP header */static voidicmp_send_response(struct pbuf *p, u8_t type, u8_t code) {} 上面的参数p->payload 指向 IP header 问题:我原先以为一个pbuf的payload一定是指向某个以太网帧的头部(如果一个pbuf装不完,肯定是从中间某个地方截断的),就像下面这张图 可是这里却是指向IP头部,那么就需要再申请一个pbuf,用它的payload去装载以太网帧头部(也就是14个字节),然后将这个pbuf与刚才装载IP头部的pbuf通过链表连接起来. 请问,为什么不将它们封装在一个pbuf里面,也不见得就装不下啊,这里有哪些考量,还是我理解错了???恳请指教~~~ |
|
相关推荐
3个回答
|
|
自己先顶起来
|
|
|
|
payload在从网卡接收到数据时是指向以太网帧头部的,只是你没看懂lwip里面的流程。协议栈这东西是一层一层的,2层处理完了,会对payload进行偏移,到了icmp_send_response,自然就是ip头了。icmp_send_response 其实只是处理unreachable的包,正常的包在icmp_input里面已经处理了。不可达的包需要将原来的IP包头和ICMP包头当成数据发送回去。所以需要重新分配一个pbuf,并拷贝原先的头,然后进行处理。
|
|
|
|
pbuf_header这个函数你好好看看。这个就是对payload进行便宜的。在icmp_input里一开始就偏移到icmp_echo_hdr处。不可达又移回去。
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2543 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2331 浏览 5 评论
3156 浏览 3 评论
2801 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2759 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
607浏览 1评论
852浏览 0评论
965浏览 0评论
618浏览 0评论
445浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 06:16 , Processed in 1.018738 second(s), Total 83, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号