[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