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

📄 a00201.html

📁 uip-1.0,give everyone who want.
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00344"></a>00344   <span class="comment">/* Sum IP source and destination addresses. */</span><a name="l00345"></a>00345   sum = chksum(sum, (<a class="code" href="a00153.html#g4caecabca98b43919dd11be1c0d4cd8e">u8_t</a> *)&amp;<a class="code" href="a00150.html#g24f52ac52d6e714cb04a5aa01be3bdd0">BUF</a>-&gt;srcipaddr[0], 2 * <span class="keyword">sizeof</span>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a>));<a name="l00346"></a>00346 <a name="l00347"></a>00347   <span class="comment">/* Sum TCP header and data. */</span><a name="l00348"></a>00348   sum = chksum(sum, &amp;uip_buf[<a class="code" href="a00150.html#g6bc12c6c7b56f73ce5d57abfdcdc6eb5">UIP_IPH_LEN</a> + <a class="code" href="a00153.html#ge6f4a2453dbd8bc60e6a82774552366a">UIP_LLH_LEN</a>],<a name="l00349"></a>00349                upper_layer_len);<a name="l00350"></a>00350     <a name="l00351"></a>00351   <span class="keywordflow">return</span> (sum == 0) ? 0xffff : <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(sum);<a name="l00352"></a>00352 }<a name="l00353"></a>00353 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00354"></a>00354 <span class="preprocessor">#if UIP_CONF_IPV6</span><a name="l00355"></a>00355 <span class="preprocessor"></span><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a><a name="l00356"></a>00356 uip_icmp6chksum(<span class="keywordtype">void</span>)<a name="l00357"></a>00357 {<a name="l00358"></a>00358   <span class="keywordflow">return</span> upper_layer_chksum(<a class="code" href="a00150.html#gad0321f4c570f9983c6de81ece3ddc20">UIP_PROTO_ICMP6</a>);<a name="l00359"></a>00359   <a name="l00360"></a>00360 }<a name="l00361"></a>00361 <span class="preprocessor">#endif </span><span class="comment">/* UIP_CONF_IPV6 */</span><a name="l00362"></a>00362 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00363"></a>00363 <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a><a name="l00364"></a><a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">00364</a> <a class="code" href="a00150.html#g85b65e38aa74eba18979156f97a94a87">uip_tcpchksum</a>(<span class="keywordtype">void</span>)<a name="l00365"></a>00365 {<a name="l00366"></a>00366   <span class="keywordflow">return</span> upper_layer_chksum(<a class="code" href="a00150.html#g517c770991459cc62dc009c0d3875c6a">UIP_PROTO_TCP</a>);<a name="l00367"></a>00367 }<a name="l00368"></a>00368 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00369"></a>00369 <span class="preprocessor">#if UIP_UDP_CHECKSUMS</span><a name="l00370"></a>00370 <span class="preprocessor"></span><a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a><a name="l00371"></a>00371 <a class="code" href="a00150.html#g7023a34ba9e9d03b5fbedbcb32924453">uip_udpchksum</a>(<span class="keywordtype">void</span>)<a name="l00372"></a>00372 {<a name="l00373"></a>00373   <span class="keywordflow">return</span> upper_layer_chksum(<a class="code" href="a00150.html#gf72d7b9a737707dcfb2c41fec2b6792e">UIP_PROTO_UDP</a>);<a name="l00374"></a>00374 }<a name="l00375"></a>00375 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP_CHECKSUMS */</span><a name="l00376"></a>00376 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ARCH_CHKSUM */</span><a name="l00377"></a>00377 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00378"></a>00378 <span class="keywordtype">void</span><a name="l00379"></a><a class="code" href="a00150.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">00379</a> <a class="code" href="a00145.html#gc48ed5f0d27721ef62a3ed02a5ad8d2e">uip_init</a>(<span class="keywordtype">void</span>)<a name="l00380"></a>00380 {<a name="l00381"></a>00381   <span class="keywordflow">for</span>(c = 0; c &lt; <a class="code" href="a00153.html#g8f4ebd8ef6c0ea665ed351d87fec09fd">UIP_LISTENPORTS</a>; ++c) {<a name="l00382"></a>00382     uip_listenports[c] = 0;<a name="l00383"></a>00383   }<a name="l00384"></a>00384   <span class="keywordflow">for</span>(c = 0; c &lt; <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++c) {<a name="l00385"></a>00385     <a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c].tcpstateflags = <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>;<a name="l00386"></a>00386   }<a name="l00387"></a>00387 <span class="preprocessor">#if UIP_ACTIVE_OPEN</span><a name="l00388"></a>00388 <span class="preprocessor"></span>  lastport = 1024;<a name="l00389"></a>00389 <span class="preprocessor">#endif </span><span class="comment">/* UIP_ACTIVE_OPEN */</span><a name="l00390"></a>00390 <a name="l00391"></a>00391 <span class="preprocessor">#if UIP_UDP</span><a name="l00392"></a>00392 <span class="preprocessor"></span>  <span class="keywordflow">for</span>(c = 0; c &lt; <a class="code" href="a00153.html#g196379ceb1219a99f4495e41ccc9bbfb">UIP_UDP_CONNS</a>; ++c) {<a name="l00393"></a>00393     <a class="code" href="a00150.html#geb533744817cf6695d75293369c2248b">uip_udp_conns</a>[c].lport = 0;<a name="l00394"></a>00394   }<a name="l00395"></a>00395 <span class="preprocessor">#endif </span><span class="comment">/* UIP_UDP */</span><a name="l00396"></a>00396   <a name="l00397"></a>00397 <a name="l00398"></a>00398   <span class="comment">/* IPv4 initialization. */</span><a name="l00399"></a>00399 <span class="preprocessor">#if UIP_FIXEDADDR == 0</span><a name="l00400"></a>00400 <span class="preprocessor"></span>  <span class="comment">/*  uip_hostaddr[0] = uip_hostaddr[1] = 0;*/</span><a name="l00401"></a>00401 <span class="preprocessor">#endif </span><span class="comment">/* UIP_FIXEDADDR */</span><a name="l00402"></a>00402 <a name="l00403"></a>00403 }<a name="l00404"></a>00404 <span class="comment">/*---------------------------------------------------------------------------*/</span><a name="l00405"></a>00405 <span class="preprocessor">#if UIP_ACTIVE_OPEN</span><a name="l00406"></a>00406 <span class="preprocessor"></span><span class="keyword">struct </span><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a> *<a name="l00407"></a><a class="code" href="a00150.html#g9c24fba2cd8f7f62accb0a0d5bbe4dad">00407</a> <a class="code" href="a00147.html#g8096b0c4b543dc408f4dd031ddae7240">uip_connect</a>(<a class="code" href="a00150.html#g1ef35301f43a5bbb9f89f07b5a36b9a0">uip_ipaddr_t</a> *<a class="code" href="a00088.html#79510aa86d3fa0a0fc6cfc49b1da7279">ripaddr</a>, <a class="code" href="a00153.html#g77570ac4fcab86864fa1916e55676da2">u16_t</a> <a class="code" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">rport</a>)<a name="l00408"></a>00408 {<a name="l00409"></a>00409   <span class="keyword">register</span> <span class="keyword">struct </span><a class="code" href="a00150.html#g788ffac72342f6172343d7f8099cbe1a">uip_conn</a> *conn, *cconn;<a name="l00410"></a>00410   <a name="l00411"></a>00411   <span class="comment">/* Find an unused local port. */</span><a name="l00412"></a>00412  again:<a name="l00413"></a>00413   ++lastport;<a name="l00414"></a>00414 <a name="l00415"></a>00415   <span class="keywordflow">if</span>(lastport &gt;= 32000) {<a name="l00416"></a>00416     lastport = 4096;<a name="l00417"></a>00417   }<a name="l00418"></a>00418 <a name="l00419"></a>00419   <span class="comment">/* Check if this port is already in use, and if so try to find</span><a name="l00420"></a>00420 <span class="comment">     another one. */</span><a name="l00421"></a>00421   <span class="keywordflow">for</span>(c = 0; c &lt; <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++c) {<a name="l00422"></a>00422     conn = &amp;<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c];<a name="l00423"></a>00423     <span class="keywordflow">if</span>(conn-&gt;<a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> != <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a> &amp;&amp;<a name="l00424"></a>00424        conn-&gt;<a class="code" href="a00088.html#0cd09beee671e7e9efb0b4aced10249e">lport</a> == <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(lastport)) {<a name="l00425"></a>00425       <span class="keywordflow">goto</span> again;<a name="l00426"></a>00426     }<a name="l00427"></a>00427   }<a name="l00428"></a>00428 <a name="l00429"></a>00429   conn = 0;<a name="l00430"></a>00430   <span class="keywordflow">for</span>(c = 0; c &lt; <a class="code" href="a00153.html#gf5fe83be78b78b9e7d9e7f1e34ab1cc5">UIP_CONNS</a>; ++c) {<a name="l00431"></a>00431     cconn = &amp;<a class="code" href="a00150.html#gf703683056d2bfa5c81fa157dcb20fe2">uip_conns</a>[c];<a name="l00432"></a>00432     <span class="keywordflow">if</span>(cconn-&gt;tcpstateflags == <a class="code" href="a00150.html#g28eda870cff3d8e3cf2949e6f57a502b">UIP_CLOSED</a>) {<a name="l00433"></a>00433       conn = cconn;<a name="l00434"></a>00434       <span class="keywordflow">break</span>;<a name="l00435"></a>00435     }<a name="l00436"></a>00436     <span class="keywordflow">if</span>(cconn-&gt;tcpstateflags == <a class="code" href="a00150.html#gfff0ed43201bf1e2020de1a0d6cac070">UIP_TIME_WAIT</a>) {<a name="l00437"></a>00437       <span class="keywordflow">if</span>(conn == 0 ||<a name="l00438"></a>00438          cconn-&gt;timer &gt; conn-&gt;timer) {<a name="l00439"></a>00439         conn = cconn;<a name="l00440"></a>00440       }<a name="l00441"></a>00441     }<a name="l00442"></a>00442   }<a name="l00443"></a>00443 <a name="l00444"></a>00444   <span class="keywordflow">if</span>(conn == 0) {<a name="l00445"></a>00445     <span class="keywordflow">return</span> 0;<a name="l00446"></a>00446   }<a name="l00447"></a>00447   <a name="l00448"></a>00448   conn-&gt;<a class="code" href="a00088.html#a5f58074435cdc180f17de69651beebd">tcpstateflags</a> = <a class="code" href="a00150.html#g8af482dec973db57d8b3bd3f69461488">UIP_SYN_SENT</a>;<a name="l00449"></a>00449 <a name="l00450"></a>00450   conn-&gt;snd_nxt[0] = iss[0];<a name="l00451"></a>00451   conn-&gt;snd_nxt[1] = iss[1];<a name="l00452"></a>00452   conn-&gt;snd_nxt[2] = iss[2];<a name="l00453"></a>00453   conn-&gt;snd_nxt[3] = iss[3];<a name="l00454"></a>00454 <a name="l00455"></a>00455   conn-&gt;initialmss = conn-&gt;mss = <a class="code" href="a00153.html#g4910467b83a639f06739c82cd362037e">UIP_TCP_MSS</a>;<a name="l00456"></a>00456   <a name="l00457"></a>00457   conn-&gt;len = 1;   <span class="comment">/* TCP length of the SYN is one. */</span><a name="l00458"></a>00458   conn-&gt;nrtx = 0;<a name="l00459"></a>00459   conn-&gt;timer = 1; <span class="comment">/* Send the SYN next time around. */</span><a name="l00460"></a>00460   conn-&gt;rto = <a class="code" href="a00153.html#g15de27b044603284f68db05a378235a7">UIP_RTO</a>;<a name="l00461"></a>00461   conn-&gt;sa = 0;<a name="l00462"></a>00462   conn-&gt;sv = 16;   <span class="comment">/* Initial value of the RTT variance. */</span><a name="l00463"></a>00463   conn-&gt;lport = <a class="code" href="a00148.html#ga22b04cac8cf283ca12f028578bebc06">htons</a>(lastport);<a name="l00464"></a>00464   conn-&gt;rport = <a class="code" href="a00088.html#1df6aa054ef2fa634ac4c6f418228285">rport</a>;

⌨️ 快捷键说明

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