Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages | Examples

ARP
[Protocols]


Detailed Description

RFC 826 address resolution protocol.

ARP is used to map IP addresses to hardware addresses. Each network interface of Nut/Net keeps its own mapping table.

When an IP packet has to be sent out, IP needs the hardware address to pass it to the Ethernet layer. If the mapping is not in the ARP cache, an Ethernet broadcast packet is sent to the local network requesting the physical hardware address for the given IP address.

Todo:
Configurable cache timeout.

Only save the last packet to unresolved destinations.

Add functions to manually add or remove ARP entries.

Add function to query ARP tables.

Todo:
Response may reuse received ARP packet.


Data Structures

struct  _ARPENTRY
 ARP entry structure. More...

struct  _ARPENTRY
 ARP entry structure. More...


Defines

#define ATF_COM
 Completed entry.

#define ATF_PERM
 Permanent entry.


Typedefs

typedef _ARPENTRY ARPENTRY
 ARP entry type.


Functions

 NutArpExpire (void *arg)
 ARP expiration thread.

void NutArpCacheUpdate (NUTDEVICE *dev, u_long ip, u_char *ha)
 Update an ARP entry.

int NutArpCacheQuery (NUTDEVICE *dev, CONST u_long ip, u_char *mac)
 Query MAC address for a specified IP address.

void NutArpInput (NUTDEVICE *dev, NETBUF *nb)
 Handle incoming ARP packets.

NETBUFNutArpAllocNetBuf (u_short type, u_long ip, u_char *mac)
 Allocate an ARP network buffer structure.

int NutArpOutput (NUTDEVICE *dev, NETBUF *nb)
 Send an ARP packet.


Function Documentation

NETBUF* NutArpAllocNetBuf u_short  type,
u_long  ip,
u_char mac
 

Allocate an ARP network buffer structure.

Parameters:
type Type of ARP packet.
ip Target IP address.
mac Target MAC address, null pointer for broadcast.
Returns:
Pointer to the allocated network buffer structure or 0 on failure.

int NutArpCacheQuery NUTDEVICE dev,
CONST u_long  ip,
u_char mac
 

Query MAC address for a specified IP address.

If no entry is available in the ARP cache, an ARP request is generated, sent out to the network and the calling thread will be suspended.

Parameters:
dev Identifies the device.
ip IP address of which the caller asked the MAC address.
mac Buffer for the retrieved MAC address.
Returns:
0 if address resolved, -1 otherwise.

void NutArpCacheUpdate NUTDEVICE dev,
u_long  ip,
u_char ha
 

Update an ARP entry.

If an entry with the same IP address exists, then this entry is updated. If no entry exists, a new one is created. All threads waiting for address resolution are woken up.

Note:
This function is automatically called on each incoming ARP telegram. Applications typically do not call this function.
Parameters:
dev Identifies the device.
ip Requested IP address in network byte order.
ha Pointer to a buffer which receives the MAC address.

NutArpExpire void *  arg  ) 
 

ARP expiration thread.

Running once a minute to handle expired ARP cache entries.

void NutArpInput NUTDEVICE dev,
NETBUF nb
 

Handle incoming ARP packets.

Packets not destined to us or packets with unsupported address type or item length are silently discarded.

Note:
This routine is called by the Ethernet layer on incoming ARP packets. Applications typically do not call this function.
Parameters:
dev Identifies the device that received the packet.
nb Pointer to a network buffer structure containing the ARP packet.

int NutArpOutput NUTDEVICE dev,
NETBUF nb
 

Send an ARP packet.

Note:
Applications typically do not call this function.
Parameters:
dev Identifies the device to use.
nb Network buffer structure containing the packet to be sent. The structure must have been allocated by a previous call NutNetBufAlloc().
Returns:
0 on success, -1 in case of any errors.


© 2000-2003 by egnite Software GmbH - visit http://www.ethernut.de/