uIP 1.0
Файлы
Опции конфигурации для uIP

uIP конфигурируется файлом uipopt.h, который сопровождает проект. Подробнее...

Файлы

файл  uip-conf.h
 

Пример файла конфигурации uIP.


файл  uipopt.h
 

Опции конфигурирования для uIP.


Опции конфигурации, специфичные для проекта

uIP имеет несколько опций конфигурации, которые можно переназначить для каждого отдельного проекта.

Они сохраняются в специфичном для проекта файле конфигурации uip-conf.h, и все имена конфигурации имеют префикс UIP_CONF.

typedef uint8_t u8_t
 8-разрядный тип данных
typedef uint16_t u16_t
 16-разрядный тип данных
typedef unsigned short uip_stats_t
 Тип данных статистики
#define UIP_CONF_MAX_CONNECTIONS
 Максимальное количество соединений TCP.
#define UIP_CONF_MAX_LISTENPORTS
 Максимальное количество прослушиваемых портов TCP.
#define UIP_CONF_BUFFER_SIZE
 Размер буфера uIP.
#define UIP_CONF_BYTE_ORDER
 Порядок байт CPU.
#define UIP_CONF_LOGGING
 Включен лог или нет.
#define UIP_CONF_UDP
 Подключена поддрежка UDP или нет.
#define UIP_CONF_UDP_CHECKSUMS
 Включено вычисление контролной суммы UDP или нет.
#define UIP_CONF_STATISTICS
 Собитается статистика uIP или нет.

Статические опции конфигурации

Эти опции конфигурации могут использоваться для статической установки адреса IP, но только в том случае, если UIP_FIXEDADDR установлен в 1.

Опции конфигурации для отдельного сетевого узла включают адрес IP, маску подсети (netmask) а адрес шлюза по умолчанию (default router), как и адрес Ethernet (MAC-адрес). Маска подсети, адрес шлюза и адрес Ethernet нужны только тогда, когда uIP будет работать через Ethernet.

Все это можно поменять, чтобы настройки удовлетворяли Вашему проекту.

#define UIP_FIXEDADDR
 Определяет - должен ли использоваться в uIP фиксированный адрес IP, или нет.
#define UIP_PINGADDRCONF
 Назначение адреса IP для ping.
#define UIP_FIXEDETHADDR
 Указывает, должен ли модуль uIP ARP быть скомпилирован с фиксированным адресом Ethernet MAC, или нет.

Опции конфигурации IP

#define UIP_TTL   64
 IP TTL (время жизни, time to live) пакетов IP, отправляемых uIP.
#define UIP_REASSEMBLY
 Включить поддержку пересборки пакетов IP (IP packet reassembly).
#define UIP_REASS_MAXAGE   40
 Максимальное время ожидание фрагмента IP в буфере пересборки, после истечения которого фрагмент будет отброшен.

Опции конфигурации UDP

#define UIP_UDP
 Переключает, должна компилироваться поддержка UDP или нет.
#define UIP_UDP_CHECKSUMS
 Переключает, должна использоваться контрольная сумма UDP или нет.
#define UIP_UDP_CONNS
 Максимальное количество конкурирующих соединений UDP.

Опции конфигурирования TCP

Имя функции, которая должна быть вызвана, когда приходят датаграммы UDP.

#define UIP_ACTIVE_OPEN
 Определяет, компилируется ли поддержка открытия соединения из uIP, или нет.
#define UIP_CONNS
 Максимальное количестов одновременно открытых соединений TCP.
#define UIP_LISTENPORTS
 Максимальное количество одновременно открытых портов TCP.
#define UIP_URGDATA
 Определяет, должна ли компилироваться поддержка оповещения о TCP urgent data, или нет.
#define UIP_RTO   3
 Начальный таймаут ретрансмиссии, подстчитывамый в импульсах таймера.
#define UIP_MAXRTX   8
 Максимальное количество ретрансляций сегмента до разрыва соединения.
#define UIP_MAXSYNRTX   5
 The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful.
#define UIP_TCP_MSS   (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)
 Максимальный размер сегмента TCP.
