📄 arp.c
字号:
/********************************************************************
* File: ARP.c
*
* Copyright: Peak Microtech Corporation
*
*******************************************************************/
#define ARP_GLOBALS
#include "net_cfg.h"
void Arp_Request(U32 ip_address)
{
U8 i;
TxdNetBuff.EtherFrame.NextProtocal = 0x0608; // ARP protocol ID
for (i = 0; i < 3; i++)
{
TxdNetBuff.EtherFrame.DestMacId[i] = 0xffff;
TxdNetBuff.ArpFrame.SourceMacId[i] = TxdNetBuff.EtherFrame.SourceMacId[i];
TxdNetBuff.ArpFrame.DestMacId[i] = 0x0000;
}
for (i = 0; i < 2; i++)
{
// fill source IP address
TxdNetBuff.ArpFrame.SourceIp[i] = My_Ip_Address.words[i];
}
TxdNetBuff.ArpFrame.DestId[0] = ip_address &0xffff;
TxdNetBuff.ArpFrame.DestId[1] = ip_address >> 16;
TxdNetBuff.ArpFrame.HardwareType = 0x0100;
TxdNetBuff.ArpFrame.ProtocalType = 0x0008;
TxdNetBuff.ArpFrame.HardwareLen = 0x06;
TxdNetBuff.ArpFrame.ProtocalLen = 0x04;
TxdNetBuff.ArpFrame.Operation = 0x0100;
for (i = 46; i < (46+18); i++)
{
TxdNetBuff.bytes.bytebuf[i] = 0x00;
}
Send_Packet(&TxdNetBuff, 60);
}
void Arp_Answer()
{
U8 i;
if ((RxdNetBuff.ArpFrame.DestId[0] == My_Ip_Address.words[0]) &&
(RxdNetBuff.ArpFrame.DestId[1] == My_Ip_Address.words[1]))
{
for (i = 16; i < 64; i++)
{
TxdNetBuff.bytes.bytebuf[i] = RxdNetBuff.bytes.bytebuf[i];
}
for (i = 0; i < 3; i++)
{
TxdNetBuff.EtherFrame.DestMacId[i] = RxdNetBuff.EtherFrame.SourceMacId[i];
TxdNetBuff.ArpFrame.SourceMacId[i] = My_MAC.words[i];
TxdNetBuff.ArpFrame.DestMacId[i] = RxdNetBuff.ArpFrame.SourceMacId[i];
}
for (i = 0; i < 2; i++)
{
TxdNetBuff.ArpFrame.DestId[i] = RxdNetBuff.ArpFrame.SourceIp[i];
TxdNetBuff.ArpFrame.SourceIp[i] = RxdNetBuff.ArpFrame.DestId[i];
}
TxdNetBuff.ArpFrame.Operation = 0x0200; // 0x0200: arp answer
Send_Packet(&TxdNetBuff, 60);
}
}
void Gateway_Arp_Request()
{
if (Sec < 3)
if (Gateway_Ip_Address.bytes[0] != 0)
if (Gateway_IP_TTL < 5)
{
Arp_Request(Gateway_Ip_Address.dwords);
}
}
extern uchar ComRxdBuf[];
extern uchar ComTxdBuf[];
extern union Netcard RxdNetBuff;
extern union Netcard TxdNetBuff;
void Arp_Process()
{
uchar i;
//======================================================================
if (RxdNetBuff.ArpFrame.SourceIp[0] == Gateway_Ip_Address.words[0])
if (RxdNetBuff.ArpFrame.SourceIp[1] == Gateway_Ip_Address.words[1])
{
// arp request
for (i = 0; i < 3; i++)
{
Gateway_MAC.words[i] = RxdNetBuff.ArpFrame.SourceMacId[i];
} Gateway_IP_TTL = 10;
}
//=======================================================================
if (RxdNetBuff.ArpFrame.SourceIp[0] == Ping_Ip_Address.words[0])
if (RxdNetBuff.ArpFrame.SourceIp[1] == Ping_Ip_Address.words[1])
{
// ping answer
for (i = 0; i < 3; i++)
{
Ping_MAC.words[i] = RxdNetBuff.ArpFrame.SourceMacId[i];
}
Ping_IP_TTL = 10;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -