From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1nWQBi-00033X-MJ for mharc-grub-devel@gnu.org; Mon, 21 Mar 2022 18:07:42 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34790) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nWQBf-0002t6-Fr for grub-devel@gnu.org; Mon, 21 Mar 2022 18:07:39 -0400 Received: from [2607:f8b0:4864:20::733] (port=36446 helo=mail-qk1-x733.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nWQBe-0004dG-0K for grub-devel@gnu.org; Mon, 21 Mar 2022 18:07:39 -0400 Received: by mail-qk1-x733.google.com with SMTP id v13so12773901qkv.3 for ; Mon, 21 Mar 2022 15:07:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Xz3JtBig3BFvnQUNGgmdrHBtQJFtbwUv7FgB2FsuIJI=; b=FXFXlzjKrigrEesYnOzo1ieW/OreV5laXJmG0tdx2rTzAXZqEXqR4zCtQTLbdRraCt IfsRe30U3/r7DwNjyR8o4yt7hnCc03xENBOlHGzlVVkv+P+UktZuyxo0fb+XLCo4NDnG QRXULeZ/97gyM0hUengaBj4XnWJCX0zjvQJLpdCoXiabj30r57DzZHkGy6pHe6XotPo+ EZnIPoMK2bgvGrgJZE4noXJkh+ewaeRQKkmZcouM0E8vQtgIA+EJfhXHQwj6FstMTxzD NgNfFiTHvF8oQplBC65xE5ee0IhMmC1NBsmu9YYWGlJY1t45jmvaGZi+YjFmx1tl6oS7 /w8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Xz3JtBig3BFvnQUNGgmdrHBtQJFtbwUv7FgB2FsuIJI=; b=ondvTyxOnpcCbbFRvmyVHnWt4PL9lf4aQZhh4x0BCfAiFPovle6/EhCvqefCbmPFQw 9eaMGNnby5BMYl6i06nWmVqDhb0/QKMPiELLFPoEKzEHcTro2N9GmTGe7MB9DfkIDlc+ gvy2nh8+11OqiT4U3AjbwrsRX6AUaHTfGro9wT1lR+ruq1LUWCllghyd2L2bGgzEFWTK ceD/scK7O6K3ebMb/sgnE3i4+mab96tOzipgJEtn6qW+GxvpcjNqo4FcYS5+3lfHu8wF isDdlEryBTlFanRjEMM9sfw51hB27fAz20uBRksWfXvBdjFwZa9WAXjoOeUGJEdHjRrl cYGA== X-Gm-Message-State: AOAM530RF98YsFlF4UO7ZcAy2exr3DRPM21nXMAGs4fcFGur/sgDAFzW fBf83d1jZtRGoR33vAVmvVVTg0AFdmFxUBAlYbLsNdK8Be5CGplRN2/QHH2vizIqs9wfGrVVnX0 Bj4uBgsbnV4QoF/nPSZtrPBUXJu/vxpXr4l6bVFC2wF3BpUPJFZJVQsFvEQT9Lg== X-Google-Smtp-Source: ABdhPJwPPaAB7ugNuUt0yUAl6IMTvHf50/unrmTAn2ub4M0H1eXAViO8m1SYeJKsHdURrJs9DUeKRA== X-Received: by 2002:a05:620a:370b:b0:67d:8f44:a3a2 with SMTP id de11-20020a05620a370b00b0067d8f44a3a2mr14047618qkb.433.1647900456858; Mon, 21 Mar 2022 15:07:36 -0700 (PDT) Received: from a-Virtual-Machine.mshome.net ([136.56.89.57]) by smtp.gmail.com with ESMTPSA id w1-20020ac857c1000000b002e1e899badesm12546529qta.72.2022.03.21.15.07.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Mar 2022 15:07:36 -0700 (PDT) From: Chad Kimes To: grub-devel@gnu.org Cc: Chad Kimes Subject: [PATCH v2 2/2] Configure VLAN from UEFI device used for PXE Date: Mon, 21 Mar 2022 18:07:32 -0400 Message-Id: <20220321220732.557752-3-chkimes@github.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220321220732.557752-1-chkimes@github.com> References: <20220321220732.557752-1-chkimes@github.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2607:f8b0:4864:20::733 (failed) Received-SPF: pass client-ip=2607:f8b0:4864:20::733; envelope-from=chkimes@github.com; helo=mail-qk1-x733.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Mar 2022 22:07:39 -0000 Signed-off-by: Chad Kimes --- 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..107e1f09e 100644 --- a/grub-core/net/drivers/efi/efinet.c +++ b/grub-core/net/drivers/efi/efinet.c @@ -339,6 +339,10 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, { struct grub_net_card *card; grub_efi_device_path_t *dp; + struct grub_net_network_level_interface *inter; + grub_efi_device_path_t *vlan_dp; + grub_efi_uint16_t vlan_dp_len; + grub_efi_vlan_device_path_t *vlan; dp = grub_efi_get_device_path (hnd); if (! dp) @@ -387,11 +391,35 @@ 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); + + 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 + */ + 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) + { + vlan = (grub_efi_vlan_device_path_t *) vlan_dp; + inter->vlantag = vlan->vlan_id; + break; + } + + vlan_dp_len = GRUB_EFI_DEVICE_PATH_LENGTH (vlan_dp); + vlan_dp = (grub_efi_device_path_t *) ((char *) vlan_dp + vlan_dp_len); + } + } return; } } -- 2.25.1