#define UIP_RECEIVE_WINDOW
 Размер представляемого окна приема.
#define UIP_TIME_WAIT_TIMEOUT   120
 Как долго соединение должно находиться в состоянии TIME_WAIT.

Опции конфигурации ARP

#define UIP_ARPTAB_SIZE
 Размер таблицы (кэша) ARP.
#define UIP_ARP_MAXAGE   120
 Максимальное время жизни записи таблицы ARP, измеряемое в единицах 10 секунд.

Основные опции конфигурации

void uip_log (char *msg)
 Печатает в лог сообщения uIP.
#define UIP_BUFSIZE
 Размер буфера пакета uIP.
#define UIP_STATISTICS
 Определяет, должна ли компилироваться поддержка сбора статистики.
#define UIP_LOGGING
 Определяет, должен ли компилироваться вывод в лог определенных событий.
#define UIP_BROADCAST
 Поддержка широковещания (broadcast).
#define UIP_LLH_LEN
 Длина заголовка уровня линка.

Конфигурация архитектуры CPU

Конфигурация архитектуры CPU - место, где указывается endianess (порядок хранения байт в памяти) для CPU, на котором работает uIP.

Большинство CPU, используемых сегодня, используют little endian (кроме разве что платформ MCS51 и Motorola, где применяется big endian). Макрос BYTE_ORDER должен быть изменен, чтобы отразить архитекуру CPU, на которой работает uIP.

#define UIP_BYTE_ORDER
 Порядок байт для архитектуры CPU, на которой работает uIP.

Конфигурации, специфичные для приложения

Приложение uIP реализуестя как одна функция приложения, которая вызывается из uIP при возникновении любого события TCP/IP.

Имя этой функции должно быть зарегистрировано с uIP во время компиляции, используя определение UIP_APPCALL.

Приложения uIP могут сохранять свое состояние (application state) в структуре uip_conn путем указания типа структуры приложения через typedef для типа uip_tcp_appstate_t и uip_udp_appstate_t.

Файл, содержащий определения, должен быть подключен в файле uipopt.h.

Следующий пример показывает, как это должно выглядеть.

void httpd_appcall(void);
#define UIP_APPCALL     httpd_appcall

struct httpd_state {
  u8_t state;
  u16_t count;
  char *dataptr;
  char *script;
};
typedef struct httpd_state uip_tcp_appstate_t
typedef struct smtp_state uip_tcp_appstate_t
 Тип состояния приложнения (application state), который должен быть сохранен в структуре uip_conn.
typedef int uip_udp_appstate_t
 Тип состояния приложения, который сохраняется в структуре uip_conn.
#define UIP_APPCALL   smtp_appcall
 Имя функции приложения, которую uIP должна вызвать в ответ на события TCP/IP.

Подробное описание

uIP конфигурируется файлом uipopt.h, который сопровождает проект.

Этот файл содержит все опции времени компиляции для uIP, и он должен быть настроен под специфику каждого проекта. Распространяемый пакет uIP содержит документированный пример "uipopt.h" который может скопирован и модифицирован для каждого проекта.

Заметки:
Большинство опций конфигурации uipopt.h не должны быть изменены, основные изменения делаются в файле uip-conf.h.

Макросы

#define UIP_ACTIVE_OPEN

Определяет, компилируется ли поддержка открытия соединения из uIP, или нет.

Если приложения, которые работают поверх uIP в этом проекте, не нуждаются в открытии исходящих соединений TCP, то эта опция конфигурации может быть выключена, что уменьшит размер кода uIP.

См. определение в файле uipopt.h строка 234

#define UIP_ARP_MAXAGE   120

Максимальное время жизни записи таблицы ARP, измеряемое в единицах 10 секунд.

Значение UIP_ARP_MAXAGE 120 соответствует 20 минутам (значение по умолчанию для BSD).

См. определение в файле uipopt.h строка 359

Используется в uip_arp_timer().

#define UIP_ARPTAB_SIZE

Размер таблицы (кэша) ARP.

