📄 eth.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 + -