uIP 1.0
|
00001 /* 00002 * Copyright (c) 2004, Swedish Institute of Computer Science. 00003 * Все права зарезервированы. * 00004 * Повторное распространение, использование в исходном и двоичном виде, 00005 * с модификацией или без - разрешается, если выполняются следующие 00006 * условия: 00007 * 1. Распространение исходного кода должно сохранить вышеуказанную пометку 00008 * копирайта, этот список условий и следующую правовую оговорку. 00009 * 2. Распространение исходного кода должно сохранить вышеуказанную пометку 00010 * копирайта, этот список условий и следующую правовую оговорку в 00011 * документации и/или других материалах, которые будут предоставлены 00012 * вместе с распространяемыми материалами. 00013 * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть 00014 * продукты, написанные с использованием этого программного обеспечения 00015 * без специального на то разрешения. 00016 * 00017 * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ 00018 * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ, 00019 * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ 00020 * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН 00021 * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ 00022 * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ 00023 * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ; 00024 * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, 00025 * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ 00026 * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ 00027 * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ 00028 * ТАКОГО ПОВРЕЖДЕНИЯ. 00029 * 00030 * Этот файл является частью стека uIP TCP/IP. 00031 * 00032 * Author: Adam Dunkels <adam@sics.se> 00033 * 00034 * $Id: uip-split.h,v 1.2 2006/06/12 08:00:30 adam Exp $ 00035 */ 00036 /** 00037 * \addtogroup uip 00038 * @{ 00039 */ 00040 00041 /** 00042 * \defgroup uipsplit Хак для ускорения пропускной способности uIP TCP 00043 * @{ 00044 * 00045 * Базовая реализация uIP TCP разрешает иметь в обработке каждый момент 00046 * времени только один сегмент TCP на каждое соединение TCP. Из-за 00047 * алгоритма отложенного ACK, реализованного в большинстве приемников 00048 * TCP, ограничение uIP на количество сегментов TCP в обработке серьезно 00049 * снижает максимально допустимую пропускную способность, когда uIP 00050 * передает данные. 00051 * 00052 * Модуль uip-split является хаком, который пытается исправить эту 00053 * ситуацию. Путем разбиения на две части исходящих сегментов 00054 * максимального размера алгоритм отложенного ACK не будет задействован 00055 * в приемниках TCP. Это улучшает быстродействие на порядок при отправке 00056 * данных из uIP. 00057 * 00058 * Модуль uip-split использует модуль uip-fw (uIP IP packet forwarding, 00059 * перенаправление пакетов) для отправки пакетов. Таким образом, модуль 00060 * uip-fw должен быть настроен с походящим сетевым интерфейсом, чтобы 00061 * этот модуль мог работать. 00062 */ 00063 00064 00065 /** 00066 * \file 00067 * Модуль для разделения уходящих сегментов TCP на две части, чтобы 00068 * обойти delayed ACK и уменьшить деградацию пропускной способности. 00069 * \author 00070 * Adam Dunkels <adam@sics.se> 00071 * 00072 */ 00073 00074 #ifndef __UIP_SPLIT_H__ 00075 #define __UIP_SPLIT_H__ 00076 00077 /** 00078 * Обработка исходящих пакетов. 00079 * 00080 * Эта функция инспектирует исходящий пакет в буфере uip_buf и 00081 * отправляет его с использованием функции uip_fw_output(). Если пакет 00082 * занимает полноразмерный сегмент TCP, то он будет разбит на 2 00083 * сегмента, которые будут переданы по отдельности. Эта функция должна 00084 * быть вызвана вместо действительной выходной функции драйвера 00085 * устройства, или функции uip_fw_output(). 00086 * 00087 * Подразумевается, что заголовки исходящего пакета находятся в 00088 * буфере uip_buf, и подразумевается, что полезная нагрузка 00089 * находится в любом месте, куда указывает uip_appdata. Также 00090 * подразумевается, что длина исходящего пакета находится в 00091 * переменной uip_len. 00092 * 00093 */ 00094 void uip_split_output(void); 00095 00096 #endif /* __UIP_SPLIT_H__ */ 00097 00098 /** @} */ 00099 /** @} */