⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arp.c

📁 ADC图形图像例子
💻 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 + -