Эта опция должна быть установлена в большее значение, если этот узел сети будет иметь множество соединений из локальной сети.

См. определение в файле uipopt.h строка 350

Используется в uip_arp_init(), uip_arp_out() и uip_arp_timer().

#define UIP_BROADCAST

Поддержка широковещания (broadcast).

Этот флаг конфигурирует включение поддержки широковещания. Это полезно использовать только совместно с UDP.

См. определение в файле uipopt.h строка 423

#define UIP_BUFSIZE

Размер буфера пакета uIP.

Размер буфера пакета uIP не должен быть меньше 60 байт, и его не нужно делать больше 1500 байт. Уменьшение размера приводит к снижению скорости обмена TCP, увеличение размера увеличивает скорость TCP.

См. определение в файле uipopt.h строка 380

Используется в uip_split_output().

#define UIP_BYTE_ORDER

Порядок байт для архитектуры CPU, на которой работает uIP.

Эта опция должна быть либо BIG_ENDIAN (порядок байт Motorola) или LITTLE_ENDIAN (порядок байт Intel).

См. определение в файле uipopt.h строка 476

#define UIP_CONNS

Максимальное количестов одновременно открытых соединений TCP.

Поскольку память под соединения TCP выделяется статически, подкрутка этой опции конфигурации вниз приведет к уменьшению затрат RAM. Каждое соединение TCP требует примерно 30 байт памяти.

Примеры:
example-mainloop-with-arp.c и example-mainloop-without-arp.c.

См. определение в файле uipopt.h строка 246

Используется в uip_connect() и uip_init().

#define UIP_FIXEDADDR

Определяет - должен ли использоваться в uIP фиксированный адрес IP, или нет.

Если uIP должна использовать фиксированный адрес IP, то его установка задается в файле uipopt.h. Если нет, то вместо этого должны использоваться макросы uip_setdraddr() и uip_setnetmask().

См. определение в файле uipopt.h строка 98

#define UIP_FIXEDETHADDR

Указывает, должен ли модуль uIP ARP быть скомпилирован с фиксированным адресом Ethernet MAC, или нет.

Если эта опция конфигурации установлена в 0, то может использоваться макрос uip_setethaddr() для того, чтобы указать Ethernet-адрес (MAC) во время выполнения кода (run-time).

См. определение в файле uipopt.h строка 129

#define UIP_LISTENPORTS

Максимальное количество одновременно открытых портов TCP.

Каждый открытый для прослушивания порт TCP требует 2 байта памяти.

См. определение в файле uipopt.h строка 260

Используется в uip_init(), uip_listen() и uip_unlisten().

#define UIP_LLH_LEN

Длина заголовка уровня линка.

Это смещение в uip_buf, где может быть найден заголовок IP. Для Ethernet это значение должно быть установлено на 14. Для For SLIP это значение должно быть установлено на 0.

См. определение в файле uipopt.h строка 448

Используется в uip_arp_out(), uip_ipchksum() и uip_split_output().

#define UIP_LOGGING

Определяет, должен ли компилироваться вывод в лог определенных событий.

Эта опция полезна для отладки. В этом случае должна быть реализована функция uip_log(), чтобы она удовлетворяла архитектуре проекта.

См. определение в файле uipopt.h строка 408

#define UIP_MAXRTX   8

Максимальное количество ретрансляций сегмента до разрыва соединения.

Это менять не надо.

См. определение в файле uipopt.h строка 289

#define UIP_MAXSYNRTX   5

The maximum number of times a SYN segment should be retransmitted before a connection request should be deemed to have been unsuccessful.

Это не нуждается в изменении.

См. определение в файле uipopt.h строка 298

#define UIP_PINGADDRCONF

Назначение адреса IP для ping.

uIP использует пакеты "ping" для установки своего собственного адреса, если эта опция установлена. Если так, то uIP начнет работу с пустого адреса IP, и адрес назначения первого же пришедшего пакета "ping" (ICMP echo) будет использоваться для установки адреса IP своего хоста.

Заметки:
Это работает только если UIP_FIXEDADDR установлен в 0.

