让LwIP拥有PING其他设备的能力
LwIP是個很不錯的協議棧,但是由于其體積過于小巧,使其只能支持ICMP的ECHO類型。
因為在“icmp.c”中的“void?icmp_input(struct pbuf *p, struct netif *inp)”函數里有個很長的switch case語句(大約80行的位置)。
而這個語句只case了兩個條件“ICMP_ECHO”和“default”,也就是說LwIP協議棧只能識別類型為“ICMP_ECHO”的icmp報文。
?
所以需要手動添加一個“case ICMP_ER”(ICMP Echo Reply)的判斷條件,先讓設備能夠接受處理icmp的回復消息。
測試階段,暫時只是用了一個OSSemPost發出一個信號,如圖:
?
下面開始創建icmp發送功能,建議提前了解一下TCP/IP的基礎知識包括icmp和ping,還有些LwIP的知識。
首先申請創建一個ICMP協議控制塊,使用“raw_new”函數,并配置本機和目標IP地址,如圖:
?
準備組裝icmp的報文,包括類型,標識符,序列號校驗和等等信息,如圖:
?
數據按照協議標準設置完成后,便可以發送出去了,使用“raw_sendto”函數,如圖:
?
在ucos中創建一個間隔n秒ping一次目標主機的任務,如圖,每間隔2秒鐘ping一次目標主機,接收到reply后打印“success”,否則打印“failed”,累積失敗4此判定為徹底失去連接。
總結
以上是生活随笔為你收集整理的让LwIP拥有PING其他设备的能力的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java个人通讯录
- 下一篇: 两条曲线所围成的面积_三个视频搞定:求曲