Протоколы 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)




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