Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: NDIS и ARP-запросы ...  (Прочитано 7277 раз)
0 Пользователей и 1 Гость смотрят эту тему.
_AV_
Гость
« : 14-07-2004 10:59 » 

Переделываю доставшийся в наследство драйвер сетевой карты.

Имеет место быть следующая проблема:

1. Пусть сетевая карта установлена на роутере, который разделяет две подсети.
2. Пусть с одного из компьютеров одной подсети я пытаюсь осуществить ping несуществующего хоста другой подсети.
3. По приходу пакета ping на сетевую карту роутера, подключенную к первой подсети, драйвер выкачивает пакет из карты по DMA и уведомляет о его существовании NDIS.
4. В связи с отсутствием точки назначения пакета в ARP-таблице роутера, роутер начинает рассылать во вторую подсеть ARP-запросы.
5. NDIS _БЛОКИРУЕТ_ память, выделенную под пакет и возвращает драйверу статус PENDING.
6. Теперь драйвер _ОБЯЗАН_ завершить обработку данного пакета по завершении обработки пакета драйверами верхнего уровня (ARP) по уведомлению NDIS в функции ReturnPacket()
7. Средняя скорость завершения обработки ПО роутера запроса на несуществующий хост - 2 секунды. Средняя частота прихода пакетов от ping - один в секунду. Память, выделенная под пакет заблокирована NDIS и освобождена до завершения обработки пакета быть не может.

ВОПРОС: что необходимо сделать, чтобы
избежать переполнения буфера памяти, выделяемого в драйвере под буфера  и дескрипторы пакетов.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 14-07-2004 13:41 » 

Если мне не изменяет память пинговы пакеты стандартные...

И мне из вопроса непонятно, когда переполняется буфер???
Записан

А птичку нашу прошу не обижать!!!
_AV_
Гость
« Ответ #2 : 14-07-2004 13:55 » 

только когда я передаю пакет для обработки драйверу протокола (через NDIS) он мне возвращает статус PENDING.
Лочит память пакета и начинает расылать arp-запросы по второй подсети.
пока он разбирается с одним пакетом (а я не могу освободить память пакета, пока роутер не закончит arp-опрос и ndis не вернет мне указатель на разлоченный пакет в стандартную ф-ю минипорт-драйвера ReturnPackets()) приходят еще два аналогичных по смыслу пакета.
количество занятой пакетами памяти растет в геометрической прогрессии.
Записан
TarasCo
Гость
« Ответ #3 : 14-07-2004 15:48 » 

попробуй установить флажок NDIS_STATUS_RESOURCES с помощью макроса
NDIS_SET_PACKET_STATUS.
Записан
_AV_
Гость
« Ответ #4 : 14-07-2004 16:01 » 

кому установить флажок?

1. пакет пришел из сети.
2. я выкачал его из карты и отдал NDIS.
3. NDIS отвечает - pending (при этом пакет УЖЕ залочен)
4. а пакеты ИЗ СЕТИ идут и идут.

это RX пакеты из сети.
не TX пакеты сверху.
мне НЕ КОМУ сказать: остановите немедленно ping
  Так больше нельзя...
если я просто перестану принимать пакеты по заполнении моей внутренней очереди обрабатываемых пакетов -
то карта 'повиснет' для внешнего мира.

что в данный момент и наблюдается.

ГЛАВНЫЙ ВОПРОС:
как заставить NDIS (драйвер протокольного уровня посредством NDIS)
перестать обрабатывать некий переданный мной туда ранее пакет и ОТДАТЬ МНЕ НАЗАД ПАМЯТЬ!
Записан
_AV_
Гость
« Ответ #5 : 14-07-2004 16:20 » 

>NDIS_STATUS_RESOURCES

прочел. осознал. буду пробовать.
спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines