Xinu7/include/arp.h
/* arp.h */
/* DARPA Internet Address Resolution Protocol (see RFCs 826, 920) */
#define AR_HRD 1 /* Ethernet hardware type code */
#define AR_PROT 0x0800 /* IP protocol address code */
#define AR_HLEN 6 /* Ethernet physical address length */
#define AR_PLEN 4 /* IP Protocol address length */
#define AR_TAB 6 /* size of IP-to-Ether addr. cache (>1) */
#define AR_TIME 60 /* time to wait for reply in 1/10 secs */
#define AR_RTRY 2 /* num. of times to try an arp request */
/* Definitions of codes used in operation field of ARP packet */
#define AR_REQ 1 /* arp request to resolve address */
#define AR_RPLY 2 /* reply to a resolve request */
#define AR_RREQ 3 /* reverse ARP request (RARP packets) */
#define AR_RRLY 4 /* reply to a reverse request (RARP ") */
struct arppak { /* format of DARPA ARP packet */
short ar_hrd; /* type of hardware (Ethernet = 1) */
short ar_prot; /* format of proto. address (IP=0x0800) */
char ar_hlen; /* hardware address length (6 for Ether)*/
char ar_plen; /* protocol address length (4 for IP) */
short ar_op; /* arp operation (see list above) */
Eaddr ar_sha; /* sender's physical hardware address */
IPaddr ar_spa; /* sender's protocol address (IP addr.) */
Eaddr ar_tha; /* target's physical hardware address */
IPaddr ar_tpa; /* target's protocol address (IP) */
};
/* Format of the IP-to-Ethernet address resolution cache */
struct arpent { /* format of entry in ARP cache */
char arp_state; /* state of this entry (see below) */
Eaddr arp_Ead; /* Ethernet address of this host */
IPaddr arp_Iad; /* IP address of this host */
int arp_dev; /* Xinu device for this host route */
};
/* Definitions of table entry states */
#define AR_FREE '\0' /* Entry is unused (initial value) */
#define AR_ALLOC '\1' /* Entry is used but route still unknown*/
#define AR_RGATE '\2' /* Entry is reachable only by gateway */
#define AR_RSLVD '\3' /* Entry has been resolved to Eth. addr.*/
struct arpblk { /* all information about ARP cache */
struct arpent arptab[AR_TAB]; /* IP-to-Ethernet address cache */
int atabsiz; /* current entries in arptab */
int atabnxt; /* next position in arptab to use */
int arpsem; /* semaphore for access to ARP service */
int arppid; /* id of process waiting for ARP reply */
IPaddr arpwant; /* IP addr. process waiting to resolve */
int rarppid; /* id of process waiting for RARP reply */
int rarpsem; /* semaphore for access to RARP service */
};
extern struct arpblk Arp;