uIP 1.0
Структуры данных | Группы | Файлы | Макросы | Определения типов | Функции | Переменные
The uIP TCP/IP stack

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_connuip_connect (uip_ipaddr_t *ripaddr, u16_t rport)
 Соединение с дальним хостом (remote host), используя TCP.
struct uip_udp_connuip_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_connuip_conn
 Указатель на текущее соединение TCP.
struct uip_udp_connuip_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_connuip_conn
 Указатель на текущее соединение TCP.
struct uip_udp_connuip_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);

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


Функции

u16_t htons ( u16_t  val)

Преобразует 16-битное число с порядком байт хоста в число с сетевым порядком байт.

Этот функция главным образом используется для преобразования переменных номера порта. Для преобразования констант в сетевой порядок байт используйте вместо этого макрос HTONS().

См. определение в файле uip.c строка 1855

Перекрестные ссылки HTONS.

Используется в uip_chksum(), uip_connect(), uip_ipchksum(), uip_udp_new() и webclient_get().

void uip_add32 ( u8_t op32,
u16_t  op16 
)

Выполнение 32-разрядного сложения.

ПОскольку не все архитектуры, для которых предназначена uIP, имеют встроенную 32-битную арифметику, uIP использует внешнюю функцию на языке C для выполнения 32-битных прибавлений, требуемых в обработке протоколов TCP. Эта функция должна сложить 2 аргумента, и поместить результат в глобальную переменную uip_acc32.

Заметки:
32-битное целое указывается параметром op32, и результат в переменной uip_acc32 с сетевым порядком байт (big endian, старший байт идет первым, младший последним).
Аргументы:
op32Указатель на 4-байтный массив, представляющий 32-битное целое число с сетевым порядком байт (big endian).
op1616-битное целое с порядком байт хоста.

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

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

u16_t uip_chksum ( u16_t buf,
u16_t  len 
)

Вычисление контрольной суммы Internet для данных буфера.

Вычисление контрольной суммы Internet от данных буфера.

Контрольная сумма Internet - это поразрядное дополнение до 1 суммы поразрядного дополнения всех 16-битных слов в буфере.

См. RFC1071.

Аргументы:
bufУказатель на буфер, от которого вычисляется контрольная сумма.
lenДлина буфера, от которого вычисляется контрольная сумма.
Возвращает:
The Контрольная сумма Internet для буфера.

См. определение в файле uip.c строка 308

Перекрестные ссылки htons().

struct uip_conn* uip_connect ( uip_ipaddr_t *  ripaddr,
u16_t  port 
) [read]

Соединение с дальним хостом (remote host), используя TCP.

Эта функция используется для запуска нового соединения с указанным портом указанного хоста. Она выделяет новый идентификатор соединения, устанавливает соединение в состояние SYN_SENT и устанавливает таймер ретрансмиссии в 0. Это приведет к тому, что будет передан сегмент TCP SYN в следующий раз, когда это соединение будет периодически обработано, что будет сделано обычно через 0.5 секунд после вызова uip_connect().

Заметки:
Эта функция доступна, только если активна поддержка активного открытого соединения путем задания UIP_ACTIVE_OPEN на значение 1 в файле uipopt.h.
Поскольку эта функция ожидает номер порта с сетевым порядком байт, то при необходимости должно быть применено преобразование HTONS() или htons().
 uip_ipaddr_t ipaddr;

 uip_ipaddr(&ipaddr, 192,168,1,2);
 uip_connect(&ipaddr, HTONS(80));
Аргументы:
ripaddrIP-адрес для remote hot.
port16-битный номер порта с сетевым порядком байт.
Возвращает:
Указатель на идентификатор соединения uI для нового соединения, или NULL, если не может быть выделено новое соединение.

См. определение в файле 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.

Возвращает:
Контрольная сумма заголовка IP для заголовка IP в в буфере uip_buf.

См. определение в файле uip.c строка 315

Перекрестные ссылки htons() и UIP_LLH_LEN.

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

void uip_listen ( u16_t  port)

Запуск прослушивания указанного порта.

Заметки:
Поскольку эта функция ожидает номер порта с сетевым порядком байт, то при необходимости должно быть применено преобразование HTONS() или htons().
Аргументы:
port16-битный номер порта с сетевым порядком байт.

