Протоколы Internet

         

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


/p> NOBAD:































































MOV AX, 1FFH



; Запрашиваем информацию о драйвере





MOV BX, _PARAM.HANDLES



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





call INT_PKT







JNC N_BAD







MOV _PARAM.ER_CODE, 272



; Ошибка при получении информации о драйвере





POP DS







JMP OKAY































N_BAD:



PUSH DS





PUSH SS



&nsp;



POP DS





MOV ES, SAFE

































































































































































MOV _PARAM.L1, BX



; Версия драйвера





MOV _PARAM.L2, CX



; номер/класс





MOV _PARAM.L3, DX



; Тип





MOV _PARAM.L4, AX



; Функциональность





LEA BX, _PARAM._NAME







POP DS







MOV CX, 8





ZFIND:



CMP byte ptr [SI], 0







MOV AL, byte ptr [SI]







MOV byte ptr ES:[BX], AL







JE ZERO_







INC SI







INC BX







LOOP ZFIND





ZERO_:



POP DS







MOV AH, 21



; Запрашиваем код режима приема пакетов





MOV BX, _PARAM.HANDLES







call INT_PKT







MOV _PARAM.MODE, AX



; Записываем код режима



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















































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:





















































Int



if_class; AL



; класс интерфейса



Int



if_type; BX



; тип интерфейса



Int



if_number; DL



; номер интерфейса



Char



far *type; DS:SI





Unsigned



typelen; CX





Int



(far *receiver); ES:DI



<

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







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий