VM Deployment from VMM 2019 fails with SR-IOV enabled (Static IP configuration not executed)

Ebi3 1 Reputation point
2021-02-15T12:31:57.643+00:00

Hi everyone,

I am having trouble getting Windows Server 2016 VMs deployed from VMM 2019 if SR-IOV is enabled on the Port Profile for that VM. The hardware NIC used is a Mellanox ConnectX-4 Lx adapter which works otherwise fine for us.

I've narrowed down the issue to the [NETIOUGC.EXE] TCPIP step of the setup where things start to go wrong.

Here's the section of the setupact.log from C:\Windows\Panther\UnattendGC:


2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Transition to context 2 accepted for key 'Interfaces'.
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Transition to context 3 accepted for key '00-1D-D8-B7-1C-29'.
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Transition to context 4 accepted for key 'Ipv4Settings'.
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] Service DHCP is already running
2021-02-15 11:32:09, Error                        [NETIOUGC.EXE] TCPIP: Consumer 2 REJECTED the value named 'DhcpEnabled' (under 'Ipv4Settings') with status 0x2.
2021-02-15 11:32:09, Error                        [NETIOUGC.EXE] TCPIP: Error processing values under 'Ipv4Settings' registry key: 0x2.
2021-02-15 11:32:09, Error                        [NETIOUGC.EXE] TCPIP: Error while processing the the 'Ipv4Settings' registry key.
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Returning from context 4 ('Ipv4Settings') to context 3 ('00-1D-D8-B7-1C-29').
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Transition to context 6 accepted for key 'Routes'.
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Transition to context 7 accepted for key '1'.
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Consumer 6 accepted the value named 'NextHopAddress' (under '1').
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Consumer 7 accepted the value named 'Metric' (under '1').
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Consumer 5 accepted the value named 'Prefix' (under '1').
2021-02-15 11:32:09, Error                        [NETIOUGC.EXE] TCPIP: Failed to add the constructed route table entry to the stack: 0x490.
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Returning from context 7 ('1') to context 6 ('Routes').
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Returning from context 6 ('Routes') to context 3 ('00-1D-D8-B7-1C-29').
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Transition to context 5 accepted for key 'UnicastIpAddresses'.
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Consumer 4 accepted the value named '1' (under 'UnicastIpAddresses').
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Returning from context 5 ('UnicastIpAddresses') to context 3 ('00-1D-D8-B7-1C-29').
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Returning from context 3 ('00-1D-D8-B7-1C-29') to context 2 ('Interfaces').
2021-02-15 11:32:09, Info                         [NETIOUGC.EXE] TCPIP: Returning from context 2 ('Interfaces') to context 1 ('Software\Microsoft\Windows NT\CurrentVersion\UnattendSettings\Netio').

And here's the network settings section of the unattend.xml file VMM creates:

        <settings pass="specialize" wasPassProcessed="true">
            <component name="Microsoft-Windows-UnattendedJoin" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <Identification>
                    <MachineObjectOU>OU=Server,DC=domain,DC=local</MachineObjectOU>
                    <JoinDomain>domain.local</JoinDomain>
                    <Credentials>
                        <Domain>DOMAIN</Domain>
                        <Username>DomainAdmin</Username>
                        <Password>*SENSITIVE*DATA*DELETED*</Password>
                    </Credentials>
                </Identification>
            </component>
            <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <RegisteredOrganization>Organisation</RegisteredOrganization>
                <ComputerName>ComputerName</ComputerName>
                <ProductKey>*SENSITIVE*DATA*DELETED*</ProductKey>
            </component>
            <component name="Microsoft-Windows-TCPIP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <Interfaces>
                    <Interface wcm:action="add">
                        <Ipv4Settings>
                            <DhcpEnabled>false</DhcpEnabled>
                        </Ipv4Settings>
                        <UnicastIpAddresses>
                            <IpAddress wcm:action="add" wcm:keyValue="1">192.168.200.100/24</IpAddress>
                        </UnicastIpAddresses>
                        <Identifier>00-1D-D8-B7-1C-29</Identifier>
                        <Routes>
                            <Route wcm:action="add">
                                <Identifier>1</Identifier>
                                <Prefix>0.0.0.0/0</Prefix>
                                <NextHopAddress>192.168.200.1</NextHopAddress>
                                <Metric>1</Metric>
                            </Route>
                        </Routes>
                    </Interface>
                </Interfaces>
            </component>
            <component name="Microsoft-Windows-DNS-Client" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <Interfaces>
                    <Interface>
                        <Identifier>00-1D-D8-B7-1C-29</Identifier>
                        <EnableAdapterDomainNameRegistration>true</EnableAdapterDomainNameRegistration>
                        <DisableDynamicUpdate>false</DisableDynamicUpdate>
                        <DNSDomain>Domain.local</DNSDomain>
                        <DNSServerSearchOrder>
                            <IpAddress wcm:action="add" wcm:keyValue="1">192.168.200.2</IpAddress>
                            <IpAddress wcm:action="add" wcm:keyValue="2">192.168.200.3</IpAddress>
                        </DNSServerSearchOrder>
                    </Interface>
                </Interfaces>
            </component>
        </settings>

Now if SR-IOV is disabled everything is working well. However since the Mellanox Drivers (some old version) are part of the default drivers of Windows Server 2016 the Virtual Function (VF) of that network adapter is already present during that setup step. As VF and vmNIC share the same MAC-Address I assume, that the unattended setup is trying to configure the VF instead of the actual vmNIC which is why this fails as interfaces are identified by their MAC-Address.

Get-NetAdapter | ft Name,InterfaceDescription,ifIndex,MacAddress

Name       InterfaceDescription                            ifIndex MacAddress
----       --------------------                            ------- ----------
Ethernet 2 Mellanox ConnectX-4 Lx Virtual Ethernet Adapter       3 00-1D-D8-B7-1C-29
Ethernet   Microsoft Hyper-V Network Adapter                     2 00-1D-D8-B7-1C-29

One data point indicating this might be the case is that we don't see this issue with a Broadcom Adapter that has no default driver in Windows Server 2016. Here the setup works fine and after installing the driver in the VM the SR-IOV VF works propely.

Adding an updated Mellanox driver to the VHD image doesn't work either - the issue remains. As soon as I deactivate SR-IOV in the port profile the deployment starts working. If I activate SR-IOV after the VM has been deployed the VM also works with SR-IOV enabled - so it is really is just a setup / deployment issue.

Could it be that the unattended windows setup has an issue if there are multiple NICs with the same MAC-Address, even if one of them is just a (normally invisible) VF?

Any ideas how to solve it (except switching port profiles after deployment to enable SR-IOV later)?

Thank you and best wishes,
Jens

Windows Server 2016
Windows Server 2016
A Microsoft server operating system that supports enterprise-level management updated to data storage.
2,505 questions
System Center Virtual Machine Manager
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.