📄 ip.h
字号:
#ifndef __INCIPH
#define __INCIPH
typedef union
{
U32 l;
U16 i[2];
U8 b[4];
} UNION32;
typedef union
{
U16 i;
U8 b[2];
} UNION16;
#define LITTLE_ENDIAN
#define ENDIAN16(v) (v/0x100+(v%0x100)*0x100)
#define ENDIAN32(v) ((v>>24)+(v<<24)+((v>>8)&0xff00)+((v&0xff00)<<8))
#ifdef LITTLE_ENDIAN
#define P_IP 0x0008
#define P_ARP 0x0608
#define P_RARP 0x3508
#endif
// 定义存储IP和对应地址的数据
struct nicipAddr
{
UNION32 Ip;
U8 Mac[6];
U16 Port;
};
// 定义ARP,RARP数据结构
typedef struct
{
U16 HardType; // 硬件类型
U16 ProtocolType; // 协议类型
U8 HardLen; // 硬件地址长度
U8 ProtocolLen; // 协议地址长度
U16 Op; // 操作码
U8 SrcHardAddr[6]; // 发送站硬件地址
U8 SrcProtocolAddr[4]; // 发送站协议地址
U8 DestHardAddr[6]; // 接收站硬件地址
U8 DestProtocolAddr[4]; // 接收站协议地址
} STR_ARP;
// 定义IP包头数据结构(20字节)
typedef struct
{
U8 VerLen; // 高4位是版本号,低4位是包头长度
U8 ServerType; // 服务类型,未使用,直接填充0
U16 Len; // 总长度
U16 Id; // 标识
U16 Flag; // 标志,分片偏移
U8 Life; // 生存时间,每经过一个路由-1
U8 Protocol; // 协议 17:UDP
U16 CheckSum; // 校验和
U32 SrcIp; // 源IP
U32 DestIp; // 目标IP
U8 Buffer[1536];
} STR_IP;
// 定义UDP数据结构的伪首部(
typedef struct
{
U32 SrcIp; // 源IP地址
U32 DestIp; // 目标IP地址
U8 Res; // 0x00
U8 Protocol; // 协议 0x11
U16 Len; // 总长度
} STR_UDPHEAD;
// 定义UDP数据结构(8字节)
typedef struct
{
U16 SrcPort; // 源端口
U16 DestPort; // 目的端口
U16 Len; // UDP总长度
U16 CheckSum; // 校验和
U8 Buffer[1536];
} STR_UDP;
// 定义ICMP数据结构
typedef struct
{
U8 Type; // 类型
U8 Code; // 代码
U16 CheckSum; // 校验和
U16 Identifier; //
U16 Sequence; // 序号
U8 Buffer[1536]; // 数据
}STR_ICMP;
// 定义RTL8019AS的以太网包头
typedef struct
{
U8 DestMac[6];
U8 SrcMac[6];
U16 Type;
char buffer[1024];
} STR_ETHHEAD;
extern void ReceivedIP(void *buffer,U16 ProtocolType);
extern void LookupMac(U8 addr);
extern int IpSend(U8 *ipbuffer,U8 Protocol,U16 length);
extern int UdpSend(STR_UDP *udp,U16 length);
#define IP_ADDR(b0,b1,b2,b3) ((b0<<0) | (b1<<8) | (b2<<16) | (b3<<24))
extern unsigned int localIP;
#define SetLocalIp() myIP.Ip.l = localIP
void reset_chip(void);
void set_mac_address(void *addr);
void get_mac_address(void *addr);
void InitIP(void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -