grub-devel
[Top][All Lists]
Advanced

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

[PATCH 2/2] Configure VLAN from UEFI device used for PXE


From: Chad Kimes
Subject: [PATCH 2/2] Configure VLAN from UEFI device used for PXE
Date: Sat, 5 Mar 2022 19:46:40 -0500

Signed-off-by: Chad Kimes <chkimes@github.com>
---
 grub-core/net/drivers/efi/efinet.c | 38 ++++++++++++++++++++++++++----
 1 file changed, 33 insertions(+), 5 deletions(-)

diff --git a/grub-core/net/drivers/efi/efinet.c 
b/grub-core/net/drivers/efi/efinet.c
index 381c138db..98b0f6bef 100644
--- a/grub-core/net/drivers/efi/efinet.c
+++ b/grub-core/net/drivers/efi/efinet.c
@@ -387,11 +387,39 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char 
**device,
     if (! pxe)
       continue;
     pxe_mode = pxe->mode;
-    grub_net_configure_by_dhcp_ack (card->name, card, 0,
-                                   (struct grub_net_bootp_packet *)
-                                   &pxe_mode->dhcp_ack,
-                                   sizeof (pxe_mode->dhcp_ack),
-                                   1, device, path);
+
+    struct grub_net_network_level_interface *inter;
+    inter = grub_net_configure_by_dhcp_ack (card->name, card, 0,
+                                           (struct grub_net_bootp_packet *)
+                                           &pxe_mode->dhcp_ack,
+                                           sizeof (pxe_mode->dhcp_ack),
+                                           1, device, path);
+
+    if (inter)
+      {
+       /*
+        * search the device path for any VLAN subtype and use it
+        * to configure the interface
+        */
+       grub_efi_uint16_t len;
+       grub_efi_device_path_t *vlan_dp;
+       vlan_dp = dp;
+
+       while (!GRUB_EFI_END_ENTIRE_DEVICE_PATH (vlan_dp))
+       {
+         if (GRUB_EFI_DEVICE_PATH_TYPE (vlan_dp) == 
GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE
+             && GRUB_EFI_DEVICE_PATH_SUBTYPE (vlan_dp) == 
GRUB_EFI_VLAN_DEVICE_PATH_SUBTYPE)
+           {
+             grub_efi_vlan_device_path_t *vlan;
+             vlan = (grub_efi_vlan_device_path_t *) vlan_dp;
+             inter->vlantag = vlan->vlan_id;
+             break;
+           }
+
+         len = GRUB_EFI_DEVICE_PATH_LENGTH (vlan_dp);
+         vlan_dp = (grub_efi_device_path_t *) ((char *) vlan_dp + len);
+       }
+      }
     return;
   }
 }
-- 
2.25.1




reply via email to

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