/**
* \ addtogroup uip
* @ {
*/
/**
* \ addtogroup uiparp
* @ {
*/
/**
* \ file
* Macros and definitions for the ARP module .
* \ author Adam Dunkels < adam @ dunkels . com >
*/
/*
* Copyright ( c ) 2001 - 2003 , Adam Dunkels .
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
* 1. Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
* 2. Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in the
* documentation and / or other materials provided with the distribution .
* 3. The name of the author may not be used to endorse or promote
* products derived from this software without specific prior
* written permission .
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ` ` AS IS ' ' AND ANY EXPRESS
* OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED . IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT , INDIRECT , INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL
* DAMAGES ( INCLUDING , BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES ; LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS
* INTERRUPTION ) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY ,
* WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT ( INCLUDING
* NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*
* This file is part of the uIP TCP / IP stack .
*
* $ Id : uip_arp . h , v 1.2 2006 / 08 / 26 23 : 58 : 45 oliverschmidt Exp $
*
*/
# ifndef __UIP_ARP_H__
# define __UIP_ARP_H__
# include "uip.h"
extern struct uip_eth_addr uip_ethaddr ;
/**
* The Ethernet header .
*/
struct uip_eth_hdr {
struct uip_eth_addr dest ;
struct uip_eth_addr src ;
u16_t type ;
} ;
# define UIP_ETHTYPE_ARP 0x0806
# define UIP_ETHTYPE_IP 0x0800
# define UIP_ETHTYPE_IPV6 0x86dd
/* The uip_arp_init() function must be called before any of the other
ARP functions . */
void uip_arp_init ( void ) ;
/* The uip_arp_ipin() function should be called whenever an IP packet
arrives from the Ethernet . This function refreshes the ARP table or
inserts a new mapping if none exists . The function assumes that an
IP packet with an Ethernet header is present in the uip_buf buffer
and that the length of the packet is in the uip_len variable . */
/*void uip_arp_ipin(void);*/
# define uip_arp_ipin()
/* The uip_arp_arpin() should be called when an ARP packet is received
by the Ethernet driver . This function also assumes that the
Ethernet frame is present in the uip_buf buffer . When the
uip_arp_arpin ( ) function returns , the contents of the uip_buf
buffer should be sent out on the Ethernet if the uip_len variable
is > 0. */
void uip_arp_arpin ( void ) ;
/* The uip_arp_out() function should be called when an IP packet
should be sent out on the Ethernet . This function creates an
Ethernet header before the IP header in the uip_buf buffer . The
Ethernet header will have the correct Ethernet MAC destination
address filled in if an ARP table entry for the destination IP
address ( or the IP address of the default router ) is present . If no
such table entry is found , the IP packet is overwritten with an ARP
request and we rely on TCP to retransmit the packet that was
overwritten . In any case , the uip_len variable holds the length of
the Ethernet frame that should be transmitted . */
void uip_arp_out ( void ) ;
/* The uip_arp_timer() function should be called every ten seconds. It
is responsible for flushing old entries in the ARP table . */
void uip_arp_timer ( void ) ;
/** @} */
/**
* \ addtogroup uipconffunc
* @ {
*/
/**
* Specifiy the Ethernet MAC address .
*
* The ARP code needs to know the MAC address of the Ethernet card in
* order to be able to respond to ARP queries and to generate working
* Ethernet headers .
*
* \ note This macro only specifies the Ethernet MAC address to the ARP
* code . It cannot be used to change the MAC address of the Ethernet
* card .
*
* \ param eaddr A pointer to a struct uip_eth_addr containing the
* Ethernet MAC address of the Ethernet card .
*
* \ hideinitializer
*/
# define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \
uip_ethaddr . addr [ 1 ] = eaddr . addr [ 1 ] ; \
uip_ethaddr . addr [ 2 ] = eaddr . addr [ 2 ] ; \
uip_ethaddr . addr [ 3 ] = eaddr . addr [ 3 ] ; \
uip_ethaddr . addr [ 4 ] = eaddr . addr [ 4 ] ; \
uip_ethaddr . addr [ 5 ] = eaddr . addr [ 5 ] ; } while ( 0 )
/** @} */
# endif /* __UIP_ARP_H__ */
/** @} */