<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Hi Simon and Steven,<br>
    <br>
    I just found this recent thread while I was Googling for the exact
    same problem (UEFI clients won't boot in PXE mode, but BIOS clients
    will) and there was never any conclusion reached. I'm running into
    the exact same problem, and I can provide a pcap dump, which I have
    attached to this message. After the initial DHCP exchange, it shows
    four DHCP packets on port 4011 sent from the client which seem to be
    ignored by dnsmasq. Here is the configuration I am using with
    dnsmasq 2.76, based on Steven's original third example:<br>
    <br>
    port=0<br>
    log-dhcp<br>
    dhcp-no-override<br>
    enable-tftp<br>
    tftp-root=/tftpboot<br>
    dhcp-range=ens33,192.168.7.100,192.168.7.200,10h<br>
    pxe-service=X86PC, "Boot BIOS PXE", pxelinux.0<br>
    pxe-service=BC_EFI, "Boot UEFI BC", grubx64.efi<br>
    pxe-service=X86-64_EFI, "Boot UEFI X86-64", grubx64.efi<br>
    <br>
    If I switch to using the dhcp-boot strategy, everything works great
    on both BIOS and UEFI. But the above configuration using PXE doesn't
    seem to work properly with UEFI clients for some reason, and it
    seems to be a dnsmasq issue. It does work fine with BIOS clients
    though.<br>
    <br>
    I think I can answer Steven's earlier question as to why proxy PXE
    (example config #4) doesn't work with UEFI. The problem in that case
    is not due to dnsmasq at all -- it's correctly sending grub to the
    client. The problem is that grub doesn't know how to detect that it
    was loaded from a DHCP proxy, so it won't know where to download
    grub.cfg. Shim, which you can use as a first stage bootloader to
    load grub if you need to support Secure Boot, has the exact same
    problem. It only knows how to look at the original DHCP ack's boot
    info. The UEFI environment provides info about the proxy offer, but
    grub and shim don't look at it. See the following thread where a
    patch was submitted for grub:<br>
    <br>
    <a class="moz-txt-link-freetext" href="https://lists.gnu.org/archive/html/grub-devel/2016-04/msg00051.html">https://lists.gnu.org/archive/html/grub-devel/2016-04/msg00051.html</a><br>
    <br>
    I think it's probably possible to work around the proxy problem by
    using grub-mkstandalone to create a version of grub.efi that has an
    embedded intermediate grub.cfg that is coded to download the real
    grub.cfg from your server, as long as you don't need Secure Boot
    support.<br>
    <br>
    Either way, I still think there's something wrong with dnsmasq's PXE
    support because the example config above (non-proxy) doesn't work
    with any UEFI clients that I have tested, as shown by the pcap dump
    attached. Any ideas?<br>
    <br>
    Thanks,<br>
    Doug<br>
    <br>
    On 1/26/2017 11:16 AM, Simon Kelley wrote:<br>
    <blockquote type="cite">There's no DHCP traffic in that capture. It
      appears to all be ssh.<br>
      <br>
      Wrong interface?<br>
      <br>
      <br>
      Cheers,<br>
      <br>
      Simon.<br>
      <br>
      <br>
      On 24/01/17 08:50, Steven Shiau wrote:<br>
      > Hi Simon,<br>
      <br>
      > Attached please find the dump file of the command "tcpdump -s
      0 -w <br>
      > capturefile". Let me know if you need more info. Thank you
      very<br>
      > much.<br>
      <br>
      > Steven<br>
      <br>
      <br>
      > On 1/24/2017 AM 05:25, Simon Kelley wrote: Thanks for the
      reply.<br>
      > Please could you repeat the tcpdump using the command<br>
      <br>
      > tcpdump -s 0 -w capturefile<br>
      <br>
      > and send me the resulting file? That has far more information
      than <br>
      > tcpdump prints.<br>
      <br>
      <br>
      > Cheers,<br>
      <br>
      > Simon.<br>
      <br>
      > On 20/01/17 08:39, Steven Shiau wrote:<br>
      >>>> Hi Simon,<br>
      >>>><br>
      >>>> Thanks for your reply. I am answering you in the
      following.<br>
      >>>><br>
      >>>> On 2017/01/20 06:47, Simon Kelley wrote:<br>
      >>>>> Your example 3 - I'm confused why that
      shouldn't work - the<br>
      >>>>> PXE client seems to be making further
      requests which are<br>
      >>>>> bring ignored. Would it be possible for you
      to get a packet<br>
      >>>>> dump of that exchange using tcpdump?<br>
      >>>> $ sudo tcpdump -ni ens38 'udp port 67 and udp
      port 68'<br>
      >>>> tcpdump: verbose output suppressed, use -v or -vv
      for full<br>
      >>>> protocol decode listening on ens38, link-type
      EN10MB<br>
      >>>> (Ethernet), capture size 262144 bytes
      16:18:33.208355 IP<br>
      >>>> 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP,
      Request from<br>
      >>>> 00:0c:29:1d:9a:d1, length 347 16:18:36.205647 IP<br>
      >>>> 192.168.22.254.67 > 255.255.255.255.68:
      BOOTP/DHCP, Reply,<br>
      >>>> length 341 16:18:36.385548 IP 0.0.0.0.68 > <br>
      >>>> 255.255.255.255.67: BOOTP/DHCP, Request from<br>
      >>>> 00:0c:29:1d:9a:d1, length 359 16:18:36.386212 IP<br>
      >>>> 192.168.22.254.67 > 255.255.255.255.68:
      BOOTP/DHCP, Reply,<br>
      >>>> length 341 ^C 4 packets captured 4 packets
      received by filter<br>
      >>>> 0 packets dropped by kernel<br>
      >>>><br>
      >>>>> Example 4 looks quite hopeful - the client is<br>
      >>>>> succerssfully downloading the bootx64.efi
      file (ignore the<br>
      >>>>> error before, that's just testing for the
      existance of the<br>
      >>>>> file.<br>
      >>>>><br>
      >>>>> Can you see what's displayed on the client
      system at this<br>
      >>>>> point?<br>
      >>>> It's blank screen due to the background_image for
      grub is<br>
      >>>> not downloaded,  and in the end the grub shows no
      grub.cfg<br>
      >>>> error, as attached. That format is from the grub
      prefix we<br>
      >>>> added by: =======================================
      set <br>
      >>>> prefix=(tftp)/grub-efi.cfg echo "Grub CPU and
      platform:<br>
      >>>> \$grub_cpu, \$grub_platform" echo 'Network
      status: '<br>
      >>>> net_ls_cards net_ls_addr net_ls_routes<br>
      >>>><br>
      >>>> tr --set pretty_mac x: x- \$net_default_mac<br>
      >>>><br>
      >>>> echo "Loading config file<br>
      >>>> \$prefix/grub.cfg-01-\$pretty_mac..." configfile<br>
      >>>> \$prefix/grub.cfg-01-\$pretty_mac<br>
      >>>><br>
      >>>> echo "Loading config file<br>
      >>>> \$prefix/grub.cfg-\$net_default_ip..." configfile<br>
      >>>> \$prefix/grub.cfg-\$net_default_ip<br>
      >>>><br>
      >>>> echo "Loading config file: \$prefix/grub.cfg"
      configfile <br>
      >>>> \$prefix/grub.cfg<br>
      >>>><br>
      >>>> echo "Could not find config file<br>
      >>>> \$prefix/grub.cfg-\$pretty_mac, <br>
      >>>> \$prefix/grub.cfg-\$net_default_ip or
      \$prefix/grub.cfg!"<br>
      >>>> sleep 15 =======================================
      This is<br>
      >>>> exactly the same problem as mentioned here: <br>
      >>>>
      <a class="moz-txt-link-freetext" href="http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2016q4/010">http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2016q4/010</a><br>
      931<br>
      <br>
      >>>><br>
      .html<br>
      >>>><br>
      > i.e., only grub efi is downloaded, while the rest of required
      files<br>
      > are<br>
      >>>> not downloaded. As I mentioned for comparison,
      for non-proxy<br>
      >>>> mode with same configuration, it works well.<br>
      >>>><br>
      >>>> Thanks again.<br>
      >>>><br>
      >>>> Steven<br>
      >>>><br>
      >>>><br>
      >>>><br>
      >>>> _______________________________________________<br>
      >>>> Dnsmasq-discuss mailing list<br>
      >>>> <a class="moz-txt-link-abbreviated" href="mailto:Dnsmasq-discuss@lists.thekelleys.org.uk">Dnsmasq-discuss@lists.thekelleys.org.uk</a> <br>
      >>>>
      <a class="moz-txt-link-freetext" href="http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss">http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss</a><br>
      >>>><br>
      >><br>
      >><br>
      >>>><br>
      _______________________________________________<br>
      >> Dnsmasq-discuss mailing list <br>
      >> <a class="moz-txt-link-abbreviated" href="mailto:Dnsmasq-discuss@lists.thekelleys.org.uk">Dnsmasq-discuss@lists.thekelleys.org.uk</a> <br>
      >>
      <a class="moz-txt-link-freetext" href="http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss">http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss</a><br>
      <br>
      <br>
      <br>
      > _______________________________________________
      Dnsmasq-discuss<br>
      > mailing list <a class="moz-txt-link-abbreviated" href="mailto:Dnsmasq-discuss@lists.thekelleys.org.uk">Dnsmasq-discuss@lists.thekelleys.org.uk</a> <br>
      >
      <a class="moz-txt-link-freetext" href="http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss">http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss</a><br>
      <br>
    </blockquote>
    <span style="white-space: pre;">>
></span><br>
    <br>
    <br>
  </body>
</html>