uIP 1.0
|
00001 /** 00002 * \addtogroup uip 00003 * {@ 00004 */ 00005 00006 /** 00007 * \defgroup uiparch Функции uIP, специфичные для архитектуры 00008 * @{ 00009 * 00010 * Функции в модуле, который привязан к архитектуре, для ускоренного 00011 * вычисления контрольной суммы IP и 32-битных сложений. 00012 * 00013 * Вычисление контрольной суммы IP - наиболее затратная по вычислениям 00014 * операция в стеке TCP/IP, поэтому её имеет смысл переписать на 00015 * эффективном ассемблере. Назначание модуля uip-arch - позволить 00016 * реализовать функции контрольной суммы на ассемблере, привязанном 00017 * к архитектуре. 00018 * 00019 */ 00020 00021 /** 00022 * \file 00023 * Декларирование функций, специфичных для архитектуры. 00024 * \author Adam Dunkels <adam@dunkels.com> 00025 */ 00026 00027 /* 00028 * Copyright (c) 2001, Adam Dunkels. 00029 * Все права зарезервированы. * 00030 * Повторное распространение, использование в исходном и двоичном виде, 00031 * с модификацией или без - разрешается, если выполняются следующие 00032 * условия: 00033 * 1. Распространение исходного кода должно сохранить вышеуказанную пометку 00034 * копирайта, этот список условий и следующую правовую оговорку. 00035 * 2. Распространение исходного кода должно сохранить вышеуказанную пометку 00036 * копирайта, этот список условий и следующую правовую оговорку в 00037 * документации и/или других материалах, которые будут предоставлены 00038 * вместе с распространяемыми материалами. 00039 * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть 00040 * продукты, написанные с использованием этого программного обеспечения 00041 * без специального на то разрешения. 00042 * 00043 * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ 00044 * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ, 00045 * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ 00046 * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН 00047 * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ 00048 * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ 00049 * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ; 00050 * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, 00051 * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ 00052 * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ 00053 * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ 00054 * ТАКОГО ПОВРЕЖДЕНИЯ. 00055 * 00056 * Этот файл является частью стека uIP TCP/IP. 00057 * 00058 * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $ 00059 * 00060 */ 00061 00062 #ifndef __UIP_ARCH_H__ 00063 #define __UIP_ARCH_H__ 00064 00065 #include "uip.h" 00066 00067 /** 00068 * Выполнение 32-разрядного сложения. 00069 * 00070 * ПОскольку не все архитектуры, для которых предназначена uIP, 00071 * имеют встроенную 32-битную арифметику, uIP использует внешнюю функцию 00072 * на языке C для выполнения 32-битных прибавлений, требуемых в обработке 00073 * протоколов TCP. Эта функция должна сложить 2 аргумента, и поместить 00074 * результат в глобальную переменную uip_acc32. 00075 * 00076 * \note 32-битное целое указывается параметром op32, и результат в 00077 * переменной uip_acc32 с сетевым порядком байт (big endian, старший байт 00078 * идет первым, младший последним). 00079 * 00080 * \param op32 Указатель на 4-байтный массив, представляющий 32-битное 00081 * целое число с сетевым порядком байт (big endian). 00082 * 00083 * \param op16 16-битное целое с порядком байт хоста. 00084 */ 00085 void uip_add32(u8_t *op32, u16_t op16); 00086 00087 /** 00088 * Вычисление контрольной суммы Internet от данных буфера. 00089 * 00090 * Контрольная сумма Internet является дополнением до единицы от суммы 00091 * с дополнением до единицы всех 16-битных слов в буфере. 00092 * 00093 * См. RFC1071. 00094 * 00095 * \note Эта функция не вызывается в текущей версии uIP, но будущие 00096 * версии могут её использовать. 00097 * 00098 * \param buf Указатель на буфер, от которого будет вычисляться 00099 * контрольная сумма. 00100 * 00101 * \param len Длина буфера, от данных которого вычисляется контрольная 00102 * сумма. 00103 * 00104 * \return Контрольная сумма Internet буфера. 00105 */ 00106 u16_t uip_chksum(u16_t *buf, u16_t len); 00107 00108 /** 00109 * Вычисляет контрольную сумму заголовка IP от заголовка пакета, который 00110 * находится в uip_buf. 00111 * 00112 * Контрольная сумма заголовка является контрольной суммой Internet 00113 * от 20 байт заголовка IP. 00114 * 00115 * \return Контрольная сумма заголовка IP от заголовка IP, который находится 00116 * в буфере uip_buf. 00117 */ 00118 u16_t uip_ipchksum(void); 00119 00120 /** 00121 * Вычисление контрольной суммы TCP пакета, находящегося в uip_buf 00122 * и uip_appdata. 00123 * 00124 * Контрольная сумма TCP является контрольной суммой Internet от содержимого 00125 * данных сегмента TCP и псевдозаголовка, определенного в RFC793. 00126 * 00127 * \note uip_appdata является указателем, указывающим на данные пакета, 00128 * и он может указывать на любое место в памяти, так что нельзя просто 00129 * вычислить контрольную сумму Internet от содержимого буфера uip_buf. 00130 * 00131 * \return Контрольная сумма TCP сегмента TCP, находящегося в uip_buf, 00132 * в том месте, на которое указывает uip_appdata. 00133 */ 00134 u16_t uip_tcpchksum(void); 00135 00136 u16_t uip_udpchksum(void); 00137 00138 /** @} */ 00139 /** @} */ 00140 00141 #endif /* __UIP_ARCH_H__ */