]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/Common/ethernet/uIP/uip-1.0/uip/uip-split.h
Add FreeRTOS-Plus directory.
[freertos] / FreeRTOS / Demo / Common / ethernet / uIP / uip-1.0 / uip / uip-split.h
1 /*\r
2  * Copyright (c) 2004, Swedish Institute of Computer Science.\r
3  * All rights reserved.\r
4  *\r
5  * Redistribution and use in source and binary forms, with or without\r
6  * modification, are permitted provided that the following conditions\r
7  * are met:\r
8  * 1. Redistributions of source code must retain the above copyright\r
9  *    notice, this list of conditions and the following disclaimer.\r
10  * 2. Redistributions in binary form must reproduce the above copyright\r
11  *    notice, this list of conditions and the following disclaimer in the\r
12  *    documentation and/or other materials provided with the distribution.\r
13  * 3. Neither the name of the Institute nor the names of its contributors\r
14  *    may be used to endorse or promote products derived from this software\r
15  *    without specific prior written permission.\r
16  *\r
17  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND\r
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE\r
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
27  * SUCH DAMAGE.\r
28  *\r
29  * This file is part of the uIP TCP/IP stack\r
30  *\r
31  * Author: Adam Dunkels <adam@sics.se>\r
32  *\r
33  * $Id: uip-split.h,v 1.2 2006/06/12 08:00:30 adam Exp $\r
34  */\r
35 /**\r
36  * \addtogroup uip\r
37  * @{\r
38  */\r
39 \r
40 /**\r
41  * \defgroup uipsplit uIP TCP throughput booster hack\r
42  * @{\r
43  *\r
44  * The basic uIP TCP implementation only allows each TCP connection to\r
45  * have a single TCP segment in flight at any given time. Because of\r
46  * the delayed ACK algorithm employed by most TCP receivers, uIP's\r
47  * limit on the amount of in-flight TCP segments seriously reduces the\r
48  * maximum achievable throughput for sending data from uIP.\r
49  *\r
50  * The uip-split module is a hack which tries to remedy this\r
51  * situation. By splitting maximum sized outgoing TCP segments into\r
52  * two, the delayed ACK algorithm is not invoked at TCP\r
53  * receivers. This improves the throughput when sending data from uIP\r
54  * by orders of magnitude.\r
55  *\r
56  * The uip-split module uses the uip-fw module (uIP IP packet\r
57  * forwarding) for sending packets. Therefore, the uip-fw module must\r
58  * be set up with the appropriate network interfaces for this module\r
59  * to work.\r
60  */\r
61 \r
62 \r
63 /**\r
64  * \file\r
65  * Module for splitting outbound TCP segments in two to avoid the\r
66  * delayed ACK throughput degradation.\r
67  * \author\r
68  * Adam Dunkels <adam@sics.se>\r
69  *\r
70  */\r
71 \r
72 #ifndef __UIP_SPLIT_H__\r
73 #define __UIP_SPLIT_H__\r
74 \r
75 /**\r
76  * Handle outgoing packets.\r
77  *\r
78  * This function inspects an outgoing packet in the uip_buf buffer and\r
79  * sends it out using the uip_fw_output() function. If the packet is a\r
80  * full-sized TCP segment it will be split into two segments and\r
81  * transmitted separately. This function should be called instead of\r
82  * the actual device driver output function, or the uip_fw_output()\r
83  * function.\r
84  *\r
85  * The headers of the outgoing packet is assumed to be in the uip_buf\r
86  * buffer and the payload is assumed to be wherever uip_appdata\r
87  * points. The length of the outgoing packet is assumed to be in the\r
88  * uip_len variable.\r
89  *\r
90  */\r
91 void uip_split_output(void);\r
92 \r
93 #endif /* __UIP_SPLIT_H__ */\r
94 \r
95 /** @} */\r
96 /** @} */\r