grub-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 2/2] Add net_set_vlan command


From: Daniel Kiper
Subject: Re: [PATCH 2/2] Add net_set_vlan command
Date: Fri, 18 Mar 2022 00:03:43 +0100
User-agent: NeoMutt/20170113 (1.7.2)

On Fri, Mar 04, 2022 at 10:46:36PM -0500, Chad Kimes via Grub-devel wrote:
> 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

The same comment as for the patch #1.

> Signed-off-by: Chad Kimes <chkimes@github.com>
> ---
>  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

May I ask you to add an example here?

>  @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];

Please declare all variables at the beginning of the function.

> +  unsigned long vlantag;
> +  vlantag = grub_strtoul (vlanptr, &vlanptr, 10);
> +
> +  if (vlantag > 4094)
> +    return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid vlan id"));

This check is bogus. Please take a look at commit ac8a37dda (net/http:
Allow use of non-standard TCP/IP ports) how it should be done properly.

> +  struct grub_net_network_level_interface *inter;

Please move this to the beginning of the function.

> +  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"),

Why do we need that if other commands have empty string here?

> +                                    N_("Set an interace's vlan id."));

Please be consistent with earlier grub_register_command() calls and
start sentence with lower case and drop full stop at the end of it.

Daniel



reply via email to

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