📄 net_arp.c
字号:
void SaveAdd(void)
{
u8 i;
for (i=0;i<6;i++)
MAC_O_Addr[i]=Receive_Buffer[i+6]; //保存外部MAC地址
for (i=0;i<4;i++)
IP_O_Addr[i]=Receive_Buffer[i+26]; //保存外部IP地址
}
void IP_ARP(void) //ARP数据处理
{
u16 i,Len;
for (i=0;i<6;i++)
MAC_O_Addr[i]=Receive_Buffer[i+6]; //保存外部MAC地址
for (i=0;i<4;i++)
IP_O_Addr[i]=Receive_Buffer[i+22+6]; //保存外部IP地址
/*
printf("外部MAC地址 ");
for(i=0;i<6;i++)
printf("%2x ",MAC_O_Addr[i]);
printf("\n");
printf("外部ip地址 ");
for(i=0;i<4;i++)
printf("%d.",IP_O_Addr[i]);
printf("\n\n");
*/
//开始拼接ARP返回包
HEAD_Ethernet(); //以太网头
Len=Start_ARP;
Send_Buffer[Len++]=0x00; //硬件类型,0x0001 MAC地址
Send_Buffer[Len++]=0x01;
Send_Buffer[Len++]=0x08; //协议类型,0x0800 IP地址
Send_Buffer[Len++]=0x00;
Send_Buffer[Len++]=6; //硬件地址长度,6 MAC地址占用字节数
Send_Buffer[Len++]=4; //协议地址长度,4 IP地址占用字节数
Send_Buffer[Len++]=0; //OP(操作类型),2 ARP应答
Send_Buffer[Len++]=2;
for (i=0;i<6;i++)
Send_Buffer[Len++]=MAC_Addr[i]; //本地MAC地址
for (i=0;i<4;i++)
Send_Buffer[Len++]=IP_Addr[i]; //本地IP地址
for (i=0;i<6;i++)
Send_Buffer[Len++]=MAC_O_Addr[i]; //外部MAC地址
for (i=0;i<4;i++)
Send_Buffer[Len++]=IP_O_Addr[i]; //外部IP地址
while(Len<64)
Send_Buffer[Len++]=0x00; //小于64字节的部分用0填充
NET_Send_Packet(Send_Buffer,Len); //发送数据包
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -