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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: NdisMIndicateReceivePacket и отправка пакета.  (Прочитано 8166 раз)
0 Пользователей и 1 Гость смотрят эту тему.
maaaaaad
Гость
« : 08-12-2003 17:02 » 

Что то не отправляются пакеты.


Вот пакет, который приходит адаптеру
//  
// девайс AA-AA-AA-AA-AA-AA сетевой адрес 191.5.6.2
//



// BB BB BB BB BB BB   мак кому (в таблице arp BB-BB-BB-BB-BB-BB = 191.5.6.113)
// AA AA AA AA AA AA   мак откуда
// 8 0  протокол
// 45 0 0 21 0 5 0 0 80 11 B0 49
// BF 5 6 2    - адрес отправителя 191.5.6.2
// BF 5 6 71   - адрес получателя 191.5.6.113
// 4 4     порт отправки    68?
// 4 57    порт назначения  1111
// 0 D     длинна udp 13 (заголовок+данные)
// 5E 46   контрольная сумма
// 5A 5A 5A 5A 5A   данные
// total 47 bytes

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


   Adapter->Lookahead[0] = 0xAA; Adapter->Lookahead[1] = 0xAA;      // мак кому
   Adapter->Lookahead[2] = 0xAA; Adapter->Lookahead[3] = 0xAA;
   Adapter->Lookahead[4] = 0xAA; Adapter->Lookahead[5] = 0xAA;
   
   Adapter->Lookahead[6] = 0xBB; Adapter->Lookahead[7] = 0xBB;      // мак откуда
   Adapter->Lookahead[8] = 0xBB; Adapter->Lookahead[9] = 0xBB;
   Adapter->Lookahead[10] = 0xBB; Adapter->Lookahead[11] = 0xBB;

   Adapter->Lookahead[12] = 0x08; Adapter->Lookahead[13] = 0x00;      // тип протокола

   Adapter->Lookahead[14] = 0x45; Adapter->Lookahead[15] = 0x00;      // ип заголовок
   Adapter->Lookahead[16] = 0x00; Adapter->Lookahead[17] = 0x21;
        Adapter->Lookahead[18] = 0x00; Adapter->Lookahead[19] = 0x05;
   Adapter->Lookahead[20] = 0x00; Adapter->Lookahead[21] = 0x00;
   Adapter->Lookahead[22] = 0x80; Adapter->Lookahead[23] = 0x11;
   Adapter->Lookahead[24] = 0xB0; Adapter->Lookahead[25] = 0x49;

   Adapter->Lookahead[30] = 0xBF; Adapter->Lookahead[31] = 0x05;
   Adapter->Lookahead[32] = 0x06; Adapter->Lookahead[33] = 0x71;

   Adapter->Lookahead[26] = 0xBF; Adapter->Lookahead[27] = 0x05;
   Adapter->Lookahead[28] = 0x06; Adapter->Lookahead[29] = 0x02;



   Adapter->Lookahead[34] = 0x04; Adapter->Lookahead[35] = 0x04;      // порт отправки
   Adapter->Lookahead[36] = 0x04; Adapter->Lookahead[37] = 0x57;           // порт назначения

   Adapter->Lookahead[38] = 0x00; Adapter->Lookahead[39] = 0x0D;      
   Adapter->Lookahead[40] = 0x5E; Adapter->Lookahead[41] = 0x46;

   Adapter->Lookahead[42] = 0x5A; Adapter->Lookahead[43] = 0x5A;      // данные
   Adapter->Lookahead[44] = 0x5A; Adapter->Lookahead[45] = 0x5A;
   Adapter->Lookahead[46] = 0x5A;


   NdisMEthIndicateReceive(Adapter->MiniportAdapterHandle,(NDIS_HANDLE) Adapter,
      (PUCHAR)(Adapter->Lookahead),16,
      (PUCHAR)(Adapter->Lookahead) + 16,
/*LookaheadBufferSize
Specifies the size in bytes of the lookahead buffer. This value must be at least as large as the lookahead size

set when MiniportSetInformation was called with OID_GEN_CURRENT_LOOKAHEAD, or as large as the packet, whichever

is smaller. When the packet is smaller than the lookahead size, the lookahead buffer contains the entire frame.
A miniport can (and should) set LookaheadBufferSize to something larger than the minimum required if sufficient

received data is available on its NIC. */
      1000 - 16,

/*PacketSize
Specifies the size in bytes of the received packet data. This value does not include the HeaderBufferSize.
When PacketSize is larger than the given LookaheadBufferSize, a protocol driver call to NdisTransferData causes

a subsequent call to the MiniportTransferData function, which transfers the remaining data in the packet*/
      47 - 16);


Вот....и ничего не выходит....непонятно мне что за два последних параметра. TCP сервер, запущенный на 191.5.6.2:1111 молчит. TransferData не вызывается. В ней надо вызывать
    NdisMTransferDataComplete();
    NdisMEthIndicateReceiveComplete();
?

Кто прояснит дело?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 09-12-2003 09:26 » 

Опять посоветую- вопросы по NDIS лучше еще дублировать на www.ntndis.com  - это единственное место в русскои инете, где тусуются программисты NDIS.
Записан
marius
Гость
« Ответ #2 : 12-12-2003 06:29 » 

Когда полный пакет умещается в один трансфер, LookaheadBufferSize должен равняться PacketSize.
Кстати, в этом случае,  TransferData может и не вызываться протокольным драйвером.
А контрольную сумму (Adapter->Lookahead[24] = 0xB0; Adapter->Lookahead[25] = 0x49)
ты правильно вычислил ?
Записан
marius
Гость
« Ответ #3 : 12-12-2003 06:35 » 

Да, не сразу заметил...
NdisMEthIndicateReceiveComplete должен следовать сразу после NdisMEthIndicateReceive. Похоже, дело в этом,
ты наверное делаешь это в TransferData, а он не вызывется при коротком трансфере...
Записан
maaaaaad
Гость
« Ответ #4 : 12-12-2003 13:06 » 

уаху!!!!!!!!!!!!!!!!!!!!!!! =)))) все заработало!!!"=)))

NdisMEthIndicateReceiveComplete я действительно вызывал трансфере =)))
и еще =)))
обатите внимание, как я поменял адрес получателя и отправителя =))))
сижу на 191.5.6.2 слушаю 1111 как дурак =)))))

СПАСИБО МАРИУС!!
Записан
TEK
Гость
« Ответ #5 : 25-03-2004 18:03 » 

MaaaaaaaaaaaaaD!!!
Если на сях писал драйвер отшли плз!!!!!
tek2000@bigmir.net
Записан
_!bAd!_
Гость
« Ответ #6 : 12-04-2004 13:42 » 

Цитата: TEK
MaaaaaaaaaaaaaD!!!
Если на сях писал драйвер отшли плз!!!!!
tek2000@bigmir.net

Да-да и мне пожалуйста тоже.
очень надо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines