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

📄 arp_8c-source.html

📁 Freescale mcu OpenTCP-1.0.4.doc.html.zip 文档
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00738                 }00739         00740         }00741         00742         ARP_DEBUGOUT(<span class="stringliteral">"Need to send ARP Request to default gateway..\n\r"</span>);00743                 00744         i = <a class="code" href="arp_8c.html#a6">arp_alloc</a>(<a class="code" href="arp_8h.html#a16">ARP_FIXED_IP</a>);00745                 00746         <span class="keywordflow">if</span>( i &lt; 0 )                             <span class="comment">/* No Entries Left?     */</span>00747                 <span class="keywordflow">return</span>(0);00748                         00749         <span class="comment">/* Send Request after filling the fields        */</span>00750                 00751         qstruct = &amp;arp_table[i];00752                 00753         qstruct-&gt;<a class="code" href="structarp__entry.html#m5">pradr</a> = machine-&gt;defgw;                                                <span class="comment">/* Fill IP                              */</span>00754         qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[0] = 0xFF;                                       <span class="comment">/* Fill Broadcast IP    */</span>00755         qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[1] = 0xFF;00756         qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[2] = 0xFF;00757         qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[3] = 0xFF;00758         qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[4] = 0xFF;00759         qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[5] = 0xFF;00760         qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a> = <a class="code" href="group__opentcp__config.html#a3">ARP_MAXRETRY</a>;00761         qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> = <a class="code" href="group__opentcp__config.html#a2">ARP_RESEND</a>;00762         <a class="code" href="arp_8c.html#a5">arp_send_req</a>( i );00763         qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a13">ARP_PENDING</a>;                           <span class="comment">/* Waiting for Reply    */</span>00764         00765         <span class="keywordflow">return</span>(0);00766 00767         00768 }00769 00770 <a name="l00785"></a><a class="code" href="arp_8c.html#a0">00785</a> <span class="keywordtype">void</span> <a class="code" href="group__periodic__functions.html#a0">arp_manage</a> (<span class="keywordtype">void</span>)00786 {00787         <span class="keyword">struct </span><a class="code" href="structarp__entry.html">arp_entry</a> *qstruct;00788         UINT8 i,j;00789         <span class="keyword">static</span> UINT8 aenext=0;00790         00791         <span class="comment">/* Check Timer before entering  */</span>00792         00793         <span class="keywordflow">if</span>( <a class="code" href="timers_8c.html#a7">check_timer</a>(<a class="code" href="arp_8c.html#a1">arp_timer</a>) )00794                 <span class="keywordflow">return</span>;00795                 00796         <a class="code" href="timers_8c.html#a6">init_timer</a>( <a class="code" href="arp_8c.html#a1">arp_timer</a>, ARP_MANG_TOUT*<a class="code" href="timers_8h.html#a1">TIMERTIC</a>);00797         00798         <span class="comment">/* DEBUGOUT("Managing ARP Cache\n\r"); */</span>00799         00800         <span class="keywordflow">for</span>( i=0; i&lt;ARP_TSIZE; i++ ) {00801                 <span class="comment">/* DEBUGOUT("."); */</span>00802         00803                 qstruct = &amp;arp_table[aenext];00804                 00805                 j = aenext;00806                 00807                 <span class="comment">/* Take next entry next time    */</span>00808                                 00809                 aenext++;00810                 <span class="keywordflow">if</span>(aenext &gt;= ARP_TSIZE)00811                         aenext = 0;     00812         00813                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> == <a class="code" href="arp_8h.html#a11">ARP_FREE</a> )00814                         <span class="keywordflow">continue</span>;00815                         00816                 <span class="comment">/* TODO: How about ARP_RESERVED?        */</span>00817                         00818                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> &gt; 0 )                          <span class="comment">/* Aging                */</span>00819                         qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> --;00820                 00821                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> == 0 ) {                       <span class="comment">/* Timed Out?   */</span>00822                         <span class="comment">/* Do it for temporay entries   */</span>00823                         00824                         ARP_DEBUGOUT(<span class="stringliteral">"Found Timed out Entry..\n\r"</span>);00825                 00826                         <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m1">type</a> == <a class="code" href="arp_8h.html#a17">ARP_TEMP_IP</a> ) {00827 00828                                 <span class="comment">/* Release it?  */</span>00829                                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> == <a class="code" href="arp_8h.html#a14">ARP_RESOLVED</a> ) {  00830                                         ARP_DEBUGOUT(<span class="stringliteral">"Releasing ARP Entry..\n\r"</span>);00831                                         qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a11">ARP_FREE</a>;00832                                         <span class="keywordflow">continue</span>;00833                                 }00834                                 00835                                 <span class="comment">/* Decrease retries left        */</span>00836                                 00837                                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a> &gt; 0 )      00838                                         qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a>--;00839                                 00840                                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a> == 0 )     {00841                                         ARP_DEBUGOUT(<span class="stringliteral">"ARP Replies Used up, releasing entry..\n\r"</span>);00842                                         qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a11">ARP_FREE</a>;00843                                         <span class="keywordflow">continue</span>;00844                                 }00845                                 00846                                 <span class="comment">/* So we need to resend ARP request     */</span>00847                                 00848                                 ARP_DEBUGOUT(<span class="stringliteral">"Trying to Resolve dynamic ARP Entry..\n\r"</span>);00849                         00850                                 qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> = <a class="code" href="group__opentcp__config.html#a2">ARP_RESEND</a>;00851                                 <a class="code" href="arp_8c.html#a5">arp_send_req</a>( j );00852                                 qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a13">ARP_PENDING</a>;                           <span class="comment">/* Waiting for Reply    */</span>                      00853                                 00854                                 <span class="keywordflow">return</span>;00855                         00856                         }00857                 00858                         <span class="comment">/* Do it for Static Entries                     */</span>00859                 00860                         <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m1">type</a> == <a class="code" href="arp_8h.html#a16">ARP_FIXED_IP</a> ) {00861                                 00862                                 <span class="comment">/* So we need to resend ARP request     */</span>00863                                 00864                                 <span class="comment">/* Do not try to refresh broadcast      */</span>00865                                 00866                                 <span class="keywordflow">if</span>(qstruct-&gt;<a class="code" href="structarp__entry.html#m5">pradr</a> == IP_BROADCAST_ADDRESS)      {00867                                         qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> = <a class="code" href="group__opentcp__config.html#a1">ARP_TIMEOUT</a>;00868                                         <span class="keywordflow">continue</span>;00869                                 }00870                                 00871                                 ARP_DEBUGOUT(<span class="stringliteral">"Refreshing Static ARP Entry..\n\r"</span>);00872                                 00873                                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a> &gt; 0 )      00874                                         qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a>--;00875                                 00876                                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a> == 0 )00877                                         qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a13">ARP_PENDING</a>;00878                                 <span class="keywordflow">else</span>00879                                         qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a15">ARP_REFRESHING</a>;00880                         00881                                 qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> = <a class="code" href="group__opentcp__config.html#a2">ARP_RESEND</a>;00882                                 00883                                 <a class="code" href="arp_8c.html#a5">arp_send_req</a>( j );00884                                 00885                                 <span class="keywordflow">return</span>;00886                         00887                         }00888                 00889                 }00890         00891         }00892 00893 00894 }00895 00896 00897 <a name="l00910"></a><a class="code" href="arp_8c.html#a0">00910</a> <span class="keywordtype">void</span> <a class="code" href="group__core__initializer.html#a0">arp_init</a> (<span class="keywordtype">void</span>)00911 {00912         <span class="keyword">struct </span><a class="code" href="structarp__entry.html">arp_entry</a> *qstruct;00913         INT8 i;00914         00915         ARP_DEBUGOUT(<span class="stringliteral">"Initializing ARP"</span>);00916         00917         <span class="keywordflow">for</span>( i=0; i&lt;ARP_TSIZE; i++ ) {00918                 qstruct = &amp;arp_table[i];00919                 00920                 qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a11">ARP_FREE</a>;00921                 qstruct-&gt;<a class="code" href="structarp__entry.html#m1">type</a> = <a class="code" href="arp_8h.html#a17">ARP_TEMP_IP</a>;00922                 00923                 ARP_DEBUGOUT(<span class="stringliteral">"."</span>);00924         }00925         00926         <a class="code" href="arp_8c.html#a1">arp_timer</a> = <a class="code" href="timers_8c.html#a2">get_timer</a>();00927         <a class="code" href="timers_8c.html#a6">init_timer</a>(<a class="code" href="arp_8c.html#a1">arp_timer</a>, ARP_MANG_TOUT*<a class="code" href="timers_8h.html#a1">TIMERTIC</a>);00928 00929         <span class="comment">/* set broadcast entry  */</span>00930         00931         qstruct = &amp;arp_table[0];00932         qstruct-&gt;<a class="code" href="structarp__entry.html#m5">pradr</a> = IP_BROADCAST_ADDRESS;00933         qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a14">ARP_RESOLVED</a>;00934         qstruct-&gt;<a class="code" href="structarp__entry.html#m1">type</a> = <a class="code" href="arp_8h.html#a16">ARP_FIXED_IP</a>;00935         qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> = <a class="code" href="group__opentcp__config.html#a1">ARP_TIMEOUT</a>;00936         qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a> = <a class="code" href="group__opentcp__config.html#a3">ARP_MAXRETRY</a>;        00937         00938         <span class="keywordflow">for</span>(i=0; i&lt;<a class="code" href="arp_8h.html#a0">MAXHWALEN</a>; i++)00939                 qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[i] = 0xFF;                                                       00940         00941         ARP_DEBUGOUT(<span class="stringliteral">"\n\r"</span>);00942         00943 }<a name="l00960"></a><a class="code" href="arp_8c.html#a11">00960</a> BYTE <a class="code" href="arp_8c.html#a11">is_subnet</a> (LWORD ipadr, <span class="keyword">struct</span> netif* machine)00961 {00962 00963         UINT32 ltemp;00964 00965         ltemp = ipadr &amp; machine-&gt;<a class="code" href="structnetif.html#m3">netmask</a>;                                               <span class="comment">/* Get Subnet part      */</span>00966         00967         ltemp ^= (machine-&gt;<a class="code" href="structnetif.html#m0">localip</a> &amp; machine-&gt;<a class="code" href="structnetif.html#m3">netmask</a>);                 <span class="comment">/* Compare to my IP     */</span>00968         00969         <span class="keywordflow">if</span>( ltemp )00970                 <span class="keywordflow">return</span>(FALSE);00971         00972         <span class="keywordflow">return</span>(TRUE);00973 00974 }</pre></div><hr><address style="align: right;"><small>Generated on Sun Aug 3 20:32:59 2003 for OpenTCP by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.18 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -