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