uIP 1.0
|
00001 /** 00002 * \defgroup uipopt Опции конфигурации для uIP 00003 * @{ 00004 * 00005 * uIP конфигурируется файлом uipopt.h, который сопровождает проект. 00006 * Этот файл содержит все опции времени компиляции для uIP, и он должен 00007 * быть настроен под специфику каждого проекта. Распространяемый 00008 * пакет uIP содержит документированный пример "uipopt.h" который может 00009 * скопирован и модифицирован для каждого проекта. 00010 * 00011 * \note Большинство опций конфигурации uipopt.h не должны быть изменены, 00012 * основные изменения делаются в файле uip-conf.h. 00013 */ 00014 00015 /** 00016 * \file 00017 * Опции конфигурирования для uIP. 00018 * \author Adam Dunkels <adam@dunkels.com> 00019 * 00020 * Это файл используется для подстройки различных опций конфигурации 00021 * для uIP. Вам нужно сделать копию этого файла в каталог Вашего проекта, 00022 * вместо того, чтобы редактировать этот файл примера "uipopt.h", который 00023 * поставляется вместе с распространяемым пакетом uIP. 00024 */ 00025 00026 /* 00027 * Copyright (c) 2001-2003, Adam Dunkels. 00028 * Все права зарезервированы. * 00029 * Повторное распространение, использование в исходном и двоичном виде, 00030 * с модификацией или без - разрешается, если выполняются следующие 00031 * условия: 00032 * 1. Распространение исходного кода должно сохранить вышеуказанную пометку 00033 * копирайта, этот список условий и следующую правовую оговорку. 00034 * 2. Распространение исходного кода должно сохранить вышеуказанную пометку 00035 * копирайта, этот список условий и следующую правовую оговорку в 00036 * документации и/или других материалах, которые будут предоставлены 00037 * вместе с распространяемыми материалами. 00038 * 3. Имя автора не может использоваться, чтобы подтвердить или продвинуть 00039 * продукты, написанные с использованием этого программного обеспечения 00040 * без специального на то разрешения. 00041 * 00042 * ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ АВТОРОМ ``КАК ЕСТЬ'', БЕЗ 00043 * КАКОЙ-ЛИБО ЛЮБОЙ РАСШИРЕННОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ГАРАНТИИ, ВКЛЮЧАЯ, 00044 * НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ГАРАНТИИ ВЫСОКОГО СПРОСА И ПРИГОДНОСТИ 00045 * ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. АВТОР НИ ПРИ КАКИХ УСЛОВИЯХ НЕ ОТВЕТСТВЕНЕН 00046 * ЗА ЛЮБЫЕ УБЫТКИ - ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОБРАЗЦОВЫЕ 00047 * ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ЭТИМ, ТРЕБОВАНИЯ 00048 * ЗАМЕНЫ ТОВАРА ИЛИ СЕРВИСА; ПОТЕРИ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ВЫГОДЫ; 00049 * ИЛИ ПРЕКРАЩЕНИЕ БИЗНЕСА), ОДНАКО ВЫЗВАННЫЕ ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, 00050 * ЛИБО В КОНТРАКТЕ, ПРЯМОЙ ОТВЕТСТВЕННОСТИ, ЛИБО В НАРУШЕНИИ ЗАКОННЫХ ПРАВ 00051 * (ВКЛЮЧАЯ ТАК ИЛИ ИНАЧЕ НЕБРЕЖНОСТЬ), ВОЗНИКАЮЩИЕ ВСЕГДА ИЗ ИСПОЛЬЗОВАНИЯ 00052 * ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ БЫЛО ПРЕДУПРЕЖДЕНИЕ О ВОЗМОЖНОСТИ 00053 * ТАКОГО ПОВРЕЖДЕНИЯ. 00054 * 00055 * Этот файл является частью стека uIP TCP/IP. 00056 * 00057 * $Id: uipopt.h,v 1.4 2006/06/12 08:00:31 adam Exp $ 00058 * 00059 */ 00060 00061 #ifndef __UIPOPT_H__ 00062 #define __UIPOPT_H__ 00063 00064 #ifndef UIP_LITTLE_ENDIAN 00065 #define UIP_LITTLE_ENDIAN 3412 00066 #endif /* UIP_LITTLE_ENDIAN */ 00067 #ifndef UIP_BIG_ENDIAN 00068 #define UIP_BIG_ENDIAN 1234 00069 #endif /* UIP_BIG_ENDIAN */ 00070 00071 #include "uip-conf.h" 00072 00073 /*------------------------------------------------------------------------------*/ 00074 00075 /** 00076 * \name Статические опции конфигурации 00077 * @{ 00078 * 00079 * Эти опции конфигурации могут использоваться для статической установки 00080 * адреса IP, но только в том случае, если UIP_FIXEDADDR установлен в 1. 00081 * Опции конфигурации для отдельного сетевого узла включают адрес IP, маску 00082 * подсети (netmask) а адрес шлюза по умолчанию (default router), как и адрес 00083 * Ethernet (MAC-адрес). Маска подсети, адрес шлюза и адрес Ethernet нужны 00084 * только тогда, когда uIP будет работать через Ethernet. 00085 * 00086 * Все это можно поменять, чтобы настройки удовлетворяли Вашему проекту. 00087 */ 00088 00089 /** 00090 * Определяет - должен ли использоваться в uIP фиксированный адрес IP, или нет. 00091 * 00092 * Если uIP должна использовать фиксированный адрес IP, то его установка 00093 * задается в файле uipopt.h. Если нет, то вместо этого должны использоваться 00094 * макросы uip_setdraddr() и uip_setnetmask(). 00095 * 00096 * \hideinitializer 00097 */ 00098 #define UIP_FIXEDADDR 0 00099 00100 /** 00101 * Назначение адреса IP для ping. 00102 * 00103 * uIP использует пакеты "ping" для установки своего собственного адреса, если 00104 * эта опция установлена. Если так, то uIP начнет работу с пустого адреса IP, 00105 * и адрес назначения первого же пришедшего пакета "ping" (ICMP echo) будет 00106 * использоваться для установки адреса IP своего хоста. 00107 * 00108 * \note Это работает только если UIP_FIXEDADDR установлен в 0. 00109 * 00110 * \hideinitializer 00111 */ 00112 #ifdef UIP_CONF_PINGADDRCONF 00113 #define UIP_PINGADDRCONF UIP_CONF_PINGADDRCONF 00114 #else /* UIP_CONF_PINGADDRCONF */ 00115 #define UIP_PINGADDRCONF 0 00116 #endif /* UIP_CONF_PINGADDRCONF */ 00117 00118 00119 /** 00120 * Указывает, должен ли модуль uIP ARP быть скомпилирован с фиксированным 00121 * адресом Ethernet MAC, или нет. 00122 * 00123 * Если эта опция конфигурации установлена в 0, то может использоваться макрос 00124 * uip_setethaddr() для того, чтобы указать Ethernet-адрес (MAC) во время 00125 * выполнения кода (run-time). 00126 * 00127 * \hideinitializer 00128 */ 00129 #define UIP_FIXEDETHADDR 0 00130 00131 /** @} */ 00132 /*------------------------------------------------------------------------------*/ 00133 /** 00134 * \name Опции конфигурации IP 00135 * @{ 00136 * 00137 */ 00138 /** 00139 * IP TTL (время жизни, time to live) пакетов IP, отправляемых uIP. 00140 * 00141 * Эта настройка обычно не должна меняться. 00142 */ 00143 #define UIP_TTL 64 00144 00145 /** 00146 * Включить поддержку пересборки пакетов IP (IP packet reassembly). 00147 * 00148 * uIP поддерживает пересборку фрагментированных пакетов IP. Эта фича 00149 * требует дополнительное количество RAM, чтобы иметь буфер пересборки, 00150 * и код подпрограмм для пересборки занимает примерно 700 байт. Буфер 00151 * пересборки имеет такой же размер, как и буфер uip_buf (размер, 00152 * сконфигурированный макроопределением UIP_BUFSIZE). 00153 * 00154 * \note Пересборка пакетов IP не была тщательно протестирована. 00155 * 00156 * \hideinitializer 00157 */ 00158 #define UIP_REASSEMBLY 0 00159 00160 /** 00161 * Максимальное время ожидание фрагмента IP в буфере пересборки, после 00162 * истечения которого фрагмент будет отброшен. 00163 * 00164 */ 00165 #define UIP_REASS_MAXAGE 40 00166 00167 /** @} */ 00168 00169 /*------------------------------------------------------------------------------*/ 00170 /** 00171 * \name Опции конфигурации UDP 00172 * @{ 00173 */ 00174 00175 /** 00176 * Переключает, должна компилироваться поддержка UDP или нет. 00177 * 00178 * \hideinitializer 00179 */ 00180 #ifdef UIP_CONF_UDP 00181 #define UIP_UDP UIP_CONF_UDP 00182 #else /* UIP_CONF_UDP */ 00183 #define UIP_UDP 0 00184 #endif /* UIP_CONF_UDP */ 00185 00186 /** 00187 * Переключает, должна использоваться контрольная сумма UDP или нет. 00188 * 00189 * \note Поддержка контрольных сумм UDP в настоящее время не добавлена в uIP, 00190 * так что эта опция не работает. 00191 * 00192 * \hideinitializer 00193 */ 00194 #ifdef UIP_CONF_UDP_CHECKSUMS 00195 #define UIP_UDP_CHECKSUMS UIP_CONF_UDP_CHECKSUMS 00196 #else 00197 #define UIP_UDP_CHECKSUMS 0 00198 #endif 00199 00200 /** 00201 * Максимальное количество конкурирующих соединений UDP. 00202 * 00203 * \hideinitializer 00204 */ 00205 #ifdef UIP_CONF_UDP_CONNS 00206 #define UIP_UDP_CONNS UIP_CONF_UDP_CONNS 00207 #else /* UIP_CONF_UDP_CONNS */ 00208 #define UIP_UDP_CONNS 10 00209 #endif /* UIP_CONF_UDP_CONNS */ 00210 00211 /** 00212 * Имя функции, которая должна быть вызвана, когда приходят датаграммы UDP. 00213 * 00214 * \hideinitializer 00215 */ 00216 00217 00218 /** @} */ 00219 /*------------------------------------------------------------------------------*/ 00220 /** 00221 * \name Опции конфигурирования TCP 00222 * @{ 00223 */ 00224 00225 /** 00226 * Определяет, компилируется ли поддержка открытия соединения из uIP, или нет. 00227 * 00228 * Если приложения, которые работают поверх uIP в этом проекте, не нуждаются 00229 * в открытии исходящих соединений TCP, то эта опция конфигурации может быть 00230 * выключена, что уменьшит размер кода uIP. 00231 * 00232 * \hideinitializer 00233 */ 00234 #define UIP_ACTIVE_OPEN 1 00235 00236 /** 00237 * Максимальное количестов одновременно открытых соединений TCP. 00238 * 00239 * Поскольку память под соединения TCP выделяется статически, подкрутка 00240 * этой опции конфигурации вниз приведет к уменьшению затрат RAM. Каждое 00241 * соединение TCP требует примерно 30 байт памяти. 00242 * 00243 * \hideinitializer 00244 */ 00245 #ifndef UIP_CONF_MAX_CONNECTIONS 00246 #define UIP_CONNS 10 00247 #else /* UIP_CONF_MAX_CONNECTIONS */ 00248 #define UIP_CONNS UIP_CONF_MAX_CONNECTIONS 00249 #endif /* UIP_CONF_MAX_CONNECTIONS */ 00250 00251 00252 /** 00253 * Максимальное количество одновременно открытых портов TCP. 00254 * 00255 * Каждый открытый для прослушивания порт TCP требует 2 байта памяти. 00256 * 00257 * \hideinitializer 00258 */ 00259 #ifndef UIP_CONF_MAX_LISTENPORTS 00260 #define UIP_LISTENPORTS 20 00261 #else /* UIP_CONF_MAX_LISTENPORTS */ 00262 #define UIP_LISTENPORTS UIP_CONF_MAX_LISTENPORTS 00263 #endif /* UIP_CONF_MAX_LISTENPORTS */ 00264 00265 /** 00266 * Определяет, должна ли компилироваться поддержка оповещения 00267 * о TCP urgent data, или нет. 00268 * 00269 * Фича TCP urgent data (out-of-band data, данные вне диапазона, 00270 * т. е. данные, требующие ускоренной доставки) используется редко 00271 * и она вряд ли Вам понадобится. 00272 * 00273 * \hideinitializer 00274 */ 00275 #define UIP_URGDATA 0 00276 00277 /** 00278 * Начальный таймаут ретрансмиссии, подстчитывамый в импульсах таймера. 00279 * 00280 * Это значение менять не надо. 00281 */ 00282 #define UIP_RTO 3 00283 00284 /** 00285 * Максимальное количество ретрансляций сегмента до разрыва соединения. 00286 * 00287 * Это менять не надо. 00288 */ 00289 #define UIP_MAXRTX 8 00290 00291 /** 00292 * The maximum number of times a SYN segment should be retransmitted 00293 * before a connection request should be deemed to have been 00294 * unsuccessful. 00295 * 00296 * Это не нуждается в изменении. 00297 */ 00298 #define UIP_MAXSYNRTX 5 00299 00300 /** 00301 * Максимальный размер сегмента TCP. 00302 * 00303 * Этот параметр не должен устанавливатся больше, чем 00304 * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. 00305 */ 00306 #define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) 00307 00308 /** 00309 * Размер представляемого окна приема. 00310 * 00311 * Должно быть установлено меньше (например, меньше размера буфера uip_bufr), 00312 * если приложение не успевает обрабатывать данные, или больше (32768 байт), 00313 * если приложение быстро обрабатывает данные. 00314 * 00315 * \hideinitializer 00316 */ 00317 #ifndef UIP_CONF_RECEIVE_WINDOW 00318 #define UIP_RECEIVE_WINDOW UIP_TCP_MSS 00319 #else 00320 #define UIP_RECEIVE_WINDOW UIP_CONF_RECEIVE_WINDOW 00321 #endif 00322 00323 /** 00324 * Как долго соединение должно находиться в состоянии TIME_WAIT. 00325 * 00326 * Эта опция конфигурации не имеет реального применения, и должна быть 00327 * оставлена нетронутой. 00328 */ 00329 #define UIP_TIME_WAIT_TIMEOUT 120 00330 00331 00332 /** @} */ 00333 /*------------------------------------------------------------------------------*/ 00334 /** 00335 * \name Опции конфигурации ARP 00336 * @{ 00337 */ 00338 00339 /** 00340 * Размер таблицы (кэша) ARP. 00341 * 00342 * Эта опция должна быть установлена в большее значение, если этот узел сети 00343 * будет иметь множество соединений из локальной сети. 00344 * 00345 * \hideinitializer 00346 */ 00347 #ifdef UIP_CONF_ARPTAB_SIZE 00348 #define UIP_ARPTAB_SIZE UIP_CONF_ARPTAB_SIZE 00349 #else 00350 #define UIP_ARPTAB_SIZE 8 00351 #endif 00352 00353 /** 00354 * Максимальное время жизни записи таблицы ARP, измеряемое в единицах 10 секунд. 00355 * 00356 * Значение UIP_ARP_MAXAGE 120 соответствует 20 минутам (значение по умолчанию 00357 * для BSD). 00358 */ 00359 #define UIP_ARP_MAXAGE 120 00360 00361 /** @} */ 00362 00363 /*------------------------------------------------------------------------------*/ 00364 00365 /** 00366 * \name Основные опции конфигурации 00367 * @{ 00368 */ 00369 00370 /** 00371 * Размер буфера пакета uIP. 00372 * 00373 * Размер буфера пакета uIP не должен быть меньше 60 байт, и его не нужно делать 00374 * больше 1500 байт. Уменьшение размера приводит к снижению скорости обмена TCP, 00375 * увеличение размера увеличивает скорость TCP. 00376 * 00377 * \hideinitializer 00378 */ 00379 #ifndef UIP_CONF_BUFFER_SIZE 00380 #define UIP_BUFSIZE 400 00381 #else /* UIP_CONF_BUFFER_SIZE */ 00382 #define UIP_BUFSIZE UIP_CONF_BUFFER_SIZE 00383 #endif /* UIP_CONF_BUFFER_SIZE */ 00384 00385 00386 /** 00387 * Определяет, должна ли компилироваться поддержка сбора статистики. 00388 * 00389 * The statistics is useful for debugging and to show the user. 00390 * 00391 * \hideinitializer 00392 */ 00393 #ifndef UIP_CONF_STATISTICS 00394 #define UIP_STATISTICS 0 00395 #else /* UIP_CONF_STATISTICS */ 00396 #define UIP_STATISTICS UIP_CONF_STATISTICS 00397 #endif /* UIP_CONF_STATISTICS */ 00398 00399 /** 00400 * Определяет, должен ли компилироваться вывод в лог определенных событий. 00401 * 00402 * Эта опция полезна для отладки. В этом случае должна быть реализована 00403 * функция uip_log(), чтобы она удовлетворяла архитектуре проекта. 00404 * 00405 * \hideinitializer 00406 */ 00407 #ifndef UIP_CONF_LOGGING 00408 #define UIP_LOGGING 0 00409 #else /* UIP_CONF_LOGGING */ 00410 #define UIP_LOGGING UIP_CONF_LOGGING 00411 #endif /* UIP_CONF_LOGGING */ 00412 00413 /** 00414 * Поддержка широковещания (broadcast). 00415 * 00416 * Этот флаг конфигурирует включение поддержки широковещания. Это полезно 00417 * использовать только совместно с UDP. 00418 * 00419 * \hideinitializer 00420 * 00421 */ 00422 #ifndef UIP_CONF_BROADCAST 00423 #define UIP_BROADCAST 0 00424 #else /* UIP_CONF_BROADCAST */ 00425 #define UIP_BROADCAST UIP_CONF_BROADCAST 00426 #endif /* UIP_CONF_BROADCAST */ 00427 00428 /** 00429 * Печатает в лог сообщения uIP. 00430 * 00431 * Эта функция должна быть реализована в модуле, который использует uIP, 00432 * и она вызвается всякий раз, когда генерируется сообщения для лога. 00433 */ 00434 void uip_log(char *msg); 00435 00436 /** 00437 * Длина заголовка уровня линка. 00438 * 00439 * Это смещение в uip_buf, где может быть найден заголовок IP. 00440 * Для Ethernet это значение должно быть установлено на 14. 00441 * Для For SLIP это значение должно быть установлено на 0. 00442 * 00443 * \hideinitializer 00444 */ 00445 #ifdef UIP_CONF_LLH_LEN 00446 #define UIP_LLH_LEN UIP_CONF_LLH_LEN 00447 #else /* UIP_CONF_LLH_LEN */ 00448 #define UIP_LLH_LEN 14 00449 #endif /* UIP_CONF_LLH_LEN */ 00450 00451 /** @} */ 00452 /*------------------------------------------------------------------------------*/ 00453 /** 00454 * \name Конфигурация архитектуры CPU 00455 * @{ 00456 * 00457 * Конфигурация архитектуры CPU - место, где указывается endianess 00458 * (порядок хранения байт в памяти) для CPU, на котором работает uIP. 00459 * Большинство CPU, используемых сегодня, используют little endian 00460 * (кроме разве что платформ MCS51 и Motorola, где применяется 00461 * big endian). Макрос BYTE_ORDER должен быть изменен, чтобы отразить 00462 * архитекуру CPU, на которой работает uIP. 00463 */ 00464 00465 /** 00466 * Порядок байт для архитектуры CPU, на которой работает uIP. 00467 * 00468 * Эта опция должна быть либо BIG_ENDIAN (порядок байт Motorola) или 00469 * LITTLE_ENDIAN (порядок байт Intel). 00470 * 00471 * \hideinitializer 00472 */ 00473 #ifdef UIP_CONF_BYTE_ORDER 00474 #define UIP_BYTE_ORDER UIP_CONF_BYTE_ORDER 00475 #else /* UIP_CONF_BYTE_ORDER */ 00476 #define UIP_BYTE_ORDER UIP_LITTLE_ENDIAN 00477 #endif /* UIP_CONF_BYTE_ORDER */ 00478 00479 /** @} */ 00480 /*------------------------------------------------------------------------------*/ 00481 00482 /** 00483 * \name Конфигурации, специфичные для приложения 00484 * @{ 00485 * 00486 * Приложение uIP реализуестя как одна функция приложения, которая вызывается 00487 * из uIP при возникновении любого события TCP/IP. Имя этой функции должно 00488 * быть зарегистрировано с uIP во время компиляции, используя определение 00489 * UIP_APPCALL. 00490 * 00491 * Приложения uIP могут сохранять свое состояние (application state) в структуре 00492 * uip_conn путем указания типа структуры приложения через typedef для типа 00493 * uip_tcp_appstate_t и uip_udp_appstate_t. 00494 * 00495 * Файл, содержащий определения, должен быть подключен в файле uipopt.h. 00496 * 00497 * Следующий пример показывает, как это должно выглядеть. 00498 \code 00499 00500 void httpd_appcall(void); 00501 #define UIP_APPCALL httpd_appcall 00502 00503 struct httpd_state { 00504 u8_t state; 00505 u16_t count; 00506 char *dataptr; 00507 char *script; 00508 }; 00509 typedef struct httpd_state uip_tcp_appstate_t 00510 \endcode 00511 */ 00512 00513 /** 00514 * \var #define UIP_APPCALL 00515 * 00516 * Имя функции приложения, которую uIP должна вызвать в ответ на 00517 * события TCP/IP. 00518 * 00519 */ 00520 00521 /** 00522 * \var typedef uip_tcp_appstate_t 00523 * 00524 * Тип состояния приложнения (application state), который должен быть 00525 * сохранен в структуре uip_conn. Это обычно структура, определенная 00526 * через typedef для хранения информации, специфичной для приложения. 00527 */ 00528 00529 /** 00530 * \var typedef uip_udp_appstate_t 00531 * 00532 * Тип состояния приложения, который сохраняется в структуре uip_conn. 00533 * Это обычно структура, определенная через typedef, которая хранит 00534 * информацию о состоянии приложения. 00535 */ 00536 /** @} */ 00537 /** @} */ 00538 00539 #endif /* __UIPOPT_H__ */