📄 ne2000.h
字号:
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
union u { unsigned int word;
struct{unsigned char high;unsigned char low;}bytes;//字节顺序为高位在前的2byte结构
};
union w { ulong dwords;
struct {uint high ;uint low;}words;
struct {uchar byte3;uchar byte2;uchar byte1;uchar byte0;}bytes;
};
union Ethernet_Address_Type{
uint words[3];
uchar bytes[6];
};
union Ip_Address_Type{
ulong dwords;
uint words[2];
uchar bytes[4];
};
/******************以太网帧**********************/
struct ethernet { uchar RecStatus; /*接收状态*/
uchar NextPage; /*下一个页*/
uint length; /*以太网长度,以字节为单位,*/
uint DestMacId[3]; /*目的网卡地址*/
uint SourceMacId[3]; /*源网卡地址*/
uint NextProtocal; /*下一层协议*/
uchar packet[1518]; /*包的内容*/
} ;
struct retransmit {uchar RtStatus; /*重发缓冲区状态*/
uchar timeout; /*超时时间值,单位为10毫秒,最大2.55秒*/
uint length; /*以太网长度,以字节为单位,*/
uint DestMacId[3]; /*目的网卡地址*/
uint SourceMacId[3]; /*源网卡地址*/
uint NextProtocal; /*下一层协议 */
uchar packet[1518]; /*包的内容*/
} ;
/*******************IP包,仅当IHL=5时用,当不=5时作转换*********/
struct ip { uint EtherHead[9]; /*以太网包头*/
uchar VerandIphLen; /*版本与头长度*/
uchar ServerType; /*服务类型*/
uint TotalLen; /*总长度*/
uint FrameIndex; /*IP帧序号*/
uint Segment; /*分段标志*/
uchar ttl; /*生存时间*/
uchar NextProtocal; /*下一层协议*/
uint Crc; /*校验和*/
uint SourceIp[2]; /*源IP*/
uint DestId[2]; /*目的IP*/
uchar packet[1498]; /*IP包的内容*/
};
struct IpPacket { uint EtherHead[9]; /*以太网包头*/
uint IpPacket[720]; /*IP包的内容*/
};
struct arp { uint EtherHead[9]; /*以太网头*//* arp报文的内容总长28字节*/
uint HardwareType; /*以太网为0x0001*/
uint ProtocalType; /*ip 为0X0800*/
uchar HardwareLen; /*=0X06*/
uchar ProtocalLen; /*=0X04*/
uint Operation; /*操作 0X0001为请求 0X0002为应答 */
/*0X0003为反向地址请求 0X0004为反向地址应答*/
uint SourceMacId[3]; /*源网卡地址*/
uint SourceIp[2]; /*源IP地址*/
uint DestMacId[3]; /*目的网卡地址*/
uint DestId[2]; /*目的IP地址*/
};
struct icmp {/*包含在IP包中,是IP的上层为0X01的应用*/
uint EtherHead[9]; /*以太网头*/
uint IpHead[10]; /*IP头*/
uchar type; /*0X08 PING请求 0X00 PING应答*/
uchar option; /*0X00 PING*/
uint Crc;
uint id;
uint seq;
uchar icmpdata[1478];
};
struct tcp { uint EtherHead[9];
uint IpHead[10];
uint SourcePort; /*源端口*/
uint DestPort; /*目的端口*/
ulong SeqNum; /*顺序号*/
ulong AckNum; /*确认号*/
uchar offset; /*数据偏移量*/
uchar control; /*连接控制*/
uint window; /*流控*/
uint Crc; /*校验和 ,包括伪头部,TCP头部,数据*/
uint urg; /*紧急指针*/
uchar tcpdata[1478]; /*TCP数据*/
};
struct udp { uint EtherHead[9];
uint IpHead[10];
uint SourcePort; /*源端口*/
uint DestPort; /*目的端口*/
uint length;
uint Crc; /*校验和,包括伪头部,udp头部,数据*/
uchar udpdata[1478]; /*udp数据*/
};
/*所有协议的共用体*/
union Netcard {struct {uchar bytebuf[1536];}bytes;
struct {uint wordbuf[768];}words;
struct ethernet EtherFrame;
struct retransmit ResendFrame;
struct arp ArpFrame;
struct icmp IcmpFrame;
struct tcp TcpFrame;
struct ip IpFrame;
struct udp UdpFrame;
struct IpPacket IpPacket;
};
struct Socket_Type{
uint My_Port; //本机端口
uint Dest_Port; //对方端口
uint Dest_Ip[2]; //对方ip
uint Dest_Mac_Id[3]; //对方的以太网地址
ulong IRS; //初始化顺序号
ulong ISS; //我的初始化序列号
ulong Rcv_Next; //对方的顺序号
ulong Send_Next; //我的已经发送顺序号
ulong Sent_UnAck; //我的还没有确认顺序号
//unsigned long dest_ack_number;
uint Rcv_Window; //对方的window大小
uint Snd_Window; //我的window大小
uint Dest_Max_Seg_Size; //对方接受的最大的数据包大小MTU
uint My_Max_Seg_Size; //我能接受的最大的数据包大小
ulong My_Wl1; //seq
ulong My_Wl2; //ack
uchar State; //连接状态
uchar Open;
};
/*tcp state define */
#define TCP_STATE_LISTEN 0
#define TCP_STATE_SYN_RCVD 1
#define TCP_STATE_SYN_SENT 2
#define TCP_STATE_ESTABLISHED 3
#define TCP_STATE_FIN_WAIT1 4
#define TCP_STATE_FIN_WAIT2 5
#define TCP_STATE_CLOSING 6
#define TCP_STATE_CLOSE_WAIT 7
#define TCP_STATE_LAST_ACK 8
#define TCP_STATE_CLOSED 9
#define TCP_STATE_TIME_WAIT 10
//tcp连接的标志位
#define TCP_FIN 0x01
#define TCP_SYN 0x02
#define TCP_RST 0x04
#define TCP_PSH 0x08
#define TCP_ACK 0x10
#define TCP_URG 0x20
/*** RTL8019's address deifne ***/
#define dp668
#ifdef dp668 //reg00- 10为isa网卡接口的寄存器地址300-31f
#define RED_ADDR0 RTL8019AS_BASE_ADDRESS+0x00
#define RED_ADDR1 RTL8019AS_BASE_ADDRESS+0x01
#define RED_ADDR2 RTL8019AS_BASE_ADDRESS+0x02
#define RED_ADDR3 RTL8019AS_BASE_ADDRESS+0x03
#define RED_ADDR4 RTL8019AS_BASE_ADDRESS+0x04
#define RED_ADDR5 RTL8019AS_BASE_ADDRESS+0x05
#define RED_ADDR6 RTL8019AS_BASE_ADDRESS+0x06
#define RED_ADDR7 RTL8019AS_BASE_ADDRESS+0x07
#define RED_ADDR8 RTL8019AS_BASE_ADDRESS+0x08
#define RED_ADDR9 RTL8019AS_BASE_ADDRESS+0x09
#define RED_ADDRa RTL8019AS_BASE_ADDRESS+0x0a
#define RED_ADDRb RTL8019AS_BASE_ADDRESS+0x0b
#define RED_ADDRc RTL8019AS_BASE_ADDRESS+0x0c
#define RED_ADDRd RTL8019AS_BASE_ADDRESS+0x0d
#define RED_ADDRe RTL8019AS_BASE_ADDRESS+0x0e
#define RED_ADDRf RTL8019AS_BASE_ADDRESS+0x0f
#define RED_ADDR10 RTL8019AS_BASE_ADDRESS+0x10
#define RED_ADDR18 RTL8019AS_BASE_ADDRESS+0x18
#define Reg00 XBYTE[RED_ADDR0]
#define Reg01 XBYTE[RED_ADDR1]
#define Reg02 XBYTE[RED_ADDR2]
#define Reg03 XBYTE[RED_ADDR3]
#define Reg04 XBYTE[RED_ADDR4]
#define Reg05 XBYTE[RED_ADDR5]
#define Reg06 XBYTE[RED_ADDR6]
#define Reg07 XBYTE[RED_ADDR7]
#define Reg08 XBYTE[RED_ADDR8]
#define Reg09 XBYTE[RED_ADDR9]
#define Reg0a XBYTE[RED_ADDRa]
#define Reg0b XBYTE[RED_ADDRb]
#define Reg0c XBYTE[RED_ADDRc]
#define Reg0d XBYTE[RED_ADDRd]
#define Reg0e XBYTE[RED_ADDRe]
#define Reg0f XBYTE[RED_ADDRf]
#define Reg10 XBYTE[RED_ADDR10]
#define Reg18 XBYTE[RED_ADDR18]
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -