Протоколы Internet


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


/p>

Любой пакетный драйвер имеет блок исходных данных (MS-DOS), напр.:

EADDR_LEN

equ 6

 

; длина физического адреса

init_block

struc

 

 

init_mode

dw

0

 

init_addr

db

eaddr_len dup(?)

; ethernet-адрес

init_filter

db

8 dup(0)

; Логический адресный фильтр (multicast filter).

init_receive

dw

?,?

; Указатель входного кольцевого буфера

init_transmit

dw

?,?

; Указатель выходного кольцевого буфера.

init_block

ends

 

 

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

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

Drx

запрет приема;

Dtx

запрет передачи;

Loop

цикл;

Dtcr

запрет передачи crc;

Coll

столкновение;

Drty

запрет повторов;

Intl

внутренний цикл;

Prom

режим приема всех пакетов (promiscuous mode).

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

rcv_msg_dscp

struc

rd_addr

dw ?

; Младшая часть адреса входного буфера

rd_stat

dw ?

; Статусная часть + старшая часть адреса

rd_bcnt

dw ?

; Размер буфера в байтах

rd_mcnt

dw ?

; Длина сообщения в байтах

rcv_msg_dscp

ends

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

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

Enp

конец пакета;

Stp

начало пакета;

Buff

ошибка в буфере;

CRC

CRC-ошибка;

Oflo

переполнение буфера;

Fram

ошибка при записи в буфер;

Err

наличие ошибки;

Own

0 = полное заполнение.

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

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

BLUEBOOK

equ

1

 

IEEE8023

equ

11

 

ADDR_LEN

equ

6

; размер Ethernet-адреса

MAX_M_CAST

equ

8

; максимальное число мультикаст-адресов.

<


Начало  Назад  Вперед



Книжный магазин