⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arp_8c-source.html

📁 单片机的软件
💻 HTML
📖 第 1 页 / 共 2 页
字号:
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-&gt;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-&gt;eth.src  = ArpMyAddr.ethaddr;00128         packet-&gt;eth.dest = ArpTable[index].ethaddr;00129         packet-&gt;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-&gt;eth.src = ArpMyAddr.ethaddr;00135         <span class="comment">// MUST CHANGE, but for now, send this one broadcast</span>00136         packet-&gt;eth.dest.addr[0] = 0xFF;00137         packet-&gt;eth.dest.addr[1] = 0xFF;00138         packet-&gt;eth.dest.addr[2] = 0xFF;00139         packet-&gt;eth.dest.addr[3] = 0xFF;00140         packet-&gt;eth.dest.addr[4] = 0xFF;00141         packet-&gt;eth.dest.addr[5] = 0xFF;00142         packet-&gt;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&lt;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&lt;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*)&amp;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-&gt;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-&gt;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>(&amp;packet-&gt;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-&gt;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>(&amp;packet-&gt;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-&gt;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&lt;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>(&amp;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&nbsp;<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 + -