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

📄 ip_8c-source.html

📁 Freescale mcu OpenTCP-1.0.4.doc.html.zip 文档
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>/opentcp/ip.c Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.2.18 --><center><a class="qindex" href="main.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; <a class="qindex" href="examples.html">Examples</a> &nbsp; </center><hr><h1>/opentcp/ip.c</h1><a href="ip_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">/*</span>00002 <span class="comment"> *Copyright (c) 2000-2002 Viola Systems Ltd.</span>00003 <span class="comment"> *All rights reserved.</span>00004 <span class="comment"> *</span>00005 <span class="comment"> *Redistribution and use in source and binary forms, with or without </span>00006 <span class="comment"> *modification, are permitted provided that the following conditions </span>00007 <span class="comment"> *are met:</span>00008 <span class="comment"> *</span>00009 <span class="comment"> *1. Redistributions of source code must retain the above copyright </span>00010 <span class="comment"> *notice, this list of conditions and the following disclaimer.</span>00011 <span class="comment"> *</span>00012 <span class="comment"> *2. Redistributions in binary form must reproduce the above copyright </span>00013 <span class="comment"> *notice, this list of conditions and the following disclaimer in the </span>00014 <span class="comment"> *documentation and/or other materials provided with the distribution.</span>00015 <span class="comment"> *</span>00016 <span class="comment"> *3. The end-user documentation included with the redistribution, if </span>00017 <span class="comment"> *any, must include the following acknowledgment:</span>00018 <span class="comment"> *      "This product includes software developed by Viola </span>00019 <span class="comment"> *      Systems (http://www.violasystems.com/)."</span>00020 <span class="comment"> *</span>00021 <span class="comment"> *Alternately, this acknowledgment may appear in the software itself, </span>00022 <span class="comment"> *if and wherever such third-party acknowledgments normally appear.</span>00023 <span class="comment"> *</span>00024 <span class="comment"> *4. The names "OpenTCP" and "Viola Systems" must not be used to </span>00025 <span class="comment"> *endorse or promote products derived from this software without prior </span>00026 <span class="comment"> *written permission. For written permission, please contact </span>00027 <span class="comment"> *opentcp@opentcp.org.</span>00028 <span class="comment"> *</span>00029 <span class="comment"> *5. Products derived from this software may not be called "OpenTCP", </span>00030 <span class="comment"> *nor may "OpenTCP" appear in their name, without prior written </span>00031 <span class="comment"> *permission of the Viola Systems Ltd.</span>00032 <span class="comment"> *</span>00033 <span class="comment"> *THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED </span>00034 <span class="comment"> *WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF </span>00035 <span class="comment"> *MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. </span>00036 <span class="comment"> *IN NO EVENT SHALL VIOLA SYSTEMS LTD. OR ITS CONTRIBUTORS BE LIABLE </span>00037 <span class="comment"> *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR </span>00038 <span class="comment"> *CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF </span>00039 <span class="comment"> *SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR </span>00040 <span class="comment"> *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, </span>00041 <span class="comment"> *WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE </span>00042 <span class="comment"> *OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, </span>00043 <span class="comment"> *EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>00044 <span class="comment"> *====================================================================</span>00045 <span class="comment"> *</span>00046 <span class="comment"> *OpenTCP is the unified open source TCP/IP stack available on a series </span>00047 <span class="comment"> *of 8/16-bit microcontrollers, please see &lt;http://www.opentcp.org&gt;.</span>00048 <span class="comment"> *</span>00049 <span class="comment"> *For more information on how to network-enable your devices, or how to </span>00050 <span class="comment"> *obtain commercial technical support for OpenTCP, please see </span>00051 <span class="comment"> *&lt;http://www.violasystems.com/&gt;.</span>00052 <span class="comment"> */</span>00053 00070 <span class="preprocessor">#include &lt;<a class="code" href="debug_8h.html">inet/debug.h</a>&gt;</span>00071 <span class="preprocessor">#include &lt;<a class="code" href="datatypes_8h.html">inet/datatypes.h</a>&gt;</span>00072 <span class="preprocessor">#include &lt;<a class="code" href="ethernet_8h.html">inet/ethernet.h</a>&gt;</span>00073 <span class="preprocessor">#include &lt;<a class="code" href="arp_8h.html">inet/arp.h</a>&gt;</span>00074 <span class="preprocessor">#include &lt;<a class="code" href="ip_8h.html">inet/ip.h</a>&gt;</span>00075 <span class="preprocessor">#include &lt;<a class="code" href="system_8h.html">inet/system.h</a>&gt;</span>00076 00077 <a name="l00085"></a><a class="code" href="ip_8c.html#a0">00085</a> <span class="keyword">struct </span><a class="code" href="structip__frame.html">ip_frame</a> received_ip_packet;00086 <a name="l00095"></a><a class="code" href="ip_8c.html#a1">00095</a> <span class="keyword">struct </span><a class="code" href="structip__frame.html">ip_frame</a> send_ip_packet;00096 <a name="l00097"></a><a class="code" href="ip_8c.html#a2">00097</a> UINT16 <a class="code" href="ip_8c.html#a2">ip_id</a>;   <a name="l00115"></a><a class="code" href="ip_8c.html#a3">00115</a> INT16 <a class="code" href="ip_8c.html#a3">process_ip_in</a> (<span class="keyword">struct</span> <a class="code" href="structethernet__frame.html">ethernet_frame</a>* frame)00116 {00117 00118         UINT8 olen;00119         UINT8 i;00120         00121         <span class="comment">/* Check for Protocol                                                           */</span>00122         00123         IP_DEBUGOUT(<span class="stringliteral">"Checking if IP Protocol\n\r"</span>);00124         00125         <span class="keywordflow">if</span>( frame-&gt;<a class="code" href="structethernet__frame.html#m3">protocol</a> != <a class="code" href="ethernet_8h.html#a4">PROTOCOL_IP</a> )00126                 <span class="keywordflow">return</span>(-1);00127         00128         00129         IP_DEBUGOUT(<span class="stringliteral">"It's IP\n\r"</span>);00130         00131         <span class="keywordflow">if</span>( frame-&gt;<a class="code" href="structethernet__frame.html#m2">frame_size</a> &lt; ETH_HEADER_LEN )00132                 <span class="keywordflow">return</span>(-1);00133                 00134         <span class="keywordflow">if</span>( (frame-&gt;<a class="code" href="structethernet__frame.html#m2">frame_size</a> - ETH_HEADER_LEN) &lt; IP_HLEN )00135                 <span class="keywordflow">return</span>(-1); 00136                                 00137         <span class="comment">/* Get IP Header Information                                            */</span>00138                 00139         <a class="code" href="system_8h.html#a14">NETWORK_RECEIVE_INITIALIZE</a>(frame-&gt;<a class="code" href="structethernet__frame.html#m4">buf_index</a>);00140                 00141         received_ip_packet.<a class="code" href="structip__frame.html#m0">vihl</a> = <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();00142                 00143         <span class="comment">/* Is it IPv4?  */</span>00144                 00145         <span class="keywordflow">if</span>( (received_ip_packet.<a class="code" href="structip__frame.html#m0">vihl</a> &amp; 0xF0) != 0x40 ) {00146                 IP_DEBUGOUT(<span class="stringliteral">"ERROR: IP is not version 4!\n\r"</span>);00147                 <span class="keywordflow">return</span>(-1);00148         }00149                 00150         IP_DEBUGOUT(<span class="stringliteral">"IP Version 4 OK!\n\r"</span>);    00151                 00152         received_ip_packet.<a class="code" href="structip__frame.html#m1">tos</a> = <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();                                           00153         00154         received_ip_packet.<a class="code" href="structip__frame.html#m2">tlen</a> = ((UINT16)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 8;00155         received_ip_packet.<a class="code" href="structip__frame.html#m2">tlen</a> |= <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();00156                 00157         received_ip_packet.<a class="code" href="structip__frame.html#m3">id</a> = ((UINT16)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 8;00158         received_ip_packet.<a class="code" href="structip__frame.html#m3">id</a> |= <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();00159                 00160         received_ip_packet.<a class="code" href="structip__frame.html#m4">frags</a> = ((UINT16)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 8;00161         received_ip_packet.<a class="code" href="structip__frame.html#m4">frags</a> |= <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();00162                 00163         received_ip_packet.<a class="code" href="structip__frame.html#m5">ttl</a>= <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();00164                 00165         received_ip_packet.<a class="code" href="structip__frame.html#m6">protocol</a>= <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();00166                 00167         received_ip_packet.<a class="code" href="structip__frame.html#m7">checksum</a> = ((UINT16)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 8;00168         received_ip_packet.<a class="code" href="structip__frame.html#m7">checksum</a> |= <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();00169                 00170         received_ip_packet.<a class="code" href="structip__frame.html#m8">sip</a> = (((UINT32)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 24);00171         received_ip_packet.<a class="code" href="structip__frame.html#m8">sip</a> |= (((UINT32)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 16);00172         received_ip_packet.<a class="code" href="structip__frame.html#m8">sip</a> |= (((UINT32)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 8);00173         received_ip_packet.<a class="code" href="structip__frame.html#m8">sip</a> |= <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();00174                 00175         received_ip_packet.<a class="code" href="structip__frame.html#m9">dip</a> = (((UINT32)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 24);00176         received_ip_packet.<a class="code" href="structip__frame.html#m9">dip</a> |= (((UINT32)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 16);00177         received_ip_packet.<a class="code" href="structip__frame.html#m9">dip</a> |= (((UINT32)<a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>()) &lt;&lt; 8);00178         received_ip_packet.<a class="code" href="structip__frame.html#m9">dip</a> |= <a class="code" href="system_8h.html#a9">RECEIVE_NETWORK_B</a>();00179 00180         <span class="comment">/* Is that packet for us?                       */</span>00181 00182 00183         <span class="keywordflow">if</span>((received_ip_packet.<a class="code" href="structip__frame.html#m9">dip</a> != localmachine.localip )&amp;&amp;00184                 (received_ip_packet.<a class="code" href="structip__frame.html#m9">dip</a> != IP_BROADCAST_ADDRESS)) {00185 00186                 <span class="comment">/* It's not for us. Check still if ICMP with rigth physical     */</span>00187                 <span class="comment">/* address that migth be used to set temporary IP                       */</span>00188                 00189                 IP_DEBUGOUT(<span class="stringliteral">"IP address does not match!\n\r"</span>);00190                 00191                 <span class="keywordflow">if</span>( received_ip_packet.<a class="code" href="structip__frame.html#m6">protocol</a> != <a class="code" href="ip_8h.html#a1">IP_ICMP</a>) 00192                         <span class="keywordflow">return</span>(-1);00193                         00194                 <span class="comment">/* Check physical address                       */</span>00195                 00196                 <span class="keywordflow">for</span>(i=0; i&lt;<a class="code" href="ip_8h.html#a0">PHY_ADR_LEN</a>; i++)00197                 {00198                         <span class="keywordflow">if</span>(frame-&gt;<a class="code" href="structethernet__frame.html#m0">destination</a>[i] != localmachine.localHW[i])00199                                 <span class="keywordflow">return</span>(-1);00200                 }       00201 00202         }00203         00204         00205         <span class="comment">/* Is there options to copy?            */</span>00206                 

⌨️ 快捷键说明

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