From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1nQLNV-0001gE-EY for mharc-grub-devel@gnu.org; Fri, 04 Mar 2022 22:46:46 -0500 Received: from eggs.gnu.org ([209.51.188.92]:53838) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nQLNT-0001eS-L8 for grub-devel@gnu.org; Fri, 04 Mar 2022 22:46:43 -0500 Received: from [2607:f8b0:4864:20::732] (port=43549 helo=mail-qk1-x732.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nQLNR-0005oL-KJ for grub-devel@gnu.org; Fri, 04 Mar 2022 22:46:42 -0500 Received: by mail-qk1-x732.google.com with SMTP id z66so7954580qke.10 for ; Fri, 04 Mar 2022 19:46:41 -0800 (PST) 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=pf8C4GH6S0rgI462yFmP4Z53s2/l/p+ajw94S78QvAo=; b=iNawkTtFgiy9INYqHimHW6DV+WPxM32bjFqZrNYAZ/+fsWGIuR7ydJNe2SaN4pfsnU eGsSCQL2w7i8JF/w/cD5c6fRJAwTYD7aA9C0lLihcGHiXzBCBvTyIUmLWJyeSwRmaUEw uh0iOZghXRbzAyk1tJ323q1V3WlYw+vvUcwRVY6fp1J6+2H66qMU13zPT4nqtoL56xZE GKw9qyFfu3ghN61acyuTZRykEaiUJPB1/rUDhgqVncNGYpiNfDHlPnPiglj55DSdDqsE amUMN0utxt8aXCvq8Hybyw0XJ7UC4XaJQ+/s7ViUfJCEadIgQWkF8D+9DAoZ77FVqkxp AnqQ== 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=pf8C4GH6S0rgI462yFmP4Z53s2/l/p+ajw94S78QvAo=; b=K3gD8J7T6bnUuwx+j2id9esxHTjFIcle7fsI4lAzsk37pWsCxt74mzut/szf+pJjWA NmiLIEjmewCpuY4ZAEXIhisizOXiMbOZWkG27hoHln9e8mK2811KWmGonHSn3z9oVRYQ EQYjY3bl0S+dMDf16Fd+hZ4fFpMfcpJHA1eFPA7UwqfsTD9gTjlmMpIFsdAPAn75ekT4 7K2xNCJ0QtGloca6XjLChV5wOa4EqvkVSAYVJ+7zaR3WkrvLguCDjk0VBk4kNpx67B2S YpDT/Fp2suHxhID8yHnMhWbEq+E2Z4Nyla/J3R0/XDFhG8mCmqr8fcu97MAnsEUI5IaH sS3w== X-Gm-Message-State: AOAM53238frMsStgTJKekcBjsHdP0Io4CHrz1i3q2Qa5U5wd9XdQodbE czVcUc7/wwURObbGzTl5/H1+6Wa4oYUO3BC/FpabevrA3nhOzIaO3ZLTCL5MECEo3Z7SFDZUSAf t6mKVhvAl/AN1dD/WdkTW55h/NdonYE4b9SYU3cmBt9fZF/P/i8r0ArTrM/obPQ== X-Google-Smtp-Source: ABdhPJz2dOIbzmCP/o6gWojqqW3bvrgrxEaPVVpvMl/fR3HRsDq5OqTBInjRNryNLnVHMuy9QlVnFA== X-Received: by 2002:a37:bb07:0:b0:663:9c9d:dbf with SMTP id l7-20020a37bb07000000b006639c9d0dbfmr1101533qkf.215.1646452000287; Fri, 04 Mar 2022 19:46:40 -0800 (PST) Received: from a-Virtual-Machine.mshome.net ([136.56.89.57]) by smtp.gmail.com with ESMTPSA id t66-20020ae9df45000000b0064915aff85fsm3357730qkf.45.2022.03.04.19.46.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Mar 2022 19:46:39 -0800 (PST) From: Chad Kimes To: grub-devel@gnu.org Cc: Chad Kimes Subject: [PATCH 2/2] Add net_set_vlan command Date: Fri, 4 Mar 2022 22:46:36 -0500 Message-Id: <20220305034636.316835-2-chkimes@github.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220305034636.316835-1-chkimes@github.com> References: <20220305034636.316835-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::732 (failed) Received-SPF: pass client-ip=2607:f8b0:4864:20::732; envelope-from=chkimes@github.com; helo=mail-qk1-x732.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: Sat, 05 Mar 2022 03:46:43 -0000 Previously there was no way to set the 802.1Q VLAN identifier, despite support for vlantag in the net module. The only location vlantag was being populated was from PXE boot and only for Open Firmware hardware. This commit allows users to manually configure VLAN information for any interface. Example usage: grub> net_ls_addr efinet1 00:11:22:33:44:55 192.168.0.100 grub> net_set_vlan efinet1 100 grub> net_ls_addr efinet1 00:11:22:33:44:55 192.168.0.100 vlan100 grub> net_set_vlan efinet1 0 efinet1 00:11:22:33:44:55 192.168.0.100 Signed-off-by: Chad Kimes --- docs/grub.texi | 9 +++++++++ grub-core/net/net.c | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/docs/grub.texi b/docs/grub.texi index caba8befb..5758ec285 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -5553,6 +5553,7 @@ This command is only available on AArch64 systems. * net_ls_cards:: List network cards * net_ls_dns:: List DNS servers * net_ls_routes:: List routing entries +* net_set_vlan:: Set vlan id on an interface * net_nslookup:: Perform a DNS lookup @end menu @@ -5721,6 +5722,14 @@ List routing entries. @end deffn +@node net_set_vlan +@subsection net_set_vlan + +@deffn Command net_set_vlan @var{interface} @var{vlanid} +Set the 802.1Q VLAN identifier on @var{interface} to @var{vlanid}. +@end deffn + + @node net_nslookup @subsection net_nslookup diff --git a/grub-core/net/net.c b/grub-core/net/net.c index 33e35d5b5..f2acd2ecf 100644 --- a/grub-core/net/net.c +++ b/grub-core/net/net.c @@ -1176,6 +1176,35 @@ grub_cmd_addroute (struct grub_command *cmd __attribute__ ((unused)), } } +static grub_err_t +grub_cmd_setvlan (struct grub_command *cmd __attribute__ ((unused)), + int argc, char **args) +{ + if (argc < 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + + const char *vlanptr = args[1]; + unsigned long vlantag; + vlantag = grub_strtoul (vlanptr, &vlanptr, 10); + + if (vlantag > 4094) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid vlan id")); + + struct grub_net_network_level_interface *inter; + + FOR_NET_NETWORK_LEVEL_INTERFACES (inter) + { + if (grub_strcmp (inter->name, args[0]) != 0) + continue; + + inter->vlantag = vlantag; + return GRUB_ERR_NONE; + } + + return grub_error (GRUB_ERR_BAD_ARGUMENT, + N_("network interface not found")); +} + static void print_net_address (const grub_net_network_level_netaddress_t *target) { @@ -1892,7 +1921,7 @@ static struct grub_preboot *fini_hnd; static grub_command_t cmd_addaddr, cmd_deladdr, cmd_addroute, cmd_delroute; static grub_command_t cmd_lsroutes, cmd_lscards; -static grub_command_t cmd_lsaddr, cmd_slaac; +static grub_command_t cmd_lsaddr, cmd_slaac, cmd_setvlan; GRUB_MOD_INIT(net) { @@ -1935,6 +1964,9 @@ GRUB_MOD_INIT(net) "", N_("list network cards")); cmd_lsaddr = grub_register_command ("net_ls_addr", grub_cmd_listaddrs, "", N_("list network addresses")); + cmd_setvlan = grub_register_command ("net_set_vlan", grub_cmd_setvlan, + N_("SHORTNAME VLANID"), + N_("Set an interace's vlan id.")); grub_bootp_init (); grub_dns_init (); -- 2.25.1