/********************************************************************************* File: arp.h Date: Version: 0.1 Author: Jari Lahti (jari.lahti@violasystems.com) Description: arp (address resolution protocol) functions Version Info: *********************************************************************************/ #ifndef __OPENTCP_INCLUDE_ARP_H__ #define __OPENTCP_INCLUDE_ARP_H__ #include "datatypes.h" /* User Allowed to modify */ #define MAXHWALEN 6 /* Maximum HW address Length (6=Eth)*/ #define MAXPRALEN 4 /* Maximum Protocol adr.len (4=IPv4)*/ #define ARP_TSIZE 13 /* ARP Cache size (# of entries) */ #define ARP_TIMEOUT 60 /* Refresh timeout in secs */ #define ARP_RESEND 2 /* Resend if no reply in x seconds */ #define ARP_MAXRETRY 5 /* Give up after x times */ /* System constants, don't modify */ #define AR_HARDWARE 0x0001 /* Ethernet hardware type code */ #define ARP_ETHCODE 0x0806 /* ARP over Ethernet */ #define ARP_REQUEST 1 /* ARP Request to resolve address */ #define ARP_REPLY 2 /* Reply to resolve request */ #define ARP_MANG_TOUT 1 /* Interval between ARP cache mngmt. */ struct arpentry { UINT8 state; /* State of this entry (see below) */ UINT8 type; /* Type of this entry (see below) */ UINT8 retries; /* Number of retries so far */ UINT8 ttl; /* Time To Live */ UINT8 hwadr[MAXHWALEN]; /* Hardware Address */ UINT32 pradr; /* Protocol Address */ }; /* Arp Entry States */ #define ARP_FREE 0 /* Entry is Unused (initial value) */ #define ARP_RESERVED 1 /* Entry is reserved (allocated) */ #define ARP_PENDING 2 /* Entry is used but incomplete */ #define ARP_RESOLVED 3 /* Entry has been resolved */ #define ARP_REFRESHING 4 /* Entry is being refreshed */ /* Arp Entry Types */ #define ARP_FIXED_IP 0 /* For Fixed addresses like GW. */ /* Entry is refreshed after ttl */ #define ARP_TEMP_IP 1 /* For Temporary addresses */ /* Entry is removed after ttl */ /* ARP Variables */ extern struct arpentry arptable[]; /* ARP Functions */ void arpinit(void); struct arpentry* arpfind(LWORD, struct netif*, UINT8); INT8 arpalloc(UINT8); void arpsendreq(UINT8); INT16 arp_keepcache(UINT32); void arpmanage(void); UINT8 IsSub(LWORD, struct netif*); UINT8 Process_ARP(struct otcp_ethframe*); void ARPSendResponse(void); void ARPGetResponse(void); void ARPSendRequest(void); INT8 arpadd(UINT32, UINT8*, UINT8); #endif //guard /* EOF */