📄 net.h
字号:
/* * LiMon Monitor (LiMon) - Network. * * Copyright 1994 - 2000 Neil Russell. * (See License) * * * History * 9/16/00 bor adapted to TQM823L/STK8xxL board, RARP/TFTP boot added */#ifndef __NET_H__#define __NET_H__#include "types.h"#define SWAP16(x) ((((x) & 0xff) << 8) | ((x) >> 8))#define SWAP16c(x) ((((x) & 0xff) << 8) | ((x) >> 8))#define SWAP32(x) ((((x) >> 24) & 0x000000ff)|(((x) >> 8) & 0x0000ff00)|\ (((x) << 8) & 0x00ff0000)|(((x) << 24) & 0xff000000) )//#define PKTBUFSRX 4//#define PKTALIGN 32typedef unsigned int IPaddr_t;/* * The current receive packet handler. Called with a pointer to the * application packet, and a protocol type (PORT_BOOTPC or PORT_TFTP). * All other packets are dealt with without calling the handler. */typedef void rxhand_f(uchar *, unsigned, unsigned, unsigned);typedef void thand_f(void);extern int eth_init(char netaddr[6]); /* Initialize the device */extern int eth_send(volatile void *packet, int length); /* Send a packet */extern int eth_rx(void); /* Check for received packets */extern void eth_halt(void); /* stop SCC *//**********************************************************************//* * Protocol headers. *//* * Ethernet header */typedef struct { uchar et_dest[6]; /* Destination node */ uchar et_src[6]; /* Source node */ ushort et_protlen; /* Protocol or length */ uchar et_dsap; /* 802 DSAP */ uchar et_ssap; /* 802 SSAP */ uchar et_ctl; /* 802 control */ uchar et_snap1; /* SNAP */ uchar et_snap2; uchar et_snap3; ushort et_prot; /* 802 protocol */} Ethernet_t;#define ETHER_HDR_SIZE 14 /* Ethernet header size */#define E802_HDR_SIZE 22 /* 802 ethernet header size */#define PROT_IP 0x0800 /* IP protocol */#define PROT_ARP 0x0806 /* IP ARP protocol */#define PROT_RARP 0x8035 /* IP ARP protocol */#define IPPROTO_ICMP 1 /* Internet Control Message Protocol */#define IPPROTO_UDP 17 /* User Datagram Protocol *//* * Internet Protocol (IP) header. */typedef struct { uchar ip_hl_v; /* header length and version */ uchar ip_tos; /* type of service */ ushort ip_len; /* total length */ ushort ip_id; /* identification */ ushort ip_off; /* fragment offset field */ uchar ip_ttl; /* time to live */ uchar ip_p; /* protocol */ ushort ip_sum; /* checksum */ IPaddr_t ip_src; /* Source IP address */ IPaddr_t ip_dst; /* Destination IP address */ ushort udp_src; /* UDP source port */ ushort udp_dst; /* UDP destination port */ ushort udp_len; /* Length of UDP packet */ ushort udp_xsum; /* Checksum */} IP_t;#define IP_HDR_SIZE_NO_UDP (sizeof (IP_t) - 8)#define IP_HDR_SIZE (sizeof (IP_t))typedef struct{ char type; char code; unsigned short checksum; unsigned short identifier; unsigned short sequencenumber;}ICMP_t;#define ICMP_HDR_SIZE (sizeof(ICMP_t))#define ICMP_ECHO_REQUEST 8#define ICMP_ECHO_REPLY 0#define ARP_ETHER 1 /* Ethernet hardware address */#define ARPOP_REQUEST 1 /* Request to resolve address */#define ARPOP_REPLY 2 /* Response to previous request *//* * Address Resolution Protocol (ARP) header. */typedef struct{ ushort ar_hrd; /* Format of hardware address */ ushort ar_pro; /* Format of protocol address */ uchar ar_hln; /* Length of hardware address */ uchar ar_pln; /* Length of protocol address */ ushort ar_op; /* Operation */ /* * The remaining fields are variable in size, according to * the sizes above, and are defined as appropriate for * specific hardware/protocol combinations. */ char ar_data[20];} ARP_t;#define ARP_HDR_SIZE (8+20) /* Size assuming ethernet */#define COMMAND_UDP_PORT 6000#define SERVER_TFTP_PORT 69#define LOCAL_TFTP_PORT 4321/* * Maximum packet size; used to allocate packet storage. * TFTP packets can be 524 bytes + IP header + ethernet header. * Lets be conservative, and go for 38 * 16. (Must also be * a multiple of 32 bytes). *//* * AS.HARNOIS : Better to set PKTSIZE to maximum size because * traffic type is not always controlled * maximum packet size = 1518 * maximum packet size and multiple of 32 bytes = 1536 */#define PKTSIZE 1518#define PKTSIZE_ALIGN 1536#define CFG_HZ 1562500/**********************************************************************//* * Globals. */extern char NetOurEther[6];extern char NetBcastAddr[6];extern char NetServerEther[6];extern IPaddr_t NetOurIP; /* Our IP addr (0 = unknown) */extern IPaddr_t NetServerIP; /* Server IP addr (0 = unknown) */extern unsigned short NetServerPort;extern volatile uchar * NetTxPacket; /* THE transmit packet */extern volatile char NetRxPackets[4][PKTSIZE_ALIGN];extern volatile uchar * NetRxPkt; /* Current receive packet */extern int NetRxPktLen; /* Current rx packet length */extern unsigned NetIPID; /* IP ID (counting) *//* Load failed. Start again. */extern void NetStartAgain(void);void NetConvEther(char mac[6], char *str);void NetCopyEther(volatile char * to, char * from);void NetSetEther(volatile char * xet, char * addr, unsigned int prot);void NetWriteIP(volatile char * to, IPaddr_t ip);IPaddr_t NetReadIP(volatile char * from);void NetCopyIP(volatile char * to, volatile char *from);void NetSetIP(volatile char * xip, IPaddr_t dest, int dport, int sport, int len);IPaddr_t NetConvIP(char * str);void icmp_echo_reply(volatile char * pkt);/* Checksum */extern int NetCksumOk(char * ptr, int len);extern unsigned NetCksum(char * ptr, int len);/* Set callbacks */extern void NetSetHandler(rxhand_f *); /* Set RX packet handler */extern void NetSetTimeout(int, thand_f *); /* Set timeout handler *//* Transmit "NetTxPacket" */extern void NetSendPacket(volatile char *, int);/* Processes a received packet */extern void NetReceive(volatile char * pkt, int len);/* Print an IP address on the console */extern void print_IPaddr (IPaddr_t);/* Convert a IP address to a string */extern void ip_to_string (IPaddr_t x, char *s);void tftp_handle(volatile char * pkt, int len);void tftp_startserv(void);void tftp_stopserv(void);/**********************************************************************/#endif /* __NET_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -