net_ping.c

来自「TI的2812控制交通灯」· C语言 代码 · 共 37 行

C
37
字号

void SumCheck(u8 *Addr,u16 len);

void Revert_Ping(void)  //回复Ping数据包
{
   u16 i,Data_Len,Data_SUM,Len;
   //开始拼接Ping的回复数据包开始
   //PACK_Type=0x8000;
   HEAD_Ethernet();        //以太网头
   HEAD_IP();   //IP首部
   Len=Start_ICMP;
   //ICMP首部
   Data_Len=Receive_Buffer[14+2]*256+Receive_Buffer[14+2+1]-20;  //ICMP包的长度
   Send_Buffer[Len++]=0;  //回显应答(Ping应答)
   Send_Buffer[Len++]=0;
   Send_Buffer[Len++]=0;  //校验和
   Send_Buffer[Len++]=0;
   for (i=0;i<4;i++)
      Send_Buffer[Len++]=Receive_Buffer[Len];  //表示符和序号
   for (i=0;i<Data_Len-8;i++)
      Send_Buffer[Len++]=Receive_Buffer[Len];  //选项数据

   //计算校验和
   Data_SUM=CHECK_SUM(Send_Buffer,14+20,Data_Len); //ICMP首部校验和
   Send_Buffer[14+20+2]=Data_SUM/0x100;
   Send_Buffer[14+20+3]=Data_SUM&0xff;

	SumCheck(&Send_Buffer[14+20],Data_Len);
   //拼接数据包结束

   NET_Send_Packet(Send_Buffer,Len);  //发送数据包
}




⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?