uIP 1.0
|
uIP является реализацией стека протоколов TCP/IP, предназначенной для маленьких 8-битных и 16-битных микроконтроллеров. Подробнее...
Структуры данных | |
struct | uip_conn |
Представление соединения TCP в стеке uIP. Подробнее... | |
struct | uip_udp_conn |
Представление соединения UDP в стеке uIP. Подробнее... | |
struct | uip_stats |
Структура содержит статистику TCP/IP, которая собирается, если значение UIP_STATISTICS установлено в 1. Подробнее... | |
struct | uip_eth_addr |
Представление 48-битного адреса Ethernet. Подробнее... | |
Группы | |
Функции конфирурации uIP | |
Функции конфигурации uIP используются для установки во время выполнения (run-time) параметров, таких как например адресов IP. | |
Функции инициализации uIP | |
Функции инициализации uIP используются для запуска uIP. | |
Функции драйвера устройства uIP | |
Эти функции используются сетевым драйвером устройства, который работает совместно с uIP. | |
Функции приложения uIP | |
Функции, используемые в приложении, работающем поверх uIP. | |
Функции преобразований uIP | |
Эти функции могут использоваться для преобразования между разными форматами данных, используемых в uIP. | |
Переменные, используемые драйверами устройства uIP | |
uIP имеет несколько глобальных переменных, которе используются в драйверах устройства для uIP. | |
uIP Address Resolution Protocol | |
Протокол разрешения адреса (Address Resolution Protocol, ARP) используется для определения соответствия между адресами IP и адресами уровня линка, такими как адреса Ethernet MAC. | |
Хак для ускорения пропускной способности uIP TCP | |
Базовая реализация uIP TCP разрешает иметь в обработке каждый момент времени только один сегмент TCP на каждое соединение TCP. | |
Функции uIP, специфичные для архитектуры | |
Функции в модуле, который привязан к архитектуре, для ускоренного вычисления контрольной суммы IP и 32-битных сложений. | |
Файлы | |
файл | uip.h |
Заголовочный файл для стека uIP TCP/IP. | |
файл | uip.c |
Код стека uIP TCP/IP. | |
Макросы | |
#define | UIP_APPDATA_SIZE |
Размер пространства, доступного для данных пользователей в буфере uip_buf. | |
Определения типов | |
typedef u16_t | uip_ip4addr_t [2] |
Представление адреса IP. | |
Функции | |
u16_t | uip_chksum (u16_t *buf, u16_t len) |
Вычисление контрольной суммы Internet для данных буфера. | |
u16_t | uip_ipchksum (void) |
Вычисление контрольной суммы заголовка IP для заголовка пакета в буфере uip_buf. | |
u16_t | uip_tcpchksum (void) |
Вычисление контрольной суммы TCP для пакета в uip_buf и uip_appdata. | |
u16_t | uip_udpchksum (void) |
Вычисление контрольной суммы UDP для пакета в uip_buf и uip_appdata. | |
void | uip_setipid (u16_t id) |
Функция инициализации uIP. | |
void | uip_add32 (u8_t *op32, u16_t op16) |
Выполнение 32-разрядного сложения. | |
void | uip_init (void) |
Функция инициализации uIP. | |
struct uip_conn * | uip_connect (uip_ipaddr_t *ripaddr, u16_t rport) |
Соединение с дальним хостом (remote host), используя TCP. | |
struct uip_udp_conn * | uip_udp_new (uip_ipaddr_t *ripaddr, u16_t rport) |
Устанавливает новое соединение UDP. | |
void | uip_unlisten (u16_t port) |
Остановить прослушивание указанного порта. | |
void | uip_listen (u16_t port) |
Запуск прослушивания указанного порта. | |
u16_t | htons (u16_t val) |
Преобразует 16-битное число с порядком байт хоста в число с сетевым порядком байт. | |
void | uip_send (const void *data, int len) |
Посылает данные через текущее соединение. | |
Переменные | |
void * | uip_appdata |
Указатель на данные приложения, находящиеся в буфере пакета. | |
struct uip_conn * | uip_conn |
Указатель на текущее соединение TCP. | |
struct uip_udp_conn * | uip_udp_conn |
Текущее соединение UDP. | |
struct uip_stats | uip_stat |
Статистическая инфрмация uIP TCP/IP. | |
u8_t | uip_buf [UIP_BUFSIZE+2] |
Буфер пакета uIP. | |
void * | uip_appdata |
Указатель на данные приложения, находящиеся в буфере пакета. | |
u16_t | uip_len |
Длина пакета в буфере uip_buf. | |
struct uip_conn * | uip_conn |
Указатель на текущее соединение TCP. | |
struct uip_udp_conn * | uip_udp_conn |
Текущее соединение UDP. | |
u8_t | uip_acc32 [4] |
4-байтовый массив для вычисления 32-битного номера последовательности. |
uIP является реализацией стека протоколов TCP/IP, предназначенной для маленьких 8-битных и 16-битных микроконтроллеров.
{@
uIP предоставляет протоколы, необходимые для обмена данными через сеть Internet, с очень малым размером кода и низкими требованиями к объему RAM - размер кода uIP составляет порядка нескольких килобайт, и количество задействованной памяти RAM составляет несколько сотен байт.
#define UIP_APPDATA_SIZE |
Размер пространства, доступного для данных пользователей в буфере uip_buf.
Этот макрос содержит доступное место для данных пользователя в буфере uip_buf. Макрос предназначен для проверки границ доступных для пользователя данных.
Пример:
snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i);
Преобразует 16-битное число с порядком байт хоста в число с сетевым порядком байт.
Этот функция главным образом используется для преобразования переменных номера порта. Для преобразования констант в сетевой порядок байт используйте вместо этого макрос HTONS().
См. определение в файле uip.c строка 1855
Перекрестные ссылки HTONS.
Используется в uip_chksum(), uip_connect(), uip_ipchksum(), uip_udp_new() и webclient_get().
Выполнение 32-разрядного сложения.
ПОскольку не все архитектуры, для которых предназначена uIP, имеют встроенную 32-битную арифметику, uIP использует внешнюю функцию на языке C для выполнения 32-битных прибавлений, требуемых в обработке протоколов TCP. Эта функция должна сложить 2 аргумента, и поместить результат в глобальную переменную uip_acc32.
op32 | Указатель на 4-байтный массив, представляющий 32-битное целое число с сетевым порядком байт (big endian). |
op16 | 16-битное целое с порядком байт хоста. |
См. определение в файле uip.c строка 246
Используется в uip_split_output().
Вычисление контрольной суммы Internet для данных буфера.
Вычисление контрольной суммы Internet от данных буфера.
Контрольная сумма Internet - это поразрядное дополнение до 1 суммы поразрядного дополнения всех 16-битных слов в буфере.
См. RFC1071.
buf | Указатель на буфер, от которого вычисляется контрольная сумма. |
len | Длина буфера, от которого вычисляется контрольная сумма. |
См. определение в файле uip.c строка 308
Перекрестные ссылки htons().
Соединение с дальним хостом (remote host), используя TCP.
Эта функция используется для запуска нового соединения с указанным портом указанного хоста. Она выделяет новый идентификатор соединения, устанавливает соединение в состояние SYN_SENT и устанавливает таймер ретрансмиссии в 0. Это приведет к тому, что будет передан сегмент TCP SYN в следующий раз, когда это соединение будет периодически обработано, что будет сделано обычно через 0.5 секунд после вызова uip_connect().
uip_ipaddr_t ipaddr; uip_ipaddr(&ipaddr, 192,168,1,2); uip_connect(&ipaddr, HTONS(80));
ripaddr | IP-адрес для remote hot. |
port | 16-битный номер порта с сетевым порядком байт. |
См. определение в файле uip.c строка 404
Перекрестные ссылки htons(), uip_conn::initialmss, uip_conn::len, uip_conn::lport, uip_conn::mss, uip_conn::nrtx, uip_conn::ripaddr, uip_conn::rport, uip_conn::rto, uip_conn::sa, uip_conn::snd_nxt, uip_conn::sv, uip_conn::tcpstateflags, uip_conn::timer, UIP_CONNS, uip_ipaddr_copy, UIP_RTO и UIP_TCP_MSS.
Используется в webclient_get().
void uip_init | ( | void | ) |
Функция инициализации uIP.
Эта функция должна быть вызвана в момент загрузки системы, чтобы она проинициализировала стек uIP TCP/IP stack.
См. определение в файле uip.c строка 376
Перекрестные ссылки uip_udp_conn::lport, uip_conn::tcpstateflags, UIP_CONNS, UIP_LISTENPORTS и UIP_UDP_CONNS.
u16_t uip_ipchksum | ( | void | ) |
Вычисление контрольной суммы заголовка IP для заголовка пакета в буфере uip_buf.
Вычисляет контрольную сумму заголовка IP от заголовка пакета, который находится в uip_buf.
Контрольная сумма заголовка IP является контрольной суммой Internet от 20 байт заголовка IP.
См. определение в файле uip.c строка 315
Перекрестные ссылки htons() и UIP_LLH_LEN.
Используется в uip_split_output().
void uip_listen | ( | u16_t | port | ) |
Запуск прослушивания указанного порта.
uip_listen(HTONS(80));
port | 16-битный номер порта с сетевым порядком байт. |
См. определение в файле uip.c строка 526
Перекрестные ссылки UIP_LISTENPORTS.
void uip_send | ( | const void * | data, |
int | len | ||
) |
Посылает данные через текущее соединение.
Эта функция используется для отправки одного сегмента данных TCP. Могут отправлять данные только приложения, которые были вызваны из uIP для обработки события.
Количество данных, которое было на самом деле отправлено после вызова этой функции, определяется максимальным количеством данны, которое позволяет TCP. uIP автоматически будет урезать данные, так чтобы было отправлено допустимое количество. Может быть использована фукнция uip_mss(), чтобы запросить у uIP количество данных, которое будет отправлено в действительности.
data | Указатель на данные для отправки. |
len | Максимальное количество данных для отправки. |
См. определение в файле uip.c строка 1861
Перекрестные ссылки uip_conn::len.
void uip_setipid | ( | u16_t | id | ) |
u16_t uip_tcpchksum | ( | void | ) |
Вычисление контрольной суммы TCP для пакета в uip_buf и uip_appdata.
Вычисление контрольной суммы TCP пакета, находящегося в uip_buf и uip_appdata.
Контрольная сумма TCP является контрольной суммой Internet от содержимого данных сегмента TCP, и псевдозаголовка, определенного в RFC793.
См. определение в файле uip.c строка 361
Используется в uip_split_output().
struct uip_udp_conn* uip_udp_new | ( | uip_ipaddr_t * | ripaddr, |
u16_t | rport | ||
) | [read] |
Устанавливает новое соединение UDP.
Эта функция устанавливает новое соединение UDP. Функция автоматически выделит неиспользуемый локальный порт для нового соединения. Однако может быть выбран другой порт с помощью вызова uip_udp_bind() после того, как была вызвана функция uip_udp_new().
Пример:
uip_ipaddr_t addr; struct uip_udp_conn *c; uip_ipaddr(&addr, 192,168,2,1); c = uip_udp_new(&addr, HTONS(12345)); if(c != NULL) { uip_udp_bind(c, HTONS(12344)); }
ripaddr | IP-адрес для remote host. |
rport | Номер порта remote host с сетевым порядком байт. |
См. определение в файле uip.c строка 470
Перекрестные ссылки HTONS, htons(), uip_udp_conn::lport, uip_udp_conn::ripaddr, uip_udp_conn::rport, uip_udp_conn::ttl, uip_ipaddr_copy, UIP_TTL и UIP_UDP_CONNS.
Используется в resolv_conf().
u16_t uip_udpchksum | ( | void | ) |
Вычисление контрольной суммы UDP для пакета в uip_buf и uip_appdata.
Контрольная сумма UDP является контрольной суммой Internet от содержимого данных сегмента UDP, и псевдозаголовка, определенного в RFC768.
void uip_unlisten | ( | u16_t | port | ) |
Остановить прослушивание указанного порта.
uip_unlisten(HTONS(80));
port | 16-битный номер порта с сетевым порядком байт. |
См. определение в файле uip.c строка 515
Перекрестные ссылки UIP_LISTENPORTS.
void* uip_appdata |
Указатель на данные приложения, находящиеся в буфере пакета.
Этот указатель указывает на данные приложения, когда вызывается функция приложения. Если приложению нужно отправить данные, то оно может использовать это пространство для записи туда данных перед вызовом uip_send().
См. определение в файле uip.c строка 143
Используется в uip_arp_out() и uip_split_output().
void* uip_appdata |
Указатель на данные приложения, находящиеся в буфере пакета.
Этот указатель указывает на данные приложения, когда вызывается функция приложения. Если приложению нужно отправить данные, то оно может использовать это пространство для записи туда данных перед вызовом uip_send().
См. определение в файле uip.c строка 143
Используется в uip_arp_out() и uip_split_output().
Буфер пакета uIP.
Массив uip_buf используется для того, чтобы хранить входящие и исходящие пакеты. Драйвер устройства должен поместить в этот буфер приходящие данные. Когда данные отправляются, драйвер устройства должен читать заголовки уровня линка и заголовки TCP/IP из этого буфера. Размер заголовков уровня линка конфигурируется дефайном UIP_LLH_LEN.
void devicedriver_send(void) { hwsend(&uip_buf[0], UIP_LLH_LEN); if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) { hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN); } else { hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN); hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN); } }
См. определение в файле uip.c строка 139
Используется в uip_arp_out().
Длина пакета в буфере uip_buf.
Глобальная переменная uip_len содержит длину пакета в буфере uip_buf.
Когда сетевой драйвер устройства вызывает функцию ввода uIP, переменная uip_len должна быть установлена на значение длины пакета в буфере uip_buf.
Когда отправляются пакеты, драйвер устройства должен использовать содержимое переменной uip_len, чтобы определить длину уходящего пакета.
См. определение в файле uip.c строка 155
Используется в uip_arp_arpin(), uip_arp_out() и uip_split_output().