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

📄 ip.h

📁 uccos2的的源码文件
💻 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 + -