Xinu7/src/sys/h/ether.h
/* ether.h */
/* Ethernet definitions and constants */
#define EMINPAK 64 /* minimum packet length */
#define EMAXPAK 1150 /* 1536. (cut here to conserve space) */
#define EHLEN 14 /* size of Ethernet packet header */
#define EDLEN EMAXPAK-EHLEN /* length of data field in ether packet */
#define EPADLEN 6 /* number of octets in physical address */
typedef char Eaddr[EPADLEN]; /* length of physical address (48 bits) */
#define EXRETRY 3 /* number of times to retry xmit errors */
#define EBCAST "\377\377\377\377\377\377"/* Ethernet broadcast address */
struct eheader { /* format of header in Ethernet packet */
Eaddr e_dest; /* destination host address */
Eaddr e_src; /* source host address */
short e_ptype; /* Ethernet packet type (see below) */
};
#define EP_LOOP 0x0060 /* packet type: Loopback */
#define EP_ECHO 0x0200 /* packet type: Echo */
#define EP_PUP 0x0400 /* packet type: Xerox PUP protocol */
#define EP_IP 0x0800 /* packet type: DARPA Internet protocol */
#define EP_ARP 0x0806 /* packet type: Address resolution " */
#define EP_RARP 0x8035 /* packet type: reverse " " " */
struct epacket { /* complete structure of Ethernet packet*/
struct eheader ep_hdr; /* packet header */
char ep_data[EDLEN]; /* data in the packet */
};
/* Ethernet control block descriptions */
struct etblk {
struct dqregs *eioaddr;/* address of device csr */
struct devsw *etdev; /* Address of device switch table entry */
Eaddr etpaddr; /* Ethernet physical device address */
int etrpid; /* id of process reading from ethernet */
int etrsem; /* mutex for reading from the ethernet */
int etwsem; /* mutex for writing to the ethernet */
int etsetup; /* DC_NORM or DC_SETUP for normal/setup */
int etlen; /* lenght of packet being written or 0 */
int etwtry; /* num. of times to retry xmit errors */
struct dcmd ercmd[2]; /* deqna read command descriptor plus */
/* end-of-list */
struct dcmd ewcmd[2]; /* deqna write command descriptor plus */
/* end-of-list */
};
extern struct etblk eth[];