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

📄 udp.h

📁 RTL8019以太网开发板资料
💻 H
📖 第 1 页 / 共 3 页
字号:
#define ARP_OLD_NUM  3                         /* 老化后,ARP 3次不成功就要复位ARP */

        /* 接收的以太网帧结构 */
typedef struct 
{     
    UWORK8   ucaDestNodID[NOD_ID_LENGTH];      /* 目的网卡地址 */
    UWORK8   ucaSourceNodID[NOD_ID_LENGTH];    /* 原网卡地址 */
    UWORK16 usprotocol;                        /* 下一层协议 */
    UWORK8   ucaPacket[PACKET_LENGTH];         /* 接收以太网包的内容 */
}ST_RECEIVE_ETHERNET;

        /* ARP分组格式 */
typedef struct
{
    UWORK16 usHTYPE;               /* 硬件类型 */
    UWORK16 usPTYPE;               /* 协议类型 */
    UWORK8   ucHLEN;               /* 硬件长度 */
    UWORK8   ucPLEN;               /* 协议长度 */
    UWORK16 usOPER;                /* 操作 */
    UWORK8   ucaSHA[MAC_LEN];      /* 源硬件地址 */
    UWORK8   ucaSPA[IP_LEN];       /* 源协议地址 */
    UWORK8   ucaTHA[MAC_LEN];      /* 目标硬件地址 */
    UWORK8   ucaTPA[IP_LEN];       /* 目标协议地址 */
}ST_ARP_FORMAT;

         /* ARP高速缓存 */
typedef struct
{
    UWORK8 ucIPValible;            /* IP有效 */
    UWORK8 ucIpOrRouter;           /* 是否本地网段 */
    UWORK8 ucStatus;               /* 状态 */
    UWORK8 ucaIP[IP_LEN];          /* IP地址 */
    UWORK8 ucaArpIp[IP_LEN];       /* ARP指向的IP */
    UWORK8 ucaMAC[MAC_LEN];        /* MAC地址 */
    UWORK16 usRemotePort;          /* 远程端口号 */
}ST_ARP_CACHE;

        /* ARP请求的各个阶段 */
enum
{
    ARP_FIRST_REQUEST,             /* ARP第一次请求 */
    ARP_SECOND_REQUEST,          	 /* ARP再次请求 */
    ARP_OLD                 		   /* ARP老化 */
};

#define HTYPE  0x01                /* 以太网类型 */
#define PTYPE  0x0800              /* IPV4类型 */
#define HLEN   0x06                /* 以太网硬件类型 */
#define PLEN   0x04                /* IPV4长度 */
#define OPER_REQUEST 0x01          /* ARP请求 */
#define OPER_APLY    0x02          /* ARP应答 */


/*************************************************************************************/
/* IP格式 */
typedef struct
{
    UWORK8   ucVerAndLen;              /* 版本号和长度,各占4位 */
    UWORK8   ucDs;                     /* 区分服务 */
    UWORK16 usTotalLen;                /* 总长度 */
    UWORK16 usID;                      /* 标识 */
    UWORK16 usSegOffset;               /* 分片偏移 */
    UWORK8   ucTTL;                    /* 生存时间 */
    UWORK8   ucprotocol;               /* 协议 */
    UWORK16 usCheckSum;                /* 校验和 */
    UWORK8   ucSourceIP[IP_LEN];       /* 源IP地址 */
    UWORK8   ucDestIP[IP_LEN];         /* 目的IP地址 */
}ST_IP_HEAD_FORMAT;

/*************************************************************************************/
        /* ICMP报文头结构 */
typedef struct
{
    UWORK8   ucType;
    UWORK8   ucCode;
    UWORK16 usCheckSum;
    UWORK16 usID;
    UWORK16 usSeqNum;
}ST_ICMP_HEAD_FORMAT;

        /* ARP分组格式 */
typedef struct
{
    UWORK16 usSPORT;               /* 源端口号*/
    UWORK16 usMPORT;               /* 目标端口号 */
    UWORK32   ucSERIESNUM;          /*序号 */
    UWORK32   ucTRUECODE;          /*确认号 */
	UWORK16   ucMOVENUM;			//偏移量
	UWORK16   ucWINDOWBIG;			//窗口大小
	UWORK16   ucTCPCHECK;			//校验位
	UWORK16   ucMUSGPOINT;			//紧急指针
}ST_TCP_FORMAT;


