Для всех сообщений STREAMS, за исключением сообщений M_IOCTL
, которые генерируются головным модулем в ответ на системный вызов ioctl(fd, I_STR, ...)
, модуль M_IOCTL
обрабатываются модулем и преобразуются в соответствующие примитивы TPI.
При этом вызов
#include
struct strioctl my_strioctl
...
strioctl.ic_cmd = cmd;
strioctl.ic_timeout = INFTIM;
strioctl.ic_len = size;
strioctl.ic_dp = (char*)buf;
ioctl(fd, I_STR, &my_strioctl);
При вызове size
устанавливается равным размеру соответствующего примитива TPI, определенного полем cmd
и расположенного в буфере buf
. При возврате из функции поле size
содержит размер примитива, возвращенного поставщиком транспортных услуг и расположенного в буфере buf.
Модуль
Значение cmd | Обработка модулем |
---|---|
TI_BIND | Команда преобразуется в примитив T_BIND_REQ . При успешном завершении функции buf находится примитив T_BIND_ACK . |
TI_UNBIND | Команда преобразуется в примитив T_UNBIND_REQ . При успешном завершении функции buf находится примитив T_OK_ACK . |
TI_GETINFO | Команда преобразуется в примитив T_INFO_REQ . При успешном завершении функции buf находится примитив T_INFO_ACK . |
TI_OPTMGMT | Команда преобразуется в примитив T_OPTMT_REQ . При успешном завершении функции buf находится примитив T_OPTMGMT_ACK . |
Интерфейс DLPI
DLPI определяет интерфейс между протоколами уровня канала данных (data link layer) модели OSI, называемыми поставщиками услуг уровня канала данных и протоколами сетевого уровня, называемыми пользователями услуг уровня канала данных. В качестве примера пользователей услуг уровня канала данных можно привести такие протоколы, как IP, IPX или CLNS. С другой стороны, поставщик услуг уровня канала данных непосредственно взаимодействует с различными сетевыми устройствами, обеспечивающими передачу данных по сетям различной архитектуры (например, Ethernet, FDDI или ATM) и использующими различные физические среды передачи.
Для обеспечения независимости DLPI от конкретной физической сети передачи драйвер уровня канала данных состоит из двух частей: верхней аппаратно-независимой и нижней аппаратно-зависимой. Аппаратно-независимая часть драйвера обеспечивает предоставление общих услуг, определенных интерфейсом DLPI, а также поддержку ряда потенциальных пользователей, представляющих семейства протоколов TCP/IP, NetWare и OSI. Аппаратно-зависимая часть непосредственно взаимодействует с сетевым адаптером.
На рис. 6.34 приведена структура драйвера поставщика услуг уровня канала данных. Обмен данными между аппаратно-независимой частью драйвера и пользователем услуг осуществляется в виде сообщений STREAMS, формат и назначение которых и определяется спецификацией DLPI (т.н. примитивы DLPI).
Рис. 6.34. Структура драйвера уровня канала данных
Во время инициализации и последующей передачи данных аппаратно-независимая часть драйвера вызывает необходимые функции аппаратно-зависимой части. Напротив, при поступлении данных из сети, аппаратно-зависимая часть помещает пакеты данных, или кадры, непосредственно в очередь чтения аппаратно-независимой части. Обе части совместно используют набор переменных и флагов для взаимной синхронизации и контроля передачи.
Пользователь получает доступ к услугам поставщика услуг уровня канала данных через DL_BIND_REQ
) потока с точкой доступа к услугам уровня канала данных.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии