2013-05-02 10 views
0

Как отключить получение пакетов loopback в драйвере протокола? Сценарий: мой драйвер протокола принимает пакеты от одного адаптера и передает его другому. (например, eth0 -> eth1).Как отключить пакеты loopback в драйвере протокола NDIS

заинтересован только в IPv4,

#define NPROT_ETH_TYPE    0x0008 //IPv4 

Фильтр определяется как,

#define NPROTO_PACKET_FILTER (NDIS_PACKET_TYPE_NO_LOCAL| \ 
           NDIS_PACKET_TYPE_DIRECTED/*| \ 
           NDIS_PACKET_TYPE_MULTICAST| \ 
           NDIS_PACKET_TYPE_BROADCAST*/) 

Принимающая сторона проверяет наличие пакетов кольцевой проверки, как показано ниже,

// Leave the packet if loopback flag is set. 
    if(NdisTestNblFlag(pNetBufList, NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET)) 
    { 
     // 
     // Ndisprot is not interested in this NetBufferList, return the 
     // NetBufferList back to the miniport if the miniport gave us 
     // ownership of it. 
     // 
     break; 
    } 

и когда Я отправляю пакеты по дороге, SendFlags установлен на ноль, чтобы избежать петли в соответствии с MSDN.

NdisSendNetBufferLists(  
       pOpenContext->BindingHandle, 
       pNetBufferList, 
       NDIS_DEFAULT_PORT_NUMBER, 
       0); 

Даже после подъема всех этих препятствий, мой prottest получают петлевые пакеты, как это видно из Wireshark.

Любая идея?

Использование NDIS6.0, ndisprot60, Dev: Win7, Test VM: Win2008 R2

ответ

0

Если вы устанавливаете NDIS_PACKET_TYPE_NO_LOCAL и отправки NBLs без NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK флага, то NDIS не будет доставлять закольцованных пакеты к вам.

Wireshark не показывает вам, что ваш протокол получает. Каждый протокол может получать пользовательский набор трафика. Итак, Wireshark показывает вам только то, что получает Wireshark :)

+0

также, не могли бы вы объяснить, что произойдет, если я прочитаю от одной сетевой платы и напишу другому без изменения MAC-адреса назначения, он создает петлю вправо? –

+0

Да, обычно это было бы, если два сетевых адаптера находятся в одной подсети. –

+0

Хмммм, может быть, я не вижу вещи правильно. :) Хотя два сетевых адаптера находятся в разных подсетях (на самом деле NIC один в 192.168.x.x и другой в 10.10.x.x), когда я читаю из NIC1 и пишу в NIC2, я собираю loopback. Но когда я изменил MAC-адрес назначения на NIC2, проблема решена! Есть идеи? –