13  * Macros and definitions for the ARP module. 
  14  * \author Adam Dunkels <adam@dunkels.com> 
  19  * Copyright (c) 2001-2003, Adam Dunkels. 
  20  * All rights reserved. 
  22  * Redistribution and use in source and binary forms, with or without 
  23  * modification, are permitted provided that the following conditions 
  25  * 1. Redistributions of source code must retain the above copyright 
  26  *    notice, this list of conditions and the following disclaimer. 
  27  * 2. Redistributions in binary form must reproduce the above copyright 
  28  *    notice, this list of conditions and the following disclaimer in the 
  29  *    documentation and/or other materials provided with the distribution. 
  30  * 3. The name of the author may not be used to endorse or promote 
  31  *    products derived from this software without specific prior 
  34  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 
  35  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
  36  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  37  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 
  38  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  39  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
  40  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
  41  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  42  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
  43  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
  44  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  46  * This file is part of the uIP TCP/IP stack. 
  48  * $Id: uip_arp.h,v 1.2 2006/08/26 23:58:45 oliverschmidt Exp $ 
  58 extern struct uip_eth_addr uip_ethaddr
; 
  61  * The Ethernet header. 
  64   struct uip_eth_addr dest
; 
  65   struct uip_eth_addr src
; 
  69 #define UIP_ETHTYPE_ARP  0x0806 
  70 #define UIP_ETHTYPE_IP   0x0800 
  71 #define UIP_ETHTYPE_IPV6 0x86dd 
  74 /* The uip_arp_init() function must be called before any of the other 
  76 void uip_arp_init(void); 
  78 /* The uip_arp_ipin() function should be called whenever an IP packet 
  79    arrives from the Ethernet. This function refreshes the ARP table or 
  80    inserts a new mapping if none exists. The function assumes that an 
  81    IP packet with an Ethernet header is present in the uip_buf buffer 
  82    and that the length of the packet is in the uip_len variable. */ 
  83 /*void uip_arp_ipin(void);*/ 
  84 #define uip_arp_ipin() 
  86 /* The uip_arp_arpin() should be called when an ARP packet is received 
  87    by the Ethernet driver. This function also assumes that the 
  88    Ethernet frame is present in the uip_buf buffer. When the 
  89    uip_arp_arpin() function returns, the contents of the uip_buf 
  90    buffer should be sent out on the Ethernet if the uip_len variable 
  92 void uip_arp_arpin(void); 
  94 /* The uip_arp_out() function should be called when an IP packet 
  95    should be sent out on the Ethernet. This function creates an 
  96    Ethernet header before the IP header in the uip_buf buffer. The 
  97    Ethernet header will have the correct Ethernet MAC destination 
  98    address filled in if an ARP table entry for the destination IP 
  99    address (or the IP address of the default router) is present. If no 
 100    such table entry is found, the IP packet is overwritten with an ARP 
 101    request and we rely on TCP to retransmit the packet that was 
 102    overwritten. In any case, the uip_len variable holds the length of 
 103    the Ethernet frame that should be transmitted. */ 
 104 void uip_arp_out(void); 
 106 /* The uip_arp_timer() function should be called every ten seconds. It 
 107    is responsible for flushing old entries in the ARP table. */ 
 108 void uip_arp_timer(void); 
 113  * \addtogroup uipconffunc 
 119  * Specifiy the Ethernet MAC address. 
 121  * The ARP code needs to know the MAC address of the Ethernet card in 
 122  * order to be able to respond to ARP queries and to generate working 
 125  * \note This macro only specifies the Ethernet MAC address to the ARP 
 126  * code. It cannot be used to change the MAC address of the Ethernet 
 129  * \param eaddr A pointer to a struct uip_eth_addr containing the 
 130  * Ethernet MAC address of the Ethernet card. 
 134 #define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \ 
 135                               uip_ethaddr.addr[1] = eaddr.addr[1];\ 
 136                               uip_ethaddr.addr[2] = eaddr.addr[2];\ 
 137                               uip_ethaddr.addr[3] = eaddr.addr[3];\ 
 138                               uip_ethaddr.addr[4] = eaddr.addr[4];\ 
 139                               uip_ethaddr.addr[5] = eaddr.addr[5];} while(0) 
 144 #endif /* __UIP_ARP_H__ */