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

📄 ethernet.h

📁 开发工具用EMBEST IDE进行开发,该程序是一个S3C44B0直接驱动网卡的程序,包括8019初始化,物理层收包发包,UDP的接收和发送,IP的发送和接收.已及ARM的地址解板,整个程序是自顶而下
💻 H
📖 第 1 页 / 共 2 页
字号:
/* 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 + -