См. определение в файле uip.c строка 526

Перекрестные ссылки UIP_LISTENPORTS.

void uip_send ( const void *  data,
int  len 
)

Посылает данные через текущее соединение.

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

Количество данных, которое было на самом деле отправлено после вызова этой функции, определяется максимальным количеством данны, которое позволяет TCP. uIP автоматически будет урезать данные, так чтобы было отправлено допустимое количество. Может быть использована фукнция uip_mss(), чтобы запросить у uIP количество данных, которое будет отправлено в действительности.

Заметки:
Эта функция не дает гарантии, что посылаемые данные дойдут до получателя. Если данные будут потеряны в сети, приложение будет вызвано с установленным событием uip_rexmit(). Затем приложение заново отправит данные, используя эту фукнцию.
Аргументы:
dataУказатель на данные для отправки.
lenМаксимальное количество данных для отправки.

См. определение в файле uip.c строка 1861

Перекрестные ссылки uip_conn::len.

void uip_setipid ( u16_t  id)

Функция инициализации uIP.

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

См. определение в файле uip.c строка 178

u16_t uip_tcpchksum ( void  )

Вычисление контрольной суммы TCP для пакета в uip_buf и uip_appdata.

Вычисление контрольной суммы TCP пакета, находящегося в uip_buf и uip_appdata.

Контрольная сумма TCP является контрольной суммой Internet от содержимого данных сегмента TCP, и псевдозаголовка, определенного в RFC793.

Возвращает:
Контрольная сумма TCP сегмента TCP в uip_buf, на который указывает uip_appdata.

См. определение в файле 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));
 }
Аргументы:
ripaddrIP-адрес для remote host.
rportНомер порта remote host с сетевым порядком байт.
Возвращает:
Структура uip_udp_conn для нового соединения или NULL, если не может быть выделено соединение.

См. определение в файле 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.

Возвращает:
Контрольная сумма UDP сегмента UDP segment в uip_buf, на который указывает uip_appdata.
void uip_unlisten ( u16_t  port)

Остановить прослушивание указанного порта.

Заметки:
Поскольку эта функция ожидает номер порта с сетевым порядком байт, то при необходимости должно быть применено преобразование HTONS() или htons().
Аргументы:
port16-битный номер порта с сетевым порядком байт.

См. определение в файле uip.c строка 515

Перекрестные ссылки UIP_LISTENPORTS.


Переменные

void* uip_appdata

Указатель на данные приложения, находящиеся в буфере пакета.

Этот указатель указывает на данные приложения, когда вызывается функция приложения. Если приложению нужно отправить данные, то оно может использовать это пространство для записи туда данных перед вызовом uip_send().

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

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

void* uip_appdata

Указатель на данные приложения, находящиеся в буфере пакета.

Этот указатель указывает на данные приложения, когда вызывается функция приложения. Если приложению нужно отправить данные, то оно может использовать это пространство для записи туда данных перед вызовом uip_send().

Примеры:
dhcpc.c, resolv.c, telnetd.c и webclient.c.

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

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

u8_t uip_buf[UIP_BUFSIZE+2]

Буфер пакета uIP.

Массив uip_buf используется для того, чтобы хранить входящие и исходящие пакеты. Драйвер устройства должен поместить в этот буфер приходящие данные. Когда данные отправляются, драйвер устройства должен читать заголовки уровня линка и заголовки TCP/IP из этого буфера. Размер заголовков уровня линка конфигурируется дефайном UIP_LLH_LEN.

Заметки:
Данные приложения должны быть помещены в этот буфер, так что драйвер устройства должен читать их с места, указанного через указатель uip_appdata, как это показано в следующем примере:
 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().

struct uip_conn* uip_conn

Указатель на текущее соединение TCP.

Указатель uip_conn может использоваться для доступа к текущему соединению TCP.

См. определение в файле uip.c строка 162

struct uip_conn* uip_conn

Указатель на текущее соединение TCP.

Указатель uip_conn может использоваться для доступа к текущему соединению TCP.

См. определение в файле uip.c строка 162

Длина пакета в буфере 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().

Статистическая инфрмация uIP TCP/IP.

Это переменная, в которой собирается статистика uIP TCP/IP.