1 /** 2 * \addtogroup uip 3 * @{ 4 */ 5 6 /** 7 * \addtogroup uiparp 8 * @{ 9 */ 10 11 /** 12 * \file 13 * Macros and definitions for the ARP module. 14 * \author Adam Dunkels <[email protected]> 15 */ 16 17 18 /* 19 * Copyright (c) 2001-2003, Adam Dunkels. 20 * All rights reserved. 21 * 22 * Redistribution and use in source and binary forms, with or without 23 * modification, are permitted provided that the following conditions 24 * are met: 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 32 * written permission. 33 * 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. 45 * 46 * This file is part of the uIP TCP/IP stack. 47 * 48 * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $ 49 * 50 */ 51 52 #ifndef __UIP_ARP_H__ 53 #define __UIP_ARP_H__ 54 55 #include "uip.h" 56 57 58 extern struct uip_eth_addr uip_ethaddr; 59 60 /** 61 * The Ethernet header. 62 */ 63 struct uip_eth_hdr { 64 struct uip_eth_addr dest; 65 struct uip_eth_addr src; 66 u16_t type; 67 }; 68 69 #define UIP_ETHTYPE_ARP 0x0806 70 #define UIP_ETHTYPE_IP 0x0800 71 #define UIP_ETHTYPE_IP6 0x86dd 72 73 74 /* The uip_arp_init() function must be called before any of the other 75 ARP functions. */ 76 void uip_arp_init(void); 77 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() 85 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 91 is > 0. */ 92 void uip_arp_arpin(void); 93 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); 105 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); 109 110 /** @} */ 111 112 /** 113 * \addtogroup uipconffunc 114 * @{ 115 */ 116 117 118 /** 119 * Specifiy the Ethernet MAC address. 120 * 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 123 * Ethernet headers. 124 * 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 127 * card. 128 * 129 * \param eaddr A pointer to a struct uip_eth_addr containing the 130 * Ethernet MAC address of the Ethernet card. 131 * 132 * \hideinitializer 133 */ 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) 140 141 /** @} */ 142 /** @} */ 143 144 #endif /* __UIP_ARP_H__ */ 145