Протоколы Internet


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


BX ; указатель определяет тип пакетов

_release_type proc near

 

push bp

; спасение регистров

 

push ds

 

 

push es

 

 

mov ah, 3

; задаем код запроса

 

mov bx, _param.handle

; заносим указатель

 

pushf

 

 

cli

 

 

call _param.handler

; обращение к драйверу

 

mov _param.er_CODE, dx

; занесение кода ошибки

 

pop es

; восстановление регистров

 

pop ds

 

 

pop bp

 

 

ret

 

 

_release_type

endp

В случае ошибки флаг carry=1, а в регистр DH заносится код ошибки. Возможная ошибка: BAD_HANDLE (не верный указатель). При успешном выполнении запроса флаг carry=0. Эта операция прерывает доступ пакетов, соответствующих указателю, полученному с помощью запроса access_type. Старый указатель после выполнения этого запроса не действителен.

4. Процедура посылки пакета send_packet(buffer, length)

AH == 4 (код запроса)

char far *buffer; DS:SI (адрес буфера)

unsigned length; CX (длина пакета в байтах)

В случае ошибки флаг carry=1, а в регистр DH заносится код ошибки 12 CANT_SEND. send_packet отправляет пакет с числом байт, равным CX. Пакет должен в исходный момент лежать, начиная с адреса DS:SI. Прикладная программа должна сформировать все необходимые заголовки. Информация, нужная для осуществления демультиплексирования пакетов (MAC или LLC), также должна быть записана в пакет, так как при этом запросе не сообщается значение указателя (handle).

5. Завершение работы драйвера terminate(handle)

AH == 5 (код запроса)

int handle; BX (указатель)

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

1 BAD_HANDLE;

7 CANT_TERMINATE.

Завершает работу драйвера, соответствующего указателю, который приведен в качестве параметра запроса. Если возможно, драйвер будет выгружен и занимаемая им память освобождена.

6. Получение физического адреса интерфейса get_address(handle,buf,len)




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