Pull to refresh

Проблема при добавлении виртуальной сетевой карты на физический интерфейс Hyper-V

Некоторое время назад для моделирования одной ситуации, мне понадобилось соединить виртуальную машину с MS Windows 7 Home Premium с Wi-fi роутером. Поскольку подключить его к рабочей сети не представлялось возможным, по причине ограничения 1 mac-адреса на 1 розетку, единственным адекватным (на тот момент) решением стало подключение 2-ого физического сетевого интерфейса в хост-машину под управлением Hyper-V Server 2008 RC2.
О том, что из этого вышло — под катом.

В имеющихся запасах был найдем относительно не новый Realtek RTL8139/810x Family Fast Ethernet NIC. После подключения и загрузки Hyper-V обнаружилось, что Realtek в списке сетевого оборудования консольной оснастки отсутствует.

По факту, в Hyper-V, который стоял у меня, не было ни, по сути, графического интерфейса (что для человека, постоянно работающий с nix-ами, не особо страшно), но хуже того, в нем не было почти никаких штатных средств для исправления положения, или хотя бы его понимания.
Поэтому, в первую очередь был найден и установлен дистрибутив Microsoft Support Tools, для Win 2003 x 64 (для 2008 так и не нашел), который включал в себя утилиту devcon.exe – аналог гуевого диспетчера устройств.
С помощью него, я определил нужный мне VID&DEV Realtek-а, и занялся поисками драйвера.

C:\> devcon.exe status PCI\*

Сам драйвер удалось найти от Windows 7 x64.
Устанавливаем:

C:\> devcon update C:\realtek\Netrtl64.inf "PCI\VEN_10EC&DEV_8139"
Updating drivers for PCI\VEN_10EC&DEV_8139 from C:\realtek\Netrtl64.inf
Drivers installed successfully.


Устройство, заработало и выдало APIPA (кабель к сетевой карте подключен не был).
Не предвещая беды, я попробовал добавить виртуальную сетевую карту, на физический realtek, через удаленную оснастку Hyper-V Manager.
Результатом было сообщение:

Setup switch failed.
The wait operation timed out.


Исходя из опыта, прошлой настройки, когда также при добавлении виртуального адаптера я получил ошибку:

There was an error enumerating the machines network switches.

я воспользовался командой полного удаления и последующей переустановки драйвера витруального свитча:

C:\> net stop nvpswmi
C:\> netcfg -u vms_pp


Перезагрузка хостовой машины.

netcfg -l c:\windows\winsxs\amd64_wvms_pp.inf_31bf3856ad364e35_6.1.7600.16385_none_
beda85050b13680c\wvms_pp.inf -c p -i vms_pp


Но в этот раз, все так хорошо не вышло.
После переустановки драйвера, ситуация с ошибкой не изменилась, более того, поскольку Microsoft Hyper-V Network Switch Default Miniport был удален, созданный ранее виртуальный интерфейс, который смотрел в физический интерфейс интегрированной карты, также удалился. То есть пришел я к тому, что выход в сеть все гостевые ОС потеряли.

Realtek-овскую карту я вынул сразу, дабы избежать ухудшения и без того не простой ситуации.

Далее была найдена и скачена утилита nvspbind для работы с биндингом сетевых карт Hyper-V.

Команда nvspbind.exe -n выводит все сетевые подключения, включая виртуальный свитч, и главное, их GUID и Vendor и Device ID устройств.

Поиск Realtek-овской карты:

C:\> devcon.exe status PCI\*

Если ее там нет, то:

C:\> devcon.exe findall PCI\*

Ищем драйвер, после чего удаляем:

C:\> devcon.exe -r remove *PCI\VID_[realtek VID here]&PID_[realtek PID here]*

Для удаления какого-либо подключения нужно ввести nvspbind.exe -u {GUID}
Именно это я проделал, первым делом, избавившись от всех подключений, кроме интегрированной карты.
Ситуацию это разумеется не исправило, и результатом некоторого времени поиска стал путь к лог-файлам —

C:\Windows\Inf\setupapi.app.log
C:\Windows\Inf\setupapi.dev.log

Которые рассказали много интересного, например:

>>> [DIF_REGISTERDEVICE - ROOT\*6TO4MP\0000]
>>> Section start 2010/11/09 13:32:59.403
cmd: C:\Windows\system32\svchost.exe -k netsvcs
!!! dvi: Loading module 'C:\Windows\system32\wlaninst.dll' failed.
!!! dvi: Error 126: The specified module could not be found.
!!! dvi: Error 126 loading CoInstaller(wlaninst.dll,WlanDeviceClassCoInstaller)
!!! dvi: Error 126: The specified module could not be found.
!!! dvi: Loading module 'C:\Windows\system32\wwaninst.dll' failed.
!!! dvi: Error 126: The specified module could not be found.
!!! dvi: Error 126 loading CoInstaller(wwaninst.dll,WwanDeviceClassCoInstaller)
!!! dvi: Error 126: The specified module could not be found.
<<< Section end 2010/11/09 13:32:59.403
<<< [Exit status: SUCCESS]


