grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v4 19/19] efinet: Add DHCP proxy support


From: Robbie Harwood
Subject: [PATCH v4 19/19] efinet: Add DHCP proxy support
Date: Mon, 9 Jan 2023 18:30:45 -0500

From: Ian Page Hands <iphands@gmail.com>

If a proxyDHCP configuration is used, the server name, server IP and
boot file values should be taken from the DHCP proxy offer instead of
the DHCP server ack packet.

Signed-off-by: Ian Page Hands <iphands@gmail.com>
Co-authored-by: Robbie Harwood <rharwood@redhat.com>
Signed-off-by: Robbie Harwood <rharwood@redhat.com>
---
 grub-core/net/drivers/efi/efinet.c | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/grub-core/net/drivers/efi/efinet.c 
b/grub-core/net/drivers/efi/efinet.c
index d4ae865b6f..fc8d7ef196 100644
--- a/grub-core/net/drivers/efi/efinet.c
+++ b/grub-core/net/drivers/efi/efinet.c
@@ -863,10 +863,33 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char 
**device,
     else
       {
        grub_dprintf ("efinet", "using ipv4 and dhcp\n");
+
+        struct grub_net_bootp_packet *dhcp_ack = (void *) &pxe_mode->dhcp_ack;
+
+        if (pxe_mode->proxy_offer_received)
+          {
+            grub_dprintf ("efinet", "proxy offer receive");
+            struct grub_net_bootp_packet *proxy_offer = (void *) 
&pxe_mode->proxy_offer;
+
+            if (proxy_offer && dhcp_ack->boot_file[0] == '\0')
+              {
+                grub_dprintf ("efinet", "setting values from proxy offer");
+                /*
+                 * Here we got a proxy offer and the dhcp_ack has a nil
+                 * boot_file Copy the proxy DHCP offer details into the
+                 * bootp_packet we are sending forward as they are the deatils
+                 * we need.
+                 */
+                *dhcp_ack->server_name = *proxy_offer->server_name;
+                *dhcp_ack->boot_file = *proxy_offer->boot_file;
+                dhcp_ack->server_ip = proxy_offer->server_ip;
+              }
+          }
+
        inter = grub_net_configure_by_dhcp_ack (card->name, card, 0,
                                                 (struct grub_net_bootp_packet 
*)
-                                                packet_buf,
-                                                packet_bufsz,
+                                                &pxe_mode->dhcp_ack,
+                                                sizeof (pxe_mode->dhcp_ack),
                                                 1, device, path);
        grub_dprintf ("efinet", "device: `%s' path: `%s'\n", *device, *path);
       }
-- 
2.39.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]