From cb7132da45ed475a3b8d461975a6578b8944f212 Mon Sep 17 00:00:00 2001 From: Zhe Weng Date: Tue, 7 Jan 2025 18:02:39 +0800 Subject: [PATCH] nshlib: Add vconfig command Add vconfig command Signed-off-by: gaohedong --- nshlib/Kconfig | 4 ++++ nshlib/nsh.h | 3 +++ nshlib/nsh_command.c | 4 ++++ nshlib/nsh_netcmds.c | 47 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 58 insertions(+) diff --git a/nshlib/Kconfig b/nshlib/Kconfig index 7fd49bbc727..b9a51038330 100644 --- a/nshlib/Kconfig +++ b/nshlib/Kconfig @@ -423,6 +423,10 @@ config NSH_DISABLE_IFCONFIG bool "Disable ifconfig" default DEFAULT_SMALL || !FS_PROCFS || FS_PROCFS_EXCLUDE_NET +config NSH_DISABLE_VCONFIG + bool "Disable vconfig" + default DEFAULT_SMALL || !FS_PROCFS || FS_PROCFS_EXCLUDE_NET + config NSH_DISABLE_IFUPDOWN bool "Disable ifup/down" default DEFAULT_SMALL || !FS_PROCFS || FS_PROCFS_EXCLUDE_NET diff --git a/nshlib/nsh.h b/nshlib/nsh.h index 8d037f5176f..9c2c1d5edfa 100644 --- a/nshlib/nsh.h +++ b/nshlib/nsh.h @@ -1093,6 +1093,9 @@ int cmd_irqinfo(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv); # ifndef CONFIG_NSH_DISABLE_IFCONFIG int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv); # endif +# ifndef CONFIG_NSH_DISABLE_VCONFIG + int cmd_vconfig(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv); +# endif # ifndef CONFIG_NSH_DISABLE_IFUPDOWN int cmd_ifup(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv); int cmd_ifdown(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv); diff --git a/nshlib/nsh_command.c b/nshlib/nsh_command.c index 2f05557cb30..d9deadd0cf1 100644 --- a/nshlib/nsh_command.c +++ b/nshlib/nsh_command.c @@ -286,6 +286,10 @@ static const struct cmdmap_s g_cmdmap[] = "[dr|gw|gateway ] [netmask |prefixlen ] " "[dns ] [hw ]"), # endif +# if defined(CONFIG_NET_VLAN) && !defined(CONFIG_NSH_DISABLE_VCONFIG) + CMD_MAP("vconfig", cmd_vconfig, 3, 4, + "[add iface-name vlan-id]|[rem vlan-name]"), +# endif # ifndef CONFIG_NSH_DISABLE_IFUPDOWN CMD_MAP("ifdown", cmd_ifdown, 2, 2, ""), CMD_MAP("ifup", cmd_ifup, 2, 2, ""), diff --git a/nshlib/nsh_netcmds.c b/nshlib/nsh_netcmds.c index 1b2c8efd7f6..233231a9519 100644 --- a/nshlib/nsh_netcmds.c +++ b/nshlib/nsh_netcmds.c @@ -1097,6 +1097,53 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv) } #endif +/**************************************************************************** + * Name: cmd_vconfig + ****************************************************************************/ + +#if defined(CONFIG_NET_VLAN) && !defined(CONFIG_NSH_DISABLE_VCONFIG) +int cmd_vconfig(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv) +{ + DEBUGASSERT(argc >= 2); + + if (!strcmp(argv[1], "add")) + { + if (argc != 4) + { + nsh_error(vtbl, g_fmtargrequired, argv[0]); + return ERROR; + } + + if (netlib_add_vlan(argv[2], atoi(argv[3])) < 0) + { + perror("Failed to add VLAN"); + return ERROR; + } + } + else if (!strcmp(argv[1], "rem") || !strcmp(argv[1], "del")) + { + if (argc != 3) + { + nsh_error(vtbl, g_fmtargrequired, argv[0]); + return ERROR; + } + + if (netlib_del_vlan(argv[2]) < 0) + { + perror("Failed to remove VLAN"); + return ERROR; + } + } + else + { + nsh_error(vtbl, g_fmtarginvalid, argv[1]); + return ERROR; + } + + return OK; +} +#endif + /**************************************************************************** * Name: cmd_nslookup ****************************************************************************/