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

📄 eth.h

📁 ARM2410+DM9000的驱动与寄存器配置代码
💻 H
字号:
#ifndef __ETH_H__
#define __ETH_H__

#include "type.h"

__packed struct eth_addr {
  u8_t addr[6];
};
//SA:源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡地址,同样是6个字节.
/*DA:目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧传输给哪个网卡.
如果为FFFFFFFFFFFF,则是广播地址,广播地址的数据可以被任何网卡接收到.*/
/**
 * ethernet header 以太网帧格式
 */
__packed struct eth_hdr {
  struct eth_addr dest;//6 bytes  目的地址
  struct eth_addr src; //6 bytes  源地址
  //#define ETHTYPE_IP  0x0800
  //#define ETHTYPE_ARP 0x0806
  u16_t type;          //2 bytes  类型 指定接收数据的高层协议
  //data               //46 - 1500bytes  数据字段的内容
};
/*TYPE:类型字段,表明该帧的数据是什么类型的数据,不同的协议的类型字段不同。
如:0800H 表示数据为IP包,0806H 表示数据为ARP包,814CH是SNMP包,8137H为IPX/SPX包,
(小于0600H的值是用于IEEE802的,表示数据包的长度。)*/ 
#define ETHTYPE_ARP 0x0806
#define ETHTYPE_IP  0x0800
#define ETHTYPE_IP6 0x86dd

#define IPADDR(a, b, c, d) (HTONL((u32_t)((a)<<24) | (u32_t)((b)<<16) | (u32_t)((c)<<8) | (u32_t)(d)))
#define IPADDR1(ip) ( (HTONL(ip) >> 24) & 0xff)
#define IPADDR2(ip) ( (HTONL(ip) >> 16) & 0xff)
#define IPADDR3(ip) ( (HTONL(ip) >> 8) & 0xff)
#define IPADDR4(ip) ( HTONL(ip) & 0xff)

u16_t eth_send(u8_t *buf, u16_t len);
u16_t eth_input(u8_t *buf, u16_t len);

u32_t getipaddr(void);
struct eth_addr getethaddr(void);

#endif //__ETH_H__

⌨️ 快捷键说明

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