См. определение в файле uipopt.h строка 115

#define UIP_REASSEMBLY

Включить поддержку пересборки пакетов IP (IP packet reassembly).

uIP поддерживает пересборку фрагментированных пакетов IP. Эта фича требует дополнительное количество RAM, чтобы иметь буфер пересборки, и код подпрограмм для пересборки занимает примерно 700 байт. Буфер пересборки имеет такой же размер, как и буфер uip_buf (размер, сконфигурированный макроопределением UIP_BUFSIZE).

Заметки:
Пересборка пакетов IP не была тщательно протестирована.

См. определение в файле uipopt.h строка 158

#define UIP_RECEIVE_WINDOW

Размер представляемого окна приема.

Должно быть установлено меньше (например, меньше размера буфера uip_bufr), если приложение не успевает обрабатывать данные, или больше (32768 байт), если приложение быстро обрабатывает данные.

См. определение в файле uipopt.h строка 318

#define UIP_RTO   3

Начальный таймаут ретрансмиссии, подстчитывамый в импульсах таймера.

Это значение менять не надо.

См. определение в файле uipopt.h строка 282

Используется в uip_connect().

#define UIP_STATISTICS

Определяет, должна ли компилироваться поддержка сбора статистики.

The statistics is useful for debugging and to show the user.

См. определение в файле uipopt.h строка 394

#define UIP_TCP_MSS   (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)

Максимальный размер сегмента TCP.

Этот параметр не должен устанавливатся больше, чем UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN.

См. определение в файле uipopt.h строка 306

Используется в uip_connect().

#define UIP_TIME_WAIT_TIMEOUT   120

Как долго соединение должно находиться в состоянии TIME_WAIT.

Эта опция конфигурации не имеет реального применения, и должна быть оставлена нетронутой.

См. определение в файле uipopt.h строка 329

#define UIP_TTL   64

IP TTL (время жизни, time to live) пакетов IP, отправляемых uIP.

Эта настройка обычно не должна меняться.

См. определение в файле uipopt.h строка 143

Используется в uip_udp_new().

#define UIP_UDP_CHECKSUMS

Переключает, должна использоваться контрольная сумма UDP или нет.

Заметки:
Поддержка контрольных сумм UDP в настоящее время не добавлена в uIP, так что эта опция не работает.

См. определение в файле uipopt.h строка 197

#define UIP_URGDATA

Определяет, должна ли компилироваться поддержка оповещения о TCP urgent data, или нет.

Фича TCP urgent data (out-of-band data, данные вне диапазона, т. е. данные, требующие ускоренной доставки) используется редко и она вряд ли Вам понадобится.

См. определение в файле uipopt.h строка 275


Типы

typedef uint16_t u16_t

16-разрядный тип данных

Этот typedef задает 16-битный тип данных, используемый в uIP.

Примеры:
uip-conf.h.

См. определение в файле uip-conf.h строка 77

typedef uint8_t u8_t

8-разрядный тип данных

Этот typedef задает 8-битный тип данных, используемый в uIP.

Примеры:
uip-conf.h.

См. определение в файле uip-conf.h строка 68

typedef unsigned short uip_stats_t

Тип данных статистики

Этот typedef задает тип данных, который используется для хранения статистической информации uIP.

Примеры:
uip-conf.h.

См. определение в файле uip-conf.h строка 87

Тип состояния приложнения (application state), который должен быть сохранен в структуре uip_conn.

Это обычно структура, определенная через typedef для хранения информации, специфичной для приложения.

Примеры:
hello-world.h.

См. определение в файле smtp.h строка 97

Тип состояния приложения, который сохраняется в структуре uip_conn.

Это обычно структура, определенная через typedef, которая хранит информацию о состоянии приложения.

Примеры:
resolv.h.

См. определение в файле resolv.h строка 48


Функции

void uip_log ( char *  msg)

Печатает в лог сообщения uIP.

Эта функция должна быть реализована в модуле, который использует uIP, и она вызвается всякий раз, когда генерируется сообщения для лога.