📄 arp_8c-source.html
字号:
00109 }00110 00111 <span class="comment">// no space in table, we give up</span>00112 }00113 <a name="l00114"></a><a class="code" href="group__arp.html#ga4">00114</a> <span class="keywordtype">void</span> <a class="code" href="group__arp.html#ga4">arpIpOut</a>(<span class="keyword">struct</span> netEthIpHeader* packet, uint32_t phyDstIp)00115 {00116 <span class="keywordtype">int</span> index;00117 <span class="comment">// check if destination is already present in arp table</span>00118 <span class="comment">// use the physical dstIp if it's provided, otherwise the dstIp in packet</span>00119 <span class="keywordflow">if</span>(phyDstIp)00120 index = <a class="code" href="group__arp.html#ga6">arpMatchIp</a>(phyDstIp);00121 <span class="keywordflow">else</span>00122 index = <a class="code" href="group__arp.html#ga6">arpMatchIp</a>(<a class="code" href="group__net.html#ga26">HTONL</a>(packet->ip.destipaddr));00123 <span class="comment">// fill in ethernet info</span>00124 <span class="keywordflow">if</span>(index != -1)00125 {00126 <span class="comment">// ARP entry present, fill eth address(es)</span>00127 packet->eth.src = ArpMyAddr.ethaddr;00128 packet->eth.dest = ArpTable[index].ethaddr;00129 packet->eth.type = <a class="code" href="group__net.html#ga25">HTONS</a>(ETHTYPE_IP);00130 }00131 <span class="keywordflow">else</span>00132 {00133 <span class="comment">// not in table, must send ARP request</span>00134 packet->eth.src = ArpMyAddr.ethaddr;00135 <span class="comment">// MUST CHANGE, but for now, send this one broadcast</span>00136 packet->eth.dest.addr[0] = 0xFF;00137 packet->eth.dest.addr[1] = 0xFF;00138 packet->eth.dest.addr[2] = 0xFF;00139 packet->eth.dest.addr[3] = 0xFF;00140 packet->eth.dest.addr[4] = 0xFF;00141 packet->eth.dest.addr[5] = 0xFF;00142 packet->eth.type = <a class="code" href="group__net.html#ga25">HTONS</a>(ETHTYPE_IP);00143 }00144 }00145 <a name="l00146"></a><a class="code" href="group__arp.html#ga5">00146</a> <span class="keywordtype">void</span> <a class="code" href="group__arp.html#ga5">arpTimer</a>(<span class="keywordtype">void</span>)00147 {00148 <span class="keywordtype">int</span> index;00149 <span class="comment">// this function meant to be called on a regular time interval</span>00150 00151 <span class="comment">// decrement time-to-live for all entries</span>00152 <span class="keywordflow">for</span>(index=0; index<ARP_TABLE_SIZE; index++)00153 {00154 <span class="keywordflow">if</span>(ArpTable[index].time)00155 ArpTable[index].time--;00156 }00157 }00158 <a name="l00159"></a><a class="code" href="group__arp.html#ga6">00159</a> <span class="keywordtype">int</span> <a class="code" href="group__arp.html#ga6">arpMatchIp</a>(uint32_t ipaddr)00160 {00161 uint8_t i;00162 00163 <span class="comment">// check if IP address is present in arp table</span>00164 <span class="keywordflow">for</span>(i=0; i<ARP_TABLE_SIZE; i++)00165 {00166 <span class="keywordflow">if</span>(ArpTable[i].ipaddr == ipaddr)00167 {00168 <span class="comment">// IP address found</span>00169 <span class="keywordflow">return</span> i;00170 }00171 }00172 00173 <span class="comment">// no match</span>00174 <span class="keywordflow">return</span> -1;00175 }00176 00177 <span class="preprocessor">#ifdef ARP_DEBUG_PRINT</span>00178 <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="group__arp.html#ga7">arpPrintHeader</a>(<span class="keyword">struct</span> netArpHeader* packet)00179 {00180 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"ARP Packet:\r\n"</span>);00181 <span class="comment">//debugPrintHexTable(60, (unsigned char*)&packet);</span>00182 <span class="comment">// print operation type</span>00183 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"Operation : "</span>);00184 <span class="keywordflow">if</span>(packet->opcode == <a class="code" href="group__net.html#ga2">htons</a>(ARP_OPCODE_REQUEST))00185 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"REQUEST"</span>);00186 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(packet->opcode == <a class="code" href="group__net.html#ga2">htons</a>(ARP_OPCODE_REPLY))00187 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"REPLY"</span>);00188 <span class="keywordflow">else</span>00189 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"UNKNOWN"</span>);00190 <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00191 <span class="comment">// print source hardware address</span>00192 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"SrcHwAddr : "</span>); <a class="code" href="group__net.html#ga4">netPrintEthAddr</a>(&packet->shwaddr); <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00193 <span class="comment">// print source protocol address</span>00194 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"SrcProtoAddr: "</span>); <a class="code" href="group__net.html#ga5">netPrintIPAddr</a>(<a class="code" href="group__net.html#ga26">HTONL</a>(packet->sipaddr)); <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00195 <span class="comment">// print target hardware address</span>00196 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"DstHwAddr : "</span>); <a class="code" href="group__net.html#ga4">netPrintEthAddr</a>(&packet->dhwaddr); <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00197 <span class="comment">// print target protocol address</span>00198 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"DstProtoAddr: "</span>); <a class="code" href="group__net.html#ga5">netPrintIPAddr</a>(<a class="code" href="group__net.html#ga26">HTONL</a>(packet->dipaddr)); <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00199 }00200 00201 00202 <span class="keywordtype">void</span> <a class="code" href="group__arp.html#ga8">arpPrintTable</a>(<span class="keywordtype">void</span>)00203 {00204 uint8_t i;00205 00206 <span class="comment">// print ARP table</span>00207 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"Time Eth Address IP Address\r\n"</span>);00208 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"---------------------------------------\r\n"</span>);00209 <span class="keywordflow">for</span>(i=0; i<ARP_TABLE_SIZE; i++)00210 {00211 <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(ArpTable[i].time);00212 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">" "</span>);00213 <a class="code" href="group__net.html#ga4">netPrintEthAddr</a>(&ArpTable[i].ethaddr);00214 <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">" "</span>);00215 <a class="code" href="group__net.html#ga5">netPrintIPAddr</a>(ArpTable[i].ipaddr);00216 <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00217 }00218 }00219 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Aug 22 04:29:27 2005 for Procyon AVRlib by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -