Опубликован: 07.08.2007 | Уровень: специалист | Доступ: свободно | ВУЗ: Московский физико-технический институт
Лекция 17:

Моделирование сетей, сетевая надежность и сетевые драйверы

< Лекция 16 || Лекция 17: 12345 || Лекция 18 >

17.4. Сетевые драйверы

Читатели, знакомые с телекоммуникационными протоколами, могут заинтересоваться тем, как писать прикладные программы для работы с пакетами. В большинстве случаев вполне достаточно воспользоваться стандартной библиотекой для работы с сокетами. В особых случаях может возникнуть необходимость получения данных непосредственно от сетевого интерфейса. Прикладная программа взаимодействует с драйвером сетевого интерфейса. Ethernet-интерфейс, как и всякий другой, содержит несколько статусных управляющих регистров ( CSRControl Status Register) и один или несколько регистров данных. Запись (чтение) в эти регистры выполняется в IBM/PC с помощью команд IN (OUT). Каждому регистру ставится в соответствие определенный номер порта. Блок номеров портов задается в процессе постановки пакетного драйвера.

Следует иметь в виду, что разные интерфейсы могут иметь разное число CSR -регистров и отличные от приведенных ниже функции (NE2100). Интерфейс характеризуется тремя целыми числами: класс (8 бит), тип (16 бит) и номер. Класс говорит о том, для какой из сетевых сред предназначен данный прибор (PPP, DIX Ethernet, IEEE 802.3, IEEE 802.5, Pronet-10, Appletalk и т.д.). Тип описывает конкретную реализацию интерфейса (NE2100, NI5210, 3C501 и т.д.). Тип 0xffff соответствует всем интерфейсам данного класса. В случае, когда ЭВМ оснащена более чем одним интерфейсом идентичного типа, для их идентификации используется номер. На рис. 17.4 показана структура управляющего ( CSR ) регистра сетевого интерфейса.

Структура CSR-регистра интерфейса (CSR0)

Рис. 17.4. Структура CSR-регистра интерфейса (CSR0)
Таблица 17.4.
Init инициализация (initialize)
Strt старт
Stop стоп
Tdnd запрос передачи (transmit demand)
Txon включение передачи
Rxon включение приема
Inea разрешение прерываний (interrupt enable)
Intr прерывание
Idon инициализация выполнена (стирание записью 1)
Tint прерывание при передаче (стирание записью 1)
Rint прерывание при чтении (стирание записью 1)
Merr ошибка при тайм-ауте на шине (стирание записью 1)
Miss нет буфера для приема (стирание записью 1)
Cerr ошибка из-за столкновения (стирание записью 1)
Babl тайм-аут при передаче (стирание записью 1)
Err ошибка типа Babl, Cerr, Miss, Merr (только для чтения)

CSR 1 (доступ разрешен при CSR 0[stop] = 1)

CSR1

Рис. 17.4b. CSR1

CSR2 (доступ разрешен при CSR0[stop] = 1)

CSR2

Рис. 17.4c. CSR2
Таблица 17.5.
Bcon 0 = <0:7> перестановка байтов адресов
Acon 0 = ale, 1 = /as
Bswp 0 = /bm1, bm0, /hold;

CSR 3 (доступ разрешен при CSR 0[stop] = 1)


Рис. 17.4d.

Структура переменных init_mode (смещение = 0) имеет вид

Структура переменных init_mode

Рис. 17.5. Структура переменных init_mode
Таблица 17.6.
Drx запрет приема
Dtx запрет передачи
Loop цикл
Dtcr запрет передачи crc
Coll столкновение
Drty запрет повторов
Intl внутренний цикл
Prom режим приема всех пакетов (promiscuous mode)

Приведенное выше описание регистров интерфейса не является единственно возможным. Структура драйверов варьируется для разных операционных систем. Для системных программистов полезно иметь возможность настраивать драйвер или непосредственно интерфейс на определенный режим, например, на прием всех пакетов, проходящих по кабельному сегменту. Последнее может представлять интерес в диагностических целях, так как вслед за пакетным драйвером загружается Etherdrv, Winsock или winpkt и т.д., блокирующие режим приема всех пакетов (mode=6).

Существует множество пакетных драйверов. Можно обнаружить несколько модификаций для одного и того же типа интерфейса. Эти драйверы могут быть ориентированы на работу в разных программных средах и иметь разные возможности. Драйвер может использовать минимум возможностей интерфейса (базовый уровень), реализовать более широкий набор функций (мультикастинг, сбор статистики и т.д.) или поддерживать практически все, на что способен данный интерфейс. В последнем случае он занимает больше места в памяти. При написании программы следует помнить, что порядок байтов в Ethernet противоположен тому, который используется в вашей машине.

Пакетные драйверы используют программные прерывания в интервале 0x60 - 0x80. Следует сразу заметить, что не все прерывания из этого списка свободны, и при конфигурировании системы следует проявлять осмотрительность. Для того, чтобы избежать конфликтов с другими внешними устройствами, предусматривается возможность реконфигурации прерываний. Практически все драйверы могут работать с различными протоколами (TCP/IP, OSI и др.). Решить задачу мультиплексирования на связном уровне помогает процедура access_type, которая обеспечивает доступ для пакетов определенного типа.

Все функции реализуются с помощью обращения к драйверу с набором определенных параметров. Каждому типу используемого сетевого протокола, с которым работает интерфейс, ставится в соответствие целочисленный указатель (handle), получаемый с помощью процедуры access_type. Выполнимость драйвером тех или иных операций может быть выяснена с помощью запроса driver_info.

Следует помнить, что порядок байтов в PC и в некоторых сетях, включая Ethernet, не совпадает. Мультикастинг адресация реализуется на уровне L2, при этом список мультикаст-адресов подписки пользователей хранится в сетевом интерфейсе и может быть прочитан по запросу.

Современные сетевые интерфейсы производят подсчет принятых и переданных октетов, количество различного типа ошибок и пр. Получение статистических данных об ошибках и трафике через данный интерфейс осуществляется с помощью запроса get_statistics(handle). Статистические данные имеют вид целых 32-разрядных чисел.

Практически все интерфейсы допускают смену МАС-адреса, прошитого изготовителем интерфейса.

< Лекция 16 || Лекция 17: 12345 || Лекция 18 >
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????