uIP 1.0
C:/asm/STM32-ethernet/ENC28J60prj/uip-master/uip/uip-split.h
См. документацию.
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 /** @} */