[Dnsmasq-discuss] ProxyDHCP mode is broken for serving ipxe.efi to UEFI pxe clents

Dreamcat4 dreamcat4 at gmail.com
Sun May 15 14:39:41 BST 2016


Hi,
Tried the 2.76rc2 this morning. Seems fine / OK for me.

Have uploaded the binary here again (same place as before):

https://dl.bintray.com/dreamcat4/linux/dnsmasq/



On Sun, May 15, 2016 at 9:03 AM, Michael Kuron <
michael-lists at physcip.uni-stuttgart.de> wrote:

> Hi Simon,
>
> thanks, it’s working fine for me now. Before releasing 2.76, it would be
> good if more people could test this on actual hardware.
> Also, there’s one more item that needs to go into the release notes: we
> now redirect all clients to port 4011, including the BIOS clients. This is
> a change in behavior over the previous release, where the option 43 menu
> was sent on port 68. This could potentially break things for some very old
> and broken PXE implementations. It’s unlikely, since the port 4011 stuff
> has always been part of the PXE spec, but possible. I don’t think it’s
> really necessary, but I have included a patch below that restricts the port
> 4011 redirect to CSA >= 6. With that patch, the PXE behavior for BIOS
> clients is exactly what it was in older releases.
>
> Michael
>
>
> --- a/src/rfc2131.c
> +++ b/src/rfc2131.c
> @@ -882,8 +882,13 @@ size_t dhcp_reply(struct dhcp_context *context, char
> *iface_name, int int_index,
>
>                   clear_packet(mess, end);
>
> -                 /* Redirect the client to port 4011 */
> -                 mess->siaddr = tmp->local;
> +                 /* Redirect EFI clients to port 4011 */
> +                 int redirect4011 = 0;
> +                 if (pxearch >= 6)
> +                 {
> +                     redirect4011 = 1;
> +                     mess->siaddr = tmp->local;
> +                 }
>                   /* Returns true if only one matching service is
> available. On port 4011,
>                      it also inserts the boot file and server name. */
>                   workaround = pxe_uefi_workaround(pxearch, tagif_netid,
> mess, tmp->local, now, pxe);
> @@ -906,7 +911,7 @@ size_t dhcp_reply(struct dhcp_context *context, char
> *iface_name, int int_index,
>                   option_put(mess, end, OPTION_SERVER_IDENTIFIER,
> INADDRSZ, htonl(tmp->local.s_addr));
>                   pxe_misc(mess, end, uuid);
>                   prune_vendor_opts(tagif_netid);
> -                 if (pxe && !workaround)
> +                 if ((pxe && !workaround) || !redirect4011)
>                     do_encap_opts(pxe_opts(pxearch, tagif_netid,
> tmp->local, now), OPTION_VENDOR_CLASS_OPT, DHOPT_VENDOR_MATCH, mess, end,
> 0);
>
>                   log_packet("PXE", NULL, emac, emac_len, iface_name,
> ignore ? "proxy-ignored" : "proxy", NULL, mess->xid);
>
>
> _______________________________________________
> Dnsmasq-discuss mailing list
> Dnsmasq-discuss at lists.thekelleys.org.uk
> http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/attachments/20160515/3678e13f/attachment.html>


More information about the Dnsmasq-discuss mailing list