IRDA

НАЗВАНИЕ
ОБЗОР
ОПИСАНИЕ
ТИПЫ СОКЕТОВ
ФОРМАТ АДРЕСА
ОПЦИИ СОКЕТА
АВТОР
АВТОР ПЕРЕВОДА
СМОТРИ ТАКЖЕ

НАЗВАНИЕ

irda − стек протокола Linux−IrDA

ОБЗОР

#include <linux/irda.h>

stream_s = socket(PF_INET, SOCK_STREAM, 0);
seqpkt_s
= socket(PF_INET, SOCK_SEQPACKET, 0);
dgram_s
= socket(PF_INET, SOCK_DGRAM, IRDAPROTO_UNITDATA);
ultra_s
= socket(PF_INET, SOCK_DGRAM, IRDAPROTO_ULTRA);

ОПИСАНИЕ

Linux−IrDA − это полная реализация различных протоколов IrDA и драйверов IrDA для Linux.

Низкоуровневая настройка стека IrDA (портов IrDA) и различных драйверов IrDA описана в irattach(8).

Использование верхних слоёв стека IrDA (IrCOMM, IrLPT, IrNET, IrLAN, OBEX...) описано в соответствующих страницах руководства.

Ключевыми компонентами стека протокола Linux−IrDA являются протоколы IrLAP, IrLMP, IrTTP и IrIAS и они реализованы в виде модуля ядра. Интерфейс программиста к стеку IrDA основан на сокетах. За более подробной информацией по сокетам обратитесь к socket(7).

Отметим, что высокоуровневые протоколы IrDA могут предоставлять программистам другие интерфейсы. Например, IrCOMM предоставляет интерфейс основанный на TTY и OBEX, доступный через библиотеку, работающую в пространстве пользователя.

ТИПЫ СОКЕТОВ

Интерфейс сокетов Linux−IrDA предоставляет 4 типа сокетов:
Потоковый сокет − SOCK_STREAM, 0

Потоковые сокеты предоставляют надёжные, ориентированные на потоки, двунаправленные соединения между двумя сокетами поверх IrTTP, похожие на сокеты TCP. IrTTP гарантирует, что данные будут доставляться по порядку и сопровождаться управлением потоком, IrLAP повторно передаёт потерянные пакеты.
Потоковые сокеты не сохраняют границы записей.

Сокет последовательных пакетов − SOCK_SEQPACKET, 0

Сокеты последовательных пакетов предоставляют надёжные, ориентированные на датаграммы, двунаправленные соединения между двумя сокетами поверх IrTTP. IrTTP гарантирует, что данные будут доставляться по порядку и сопровождаться управлением потоком, IrLAP повторно передаёт потерянные пакеты.
Сокеты последовательных пакетов сохраняют границы записей. Большие датаграммы фрагментируются необходимым образом.

Сокет дейтаграмм − SOCK_DGRAM, IRDAPROTO_UNITDATA

Сокеты последовательных пакетов предоставляют надёжные, ориентированные на датаграммы, двунаправленные соединения между двумя сокетами поверх IrLMP. Не гарантируется, что данные поступят по порядку, управление потоком не осуществляется, однако IrLAP повторно передаёт потерянные пакеты.
Сокеты последовательных пакетов сохраняют границы записей. Фрагментация не производится, датаграммы больше, чем MTU канала IrDA будут обрезаны либо отброшены.

Ультра−сокет − SOCK_DGRAM, IRDAPROTO_ULTRA

Ультра−сокеты предоставляют сервис передачи датаграмм без соединений, без обеспечения надёжности доставки пакетов поверх IrLAP−Ultra. Ультра−датаграммы отправляются и принимаются только если нет установленных соединений IrLAP, а иначе − отклоняются. Они всегда передаются со скоростью 9600 бод. Датаграммы могут потеряться, прийти в другом порядке, управление потоком не осуществляется.
Ультра−сокеты сохраняют границы записей. Фрагментация не выполняется, датаграммы больше чем ультра−MTU (382 байт) будут обрезаны или отброшены.

ФОРМАТ АДРЕСА

Адрес сокета IrDA определяется сочетанием адреса интерфейса IrDA и имени службы. Имена служб автоматически решаются в lsap с помощью протокола IrIAP.

struct sockaddr_irda {
sa_family_t sir_family; /* AF_IRDA */
__u8 sir_lsap_sel; /* Селектор LSAP */
__u32 sir_addr; /* Адрес устройства */
char sir_name[25]; /* Обычно <служба>:IrDA:TinyTP */
};

sin_family всегда устанавливается в AF_IRDA. sir_lsap_sel обычно не используется. sir_addr − это адрес партнёра и он не обязателен (и в этом случае используется первый обнаруженный партнёр). sir_name − это имя службы сокета.

ОПЦИИ СОКЕТА

Сокеты IrDA поддерживают некоторые специфичные для протокола опции, которые могут быть заданы с помощью setsockopt(2) и прочитаны с помощью getsockopt(2). Уровень опций сокета для IrDA − это SOL_IRLMP.

Опции, которые могут быть заданы:
IRLMP_IAS_SET

Установить запись в локальную базу данных IAS.

IRLMP_IAS_DEL

Удалить запись из локальной базы данных IAS.

IRLMP_MAX_SDU_SIZE

Задать максимальный входящий MTU для сокетов последовательных пакетов.

IRLMP_HINTS_SET

Задать биты подсказок IrDA для передачи партнёрам.

IRLMP_HINT_MASK_SET

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

Опции, которые могут быть получены.
IRLMP_ENUMDEVICES

Произвести обнаружение на уровне канала и вернуть содержимое журнала обнаружения.

IRLMP_MAX_SDU_SIZE

Получить максимальный входящий MTU.

IRLMP_IAS_GET

Получить запись из локальной базы данных IAS.

IRLMP_IAS_QUERY

Запросить с помощью протокола IrLAP запись из базы данных IAS партнёра.

IRLMP_WAITDEVICE

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

АВТОР

Джин Туррилхес (Jean Tourrilhes) − jt@hpl.hp.com

АВТОР ПЕРЕВОДА

Перевод на русский язык выполнил Владимир Ступин <vladimir@stupin.su>.

СМОТРИ ТАКЖЕ

irattach(8), irdadump(8), irnet(4), irnetd(8).