1*10465441SEvalZero<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2*10465441SEvalZero<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> 3*10465441SEvalZero<title>uIP 1.0: uIP TCP throughput booster hack</title> 4*10465441SEvalZero<link href="doxygen.css" rel="stylesheet" type="text/css"> 5*10465441SEvalZero<link href="tabs.css" rel="stylesheet" type="text/css"> 6*10465441SEvalZero</head><body> 7*10465441SEvalZero<!-- Generated by Doxygen 1.4.6 --> 8*10465441SEvalZero<div class="tabs"> 9*10465441SEvalZero <ul> 10*10465441SEvalZero <li><a href="main.html"><span>Main Page</span></a></li> 11*10465441SEvalZero <li><a href="modules.html"><span>Modules</span></a></li> 12*10465441SEvalZero <li><a href="classes.html"><span>Data Structures</span></a></li> 13*10465441SEvalZero <li><a href="files.html"><span>Files</span></a></li> 14*10465441SEvalZero <li><a href="examples.html"><span>Examples</span></a></li> 15*10465441SEvalZero </ul></div> 16*10465441SEvalZero<h1>uIP TCP throughput booster hack<br> 17*10465441SEvalZero<small> 18*10465441SEvalZero[<a class="el" href="a00150.html">The uIP TCP/IP stack</a>]</small> 19*10465441SEvalZero</h1><hr><a name="_details"></a><h2>Detailed Description</h2> 20*10465441SEvalZeroThe basic uIP TCP implementation only allows each TCP connection to have a single TCP segment in flight at any given time. 21*10465441SEvalZero<p> 22*10465441SEvalZeroBecause of the delayed ACK algorithm employed by most TCP receivers, uIP's limit on the amount of in-flight TCP segments seriously reduces the maximum achievable throughput for sending data from uIP.<p> 23*10465441SEvalZeroThe uip-split module is a hack which tries to remedy this situation. By splitting maximum sized outgoing TCP segments into two, the delayed ACK algorithm is not invoked at TCP receivers. This improves the throughput when sending data from uIP by orders of magnitude.<p> 24*10465441SEvalZeroThe uip-split module uses the uip-fw module (uIP IP packet forwarding) for sending packets. Therefore, the uip-fw module must be set up with the appropriate network interfaces for this module to work. 25*10465441SEvalZero<p> 26*10465441SEvalZero<table border="0" cellpadding="0" cellspacing="0"> 27*10465441SEvalZero<tr><td></td></tr> 28*10465441SEvalZero<tr><td colspan="2"><br><h2>Files</h2></td></tr> 29*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">file </td><td class="memItemRight" valign="bottom"><a class="el" href="a00134.html">uip-split.h</a></td></tr> 30*10465441SEvalZero 31*10465441SEvalZero<tr><td class="mdescLeft"> </td><td class="mdescRight">Module for splitting outbound TCP segments in two to avoid the delayed ACK throughput degradation. <br></td></tr> 32*10465441SEvalZero 33*10465441SEvalZero<p> 34*10465441SEvalZero<tr><td colspan="2"><br><h2>Functions</h2></td></tr> 35*10465441SEvalZero<tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00154.html#gb4b17aaf20d630f30919b19937b966a3">uip_split_output</a> (void)</td></tr> 36*10465441SEvalZero 37*10465441SEvalZero<tr><td class="mdescLeft"> </td><td class="mdescRight">Handle outgoing packets. <a href="#gb4b17aaf20d630f30919b19937b966a3"></a><br></td></tr> 38*10465441SEvalZero</table> 39*10465441SEvalZero<hr><h2>Function Documentation</h2> 40*10465441SEvalZero<a class="anchor" name="gb4b17aaf20d630f30919b19937b966a3"></a><!-- doxytag: member="uip-split.h::uip_split_output" ref="gb4b17aaf20d630f30919b19937b966a3" args="(void)" --><p> 41*10465441SEvalZero<table class="mdTable" cellpadding="2" cellspacing="0"> 42*10465441SEvalZero <tr> 43*10465441SEvalZero <td class="mdRow"> 44*10465441SEvalZero <table cellpadding="0" cellspacing="0" border="0"> 45*10465441SEvalZero <tr> 46*10465441SEvalZero <td class="md" nowrap valign="top">void uip_split_output </td> 47*10465441SEvalZero <td class="md" valign="top">( </td> 48*10465441SEvalZero <td class="md" nowrap valign="top">void </td> 49*10465441SEvalZero <td class="mdname1" valign="top" nowrap> </td> 50*10465441SEvalZero <td class="md" valign="top"> ) </td> 51*10465441SEvalZero <td class="md" nowrap></td> 52*10465441SEvalZero </tr> 53*10465441SEvalZero </table> 54*10465441SEvalZero </td> 55*10465441SEvalZero </tr> 56*10465441SEvalZero</table> 57*10465441SEvalZero<table cellspacing="5" cellpadding="0" border="0"> 58*10465441SEvalZero <tr> 59*10465441SEvalZero <td> 60*10465441SEvalZero 61*10465441SEvalZero </td> 62*10465441SEvalZero <td> 63*10465441SEvalZero 64*10465441SEvalZero<p> 65*10465441SEvalZeroHandle outgoing packets. 66*10465441SEvalZero<p> 67*10465441SEvalZeroThis function inspects an outgoing packet in the uip_buf buffer and sends it out using the uip_fw_output() function. If the packet is a full-sized TCP segment it will be split into two segments and transmitted separately. This function should be called instead of the actual device driver output function, or the uip_fw_output() function.<p> 68*10465441SEvalZeroThe headers of the outgoing packet is assumed to be in the uip_buf buffer and the payload is assumed to be wherever uip_appdata points. The length of the outgoing packet is assumed to be in the uip_len variable. 69*10465441SEvalZero<p> 70*10465441SEvalZeroDefinition at line <a class="el" href="a00199.html#l00049">49</a> of file <a class="el" href="a00199.html">uip-split.c</a>. 71*10465441SEvalZero<p> 72*10465441SEvalZeroReferences <a class="el" href="a00201.html#l00226">BUF</a>, <a class="el" href="a00201.html#l00192">uip_acc32</a>, <a class="el" href="a00201.html#l00249">uip_add32()</a>, <a class="el" href="a00201.html#l00143">uip_appdata</a>, <a class="el" href="a00206.html#l00379">UIP_BUFSIZE</a>, <a class="el" href="a00201.html#l00318">uip_ipchksum()</a>, <a class="el" href="a00202.html#l01518">UIP_IPH_LEN</a>, <a class="el" href="a00201.html#l00155">uip_len</a>, <a class="el" href="a00206.html#l00448">UIP_LLH_LEN</a>, <a class="el" href="a00202.html#l01510">UIP_PROTO_TCP</a>, <a class="el" href="a00201.html#l00364">uip_tcpchksum()</a>, and <a class="el" href="a00202.html#l01528">UIP_TCPIP_HLEN</a>. </td> 73*10465441SEvalZero </tr> 74*10465441SEvalZero</table> 75*10465441SEvalZero<hr size="1"><address style="align: right;"><small>Generated on Mon Jun 12 10:23:02 2006 for uIP 1.0 by 76*10465441SEvalZero<a href="http://www.doxygen.org/index.html"> 77*10465441SEvalZero<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address> 78*10465441SEvalZero</body> 79*10465441SEvalZero</html> 80