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



         

Получение информации о типе и функциональных возможностях драйвера - часть 4


.........................

OKAY:POP DS
 POP ES
 POP DI
 POP SI
 MOV SP, BP
 POP BP
 RET

RECEIVER:

; Подпрограмма RECEIVER, вызываемая при получении пакета

 OR AX, AX; Первый или второй вызов?
 JNE RECV 
 MOV AX, seg _Q.beg; Указатель буфера ES:DI
 MOV ES, AX 
 MOV DI, offset _Q.beg 

RECV:RETF

2. Организация доступа для пакетов данного типа
access_type(if_class, if_type, if_number, type, typelen, receiver)
AH ==2 (код запроса)

Запрос access_type инициализирует доступ для пакетов определенного типа (type). Аргумент typelen - длина спецификации типа в байтах, для PC/TCP равна 5 (наименьшее значение - 2, для IP и ARP). Аргумент receiver является указателем на подпрограмму, которая вызывается при приеме пакета. Получая пакет, драйвер дважды обращается к этой программе. Первый раз (при AX==0) это делается с целью получения адреса буфера, куда должен быть положен пакет. Прикладная программа в этом случае должна выдать указатель буфера в регистры ES:DI. Если прикладной процесс не имеет свободного буфера,то возвращается значение 0:0. Пакет выбрасывается и повторное обращение к программе receiver отменяется. Форма реализации запроса аналогична приведенному для driver_info:

Intif_class; AL; класс интерфейса
Intif_type; BX; тип интерфейса
Intif_number; DL; номер интерфейса
Charfar *type; DS:SI 
Unsignedtypelen; CX 
Int(far *receiver); ES:DI 

access:mov ah, 2 
  style="font-family:arial;font-size:12pt"mov al, ch; установка класса; здесь предполагается, что содержимое регистров соответствует тому, что получено в результате обращения к driver_info
 mov bx, dx; устанавливаем параметр type
 mov dl, cl; устанавливаем параметр number, при одном интерфейсе number=0
 xor cx, cx; длина type равна нулю
 push cs; устанавливаем сегментный регистр receiver
 pop es 
 mov di, offset RECEIVER; вызов подпрограммы receiver
 call int_pkt; обращение к пакетному драйверу

В случае ошибки флаг carry=1, а в регистр DH заносится код ошибки.


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