From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.90_1) id 1nWPao-0005qp-13 for mharc-grub-devel@gnu.org; Mon, 21 Mar 2022 17:29:34 -0400 Received: from eggs.gnu.org ([209.51.188.92]:51548) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nWPan-0005p1-1R for grub-devel@gnu.org; Mon, 21 Mar 2022 17:29:33 -0400 Received: from [2607:f8b0:4864:20::732] (port=44869 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 1nWPal-0003pe-FQ for grub-devel@gnu.org; Mon, 21 Mar 2022 17:29:32 -0400 Received: by mail-qk1-x732.google.com with SMTP id b189so12668812qkf.11 for ; Mon, 21 Mar 2022 14:29:31 -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=UirkkFILHVCtIPoSzEiObGh3EGSH4U4VDYL3KWCHFtU=; b=gbPUNDPgbAZ1xwWQrWYXF7tZYjU2+iLRj5l4bfeyECOnepAFkdrwZKo054kaQ99DTQ r+UTRgPGldYaneCGcqNNTvEK+kj/VjFT5rKDuBeEgtYThN3L6BboPcAXahPd3f3mjZAg R3/1kAEuXrFdKE6jA3i0mKGaV6t5HmszQcjAj7Ir5tHmuvHv5MKWkYuJAReGvMZ9VJZd XfacEeHNR8+RXYSx+n2B4Z+4sI9z58RnU4JjlrIEGVsYdAqZLcAn9lGOtwj7q6iwEgVC e5BPTaV2RVOZoFYtPp6LGBd/VwN4jLyp3v+dJmU3yHgq8m0XiqEJS3QHfgmI/wOnbkq+ bIPA== 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=UirkkFILHVCtIPoSzEiObGh3EGSH4U4VDYL3KWCHFtU=; b=yKi+zNPpOP+dg7Ek+6s8vjFtf9L9A8XA/BcjsMi3blXSeDaifOHiECDF6AHwQIq561 T+qNnvWcpsSB45SguAsnZkQGvf4dfPfRUy3bshyJ+jO2Jo+Jh0Pr3FrDKDOLK7TqOfrX GZM9hM1HGWYNm6cOM40KOUnic4Ni7tvhfb/80NOpWA9NoIdyg3Kgfjtl+xWB8x8171By yaIc6euarMRZNfSjF6bAtSbn+A19b7+uwPb21fDQPsQH2bHpwmMT68nlb+kmVN3ewJ1u KwnjMz9HKgibyGMljzoStjJ+TxNd1b9JkbhJsBQa7jFV5oDJEnQqhC0reGNrrpupUVfb Mv6Q== X-Gm-Message-State: AOAM530nBEIXkUyaNPi9R5B6RDOV10LWoTBS32AIJDT8YPIY15xn1D35 Wbtzk1lo0SSwpTYEvXCKCyxlL2DVdopzyX30oJk+C2vp2gWABwf8ecze6FaXc5HNvDYsqPfSGfn PBY1XGsLjOxEST0XIvAwTCV2mw4kekacZgFEDJSSYd/0lzYb4gybj8ormtEo49A== X-Google-Smtp-Source: ABdhPJwzDRhzkQg7LcFtZJBy/xa42+9sPAjQ+fQJJlexgNcVjdURepcUW5VXBhq7QpVzfS7isbIgBQ== X-Received: by 2002:a05:620a:4016:b0:67d:9681:c6fd with SMTP id h22-20020a05620a401600b0067d9681c6fdmr13822701qko.553.1647898170197; Mon, 21 Mar 2022 14:29:30 -0700 (PDT) Received: from a-Virtual-Machine.mshome.net ([136.56.89.57]) by smtp.gmail.com with ESMTPSA id 188-20020a3709c5000000b0067b147584c2sm8428061qkj.102.2022.03.21.14.29.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Mar 2022 14:29:29 -0700 (PDT) From: Chad Kimes To: grub-devel@gnu.org Cc: Chad Kimes Subject: [PATCH 2/2] Add net_set_vlan command Date: Mon, 21 Mar 2022 17:29:16 -0400 Message-Id: <20220321212916.546630-3-chkimes@github.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220321212916.546630-1-chkimes@github.com> References: <20220321212916.546630-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: Mon, 21 Mar 2022 21:29:33 -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.0.2.100 grub> net_set_vlan efinet1 100 grub> net_ls_addr efinet1 00:11:22:33:44:55 192.0.2.100 vlan100 grub> net_set_vlan efinet1 0 efinet1 00:11:22:33:44:55 192.0.2.100 Signed-off-by: Chad Kimes --- docs/grub.texi | 19 +++++++++++++++++++ grub-core/net/net.c | 42 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/docs/grub.texi b/docs/grub.texi index caba8befb..b903bf1d1 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -5554,6 +5554,7 @@ This command is only available on AArch64 systems. * net_ls_dns:: List DNS servers * net_ls_routes:: List routing entries * net_nslookup:: Perform a DNS lookup +* net_set_vlan:: Set vlan id on an interface @end menu @@ -5730,6 +5731,24 @@ is given, use default list of servers. @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}. For example, to set the VLAN identifier on interface @samp{efinet1} to @samp{100}: + +@example +net_set_vlan efinet1 100 +@end example + +The VLAN identifier can be removed by setting it to @samp{0}: + +@example +net_set_vlan efinet1 0 +@end example +@end deffn + + @node Internationalisation @chapter Internationalisation diff --git a/grub-core/net/net.c b/grub-core/net/net.c index b957b30e4..d79391c04 100644 --- a/grub-core/net/net.c +++ b/grub-core/net/net.c @@ -1176,6 +1176,43 @@ 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) +{ + const char *vlan_string; + const char *vlan_string_end; + unsigned long vlantag; + struct grub_net_network_level_interface *inter; + + if (argc != 2) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected")); + + vlan_string = args[1]; + vlantag = grub_strtoul (vlan_string, &vlan_string_end, 10); + + if (*vlan_string == '\0' || *vlan_string_end != '\0') + return grub_error (GRUB_ERR_BAD_NUMBER, + N_("non-numeric or invalid number `%s'"), vlan_string); + + if (vlantag > 4094) + return grub_error (GRUB_ERR_OUT_OF_RANGE, + N_("vlan id `%s' not in the valid range of 0-4094"), + vlan_string); + + 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 +1929,7 @@ grub_net_search_config_file (char *config) 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_setvlan, cmd_lsroutes, cmd_lscards; static grub_command_t cmd_lsaddr, cmd_slaac; GRUB_MOD_INIT(net) @@ -1930,6 +1967,9 @@ GRUB_MOD_INIT(net) cmd_delroute = grub_register_command ("net_del_route", grub_cmd_delroute, N_("SHORTNAME"), N_("Delete a network route.")); + cmd_setvlan = grub_register_command ("net_set_vlan", grub_cmd_setvlan, + N_("SHORTNAME VLANID"), + N_("Set an interface's vlan id.")); cmd_lsroutes = grub_register_command ("net_ls_routes", grub_cmd_listroutes, "", N_("list network routes")); cmd_lscards = grub_register_command ("net_ls_cards", grub_cmd_listcards, -- 2.25.1