summaryrefslogtreecommitdiff
path: root/third_party/uip-1.0/doc/html/a00205.html
blob: aef434f18e66836ef9e64ac01d5156fa30508473 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>uIP 1.0: uip/uip_arp.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.6 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</span></a></li>
    <li><a href="classes.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="examples.html"><span>Examples</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>Globals</span></a></li>
  </ul></div>
<h1>uip/uip_arp.h</h1><a href="a00139.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/**</span>
<a name="l00002"></a>00002 <span class="comment"> * \addtogroup uip</span>
<a name="l00003"></a>00003 <span class="comment"> * @{</span>
<a name="l00004"></a>00004 <span class="comment"> */</span>
<a name="l00005"></a>00005 <span class="comment"></span>
<a name="l00006"></a>00006 <span class="comment">/**</span>
<a name="l00007"></a>00007 <span class="comment"> * \addtogroup uiparp</span>
<a name="l00008"></a>00008 <span class="comment"> * @{</span>
<a name="l00009"></a>00009 <span class="comment"> */</span>
<a name="l00010"></a>00010  <span class="comment"></span>
<a name="l00011"></a>00011 <span class="comment">/**</span>
<a name="l00012"></a>00012 <span class="comment"> * \file</span>
<a name="l00013"></a>00013 <span class="comment"> * Macros and definitions for the ARP module.</span>
<a name="l00014"></a>00014 <span class="comment"> * \author Adam Dunkels &lt;adam@dunkels.com&gt;</span>
<a name="l00015"></a>00015 <span class="comment"> */</span>
<a name="l00016"></a>00016   
<a name="l00017"></a>00017 
<a name="l00018"></a>00018 <span class="comment">/*</span>
<a name="l00019"></a>00019 <span class="comment"> * Copyright (c) 2001-2003, Adam Dunkels.</span>
<a name="l00020"></a>00020 <span class="comment"> * All rights reserved.</span>
<a name="l00021"></a>00021 <span class="comment"> *</span>
<a name="l00022"></a>00022 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
<a name="l00023"></a>00023 <span class="comment"> * modification, are permitted provided that the following conditions</span>
<a name="l00024"></a>00024 <span class="comment"> * are met:</span>
<a name="l00025"></a>00025 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
<a name="l00026"></a>00026 <span class="comment"> *    notice, this list of conditions and the following disclaimer.</span>
<a name="l00027"></a>00027 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
<a name="l00028"></a>00028 <span class="comment"> *    notice, this list of conditions and the following disclaimer in the</span>
<a name="l00029"></a>00029 <span class="comment"> *    documentation and/or other materials provided with the distribution.</span>
<a name="l00030"></a>00030 <span class="comment"> * 3. The name of the author may not be used to endorse or promote</span>
<a name="l00031"></a>00031 <span class="comment"> *    products derived from this software without specific prior</span>
<a name="l00032"></a>00032 <span class="comment"> *    written permission.</span>
<a name="l00033"></a>00033 <span class="comment"> *</span>
<a name="l00034"></a>00034 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS</span>
<a name="l00035"></a>00035 <span class="comment"> * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
<a name="l00036"></a>00036 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
<a name="l00037"></a>00037 <span class="comment"> * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY</span>
<a name="l00038"></a>00038 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
<a name="l00039"></a>00039 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE</span>
<a name="l00040"></a>00040 <span class="comment"> * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span>
<a name="l00041"></a>00041 <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,</span>
<a name="l00042"></a>00042 <span class="comment"> * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING</span>
<a name="l00043"></a>00043 <span class="comment"> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
<a name="l00044"></a>00044 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
<a name="l00045"></a>00045 <span class="comment"> *</span>
<a name="l00046"></a>00046 <span class="comment"> * This file is part of the uIP TCP/IP stack.</span>
<a name="l00047"></a>00047 <span class="comment"> *</span>
<a name="l00048"></a>00048 <span class="comment"> * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $</span>
<a name="l00049"></a>00049 <span class="comment"> *</span>
<a name="l00050"></a>00050 <span class="comment"> */</span>
<a name="l00051"></a>00051 
<a name="l00052"></a>00052 <span class="preprocessor">#ifndef __UIP_ARP_H__</span>
<a name="l00053"></a>00053 <span class="preprocessor"></span><span class="preprocessor">#define __UIP_ARP_H__</span>
<a name="l00054"></a>00054 <span class="preprocessor"></span>
<a name="l00055"></a>00055 <span class="preprocessor">#include "<a class="code" href="a00136.html">uip.h</a>"</span>
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 
<a name="l00058"></a>00058 <span class="keyword">extern</span> <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> <a class="code" href="a00150.html#g499bb98a0b4ae9a98553ede81317606d">uip_ethaddr</a>;
<a name="l00059"></a>00059 <span class="comment"></span>
<a name="l00060"></a>00060 <span class="comment">/**</span>
<a name="l00061"></a>00061 <span class="comment"> * The Ethernet header.</span>
<a name="l00062"></a>00062 <span class="comment"> */</span>
<a name="l00063"></a><a class="code" href="a00090.html">00063</a> <span class="keyword">struct </span><a class="code" href="a00090.html">uip_eth_hdr</a> {
<a name="l00064"></a><a class="code" href="a00090.html#b684c17bf48c8e3b3fcf97b06b4c6ee1">00064</a>   <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> <a class="code" href="a00090.html#b684c17bf48c8e3b3fcf97b06b4c6ee1">dest</a>;
<a name="l00065"></a><a class="code" href="a00090.html#1abbbe7bc5d7d033c727691528b85b8d">00065</a>   <span class="keyword">struct </span><a class="code" href="a00089.html">uip_eth_addr</a> <a class="code" href="a00090.html#1abbbe7bc5d7d033c727691528b85b8d">src</a>;
<a name="l00066"></a><a class="code" href="a00090.html#c9273cc1fcdaeeddc523ca9f34977e06">00066</a>   <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00090.html#c9273cc1fcdaeeddc523ca9f34977e06">type</a>;
<a name="l00067"></a>00067 };
<a name="l00068"></a>00068 
<a name="l00069"></a><a class="code" href="a00152.html#g3e1562e8a6de32268e5df92a52152f91">00069</a> <span class="preprocessor">#define UIP_ETHTYPE_ARP 0x0806</span>
<a name="l00070"></a><a class="code" href="a00152.html#g03d140db75de3d3cdfbbab1c4fed8d8d">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_ETHTYPE_IP  0x0800</span>
<a name="l00071"></a><a class="code" href="a00152.html#gbb558f3a9b1ec015e83c314aba694e35">00071</a> <span class="preprocessor"></span><span class="preprocessor">#define UIP_ETHTYPE_IP6 0x86dd</span>
<a name="l00072"></a>00072 <span class="preprocessor"></span>
<a name="l00073"></a>00073 
<a name="l00074"></a>00074 <span class="comment">/* The uip_arp_init() function must be called before any of the other</span>
<a name="l00075"></a>00075 <span class="comment">   ARP functions. */</span>
<a name="l00076"></a>00076 <span class="keywordtype">void</span> <a class="code" href="a00152.html#g2d9d28afa353f662b9bb5234fc419f72">uip_arp_init</a>(<span class="keywordtype">void</span>);
<a name="l00077"></a>00077 
<a name="l00078"></a>00078 <span class="comment">/* The uip_arp_ipin() function should be called whenever an IP packet</span>
<a name="l00079"></a>00079 <span class="comment">   arrives from the Ethernet. This function refreshes the ARP table or</span>
<a name="l00080"></a>00080 <span class="comment">   inserts a new mapping if none exists. The function assumes that an</span>
<a name="l00081"></a>00081 <span class="comment">   IP packet with an Ethernet header is present in the uip_buf buffer</span>
<a name="l00082"></a>00082 <span class="comment">   and that the length of the packet is in the uip_len variable. */</span>
<a name="l00083"></a>00083 <span class="comment">/*void uip_arp_ipin(void);*/</span>
<a name="l00084"></a><a class="code" href="a00152.html#g737337d6a51e31b236c8233d024138a8">00084</a> <span class="preprocessor">#define uip_arp_ipin()</span>
<a name="l00085"></a>00085 <span class="preprocessor"></span>
<a name="l00086"></a>00086 <span class="comment">/* The uip_arp_arpin() should be called when an ARP packet is received</span>
<a name="l00087"></a>00087 <span class="comment">   by the Ethernet driver. This function also assumes that the</span>
<a name="l00088"></a>00088 <span class="comment">   Ethernet frame is present in the uip_buf buffer. When the</span>
<a name="l00089"></a>00089 <span class="comment">   uip_arp_arpin() function returns, the contents of the uip_buf</span>
<a name="l00090"></a>00090 <span class="comment">   buffer should be sent out on the Ethernet if the uip_len variable</span>
<a name="l00091"></a>00091 <span class="comment">   is &gt; 0. */</span>
<a name="l00092"></a>00092 <span class="keywordtype">void</span> <a class="code" href="a00152.html#g902c4a360134096224bc2655f623aa5f">uip_arp_arpin</a>(<span class="keywordtype">void</span>);
<a name="l00093"></a>00093 
<a name="l00094"></a>00094 <span class="comment">/* The uip_arp_out() function should be called when an IP packet</span>
<a name="l00095"></a>00095 <span class="comment">   should be sent out on the Ethernet. This function creates an</span>
<a name="l00096"></a>00096 <span class="comment">   Ethernet header before the IP header in the uip_buf buffer. The</span>
<a name="l00097"></a>00097 <span class="comment">   Ethernet header will have the correct Ethernet MAC destination</span>
<a name="l00098"></a>00098 <span class="comment">   address filled in if an ARP table entry for the destination IP</span>
<a name="l00099"></a>00099 <span class="comment">   address (or the IP address of the default router) is present. If no</span>
<a name="l00100"></a>00100 <span class="comment">   such table entry is found, the IP packet is overwritten with an ARP</span>
<a name="l00101"></a>00101 <span class="comment">   request and we rely on TCP to retransmit the packet that was</span>
<a name="l00102"></a>00102 <span class="comment">   overwritten. In any case, the uip_len variable holds the length of</span>
<a name="l00103"></a>00103 <span class="comment">   the Ethernet frame that should be transmitted. */</span>
<a name="l00104"></a>00104 <span class="keywordtype">void</span> <a class="code" href="a00152.html#g54b27e45df15e10a0eb1a3e3a91417d2">uip_arp_out</a>(<span class="keywordtype">void</span>);
<a name="l00105"></a>00105 
<a name="l00106"></a>00106 <span class="comment">/* The uip_arp_timer() function should be called every ten seconds. It</span>
<a name="l00107"></a>00107 <span class="comment">   is responsible for flushing old entries in the ARP table. */</span>
<a name="l00108"></a>00108 <span class="keywordtype">void</span> <a class="code" href="a00152.html#g058a8e6025f67b021862281f1911fcef">uip_arp_timer</a>(<span class="keywordtype">void</span>);
<a name="l00109"></a>00109 <span class="comment"></span>
<a name="l00110"></a>00110 <span class="comment">/** @} */</span>
<a name="l00111"></a>00111 <span class="comment"></span>
<a name="l00112"></a>00112 <span class="comment">/**</span>
<a name="l00113"></a>00113 <span class="comment"> * \addtogroup uipconffunc</span>
<a name="l00114"></a>00114 <span class="comment"> * @{</span>
<a name="l00115"></a>00115 <span class="comment"> */</span>
<a name="l00116"></a>00116 
<a name="l00117"></a>00117 <span class="comment"></span>
<a name="l00118"></a>00118 <span class="comment">/**</span>
<a name="l00119"></a>00119 <span class="comment"> * Specifiy the Ethernet MAC address.</span>
<a name="l00120"></a>00120 <span class="comment"> *</span>
<a name="l00121"></a>00121 <span class="comment"> * The ARP code needs to know the MAC address of the Ethernet card in</span>
<a name="l00122"></a>00122 <span class="comment"> * order to be able to respond to ARP queries and to generate working</span>
<a name="l00123"></a>00123 <span class="comment"> * Ethernet headers.</span>
<a name="l00124"></a>00124 <span class="comment"> *</span>
<a name="l00125"></a>00125 <span class="comment"> * \note This macro only specifies the Ethernet MAC address to the ARP</span>
<a name="l00126"></a>00126 <span class="comment"> * code. It cannot be used to change the MAC address of the Ethernet</span>
<a name="l00127"></a>00127 <span class="comment"> * card.</span>
<a name="l00128"></a>00128 <span class="comment"> *</span>
<a name="l00129"></a>00129 <span class="comment"> * \param eaddr A pointer to a struct uip_eth_addr containing the</span>
<a name="l00130"></a>00130 <span class="comment"> * Ethernet MAC address of the Ethernet card.</span>
<a name="l00131"></a>00131 <span class="comment"> *</span>
<a name="l00132"></a>00132 <span class="comment"> * \hideinitializer</span>
<a name="l00133"></a>00133 <span class="comment"> */</span>
<a name="l00134"></a><a class="code" href="a00144.html#g30e827f33eacff55ecb4d8fb5a11d5d1">00134</a> <span class="preprocessor">#define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \</span>
<a name="l00135"></a>00135 <span class="preprocessor">                              uip_ethaddr.addr[1] = eaddr.addr[1];\</span>
<a name="l00136"></a>00136 <span class="preprocessor">                              uip_ethaddr.addr[2] = eaddr.addr[2];\</span>
<a name="l00137"></a>00137 <span class="preprocessor">                              uip_ethaddr.addr[3] = eaddr.addr[3];\</span>
<a name="l00138"></a>00138 <span class="preprocessor">                              uip_ethaddr.addr[4] = eaddr.addr[4];\</span>
<a name="l00139"></a>00139 <span class="preprocessor">                              uip_ethaddr.addr[5] = eaddr.addr[5];} while(0)</span>
<a name="l00140"></a>00140 <span class="preprocessor"></span><span class="comment"></span>
<a name="l00141"></a>00141 <span class="comment">/** @} */</span><span class="comment"></span>
<a name="l00142"></a>00142 <span class="comment">/** @} */</span>
<a name="l00143"></a>00143 
<a name="l00144"></a>00144 <span class="preprocessor">#endif </span><span class="comment">/* __UIP_ARP_H__ */</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:01 2006 for uIP 1.0 by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
</body>
</html>