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