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

📄 arp_8c-source.html

📁 Freescale mcu OpenTCP-1.0.4.doc.html.zip 文档
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00502                 <span class="comment">/* Move to next entry */</span>00503         00504                 aenext = (aenext + 1);00505                 <span class="keywordflow">if</span>( aenext &gt;= ARP_TSIZE )00506                         aenext = 1;00507                         00508         }00509         00510         00511         <span class="comment">/* Was there free or temporary entries? */</span>00512         00513         <span class="keywordflow">if</span>( found == (-1) )00514                 <span class="keywordflow">return</span>(-1);00515                 00516         <span class="comment">/* Next time start from next entry      */</span>00517         00518         aenext = (aenext + 1);  00519         <span class="keywordflow">if</span>( aenext &gt;= ARP_TSIZE )00520                 aenext = 1;             00521 00522         qstruct = &amp;arp_table[found];00523         00524         <span class="comment">/* Set ARP initial parameters   */</span>00525         00526         qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a12">ARP_RESERVED</a>;00527         qstruct-&gt;<a class="code" href="structarp__entry.html#m1">type</a> = type;00528         00529         <span class="comment">/* Was return(i)!!! &lt;-wrong!!   */</span>00530         00531         <span class="keywordflow">return</span>((UINT8)found);00532 00533 00534 }<a name="l00552"></a><a class="code" href="arp_8c.html#a7">00552</a> INT8 <a class="code" href="arp_8c.html#a7">arp_add</a> (UINT32 pra, UINT8* hwadr, UINT8 type)00553 {00554         <span class="keyword">struct </span><a class="code" href="structarp__entry.html">arp_entry</a> *qstruct;00555         INT8 i;00556         INT8 j;00557 00558         <span class="keywordflow">for</span>( i=0; i&lt;ARP_TSIZE; i++ ) {00559                 qstruct = &amp;arp_table[i];00560                 00561                 <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> )00562                         <span class="keywordflow">continue</span>;00563                         00564                 <span class="keywordflow">if</span>((qstruct-&gt;<a class="code" href="structarp__entry.html#m5">pradr</a> == pra)&amp;&amp;(pra != IP_BROADCAST_ADDRESS)) {00565                         <span class="comment">/* The address is in cache, refresh it   */</span>00566                         00567                         ARP_DEBUGOUT(<span class="stringliteral">" Refreshing Existing ARP Entry..\n\r"</span>);00568                 00569                         <span class="keywordflow">for</span>( j=0; j&lt;<a class="code" href="arp_8h.html#a0">MAXHWALEN</a>; j++ )            00570                                 qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[j] = *hwadr++;00571                                 00572                         qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> = <a class="code" href="group__opentcp__config.html#a1">ARP_TIMEOUT</a>;00573                         qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a> = <a class="code" href="group__opentcp__config.html#a3">ARP_MAXRETRY</a>;00574                         qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a14">ARP_RESOLVED</a>;00575         00576                         <span class="comment">/* All OK       */</span>00577                 00578                         <span class="keywordflow">return</span> (0);     00579                 }00580         00581         }00582         00583         <span class="keywordflow">if</span>(<a class="code" href="arp_8c.html#a11">is_subnet</a>(pra,&amp;localmachine) == <a class="code" href="system_8h.html#a2">FALSE</a>){00584                 <span class="keywordflow">return</span> (-1);00585         }00586         00587         <span class="keywordflow">if</span>( localmachine.defgw == pra ) {00588                 <span class="keywordflow">if</span>(localmachine.defgw != 0) {00589                         type = <a class="code" href="arp_8h.html#a16">ARP_FIXED_IP</a>;00590                 }00591         }00592 00593         00594         <span class="comment">/* Address was'nt on cache. Need to allocate new one    */</span>00595         00596         ARP_DEBUGOUT(<span class="stringliteral">"Allocating New ARP Entry..\n\r"</span>);00597         00598         i = <a class="code" href="arp_8c.html#a6">arp_alloc</a>(type);00599         00600         <span class="keywordflow">if</span>( i &lt; 0 )                             <span class="comment">/* No Entries Left?     */</span>00601                 <span class="keywordflow">return</span>(-1);00602                         00603         <span class="comment">/* Fill the fields              */</span>00604                 00605         qstruct = &amp;arp_table[i];00606                 00607         qstruct-&gt;<a class="code" href="structarp__entry.html#m5">pradr</a> = pra;                                                                           <span class="comment">/* Fill IP                              */</span>00608         00609         <span class="keywordflow">for</span>(i=0; i&lt;<a class="code" href="arp_8h.html#a0">MAXHWALEN</a>; i++)00610                 qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[i] = *hwadr++;                                                   <span class="comment">/* Fill HW address              */</span>00611 00612         qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a> = <a class="code" href="group__opentcp__config.html#a3">ARP_MAXRETRY</a>;00613         qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> = <a class="code" href="group__opentcp__config.html#a1">ARP_TIMEOUT</a>;00614         qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a14">ARP_RESOLVED</a>;                          00615         00616         ARP_DEBUGOUT(<span class="stringliteral">"ARP Entry Created!..\n\r"</span>);00617 00618         <span class="keywordflow">return</span>(1);00619 00620 }00621  <a name="l00639"></a><a class="code" href="arp_8c.html#a8">00639</a> <span class="keyword">struct </span><a class="code" href="structarp__entry.html">arp_entry</a>* arp_find (LWORD pra, struct netif *machine, UINT8 type)00640 {00641         <span class="keyword">struct </span><a class="code" href="structarp__entry.html">arp_entry</a> *qstruct;00642         INT8 i;00643         00644         ARP_DEBUGOUT(<span class="stringliteral">"Trying to find MAC address from ARP Cache\n\r"</span>);00645         00646         <span class="comment">/* Is the address in the cache  */</span>00647         00648         <span class="keywordflow">for</span>( i=0; i&lt;ARP_TSIZE; i++ ) {00649                 qstruct = &amp;arp_table[i];00650                 00651                 <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> )00652                         <span class="keywordflow">continue</span>;00653                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m5">pradr</a> == pra) {00654                         <span class="comment">/* The address is in cache, is it valid? */</span>00655                         00656                         ARP_DEBUGOUT(<span class="stringliteral">"Address In Cache\n\r"</span>);00657                         00658                         <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> &lt; <a class="code" href="arp_8h.html#a14">ARP_RESOLVED</a> ) {00659                                 ARP_DEBUGOUT(<span class="stringliteral">"Address in cache but unresolved :(\n\r"</span>);00660                                 <span class="keywordflow">return</span>(0);00661                         }00662                         <span class="comment">/* All OK       */</span>00663                 00664                         <span class="keywordflow">return</span>(qstruct);        00665                 }00666         00667         }00668         00669         <span class="comment">/* The address wasn't on the cache. Is it in our Subnet?        */</span>00670         00671         <span class="keywordflow">if</span>( <a class="code" href="arp_8c.html#a11">is_subnet</a>(pra, machine) ) {00672                 <span class="comment">/* Yep, we need to send ARP REQUEST     */</span>00673                 00674                 ARP_DEBUGOUT(<span class="stringliteral">"Need to send ARP Request to local network..\n\r"</span>);00675                 00676                 <span class="keywordflow">if</span>( machine-&gt;defgw == pra ) {00677                         <span class="keywordflow">if</span>(machine-&gt;defgw != 0) {00678                                 type = <a class="code" href="arp_8h.html#a16">ARP_FIXED_IP</a>;00679                         }00680                 }00681                 i = <a class="code" href="arp_8c.html#a6">arp_alloc</a>(type);00682                 00683                 <span class="keywordflow">if</span>( i &lt; 0 )                             <span class="comment">/* No Entries Left?     */</span>00684                         <span class="keywordflow">return</span>(0);00685                         00686                 <span class="comment">/* Send Request after filling the fields        */</span>00687                 00688                 qstruct = &amp;arp_table[i];00689                 00690                 qstruct-&gt;<a class="code" href="structarp__entry.html#m5">pradr</a> = pra;                                           <span class="comment">/* Fill IP                              */</span>00691                 qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[0] = 0xFF;                                       <span class="comment">/* Fill Broadcast IP    */</span>00692                 qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[1] = 0xFF;00693                 qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[2] = 0xFF;00694                 qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[3] = 0xFF;00695                 qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[4] = 0xFF;00696                 qstruct-&gt;<a class="code" href="structarp__entry.html#m4">hwadr</a>[5] = 0xFF;00697                 qstruct-&gt;<a class="code" href="structarp__entry.html#m2">retries</a> = <a class="code" href="group__opentcp__config.html#a3">ARP_MAXRETRY</a>;00698                 qstruct-&gt;<a class="code" href="structarp__entry.html#m3">ttl</a> = <a class="code" href="group__opentcp__config.html#a2">ARP_RESEND</a>;00699                 <a class="code" href="arp_8c.html#a5">arp_send_req</a>( i );00700                 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>00701                 00702                 <span class="keywordflow">return</span>(0);00703         00704         } 00705 00706         <span class="comment">/* The Address belongst to the outern world, need to use MAC of                 */</span>00707         <span class="comment">/* Default Gateway                                                                                                              */</span>00708         00709         ARP_DEBUGOUT(<span class="stringliteral">"Need to use MAC of Default GW\n\r"</span>);00710         00711         <span class="comment">/* Check for Broadcast                                                                                                  */</span>00712         00713         <span class="keywordflow">if</span>(machine-&gt;defgw == 0)                         <span class="comment">/* It's not specified   */</span>00714                 <span class="keywordflow">return</span>(0);00715         00716         00717         <span class="keywordflow">for</span>( i=0; i&lt;ARP_TSIZE; i++ ) {00718                 qstruct = &amp;arp_table[i];00719                 00720                 <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> )00721                         <span class="keywordflow">continue</span>;00722                         00723                 <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m5">pradr</a> == machine-&gt;defgw ) {00724                         <span class="comment">/* The address is in cache, is it valid? */</span>00725                  00726                         00727                         <span class="keywordflow">if</span>( qstruct-&gt;<a class="code" href="structarp__entry.html#m0">state</a> &lt; <a class="code" href="arp_8h.html#a14">ARP_RESOLVED</a> ) {00728                                 ARP_DEBUGOUT(<span class="stringliteral">"The Address of Def. GW is not Solved!\n\r"</span>);00729                                 <span class="keywordflow">return</span>(0);00730                         }00731                 00732                         <span class="comment">/* All OK       */</span>00733                         00734                         ARP_DEBUGOUT(<span class="stringliteral">" &gt;&gt; Default Gateway MAC found!\n\r"</span>);00735                 00736                         <span class="keywordflow">return</span>(qstruct);00737                                 

⌨️ 快捷键说明

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