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