Скопировал с Win7 x64 wlaninst.dll и wwaninst.dll, забросил в C:\Windows\System32\
Ошибка пропала. Идем дальше:

>>> [DIF_INSTALLDEVICE - ROOT\*6TO4MP\0000]
>>> Section start 2010/11/11 09:45:45.393
cmd: C:\Windows\system32\svchost.exe -k netsvcs
cci: NdisCoinst: Guid of the adapter is {C0709BAD-CB39-42FA-9E14-CA7DBF7D15FE}
cci: NdisCoinst: IfType 131, Characteristics 0x9, IsIrdaDevice 0, PhysicalMediaType 0, MediaType 15, IsBridge 0, FoundGuidInDownlevel 0, EnableDhcp 2
cci: NdisCoinst: Connection name is Local Area Connection* 1938
!!! cci: NdisCoinst: NcipAllocateNetLuidIndex failed with error 0x5aa
!!! dvi: CoInstaller 1: failed(0x000005aa)!
!!! dvi: Error 1450: Insufficient system resources exist to complete the requested service.
<<< Section end 2010/11/11 09:46:03.739
<<< [Exit status: FAILURE(0x000005aa)]


А это уже серьезнее.
В nvspbind и реестре GUID-а {C0709BAD-CB39-42FA-9E14-CA7DBF7D15FE}
не ищется.
Спустя несколько часов поисков, похожая проблема было найдена в блоге одного словака (спасибо Google Translate). Решение (которое нам с гугл-транслэйтом далось очень не легко) заключалось в следующем:
Проверить значение ключа Computer → HKEY_LOCAL_MACHINE → SYSTEM → CurrentControlSet → services → NDIS → IfTypes → Произвольный номер → IfUsedNetLuidIndices, и если оно вида “FF FF FF FF...”, то заменить его на значение из аналогичного ключа, другой папки.

image

Сделал бэкап ключа, после чего сменил его на 01. Перезагрузился. Не полегчало. Теперь в логе было следующее:

>>> [DIF_INSTALLDEVICE - ROOT\*ISATAP\0000]
>>> Section start 2010/11/15 10:16:54.578
cmd: C:\Windows\system32\svchost.exe -k netsvcs
cci: NdisCoinst: Guid of the adapter is {9D5A8A89-01A8-49D2-B8E8-5EE14588C937}
cci: NdisCoinst: IfType 131, Characteristics 0x9, IsIrdaDevice 0, PhysicalMediaType 0, MediaType 15, IsBridge 0, FoundGuidInDownlevel 0, EnableDhcp 2
cci: NdisCoinst: Connection name is Local Area Connection* 1940
cci: NdisCoinst: Allocated NetLuidIndex is 1
!!! cci: NdisCoinst:NcipCreatePersistedInterface DeviceIoControl failed with error 0x1f
!!! cci: NdisCoinst: NcipCreatePersistentInterface failed with error 0x1f
cci: NdisCoinst: Freeing the allocated NetLuid IfType 131 NetLuidIndex 1
!!! dvi: CoInstaller 1: failed(0x0000001f)!
!!! dvi: Error 31: A device attached to the system is not functioning.
<<< Section end 2010/11/15 10:17:14.718
<<< [Exit status: FAILURE(0x0000001f)]


Пробовал удалить каталог реестра, в которой лежал ключ IfUsedNetLuidIndices со значениями “ff ff ff ff...”, после перезагрузки он создается заного.
И все же речь идет об устройстве, которое не является физическим.
Дальнейшие поиски это подтвердили:
Система по какой-то причине не могла найти драйвер на Microsoft ISATAP Adapter.

Протокол устройств Microsoft ISATAP (Inter Site Automatic Tunneling Address Protocol) используется для облегчения перехода предприятий к инфраструктуре IP версии 6 (IPv6). Адаптер ISATAP инкапсулирует IPv6-пакеты, используя заголовок IPv4. Эта функция позволяет клиентам передавать трафик IPv6 через инфраструктуру IPv4.
© Microsoft


Лично я IPv6 не использую, и мне данный протокол мне не сильно нужен. Так что решение было кардинальным:

Ищем драйвер в системе:

C:\> devcon.exe findall @root\*

ROOT\*ISATAP\0000

Удаляем:

C:\> devcon.exe -r remove *ISATAP*

После вновь открываем regedit, ищем там:
Computer → HKEY_LOCAL_MACHINE → SYSTEM → CurrentControlSet → services → TCPIP6 → Parameters
Далее создаем DWORD 32-bit со следующими данными:

Value name: DisabledComponents
Value data: 0xffffffff
Base: Hex

Перезагружаемся.
Вставляем 2-ую сетевую карту.
Повторяем операцию по ее установке.
Еще раз перезагружаемся.
После этого ошибки в логе исчезли, виртуальные сетевые адаптеры создались без проблем.

Problem Solved.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.