[Dnsmasq-discuss] ProxyDHCP mode is broken for serving ipxe.efi to UEFI pxe clents
Simon Kelley
simon at thekelleys.org.uk
Sun May 15 20:16:53 BST 2016
On 15/05/16 14:39, Dreamcat4 wrote:
> Hi,
> Tried the 2.76rc2 this morning. Seems fine / OK for me.
>
Great. Thanks for that.
Cheers,
Simon.
> 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
>>
>
>
>
> _______________________________________________
> Dnsmasq-discuss mailing list
> Dnsmasq-discuss at lists.thekelleys.org.uk
> http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
>
More information about the Dnsmasq-discuss
mailing list