#define ICMP_ECHO               8           /* 回送请求 */
#define ICMP_ECHO_REPLY         0           /* 回送回答 */
#define ICMP_ROUTER_RE          10          /* 路由询问 */
#define ICMP_ROUTER_REPLY       9           /* 路由通告 */
#define ICMP_ROUTER_CHANGE      5           /* 路由改变 */
#define ICMP_PORT_UNREACHABLE   3           /* 目的端口不可达 */
#define ICMP_SOURCE_QUENCH      4           /* 源端抑制 */

/* 目的端口不可达类型 */
#define NET_UNREACHABLE         0
#define HOST_UNREACHABLE        1
#define PROTOCAL_UNREACHABLE    2
#define PORT_UNREACHABLE        3
#define NET_UNKNOW              6
#define HOST_UNKNOW             7
#define NET_UNPEMETED           9
#define HOST_UNPEMETED          10
#define HOST_UNREACHABLE13      13
#define HOST_UNREACHABLE14      14
#define HOST_UNREACHABLE15      15

#define SOUECE_RESTRAIN_DELAY   3           /* 收到源端抑制后需要延时发送周期数 */
/*************************************************************************************/
#define CONFIG_PORT     65534          /* 广播配置端口 */
#define UDP_DATA_START  28             /* 28 = 20(IP头) + 8(UDP头) */
        /* UDP报文头结构 */
typedef struct
{
    UWORK16 usSourcePort;
    UWORK16 usDesPort;
    UWORK16 usTotalLen;
    UWORK16 usCheckSum;
}ST_UDP_HEAD_FORMAT;

typedef struct
{
    UWORK32 ulUDPSendDataNum;          /* UDP发送的数据个数 */
    UWORK32 ulUDPReceiveDataNum;       /* UDP接收的数据个数 */
    UWORK32 ulUDPPortError;            /* UDP报文中端口号错误次数 */
    UWORK32 ulUDPCheckSumError;        /* UDP报文中校验和错误次数 */    
}ST_UDP_STATISTICS;
/*************************************************************************************/
#define COMMAND_START_ADDR      60      /* 配置报文命令位置 */
#define SAVE_OK                 61      /* 保存成功 */

#define EQUNAME_LEN             61      /* 1个字节,名字长度 */
#define EUQ_NAME                62      /* 15个字节作为名字空间 */

#define IP_MODE                 77      /* 1个字节,IP模式 */
#define MAC_ADDR                78      /* 6个字节,MAC地址 */
#define IP_ADDR                 84      /* 4个字节,本地IP地址 */
#define NET_MASK                88      /* 4个字节,子网掩码 */
#define GATE_WAY                92      /* 4个字节,网关 */
#define REMOTE_IPADDR1          96      /* 4个字节,远程IP1 */
#define LOCAL_PORT              100     /* 2个字节,本地端口号 */
#define REMOTE_PORT1            102     /* 2个字节,远程端口号1 */
          /* 保留64个字节 */
#define BAUND_RATE              168     /* 1个字节,波特率 */
          /* 保留32个字节 */
#define RUN_DAYS                201     /* 2个字节,运行天数 */
#define RUN_HOURS               203     /* 1个字节,小时数 */
#define RUN_MINUTES             204     /* 1个字节,分钟数 */
#define RUN_SECONDS             205     /* 1个字节,秒数 */
#define UDP_RCV_BYTES           206     /* 4个字节,UDP接收字节数 */
#define UDP_SEND_BYTES          210     /* 4个字节,UDP发送字节数 */
#define UART_RCV_BYTES          214     /* 4个字节,串口接收字节数 */
#define UART_SEND_BYTES         218     /* 4个字节,串口发送字节数 */
#define UART_RCV_SOFT_OVERFLOW  222     /* 4个字节,串口接收软件溢出 */
#define UART_SEND_SOFT_OVERFLOW 226     /* 4个字节,串口发送软件溢出 */
#define HARD_SOFT_EIDTION       230     /* 7个字节版本号,ASCII码 */

          /* 保留100个字节 */
#define END_PARA                300                 /*  */ 

          /* 收到配置软件的参数配置请求命令 */
#define BROADCAST_SEARCH        0x00                /* 广播搜索 */
#define CONFIG_REQUEST          0x02                /* 请求配置 */
#define SAVE_NET_CONFIG         0x04                /* 保存网口配置 */
#define REFLESH_STATISTIC       0x06                /* 刷新统计信息 */
#define CLEAR_STATISTIC         0x08                /* 清零统计信息请求 */
#define RESET_SYSTEM            0x0a                /* 复位系统 */

          /* 发给配置软件的命令 */
