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@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss

Reply via email to