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

📄 arp.c

📁 AVR以太网开发板中的几个例子。文件中定义了网卡芯片的IP地址,默认值是192.168.0.99。
💻 C
字号:
#include "main.h"
#include "rtl8019as.h"
#include "arp.h"
#include "ip.h"
#include "icmp.h"
#include "udp.h"

void arp_response(unsigned char *arpbegin)
{
 unsigned char mac_sou0=0;
 unsigned char mac_sou1=0;
 unsigned char mac_sou2=0;
 unsigned char mac_sou3=0;
 unsigned char mac_sou4=0;
 unsigned char mac_sou5=0;
 unsigned char ip_sou0=0;
 unsigned char ip_sou1=0;
 unsigned char ip_sou2=0;
 unsigned char ip_sou3=0;
 
 
 if((*arpbegin==0) && (*(arpbegin+1))==1 &&         //只处理以太网数据包
    (*(arpbegin+2)==0x08) && (*(arpbegin+3))==0x00) //只处理IPv4数据包
 {
    if((*(arpbegin+24)!=myip_3) || //匹配本地IP,不匹配者忽略
      (*(arpbegin+25)!=myip_2) ||
	  (*(arpbegin+26)!=myip_1) ||
	  (*(arpbegin+27)!=myip_0)
	 )
	 {
	  return;
	 }
  switch(*(arpbegin+7))
  {
   case 0x01:   //处理ARP请求
        mac_sou5=*(arpbegin+8);
		mac_sou4=*(arpbegin+9);
		mac_sou3=*(arpbegin+10);
		mac_sou2=*(arpbegin+11);
		mac_sou1=*(arpbegin+12);
		mac_sou0=*(arpbegin+13);
		ip_sou3=*(arpbegin+14);
		ip_sou2=*(arpbegin+15);
        ip_sou1=*(arpbegin+16);
		ip_sou0=*(arpbegin+17);
		buildpack(mac_sou5,mac_sou4,mac_sou3,mac_sou2,mac_sou1,mac_sou0,
			      mynodeid_0,mynodeid_1,mynodeid_2,mynodeid_3,mynodeid_4,mynodeid_5,
				  0x0806);		
		*(arpbegin-4)=0x00;		  
	    *(arpbegin-3)=0x01;
		*(arpbegin-2)=0x08;
		*(arpbegin-1)=0x00;
		*(arpbegin)=0x06;
		*(arpbegin+1)=0x04;
		*(arpbegin+2)=0x00;
		
		*(arpbegin+3)=0x02;
		
		*(arpbegin+4)=mynodeid_0;
		*(arpbegin+5)=mynodeid_1;
		*(arpbegin+6)=mynodeid_2;
		*(arpbegin+7)=mynodeid_3;
		*(arpbegin+8)=mynodeid_4;
		*(arpbegin+9)=mynodeid_5;
		
		*(arpbegin+10)=myip_3;
		*(arpbegin+11)=myip_2;
		*(arpbegin+12)=myip_1;
		*(arpbegin+13)=myip_0;
		
		*(arpbegin+14)=mac_sou5;
		*(arpbegin+15)=mac_sou4;
		*(arpbegin+16)=mac_sou3;
		*(arpbegin+17)=mac_sou2;
		*(arpbegin+18)=mac_sou1;
		*(arpbegin+19)=mac_sou0;
		
		*(arpbegin+20)=ip_sou3;
		*(arpbegin+21)=ip_sou2;
		*(arpbegin+22)=ip_sou1;
		*(arpbegin+23)=ip_sou0;
		rtl8019_sendpack(60,0);
        break;
		
   case 0x02:   //处理ARP应答
        break;
		
   case 0x03:   //处理RARP请求
        break;
		
   case 0x04:   //处理RARP应答
        break;
		
   default:break;
  }                     
 }
 return;
}

⌨️ 快捷键说明

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