Операционная система UNIX
Шрифт:
При передаче данных TCP/IP в сетях Token Ring используется формат кадра IEEE 802.5, инкапсулирующий кадр LLC с заголовком SNAP, как описано выше.
Внутренняя архитектура
Как уже говорилось, драйвер, реализующий поставщика услуг уровня канала данных, состоит из двух частей: аппаратно-зависимой и аппаратно-независимой. Соответственно драйвер хранит отдельные структуры данных, необходимые для работы этих частей. Архитектура драйвера приведена на рис. 6.40.
Рис. 6.40. Архитектура драйвера DLPI
Для каждого обслуживаемого драйвером сетевого адаптера создается отдельная структура данных
В частности, эта структура содержит следующие поля:
major | Старший номер устройства, связанного с данным сетевым адаптером |
io_start | Адрес
|
io_end | Адрес конца области ввода/вывода |
mem_start | Адрес начала базовой памяти |
mem_end | Адрес конца базовой памяти |
irq_level | Уровень прерывания |
шах_saps | Максимальное число точек доступа (SAP) |
flags | Флаги состояния адаптера |
mib | Список статистических данных |
Поле
BOARD_PRESENT | Устанавливается драйвером после успешной инициализации адаптера |
BOARD_DISABLED | Устанавливается драйвером при неудачной инициализации адаптера. Этот флаг также может быть установлен, если драйвер определит нарушения в функционировании адаптера |
TX_BUSY | Указывает на отсутствие ресурсов, например отсутствие необходимых буферов для передачи кадра |
TX_QUEUED | Указывает на наличие кадров, ожидающих передачи |
Для каждого подключенного пользователя услуг, или, другими словами, для каждой активной SAP драйвер создает структуру данных
state | Состояние SAP. Возможные состояния определены интерфейсом DLPI. Исходное состояние точки доступа DL_UNBOUND |
sap_addr | Уникальный адрес (идентификатор) SAP |
flags | Флаги, определяющие дополнительные характеристики SAP |
read_q | Указатель на очередь чтения потока, связанного с SAP |
write_q | Указатель на очередь записи потока, связанного с SAP |
mac_type | Тип используемого протокола доступа и формат используемого кадра. Возможные значения включают: |
DL_CMACD | IEEE 802.3 |
DL_ETHER | Ethernet 2.0 |
DL_TPB | IEEE 802.4 |
DL_TPR | IEEE 802.5 |
DL_HDLC | ISO HDLC |
DL_FDDI | FDDI |
service_mode | Режим передачи данных. В локальных сетях обычно используется режим без установления связи без подтверждения DL_CLDLS |
provider_style | Тип поставщика услуг: DL_STYLE1 или DL_STYLE2 |
bd | Указатель на структуру DL_bdconfig_t , связанную с сетевым адаптером |
next_sap | Указатель на следующую точку доступа в списке активных SAP |
max_spdu | Максимальный размер данных, которые могут быть переданы в кадре |
min_spdu | Минимальный размер данных, которые могут быть переданы в кадре |
Дополнительные характеристики SAP хранятся в поле
RAWCSMACD | Указывает, что через SAP передаются только кадры формата IEEE 802.3 |
SNAPCSMACD | Указывает, что через SAP передаются кадры формата LLC SNAP |
PROMISCUOUS | Указывает, что SAP работает в режиме отсутствия фильтрации кадров (promiscuous mode), при котором SAP получает копии всех кадров независимо от адреса точки доступа, которой они предназначаются. Данный режим применяется, например, при создании приложений мониторинга уровня канала данных |
PRIVILEGED | Указывает, что управление точкой доступа требует привилегий суперпользователя |
Кроме того, драйвер хранит и обновляет статистическую информацию о сетевом интерфейсе, представляющую собой набор счетчиков, связанных с работой адаптера, и ассоциированных с ним точек доступа. Пользователь может получить интересующую его статистику с помощью
ifInOctets | Общее число октетов, полученных адаптером |
ifOutOctets | Общее число октетов, переданных адаптером |
ifOutUcastPkts | Число переданных однонаправленных (unicast) пакетов |
ifOutNUcastPkts | Число переданных групповых (multicast) и широковещательных (broadcast) пакетов |
ifInDiscards | Число полученных, но отброшенных правильных пакетов |
ifInUcastPkts | Число полученных однонаправленных (unicast) пакетов |
ifInNUcastPkts | Число полученных групповых (multicast) и широковещательных (broadcast) пакетов |
ifInErrors | Число пакетов, полученных с ошибкой |
ifUnknownProtos | Число полученных пакетов, которые были отброшены из-за неправильной SAP адресата |
ifOutQlen | Число пакетов, находящихся в очереди на передачу |
ifOutErrors | Число пакетов, переданных с ошибкой |
etherCollisions | Число коллизий |
Аппаратно-независимая часть драйвера обрабатывает все запросы, поступающие от пользователя услуг уровня канала данных. Для этого в драйвере определены следующие функции (часть из них являются стандартными точками входа STREAMS):
DLopen | Точка входа xxopen . Эта функция инициализирует SAP, связанную с данным потоком. Функция проверяет наличие флага BOARD_PRESENT и в случае его отсутствия возвращает ошибку. |
DLclose | Точка входа xxclose . Эта функция сбрасывает текущее состояние SAP и устанавливает его равным DL_UNBOUND . |
DLwput | Точка входа xxput для очереди записи. Эта функция интерпретирует примитивы DLPI и вызывает соответствующие процедуры драйвера. В случае, если примитив содержит команду уровня канала данных, например, запрос на передачу датаграммы, вызывается функция DLcmds , которая производит формирование кадра и вызов функции передачи кадра аппаратно-зависимой части драйвера. В случае, когда примитив содержит команду ioctl(2), вызывается функция DLioctl . |
DLrsrv | Точка входа xxservice для очереди чтения. Функция DLrecv помещает каждый кадр, полученный от аппаратно-зависимой части драйвера, в очередь чтения потока, ассоциированного с адресуемой SAP. В зависимости от формата кадра (протокола MAC) вызывается соответствующая процедура, извлекающая данные и помещающая их в сообщение DL_UNITDATA_IND (для услуги без предварительного установления связи и без подтверждения), которое направляется вверх по потоку пользователю услуг. Кроме того, DLrsrv просматривает список активных SAP для возможного копирования сообщения в очереди потоков, имеющих тот же адрес точки доступа. Поскольку функция DLrecv помещает кадр в очередь первого найденного потока с требуемым адресом SAP (см. описание функции ниже), описанное поведение DLrsrv гарантирует, что все пользователи услуг уровня канала данных, зарегистрировавшие один и тот же адрес SAP, получат свою копию пакета данных. |
DLrecv | Функция обработки полученного пакета. Эта функция определяет формат пакета и помещает его в очередь потока, ассоциированную с адресуемой SAP. Обычно эта функция вызывается функцией обработки прерывания при получении очередного кадра данных от сетевого адаптера. |
Примитивы DLPI
Как и в случае предоставления транспортных услуг, обмен данными между пользователем и поставщиком происходит в виде сообщений, несущих примитивы DLPI. Ниже рассмотрены некоторые из этих примитивов, относящиеся к режиму передачи без предварительного установления связи и без подтверждения. Именно такой режим обычно используется в традиционных локальных сетях.
Несмотря на то что рассматриваемая услуга не предусматривает установления связи, фактической передаче данных предшествует обмен примитивами для инициализации потока и подключения его к поставщику услуг уровня канала данных. Во-первых, пользователь должен создать точку доступа к поставщику услуг, для чего необходимо произвести операцию связывания. Во-вторых, в случае использования поставщика услуг второго типа (style 2), пользователь также должен подключиться к требуемой PPA. Наконец, пользователю может потребоваться произвести ряд действий, включающих получение информации о созданном потоке, регистрацию специфического группового адреса для потока или включение режима отсутствия фильтрации кадров, при котором пользователь сможет получать копии всех пакетов, полученных поставщиком услуг. [94]
94
Включение этого режима требует привилегий суперпользователя и используется преимущественно в приложениях мониторинга уровня канала данных.
После этого пользователь может передавать данные, учитывая, однако, что в обсуждаемом режиме поставщик не гарантирует надежную доставку данных адресату (удаленному пользователю услуг уровня канала данных). Например, отсутствие управления передачей может привести к переполнению буферов, и, как следствие, к потере кадров. Неправильные кадры, полученные из сети, также будут отбрасываться без уведомления передающей стороны. Однако преимуществом является отсутствие необходимости установления связи и связанных с этим накладных расходов.