Surface 3 - Unable to obtain DHCP

  • Sorry guys, yet another thread…

    Tried registering a couple of Surface 3’s through FOG but they seem unable to get a DHCP address (which is weird given they’re capable of finding FOG server and other machines work fine in terms of getting a DHCP address).

    Sorry about the poor pictures




    I went through the hardware compatibility option or whatever it was and I got this error message -

    As per the suggestion in the above image, I went to the Kernel Update page and updated to the latest however they didn’t help.

    More info:
    Fog Version - 1.3.5-RC-13
    bzImage Version: 4.10.1
    bzImage32 Version: 4.10.1

    DHCP server - Windows Server 2012. I do know the DHCP server takes a little while to give out addresses but I’m not sure that’s the problem here.

    Surface connected via USB network adapter, Microsoft 1gb one - Have tried without the keyboard and also via the docking station.

    Not that I expect it to be an issue but I have tried ipxe.efi, snp.efi, snponly.efi etc.

  • @Wayne-Workman said in Surface 3 - Unable to obtain DHCP:

    @dylan123 I added the link to your solution post in the wiki. One day I (or someone else) can go through it all and make a formal article.

    Sounds great, happy to help if required in more detailed instructions if needed :)

    @Tom-Elliott said in Surface 3 - Unable to obtain DHCP:

    @dylan123 So if you added has_usb_nic=1 to the FOG_KERNEL_ARGS field in fog settings, this would be the reason you “didn’t have to add it back”. This “flag” doesn’t automatically set itself, so the only way to have it “preset” is if you entered this in FOG Configuration Page->FOG Settings->Expand All->FOG_KERNEL_ARGS

    Think I was half correct with what I said, I must have had the host with the mac still added. Interestingly though, I’ve found I don’t need that command for the surface 3s.

    • So basically in the config > fog settings > fog_kernel_args section, that’s blank.
    • In my host section, it only contains two laptops that are both the HP models I’ve been previously working with, no surfaces.
    • I can then turn on any surface 3 and it will boot to the fog menu where I can either quick register it (not much point) or deploy the surface 3 image I took yesterday.
      *I did a quick register of the surface 3 given I thought it automatically added the has_usb_nic=1 to the arg section however it didn’t. It still added the surface to my list of hosts though
    • I then tried with a surface 4, it booted to the fog section but when I selected ‘quick register’ I got then ‘unable to obtain DHCP address’ type error message which suggests for the surface 4, I need to have the has_usb_nic=1 argument.

    Just thought it was interesting how that worked, probably come across that though with other people that have been trying to image surfaces.

  • @dylan123 I added the link to your solution post in the wiki. One day I (or someone else) can go through it all and make a formal article.

  • Senior Developer

    @dylan123 So if you added has_usb_nic=1 to the FOG_KERNEL_ARGS field in fog settings, this would be the reason you “didn’t have to add it back”. This “flag” doesn’t automatically set itself, so the only way to have it “preset” is if you entered this in FOG Configuration Page->FOG Settings->Expand All->FOG_KERNEL_ARGS

    I’m glad you got it working and documented what worked in specific sequence. Hopefully all continues to work as expected for you.

    What I might recommend, is if you know the nics and which devices they’re going to be attached to, is to take the MAC’s and create a CSV with the MAC and Hostname to tie with it.

    This way you can specify the hostnames and not worry about the registration process itself. (I know not optimal but you can ensure all hosts receive the has_usb_nic flag this way.

    Your CSV for these systems might look like:


  • Finally have some success!

    I think it’s been a mixture of things that have made it work this time compared to other attempts. I just tried with ipxe7156.efi instead of ipxe.efi which is what I was trying the other day (I know I previously used ipxe7156.efi with no success) and I was able to quick register it and begin the capture process, rather interesting that it was able to do the quick register and create it’s own host kernel argument of the - has_usb_nic=1 without me having to put that in which is nice. Also had a dumb switch in the middle along with doing more updates so I’m not sure what part has fixed it for me but it appears to be working!

    Process for mine which is basically very similar to Scott’s well written instructions but will add everything I’ve done in case it helps someone in the future:

    DHCP Server Settings
    067 - ipxe7156.efi

    Fog Client Version
    Upgraded to FOG 1.4.0-RC-4
    Upgraded Kernel Versions so both bzImage and bzImage32 versions are 4.10.9

    Connection Setup
    Network > dumb switch > Microsoft Surface Ethernet to USB Adapter (model:1663) > Surface 3/4 (4 I’ve got to the quick register page, haven’t tested further yet).
    Left Surface keyboard plugged in

    Surface BIOS Settings
    Turn Trusted Platform Module off
    Turn Secure Boot off
    Change boot so network is allowed rather than just SSD - Network > SSD

    Choose whether to quick register a client or capture/deploy an image.

    Once all the above is set up then it’s basically how you do any other FOG image apart from having to disconnect and reconnect the USB network adapter.

    Steps -

    1. Ensure setup is plugged in as mentioned in the connection setup above
    2. Hold volume down, press power on and hold volume down until red Surface screen appears then let go
    3. Surface should start booting into fog
    4. When prompted to unplug USB Nic, plug back in and hit the enter on Surface keyboard
    5. If you’re quick registering, you should be able to select that option. If you’re capturing/deploying, it should automatically begin that process as you’ve set in the task manager on your FOG system.

    Thanks for your assistance @Scott-Adams @george1421 @Tom-Elliott @Wayne-Workman

    Thinking aloud, I suppose there isn’t really a way to register all my Surface machines because since I’m using the USB adapters and they’re the device that contains the MAC address (as I found out when I tried register the Surface 4 only to find it was listed as the Surface 3 model I did the quick register for before). Not really the end of the world if that’s the case as I can still create the images required and then just deploy it to the Surface as I wish.

  • @Wayne-Workman said in Surface 3 - Unable to obtain DHCP:

    @dylan123 Have you tried George’s suggestion about a powered usb 2.0 hub ? You should be able to get one for less than ten dollars online.

    I haven’t yet Wayne mainly due to the fact Scott had success with the same adapter I’ve been attempting to use.

    That said, I’m willing to buy one to test with as it would be great to be able to create images of our Surface 3/4s with FOG if possible :)

    I imagine I should be able to buy any USB 2.0 to Ethernet adapter or is there a particular model/brand I should be looking at? I’ve been through some of the threads, particularly the one I linked earlier in this thread with Sarge and his Surface 4. He linked an Amazon 2.0 USB to Ethernet adapter but that’s currently no longer stocked so I can’t purchase that (probably take a while for it to be shipped to Aus anyways).

    Think I’ll just go with this if I don’t need to be going for a particular brand/model -

    I could get one with USB ports as well but I’m thinking that might be a chance to cause another issue although it would be nice not having to swap from keyboard to Ethernet quickly!

  • @dylan123 Have you tried George’s suggestion about a powered usb 2.0 hub ? You should be able to get one for less than ten dollars online.

  • Just giving this a bump to see if anyone else has any other ideas of what I can try?

    Ran the latest update again to get 1.4.3 but still no luck.

    Using USB ethernet, I get to the stage of unplugging and replugging before getting the error message -

    Unplug and replug although when I unplug it says "usb2-port1: cannot disable (err = -32)
    Failed to get an IP via DHCP! Tried on interfaces(s):

    Using the dock with only ethernet connected it just fails to speak with the DHCP.

    Both attempts have gone through a dumb switch as well just to ensure they don’t hang without connection to the network.

    Maybe it just won’t work with the surface’s I’ve got, just thought I’d give this one final try.

  • @Scott-Adams Yeah Surface Pro 3.

    Build version is 14393 for both the 3’s based on what it says in system information.

  • @Scott-Adams There are also sub-models of each series. Surface Pro 3 has different sub models.

  • @dylan123 If you mentioned this already, I apologize. But, are you working with a Surface 3 or a Surface Pro 3? Everything in my environment is a Pro. I’m just wondering if we can take different hardware types out of the mix.

  • @Scott-Adams Thanks for the clear instructions Scott, gave it a shot but didn’t work unfortunately.

    • Added mac address manually by going host > create new host, as suggested and it skips the countdown window like it knows the task it has been assigned (capture).

    • It says it received DHCP answer on interface net0, speaks to fog server before going to next page

    • message at top says - i8042: Can’t read CTR while initializing i8042

    • continues on, says to unplug your device and replug as you suggested.

    • Unplug and replug although when I unplug it says "usb2-port1: cannot disable (err = -32)

    • hit enter and plug usb Ethernet back in quickly

    • Failed to get an IP via DHCP! Tried on interfaces(s):

    • Says to check network set up and try again. Eventually says press enter to continue.

    • ssh-keygen generating new host keys

    • starting sshd: ok

    • then I get these four lines -
      In: failed to create symbolic link ‘/dev/fd/fd’: No such file directory
      In: failed to create symbolic link ‘/def/stdin’: File exists
      In: failed to create symbolic link ‘/dev/stdout’ : File exists
      In: failed to create symbolic link ‘/dev/stderr’: File exists
      Running post init scripts…

    • Next page, No network interfaces found (verifyNetworkConnection)
      args passed:
      Kernel variables and settings - which is rather long so I won’t bother typing unless it will be of use.

    ev/fd/fd no such file or directory
    failed /dev/stdin: file exists.

    These were all tried with ‘has_usb_nic=1’ in the host kernel arguments and I tried ipxe.efi, ipxe7156.efi, snp.efi and snponly.efi

    When it says it failed to get DHCP, tried on Interface(s): and it doesn’t list any, I feel that is where it might be going wrong but that’s just a guess on my part.

  • @dylan123 FYI, we use the 1663 adapters as well. The way I do this in my environment is I manually added a registration for each of my surface nics (I have two of them). So, when I go to image a Surface, I search for one of my mac addresses for my adapters, change the pertinent information (name, image, etc). Then, I set a deploy task to that client. From there, I can go through the steps of swapping keyboards/usb adapter (@george1421 I know I could use a powered USB hub, but I just don’t).

    You could also set up a capture the same way, just choose Capture instead of deploy from the Basic tasks section.

    Below are the steps that I wrote up for my environment that does work with imaging Surfaces:

    1. Search FOG hosts for the Surface MAC address for the Ethernet adapter you are using.
    2. Rename the host to the desired name and save changes.
    3. Hold down the Volume UP button, press the power button, then release the power button. When you see the Surface logo appear center screen, release the Volume UP button.
    4. In BIOS : Select Security. Under Secure Boot, change configuration, select None, click OK. Under Trusted Platform Module, change Enable TPM-Change to Off. Select Boot Config. Verify that all items are selected. Select Exit. Click Restart while holding down the Volume DOWN.
    5. When the red bar shows up, release the Volume DOWN button. The device should PXE boot and go to the FOG menu.
    6. Select Deploy Image.
    7. Select the Surface Pro 4 image.
    8. When prompted to unplug your USB NIC, unplug the NIC and plug in a USB Keyboard. Press Enter.
    9. Immediately unplug the USB Keyboard and plug back in the USB NIC. YOU WILL ONLY HAVE 5 SECONDS TO ACCOMPLISH
    10. Allow the device to image.
    11. When the device finishes imaging, do not try to join a wireless network, just hit NEXT. Move the device to the correct OU. Run gpupdate on the device.

    YRMV, but this works for us.

  • @Tom-Elliott Thanks Tom, added that in the section you suggested however it’s still not behaving as it should.

    Boots to the FOG menu and with the countdown I plug in the surface keyboard so I’m able to select one of the options - any time I unplug the USB Ethernet adapter and put in a keyboard, the keyboard will not respond. Also tried from the docking station with the keyboard and USB adapter but same issue as below.

    Once I select my option (whether it’s through using the dock or the surface keyboard), I do get the unplug/replug message as Scott mentioned. When I unplug it, it says "startusb usb2-port1: cannot disable (err = -32). Hit enter and it sleeps for 5 seconds before I get the "Failed to get an IP via DHCP! Tried on interfaces(s): " Also tried not removing the USB adapter and just hitting enter but It’s still unable to get a DHCP address.

    When I check to see whether the machine is compatible with FOG, it’s still not able to determine its own mac address when I select that setting so the change to the kernel hasn’t appeared to have helped.

  • Senior Developer

    @dylan123 You can add, temporarily, to the FOG COnfiguration Page->FOG Settings->Expand All->search for KERNEL_ARGS

    Add has_usb_nic=1 there.

  • @Scott-Adams Thanks for the suggestion Scott, to be able to add the kernel argument, you need to be able to register the host first right? I’m unable to register my surface with either the quick or the full register (get the same error back as seen in the 3rd picture). Or is there another way to add the kernel argument?

    Also since you’ve had success with your adapter, what model is it? I’ve got the 1663 so just curious as to whether we’re using the same one or not as it would help determine whether that’s part of my issue or there’s something else that needs to be done.

  • Moderator

    @Scott-Adams While this comment is based on my experiences with the intel stick computers, to solve your issue use a USB 2.0 powered hub. This will let you connect multiple usb devices to that single usb port on your device. I just have a cheap iogear usb hub as well as several Dell multimedia keyboards (that have a 2 port hub built in). With the intel stick computers, this solution gives me a chance to run a keyboard, mouse, and usb ethernet adapter off the same single device usb port.

  • Senior Developer

    @Scott-Adams Unfortunately, the issue is in “release” back to the system when iPXE starts up. I’ve already tried to figure out a way to “reset” the nic without having the user do anything, and it just doesn’t work, which was more or less WHY the has_usb_nic option was introduced.

  • I don’t want to assume anything, but have you added the kernel argument for the Surface? Try and add “has_usb_nic=1” (minus the quotes).

    I am able to image Surface Pro 3s and 4s, using the Microsoft Surface Ethernet adapter. Now, if only FOS could understand to look for USB nics without forcing it to search for them, that would be great.

    I should also mention that since the Surface has only 1 USB port, you will need to have a USB keyboard handy. After you are able to boot to the Ethernet Adapter, it will tell you to unplug the usb nic, plug it back in, and press Enter.

    Once you pull it out, plug in your USB Keyboard and hit Enter (once in FOS, the Surface keyboard will not be usable). After hitting Enter, unplug the keyboard and plug the USB adapter back in. You will have roughly 5 seconds to complete these tasks (no joke).

    Hope this helps.

  • @george1421 Thanks, will keep that in mind about STP.

    As for the network adapter, I basically got the USB 2 one from this thread - where Sarge mentions being able to get it to boot with the Amazon usb 2 adapter but not having any luck with a USB 3 one. The one I’ve got is the official Microsoft Surface one which is a USB 3 1Gb adapter.

    I have tried through the docking station but I get the same error I get when I try using the USB adapter although I am unable to ping anything when in the fog section so it obviously isn’t working once it loads it up.

Log in to reply