[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