NdisMediumIP and IPv6

I’ve written a virtual miniport driver for a test environment (windows 7 64bit) that uses NdisMediumIP as the MediaType and DchpEnabled=0 in the INF. This makes sense for my application because there is really no link layer, so not having to deal with Ethernet headers and ARP is really convenient.

However, I’ve noticed the upper layer drivers (I guess TCP/IP driver) still try to do DHCPv6 and NDP Router/Neighbor Solicitation. Does DhcpEnabled=0 in the INF only affect IPv4? I know that I can turn off DHCPv6 by assigning a static IPv6 address and Router Discovery can be disabled with netsh, but I can’t seem to find a way to disable neighbor discovery.

Also, part of the requirements for this test system is to implement NDP Router Discovery from user-space. Basically, the Windows box operates as a router by responding to router solicitations (but a user-space test program creates the responses, not the kernel). However, I’m finding that I can only receive Router Solicitations from the socket if I do IPV6_ADD_MEMBERSHIP=ff02::2 and SIO_RCVALL=RCVALL_IPLEVEL. But this causes me to receive all sorts of undesirable packets and sort eliminates the idea behind binding the socket to a particular interface. Interestingly, if I don’t do the SIO_RCVALL, I can receive *some* IPv6 multicast packets, but not all. And it seems to be filtering based on the ICMPv6 message type (e.g., I get MLD Listener Done but not MLD Listener Report or Router Solicitation). Is this the expected behavior?

Thanks in advance!

Double check that the INF has EnableDhcp=0 (correct), and not DhcpEnabled=0 (incorrect).

I’m not sure about the feasibility of handling RS from usermode socket.

Thanks for the response, Jeffrey. Sorry, I miss-typed the keyword in my post. The INF file is indeed correct- EnableDhcp=0. Are you saying this parameter is supposed to affect IPv6 too? In my experience, network connection properties shows “Use following IP address” for IPv4 (although with nothing filled in the address box), but it shows “Obtain IP address automatically” for IPv6.

For now, I have a work around for router solicitation- using RCVALL_IPLEVEL and filter the socket receptions so that I throw away anything I don’t expect. But it would be nice to get a firm answer on the expected behavior.