?? 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 + -