📄 tcpip.h
字号:
/*IP包 仅当IHL=5时用 当不=5时作转换*/
struct ip
{
unsigned int head[9]; /*以太网包头*/
unsigned char verandihl; /*版本与头长度*/
unsigned char typeofserver; /*服务类型*/
unsigned int totallength; /*总长度*/
unsigned int frameindex; /*IP帧序号*/
unsigned int segment; /*分段标志*/
unsigned char ttl; /*生存时间*/
unsigned char protocal; /*下一层协议*/
unsigned int crc; /*校验和*/
unsigned int sourceip[2]; /*源IP*/
unsigned int destip[2]; /*目的IP*/
unsigned char packet[1498]; /*IP包的内容*/
};
struct ippacket
{
unsigned int head[9]; /*以太网包头*/
unsigned int ippacket[720]; /*IP包的内容*/
};
struct arp
{
unsigned int head[9]; /*以太网头 */
/*arp报文的内容总长28字节*/
unsigned int harewaretype; /*以太网为0x0001*/
unsigned int protocaltype; /*ip 为0X0800*/
unsigned char halength; /*=0X06*/
unsigned char palength; /*=0X04*/
unsigned int operation; /*操作 0X0001为请求 0X0002为应答 */
/*0X0003为反向地址请求 0X0004为反向地址应答*/
unsigned int sourcenodeid[3]; /*源网卡地址*/
unsigned int sourceip[2]; /*源IP地址*/
unsigned int destnodeid[3]; /*目的网卡地址*/
unsigned int destip[2]; /*目的IP地址*/
};
struct icmp
{/*包含在IP包中,是IP的上层为0X01的应用*/
unsigned int head[9]; /*以太网头*/
unsigned int iphead[10]; /*IP头*/
unsigned char type; /*0X08 PING请求 0X00 PING应答*/
unsigned char option; /*0X00 PING*/
unsigned int crc;
unsigned int id;
unsigned int seq;
unsigned char icmpdata[1478];
};
//struct tcp
// {
// unsigned int head[9];
// unsigned int iphead[10];
// unsigned int sourceport; /*源端口*/
// unsigned int destport; /*目的端口*/
// unsigned long seqnumber; /*顺序号*/
// unsigned long acknumber; /*确认号*/
// unsigned char offset; /*数据偏移量*/
// unsigned char control; /*连接控制*/
// unsigned int window; /*流控*/
// unsigned int crc; /*校验和 ,包括伪头部,TCP头部,数据*/
// unsigned int urg; /*紧急指针*/
// unsigned char tcpdata[1478]; /*TCP数据*/
// };
struct udp
{
unsigned int head[9];
unsigned int iphead[10];
unsigned int sourceport; /*源端口*/
unsigned int destport; /*目的端口*/
unsigned int length;
unsigned int crc; /*校验和 ,包括伪头部,udp头部,数据*/
unsigned char udpdata[1478]; /*udp数据*/
};
/*所有协议的共用体*/
union netcard
{
struct {
unsigned char bytebuf[1536];
}bytes;
struct {
unsigned int wordbuf[768];
}words;
struct ethernet etherframe;
struct retransmit rtframe;
struct arp arpframe;
struct icmp icmpframe;
// struct tcp tcpframe;
struct ip ipframe;
struct udp udpframe;
struct ippacket ippacket;
};
struct socket_type
{
unsigned int my_port; //本机端口
unsigned int dest_port;//对方端口
unsigned int dest_ip[2];//对方ip
unsigned int dest_node_id[3];//对方的以太网地址
unsigned long irs;//初始化顺序号
unsigned long iss;//我的初始化序列号
unsigned long rcv_nxt;//对方的顺序号
unsigned long snd_nxt;//我的已经发送顺序号
unsigned long snd_una;//我的还没有确认顺序号
//unsigned long dest_ack_number;
unsigned int rcv_wnd;//对方的window大小
unsigned int snd_wnd; //我的window大小
unsigned int dest_max_segment_size;//对方接受的最大的数据包大小MTU
unsigned int my_max_segment_size;//我能接受的最大的数据包大小
unsigned long my_wl1;//seq
unsigned long my_wl2;//ack
unsigned char state;//连接状态
unsigned char open;
};
/*TCP 状态定?
#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
*/
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//#define My_TCPPort 1024
//#define tcp_max_rt 9 //tcp包最多重发的次数
///////////////////////////////函数//////////////////////////////////
/////////////////////////////////////////////////////////////////////
void write_register(unsigned char address_offset,unsigned char value);
unsigned char read_register(unsigned char addr);
void write_dma_port(unsigned char value);
unsigned char read_dma_port();
void rtl8019as_page(unsigned char pagenumber);
void readmynodeid_self();
void writemynodeid();
void send_packet(unsigned int length);
void rtl8019as_reset();
void rtl8019as_init();
unsigned char check_new_packet();
unsigned int read_93c64(unsigned char address);
void write_93c46(unsigned char address,unsigned int value);
void do_93c46(unsigned char dataes);
void delay_ms(unsigned char ms_number);
void delay_100ms(unsigned char number);
void send_char(unsigned char ascii);
void send_string(unsigned char code *string);
void send_hex(unsigned char senddata);
void send_word(unsigned int asciiword);
void send_long(unsigned long asciilong);
unsigned char string_compare(unsigned char code *string,uchar number);
void readmask();
void readnetgate();
void readmyipadd();
/////////////////////////函数/////////////////////////
/////////////////////////////////////////////////////
unsigned int createipheadcrc();
unsigned int checksum(unsigned int * check , unsigned int length);
unsigned char verifyipheadcrc();
unsigned int createicmpcrc();
void arp_answer();
void arp_request(unsigned long ip_address);
void gateway_arp_request();
void arp_process();
void ping_request();
void process_ping();
void copy_to_retransmit_buffer();
void create_ip_packet(unsigned int length,unsigned int ip0,unsigned int ip1,unsigned char protocal);
void ping_answer();
void ping_echo();
//void send_reset();
//void delete_socket();
void retransmit_packet(unsigned char i);
void do_retransmit_buffer();
void do_data_receive(unsigned int length);
//unsigned char free_rt();
unsigned char get_char();
unsigned int copy_data();
unsigned char verifyudpcrc();
void process_udp();
void udp_request(unsigned long ip_address, unsigned int portnumber);
void process_udp_command();
void process_command();
void serial_init();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -