📄 arp_8c-source.html
字号:
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 < 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 = &arp_table[i];00752 00753 qstruct-><a class="code" href="structarp__entry.html#m5">pradr</a> = machine->defgw; <span class="comment">/* Fill IP */</span>00754 qstruct-><a class="code" href="structarp__entry.html#m4">hwadr</a>[0] = 0xFF; <span class="comment">/* Fill Broadcast IP */</span>00755 qstruct-><a class="code" href="structarp__entry.html#m4">hwadr</a>[1] = 0xFF;00756 qstruct-><a class="code" href="structarp__entry.html#m4">hwadr</a>[2] = 0xFF;00757 qstruct-><a class="code" href="structarp__entry.html#m4">hwadr</a>[3] = 0xFF;00758 qstruct-><a class="code" href="structarp__entry.html#m4">hwadr</a>[4] = 0xFF;00759 qstruct-><a class="code" href="structarp__entry.html#m4">hwadr</a>[5] = 0xFF;00760 qstruct-><a class="code" href="structarp__entry.html#m2">retries</a> = <a class="code" href="group__opentcp__config.html#a3">ARP_MAXRETRY</a>;00761 qstruct-><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-><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<ARP_TSIZE; i++ ) {00801 <span class="comment">/* DEBUGOUT("."); */</span>00802 00803 qstruct = &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 >= ARP_TSIZE)00811 aenext = 0; 00812 00813 <span class="keywordflow">if</span>( qstruct-><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-><a class="code" href="structarp__entry.html#m3">ttl</a> > 0 ) <span class="comment">/* Aging */</span>00819 qstruct-><a class="code" href="structarp__entry.html#m3">ttl</a> --;00820 00821 <span class="keywordflow">if</span>( qstruct-><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-><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-><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-><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-><a class="code" href="structarp__entry.html#m2">retries</a> > 0 ) 00838 qstruct-><a class="code" href="structarp__entry.html#m2">retries</a>--;00839 00840 <span class="keywordflow">if</span>( qstruct-><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-><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-><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-><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-><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-><a class="code" href="structarp__entry.html#m5">pradr</a> == IP_BROADCAST_ADDRESS) {00867 qstruct-><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-><a class="code" href="structarp__entry.html#m2">retries</a> > 0 ) 00874 qstruct-><a class="code" href="structarp__entry.html#m2">retries</a>--;00875 00876 <span class="keywordflow">if</span>( qstruct-><a class="code" href="structarp__entry.html#m2">retries</a> == 0 )00877 qstruct-><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-><a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a15">ARP_REFRESHING</a>;00880 00881 qstruct-><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<ARP_TSIZE; i++ ) {00918 qstruct = &arp_table[i];00919 00920 qstruct-><a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a11">ARP_FREE</a>;00921 qstruct-><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 = &arp_table[0];00932 qstruct-><a class="code" href="structarp__entry.html#m5">pradr</a> = IP_BROADCAST_ADDRESS;00933 qstruct-><a class="code" href="structarp__entry.html#m0">state</a> = <a class="code" href="arp_8h.html#a14">ARP_RESOLVED</a>;00934 qstruct-><a class="code" href="structarp__entry.html#m1">type</a> = <a class="code" href="arp_8h.html#a16">ARP_FIXED_IP</a>;00935 qstruct-><a class="code" href="structarp__entry.html#m3">ttl</a> = <a class="code" href="group__opentcp__config.html#a1">ARP_TIMEOUT</a>;00936 qstruct-><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<<a class="code" href="arp_8h.html#a0">MAXHWALEN</a>; i++)00939 qstruct-><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 & machine-><a class="code" href="structnetif.html#m3">netmask</a>; <span class="comment">/* Get Subnet part */</span>00966 00967 ltemp ^= (machine-><a class="code" href="structnetif.html#m0">localip</a> & machine-><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 + -