#define REPLY_BROADCAST         0x01                /* 广播搜索回应 */
#define REPLY_CONFIG            0x03                /* 配置请求回应 */
#define REPLY_SAVE_NETCONFIG    0x05                /* 保存网口配置回应 */
#define REPLY_FLESH             0x07                /* 刷新应答 */
#define REPLY_CLEAR_STATISTIC   0x09                /* 清零统计信息应答 */


extern bit EthernetBuf0DataFlag;                                    // 以太网卡缓冲0已有数据 */             
extern bit EthernetLinkFlag;                                    /* 以太网是否LINK上 */
extern bit EthernetNoDataFlag;                                  /* 以太网芯片中没有数据 */

extern UWORK16 RTL8019asRcvNum;                        /* 在缓存中以太网包的个数,16K存满64页,每页256字节 */
extern xdata ST_RECEIVE_ETHERNET gstaRevEthernet;             /* 接收以太网包 */
extern xdata ST_ETHERNET_STATISTICS gstEthernetStatistics;    /* 以太网卡收发统计 */
extern xdata UWORK8 gucaTmacSmacType[ETHER_HEAD_LEN];         /* 以太网头(目的MAC,源MAC,协议) */
extern xdata UWORK8 gucaNetSendBuff[NET_SEND_BUFF];           /* 以太网发送缓冲 */
extern xdata UWORK8 gucaSegTemp[SEGMENT_DATA];                /* 分片数据 */

/*************************************************************************************/
extern bit  ARPFinishFlag;                                    /* ARP完成标志*/
extern bit  IPConflitTestFlag;                                  /* IP冲突测试 */
extern bit  IPOrMacConfiltFlag;                             /* IP,MAC冲突标志 */
extern bit  StartConfiltLedFlag;                                /* 冲突时启动快闪 */
/************************************************************************/
extern xdata ST_ARP_FORMAT ArpRequestFormat;                     /* ARP帧请求格式 */
extern xdata ST_ARP_FORMAT ArpAnswerFormat;                         /* ARP应答格式 */
extern xdata ST_ARP_CACHE  ArpCache_Buf[REMOTE_IP_NUM];       /* ARP高速缓存 */
extern UWORK8 IpModeNum;                                  /* 在不同模式下IP数据不一样 */
extern UWORK8 ArpCachePoniter;                        /* ARP高速缓存指针 */
extern xdata UWORK8 gucARPOddNum;                             /* 老化后,ARP完不成的次数 */
extern xdata UWORK8 ArpPhases;                              /* ARP阶段 */    
/************************************************************************/
extern xdata ST_IP_HEAD_FORMAT gstIphead;
extern xdata UWORK16 LocalIpID;                                 /* 本地IP的ID号 */
extern xdata UWORK16 RevIpID;                              /* 接收的ID号 */

extern xdata UWORK8 IPAddress_buf[IP_LEN];                    /* IP地址 */
extern xdata UWORK8 SubNetMask_buf[IP_LEN];                   /* 子网掩码 */
extern xdata UWORK8 GateWay_buf[IP_LEN];                      /* 网关 */

extern bit  gbMoreSegFlag;                                    /* 还有更多的分片标志 */
extern bit  gbHaveFragment;                                   /* 有分片标志 */
/***********************************************************************/
extern xdata UWORK8 SetupIP_RcvSignal[32];              /* 接收前导和标志信号 */
extern xdata UWORK8 SetupIP_SendSignal[32];             /* 发送前导和标志信号 */
extern xdata ST_UDP_STATISTICS gstUDPStatistics;              /* UDP统计 */

extern void ArpProcess(void);
extern void ArpRequest(UWORK8 *pucaIP);
extern UWORK16 CheckSum(UWORK16 *pusPointer,UWORK16 usDataLen);
extern void ConfigParameter(void);
extern void IcmpReceive(UWORK16 usTotalLen);
extern UWORK8 If8019SendReady(void);
extern void InitPara(void);
extern void IpOrRouter(void);
extern void IpReceive(void);
extern void IpSend(void);
extern void RcvEthernetData(void);
extern UWORK8 RevEthernetPacket(void);
extern UWORK8 RTL8019asCheck(void);
extern UWORK8 RTL8019asInit(void);
extern UWORK8 RTL8019asReset(void);
extern void SendDiagnoseData(void);
extern UWORK8 SendEthernetPacket(UWORK16 usEthDataSendLen);
extern void ShowStatistic(void);
extern void StopArpCounter(void);
extern void UDPConfigSend(UWORK16 usUdpDataLen);
extern void UdpReceive(void);
extern void UdpSend(UWORK8 *pucAddr,UWORK16 usLen);


#endif
/*************************************************************************************/

⌨️ 快捷键说明

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