📄 ethernet.h
字号:
/* Write byte to controller register. */
#define nic_write(reg, data) *(ether_base + (reg)*0x200) = data
// Constants
#define TRUE 1
#define ON 1
#define OK 1
#define FALSE 0
#define OFF 0
#define MATCH 0
#define RET 0x0D
#define LF 0x0A
#define SPACE 0x20
// Port numbers
#define ECHO_PORT 7
#define DAYTIME_PORT 13
#define CHARGEN_PORT 19
#define TIME_PORT 37
#define HTTP_PORT 80
#define QHY_PORT 1024
#define ONE_PORT 2000
#define TWO_PORT 2200
#define THREE_PORT 2400
#define FOUR_PORT 2600
#define FIVE_PORT 2800
#define scanip 6000
#define configip 7000
// Event word bits
#define EVENT_ETH_ARRIVED 0x0001
#define EVENT_AGE_ARP_CACHE 0x0002
#define EVENT_TCP_RETRANSMIT 0x0004
#define EVENT_TCP_INACTIVITY 0x0008
#define EVENT_ARP_RETRANSMIT 0x0010
#define EVENT_READ_ANALOG 0x0020
#define EVENT_RS232_ARRIVED 0x0040
// Type number field in Ethernet frame
#define IP_PACKET 0x0800
#define ARP_PACKET 0x0806
#define RARP_PACKET 0x8035
// Protocol identifier field in IP datagram
#define ICMP_TYPE 1
#define IGMP_TYPE 2
#define TCP_TYPE 6
#define UDP_TYPE 17
// Message type field in ARP messages
#define ARP_REQUEST 1
#define ARP_RESPONSE 2
#define RARP_REQUEST 3
#define RARP_RESPONSE 4
// Hardware type field in ARP message
#define DIX_ETHERNET 1
#define IEEE_ETHERNET 6
struct ETH_HEADER
{
unsigned char dest_hwaddr[6];
unsigned char source_hwaddr[6];
unsigned short frame_type;
}__attribute__((packed));
/* Realtek packet header. */
struct NICPKYTHEADER
{
unsigned char ph_status; /* Status, contents of RSR register */
unsigned char ph_nextpg; /* Page for next packet */
unsigned short ph_size; /* Size of header and packet in octets */
}__attribute__((packed));
struct WAIT
{
unsigned char * buf;
unsigned long ipaddr;
unsigned char proto_id;
unsigned short len;
unsigned char timer;
} __attribute__((packed));
struct ARP_CACHE
{
unsigned long ipaddr;
unsigned char hwaddr[6];
unsigned char timer;
} __attribute__((packed));
struct ARP_HEADER
{
unsigned short hardware_type;
unsigned short protocol_type;
unsigned char hwaddr_len;
unsigned char ipaddr_len;
unsigned short message_type;
unsigned char source_hwaddr[6];
unsigned long source_ipaddr;
unsigned char dest_hwaddr[6];
unsigned long dest_ipaddr;
} __attribute__((packed));
struct IP_HEADER
{
unsigned char ver_len;
unsigned char type_of_service;
unsigned short total_length;
unsigned short identifier;
unsigned short fragment_info;
unsigned char time_to_live;
unsigned char protocol_id;
unsigned short header_cksum;
unsigned long source_ipaddr;
unsigned long dest_ipaddr;
} __attribute__((packed));
struct PING_HEADER
{
unsigned char msg_type;
unsigned char msg_code;
unsigned short checksum;
unsigned short identifier;
unsigned short sequence;
unsigned char echo_data;
} __attribute__((packed));
struct ICMP_ERR_HEADER
{
unsigned char msg_type;
unsigned char msg_code;
unsigned short checksum;
unsigned long msg_data;
unsigned char echo_data;
} __attribute__((packed));
struct UDP_HEADER
{
unsigned short source_port;
unsigned short dest_port;
unsigned short length;
unsigned short checksum;
unsigned char msg_data;
} __attribute__((packed));
struct TCP_HEADER
{
unsigned short source_port;
unsigned short dest_port;
unsigned long sequence;
unsigned long ack_number;
unsigned short flags;
unsigned short window;
unsigned short checksum;
unsigned short urgent_ptr;
unsigned char options;
} __attribute__((packed));
struct CONNECTION
{
unsigned long ipaddr;
unsigned short port;
unsigned long his_sequence;
unsigned long my_sequence;
unsigned long old_sequence;
unsigned long his_ack;
unsigned char timer;
unsigned char inactivity;
unsigned char state;
char query[20];
} __attribute__((packed));
struct STORECODE
{
unsigned char hwaddr[6]; //本地的硬件地址MAC
unsigned long local_ipaddr; //本地的IP地 址24unsigned char
unsigned short local_port; //本地的端口
unsigned long remote_ipaddr; //远程IP地址
unsigned short remote_port; //远程端口
unsigned long subnet; //子网掩码
unsigned long gatewayip; //网关
unsigned char pmdelay; //屏幕延时时间常数
unsigned char checkbit;
}__attribute__((packed));
int NicReset(void);
void NicInit(void);
void NicClose(void);
void query_8019(void);
void Readrt801nodeid(void);
void Writert8019nodeid(void);
void send_frame(unsigned char * outbuf, unsigned short len);
unsigned char * rcve_frame(void);
void eth_send(unsigned char * outbuf, unsigned char * hwaddr, unsigned short ptype, unsigned short len);
void eth_rcve(unsigned char * inbuf);
#endif /* _ethernet_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -