Протоколы Internet


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


/p>

Ниже приведен пример программы, реализующей некоторые из описанных запросов.

.MODEL

small

 

PUBLIC

_INFACE

 

VERSION

EQU

1

EXTRN

_PARAM:BYTE

 

EXTRN

_Q:BYTE

 

.DATA

INCLUDE

DEF.ASM

; Определения некоторых констант

P_LIST

STRUC

 

LINTN

DB

32 dup(0)

; Список активных номеров прерываний

HANDLES

DW

?

 

HANDLEP

DW

?

 

ER_CODE

DW

?

 

ERNUM

DW

?

; Код ошибки

HANDLER

DD

?

 

MODE

DW

?

; Текущий режим приема пакетов

MLIST

DB

0,0,0,0,0,0

; Список допустимых режимов; 1 => имеется

PKT_IN

DW

?,?

; Диагностический массив

pkt_out

DW

?,?

 

byte_in

DW

?,?

 

byt_out

DW

?,?

 

err_in

DW

?,?

 

err_out

DW

?,?

 

pk_drop

DW

?,?

 

L1

DW

0

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

L2

DW

0

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

L3

DW

0

; Тип

L4

DW

0

; Функция

_NAME

DB

0,0,0,0,0,0,0,0,0,0

; Имя интерфейса

ETHER_ADR

DB

ADDR_LEN dup(-1)

; Ethernet-адрес

S_ADR

DB

EADDR_LEN+5 dup(-1)

; Ethernet-адрес получателя

D_ADR

DB

EADDR_LEN+5 dup(-1)

; Ethernet-адрес отправителя

P_LIST

ENDS

QUEUE

STRUC

Leng

DW

15000,?

; Длина очереди

Tail

DW

?

; Смещение последнего элемента очереди

Head

DW

?

; Смещение первого элемента очереди

_end

DW

?

; Указатель на конец очереди

p_len

DW

?

; Длина пакета

P_start

DW

?

; Указатель на текущий пакет = Q_head - Q_begin +2

NEW

DB

0

; Флаг нового пакета

Line

DB

?

; Строка экрана

Npacks

DD

0

; Счетчик принятых пакетов

B

DW

?

; смещение Q_beg

Point

DW

380 dup(?)

 

Beg

DB

31000 dup(?)

; Пакетный буфер

QUEUE

ENDS

ether_bdcst

DB

EADDR_LEN dup(-1)

; Широковещательный адрес Ethernet, заполненный -1.

ether_addr

DB

EADDR_LEN dup(-1)

 

bogus_type

DB

0,0;

 

signature

DB

'PKT DRVR',0

; Сигнатура пакетного драйвера

signature_len

equ

$-signature

 

SAFE

DW

?

 

DFLAG

DB

0

 

<


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



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