我试图通过使用LinkLocalAddressBehavior
函数将LinkLocalAlwaysOff
设置为SetIpInterfaceEntry的接口,但我总是得到ERROR_INVALID_PARAMETER
。当我将LinkLocalAddressBehavior
设置为LinkLocalDelayed
时,SetIpInterfaceEntry
执行没有问题。
我没有在MSDN(SetIpInterfaceEntry,MIB_IPINTERFACE_ROW或NL_LINK_LOCAL_ADDRESS_BEHAVIOR)找到任何可能有助于解决此问题的方法。
有什么建议?
谢谢!
更新:代码示例:
// Initialize MIB_IPINTERFACE_ROW with actual InterfaceLuid:
auto row = MIB_IPINTERFACE_ROW{ AF_INET, 1689399632855040 };
// GetIpInterfaceEntry succeeds
auto result = GetIpInterfaceEntry(&row);
// Setting the value:
row.LinkLocalAddressBehavior = LinkLocalAlwaysOff;
// SetIpInterfaceEntry fails with ERROR_INVALID_PARAMETER:
result = SetIpInterfaceEntry(&row);
据this article说:
在接口上分配IPv4链路本地地址仅基于接口的状态,并且独立于任何其他协议,例如DHCP。主机不得改变其行为和使用其他协议(如DHCP),因为主机已为接口分配了IPv4链路本地地址。
因此,当启用它时,我们无法更改其行为。 LinkLocalDelayed
成功,因为原始状态是LinkLocalDelayed
。
对于IPv6,我在msdn上找到了答案。好像他们有一些类似的行为。如果已启用,则无法禁用。