Телекоммуникационные технологии. Том 1



         

Сетевые драйверы - часть 3


Структура переменных init_mode (смещение = 0) имеет вид

Рис. 7.2.2. Структура переменных init_mode

Drxзапрет приема;
Dtxзапрет передачи;
Loopцикл;
Dtcrзапрет передачи crc;
Collстолкновение;
Drtyзапрет повторов;
Intlвнутренний цикл;
Promрежим приема всех пакетов (promiscuous mode).

Кольцевой входной буфер имеет следующую структуру:

rcv_msg_dscpstruc
rd_addrdw ?; Младшая часть адреса входного буфера
rd_statdw ?; Статусная часть + старшая часть адреса
rd_bcntdw ?; Размер буфера в байтах
rd_mcntdw ?; Длина сообщения в байтах
rcv_msg_dscpends

Структура переменных rd_stat имеет вид

Рис. 7.2.3. Структура переменных rd_stat

Enpконец пакета;
Stpначало пакета;
Buffошибка в буфере;
CRCCRC-ошибка;
Ofloпереполнение буфера;
Framошибка при записи в буфер;
Errналичие ошибки;
Own0 = полное заполнение.

Выходной буфер имеет сходную структуру.

Я не буду описывать здесь то, как следует писать системные драйверы (Исчерпывающую информацию по написанию таких драйверов читатель может найти в книге "Написание драйверов для MS-DOS" Р.Лея и "Уэйт Груп", Москва "Мир", 1995), тем более что существует достаточное их количество в депозитариях общего доступа (Например, анонимное FTP по адресам ftp.funet.fi, ftp.switch.ch или oak.oakland.edu, депозитарий SimTel ). Приведенное выше описание регистров интерфейса не является единственно возможным (см. также руководство по сетевому контроллеру 8390 и файл NE2.ASM из ссылки ftp.funet.fi. Структура драйверов варьируется для разных операционных систем. Для системных программистов полезно иметь возможность настраивать драйвер или непосредственно интерфейс на определенный режим, например, на прием всех пакетов, проходящих по кабельному сегменту. Последнее может представлять интерес в диагностических целях, так как вслед за пакетным драйвером загружается Etherdrv, Winsock или winpkt и т.д., блокирующие режим приема всех пакетов (mode=6). Ниже приведен пример описания основных параметров драйвера:

BLUEBOOKequ1 
IEEE8023equ11 
ADDR_LENequ6; размер Ethernet-адреса
MAX_M_CASTequ8; максимальное число мультикаст-адресов.




Содержание  Назад  Вперед