Add NSH addroute and delroute commands
This commit is contained in:
parent
31a0c289d7
commit
ff88e86ef2
@ -672,4 +672,6 @@
|
||||
redirection and replaces file I/O with calls to low-level
|
||||
console read/write functions. Suggested by Alan Carvalho de Assis
|
||||
in a somewhat different form. (2013-9-30).
|
||||
* apps/nshlib/nsm_routecmds.c: Add addroute and delroute
|
||||
commands (2013-10-5).
|
||||
|
||||
|
@ -33,6 +33,10 @@ config NSH_FILE_APPS
|
||||
|
||||
menu "Disable Individual commands"
|
||||
|
||||
config NSH_DISABLE_ADDROUTE
|
||||
bool "Disable addroute"
|
||||
default n
|
||||
|
||||
config NSH_DISABLE_BASE64DEC
|
||||
bool "Disable base64dec"
|
||||
default n
|
||||
@ -63,6 +67,10 @@ config NSH_DISABLE_DD
|
||||
bool "Disable dd"
|
||||
default n
|
||||
|
||||
config NSH_DISABLE_DELROUTE
|
||||
bool "Disable delroute"
|
||||
default n
|
||||
|
||||
config NSH_DISABLE_ECHO
|
||||
bool "Disable echo"
|
||||
default n
|
||||
|
@ -63,6 +63,9 @@ endif
|
||||
|
||||
ifeq ($(CONFIG_NET),y)
|
||||
CSRCS += nsh_netinit.c nsh_netcmds.c
|
||||
ifeq ($(CONFIG_NET_ROUTE),y)
|
||||
CSRCS += nsh_routecmds.c
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_RTC),y)
|
||||
|
@ -235,6 +235,13 @@ o test <expression>
|
||||
integer -gt integer | integer -le integer |
|
||||
integer -lt integer | integer -ne integer
|
||||
|
||||
o addroute <target> <netmask> <router>
|
||||
|
||||
This command adds an entry in the routing table. The new entry
|
||||
will map the IP address of a router on a local network(<router>)
|
||||
to an external network characterized by the <target> IP address and
|
||||
a network mask <netmask>
|
||||
|
||||
o base64dec [-w] [-f] <string or filepath>
|
||||
|
||||
o base64dec [-w] [-f] <string or filepath>
|
||||
@ -317,6 +324,13 @@ o dd if=<infile> of=<outfile> [bs=<sectsize>] [count=<sectors>] [skip=<sectors>]
|
||||
brw-rw-rw- 0 ram0
|
||||
nsh> dd if=/dev/ram0 of=/dev/null
|
||||
|
||||
o delroute <target> <netmask> <router>
|
||||
|
||||
This command removes an entry from the routing table. The entry
|
||||
removed will be the first entry in the routing table that matches
|
||||
the external network characterized by the <target> IP address and
|
||||
the network mask <netmask>
|
||||
|
||||
o df
|
||||
|
||||
Show the state of each mounted volume.
|
||||
@ -861,12 +875,14 @@ Command Dependencies on Configuration Settings
|
||||
Command Depends on Configuration
|
||||
---------- --------------------------
|
||||
[ !CONFIG_NSH_DISABLESCRIPT
|
||||
addroute CONFIG_NET && CONFIG_NET_ROUTE
|
||||
base64dec CONFIG_NETUTILS_CODECS && CONFIG_CODECS_BASE64
|
||||
base64enc CONFIG_NETUTILS_CODECS && CONFIG_CODECS_BASE64
|
||||
cat CONFIG_NFILE_DESCRIPTORS > 0
|
||||
cd !CONFIG_DISABLE_ENVIRON && CONFIG_NFILE_DESCRIPTORS > 0
|
||||
cp CONFIG_NFILE_DESCRIPTORS > 0
|
||||
dd CONFIG_NFILE_DESCRIPTORS > 0
|
||||
delrout CONFIG_NET && CONFIG_NET_ROUTE
|
||||
df !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_FS_READABLE (see note 3)
|
||||
echo --
|
||||
exec --
|
||||
@ -923,22 +939,23 @@ In addition, each NSH command can be individually disabled via one of the follow
|
||||
settings. All of these settings make the configuration of NSH potentially complex but
|
||||
also allow it to squeeze into very small memory footprints.
|
||||
|
||||
CONFIG_NSH_DISABLE_BASE64DEC, CONFIG_NSH_DISABLE_BASE64ENC, CONFIG_NSH_DISABLE_CAT,
|
||||
CONFIG_NSH_DISABLE_CD, CONFIG_NSH_DISABLE_CP, CONFIG_NSH_DISABLE_DD,
|
||||
CONFIG_NSH_DISABLE_DF, CONFIG_NSH_DISABLE_ECHO, CONFIG_NSH_DISABLE_EXEC,
|
||||
CONFIG_NSH_DISABLE_EXIT, CONFIG_NSH_DISABLE_FREE, CONFIG_NSH_DISABLE_GET,
|
||||
CONFIG_NSH_DISABLE_HELP, CONFIG_NSH_DISABLE_HEXDUMP, CONFIG_NSH_DISABLE_IFCONFIG,
|
||||
CONFIG_NSH_DISABLE_IFUPDOWN, CONFIG_NSH_DISABLE_KILL, CONFIG_NSH_DISABLE_LOSETUP,
|
||||
CONFIG_NSH_DISABLE_LS, CONFIG_NSH_DISABLE_MD5 CONFIG_NSH_DISABLE_MB,
|
||||
CONFIG_NSH_DISABLE_MKDIR, CONFIG_NSH_DISABLE_MKFATFS, CONFIG_NSH_DISABLE_MKFIFO,
|
||||
CONFIG_NSH_DISABLE_MKRD, CONFIG_NSH_DISABLE_MH, CONFIG_NSH_DISABLE_MOUNT,
|
||||
CONFIG_NSH_DISABLE_MW, CONFIG_NSH_DISABLE_MV, CONFIG_NSH_DISABLE_NFSMOUNT,
|
||||
CONFIG_NSH_DISABLE_PS, CONFIG_NSH_DISABLE_PING, CONFIG_NSH_DISABLE_PUT,
|
||||
CONFIG_NSH_DISABLE_PWD, CONFIG_NSH_DISABLE_RM, CONFIG_NSH_DISABLE_RMDIR,
|
||||
CONFIG_NSH_DISABLE_SET, CONFIG_NSH_DISABLE_SH, CONFIG_NSH_DISABLE_SLEEP,
|
||||
CONFIG_NSH_DISABLE_TEST, CONFIG_NSH_DISABLE_UMOUNT, CONFIG_NSH_DISABLE_UNSET,
|
||||
CONFIG_NSH_DISABLE_URLDECODE, CONFIG_NSH_DISABLE_URLENCODE, CONFIG_NSH_DISABLE_USLEEP,
|
||||
CONFIG_NSH_DISABLE_WGET, CONFIG_NSH_DISABLE_XD
|
||||
CONFIG_NSH_DISABLE_ADDROUTE, CONFIG_NSH_DISABLE_BASE64DEC, CONFIG_NSH_DISABLE_BASE64ENC,
|
||||
CONFIG_NSH_DISABLE_CAT, CONFIG_NSH_DISABLE_CD, CONFIG_NSH_DISABLE_CP,
|
||||
CONFIG_NSH_DISABLE_DD, CONFIG_NSH_DISABLE_DELROUTE, CONFIG_NSH_DISABLE_DF,
|
||||
CONFIG_NSH_DISABLE_ECHO, CONFIG_NSH_DISABLE_EXEC, CONFIG_NSH_DISABLE_EXIT,
|
||||
CONFIG_NSH_DISABLE_FREE, CONFIG_NSH_DISABLE_GET, CONFIG_NSH_DISABLE_HELP,
|
||||
CONFIG_NSH_DISABLE_HEXDUMP, CONFIG_NSH_DISABLE_IFCONFIG, CONFIG_NSH_DISABLE_IFUPDOWN,
|
||||
CONFIG_NSH_DISABLE_KILL, CONFIG_NSH_DISABLE_LOSETUP, CONFIG_NSH_DISABLE_LS,
|
||||
CONFIG_NSH_DISABLE_MD5 CONFIG_NSH_DISABLE_MB, CONFIG_NSH_DISABLE_MKDIR,
|
||||
CONFIG_NSH_DISABLE_MKFATFS, CONFIG_NSH_DISABLE_MKFIFO, CONFIG_NSH_DISABLE_MKRD,
|
||||
CONFIG_NSH_DISABLE_MH, CONFIG_NSH_DISABLE_MOUNT, CONFIG_NSH_DISABLE_MW,
|
||||
CONFIG_NSH_DISABLE_MV, CONFIG_NSH_DISABLE_NFSMOUNT, CONFIG_NSH_DISABLE_PS,
|
||||
CONFIG_NSH_DISABLE_PING, CONFIG_NSH_DISABLE_PUT, CONFIG_NSH_DISABLE_PWD,
|
||||
CONFIG_NSH_DISABLE_RM, CONFIG_NSH_DISABLE_RMDIR, CONFIG_NSH_DISABLE_SET,
|
||||
CONFIG_NSH_DISABLE_SH, CONFIG_NSH_DISABLE_SLEEP, CONFIG_NSH_DISABLE_TEST,
|
||||
CONFIG_NSH_DISABLE_UMOUNT, CONFIG_NSH_DISABLE_UNSET, CONFIG_NSH_DISABLE_URLDECODE,
|
||||
CONFIG_NSH_DISABLE_URLENCODE, CONFIG_NSH_DISABLE_USLEEP, CONFIG_NSH_DISABLE_WGET,
|
||||
CONFIG_NSH_DISABLE_XD
|
||||
|
||||
Verbose help output can be suppressed by defining CONFIG_NSH_HELP_TERSE. In that
|
||||
case, the help command is still available but will be slightly smaller.
|
||||
|
56
nshlib/nsh.h
56
nshlib/nsh.h
@ -702,6 +702,17 @@ void nsh_usbtrace(void);
|
||||
#endif /* CONFIG_NFILE_DESCRIPTORS */
|
||||
|
||||
#if defined(CONFIG_NET)
|
||||
# if defined(CONFIG_NET_ROUTE) && !defined(CONFIG_NSH_DISABLE_ADDROUTE)
|
||||
int cmd_addroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
# if defined(CONFIG_NET_ROUTE) && !defined(CONFIG_NSH_DISABLE_DELROUTE)
|
||||
int cmd_delroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
# if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
|
||||
# ifndef CONFIG_NSH_DISABLE_GET
|
||||
int cmd_get(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
# endif
|
||||
# ifndef CONFIG_NSH_DISABLE_IFCONFIG
|
||||
int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
@ -709,32 +720,29 @@ void nsh_usbtrace(void);
|
||||
int cmd_ifup(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
int cmd_ifdown(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
#if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
|
||||
# ifndef CONFIG_NSH_DISABLE_GET
|
||||
int cmd_get(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
# ifndef CONFIG_NSH_DISABLE_PUT
|
||||
int cmd_put(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
#endif
|
||||
#if defined(CONFIG_NET_TCP) && CONFIG_NFILE_DESCRIPTORS > 0
|
||||
# ifndef CONFIG_NSH_DISABLE_WGET
|
||||
int cmd_wget(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
#endif
|
||||
#if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
|
||||
!defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_DISABLE_SIGNALS)
|
||||
# ifndef CONFIG_NSH_DISABLE_PING
|
||||
int cmd_ping(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
#endif
|
||||
#if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && \
|
||||
defined(CONFIG_FS_READABLE) && defined(CONFIG_NFS)
|
||||
# ifndef CONFIG_NSH_DISABLE_NFSMOUNT
|
||||
# if !defined(CONFIG_DISABLE_MOUNTPOINT) && CONFIG_NFILE_DESCRIPTORS > 0 && \
|
||||
defined(CONFIG_FS_READABLE) && defined(CONFIG_NFS)
|
||||
# ifndef CONFIG_NSH_DISABLE_NFSMOUNT
|
||||
int cmd_nfsmount(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
#endif
|
||||
# if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \
|
||||
!defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_DISABLE_SIGNALS)
|
||||
# ifndef CONFIG_NSH_DISABLE_PING
|
||||
int cmd_ping(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
# endif
|
||||
# if defined(CONFIG_NET_UDP) && CONFIG_NFILE_DESCRIPTORS > 0
|
||||
# ifndef CONFIG_NSH_DISABLE_PUT
|
||||
int cmd_put(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
# endif
|
||||
# if defined(CONFIG_NET_TCP) && CONFIG_NFILE_DESCRIPTORS > 0
|
||||
# ifndef CONFIG_NSH_DISABLE_WGET
|
||||
int cmd_wget(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
# endif
|
||||
#endif /* CONFIG_NET */
|
||||
|
||||
#ifndef CONFIG_DISABLE_ENVIRON
|
||||
# ifndef CONFIG_NSH_DISABLE_SET
|
||||
|
@ -154,6 +154,10 @@ static const struct cmdmap_s g_cmdmap[] =
|
||||
{ "?", cmd_help, 1, 1, NULL },
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_NET) && defined(CONFIG_NET_ROUTE) && !defined(CONFIG_NSH_DISABLE_ADDROUTE)
|
||||
{ "addroute", cmd_addroute, 4, 4, "<target> <netmask> <router>" },
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_NETUTILS_CODECS) && defined(CONFIG_CODECS_BASE64)
|
||||
# ifndef CONFIG_NSH_DISABLE_BASE64DEC
|
||||
{ "base64dec", cmd_base64decode, 2, 4, "[-w] [-f] <string or filepath>" },
|
||||
@ -188,6 +192,10 @@ static const struct cmdmap_s g_cmdmap[] =
|
||||
{ "dd", cmd_dd, 3, 6, "if=<infile> of=<outfile> [bs=<sectsize>] [count=<sectors>] [skip=<sectors>]" },
|
||||
# endif
|
||||
|
||||
#if defined(CONFIG_NET) && defined(CONFIG_NET_ROUTE) && !defined(CONFIG_NSH_DISABLE_DELROUTE)
|
||||
{ "delroute", cmd_addroute, 3, 3, "<target> <netmask>" },
|
||||
#endif
|
||||
|
||||
#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT) && \
|
||||
defined(CONFIG_FS_READABLE) && !defined(CONFIG_NSH_DISABLE_DF)
|
||||
#ifdef CONFIG_NSH_CMDOPT_DF_H
|
||||
|
328
nshlib/nsh_routecmds.c
Normal file
328
nshlib/nsh_routecmds.c
Normal file
@ -0,0 +1,328 @@
|
||||
/****************************************************************************
|
||||
* apps/nshlib/nsh_routecmds.c
|
||||
*
|
||||
* Copyright (C) 2013 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <net/route.h>
|
||||
|
||||
#include <apps/netutils/uiplib.h>
|
||||
|
||||
#include "nsh.h"
|
||||
#include "nsh_console.h"
|
||||
|
||||
#if defined(CONFIG_NET) && defined(CONFIG_NET_ROUTE)
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Types
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: cmd_addroute
|
||||
*
|
||||
* nsh> addroute <target> <netmask> <router>
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef CONFIG_NSH_DISABLE_ADDROUTE
|
||||
int cmd_addroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
||||
{
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
struct sockaddr_in6 target;
|
||||
struct sockaddr_in6 netmask;
|
||||
struct sockaddr_in6 router;
|
||||
struct in6_addr inaddr;
|
||||
#else
|
||||
struct sockaddr_in target;
|
||||
struct sockaddr_in netmask;
|
||||
struct sockaddr_in router;
|
||||
struct in_addr inaddr;
|
||||
#endif
|
||||
int sockfd;
|
||||
int ret;
|
||||
|
||||
/* NSH has already verified that there are exactly three arguments, so
|
||||
* we don't have to look at the argument list.
|
||||
*/
|
||||
|
||||
/* We need to have a socket (any socket) in order to perform the ioctl */
|
||||
|
||||
sockfd = socket(PF_INET, UIPLIB_SOCK_IOCTL, 0);
|
||||
if (sockfd < 0)
|
||||
{
|
||||
nsh_output(vtbl, g_fmtcmdfailed, argv[0], "socket", NSH_ERRNO);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
/* Convert the target IP address string into its binary form */
|
||||
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
ret = inet_pton(AF_INET6, argv[1], &inaddr);
|
||||
#else
|
||||
ret = inet_pton(AF_INET, argv[1], &inaddr);
|
||||
#endif
|
||||
if (ret != 1)
|
||||
{
|
||||
nsh_output(vtbl, g_fmtarginvalid, argv[0]);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
/* Format the target sockaddr instance */
|
||||
|
||||
memset(&target, 0, sizeof(target));
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
target.sin_family = AF_INET6;
|
||||
memcpy(&target.sin6_addr, &inaddr, sizeof(struct in6_addr));
|
||||
#else
|
||||
target.sin_family = AF_INET;
|
||||
target.sin_addr = inaddr;
|
||||
#endif
|
||||
|
||||
/* Convert the netmask IP address string into its binary form */
|
||||
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
ret = inet_pton(AF_INET6, argv[2], &inaddr);
|
||||
#else
|
||||
ret = inet_pton(AF_INET, argv[2], &inaddr);
|
||||
#endif
|
||||
if (ret != 1)
|
||||
{
|
||||
nsh_output(vtbl, g_fmtarginvalid, argv[0]);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
/* Format the netmask sockaddr instance */
|
||||
|
||||
memset(&netmask, 0, sizeof(netmask));
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
netmask.sin_family = AF_INET6;
|
||||
memcpy(&netmask.sin6_addr, &inaddr, sizeof(struct in6_addr));
|
||||
#else
|
||||
netmask.sin_family = AF_INET;
|
||||
netmask.sin_addr = inaddr;
|
||||
#endif
|
||||
|
||||
/* Convert the router IP address string into its binary form */
|
||||
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
ret = inet_pton(AF_INET6, argv[3], &inaddr);
|
||||
#else
|
||||
ret = inet_pton(AF_INET, argv[3], &inaddr);
|
||||
#endif
|
||||
if (ret != 1)
|
||||
{
|
||||
nsh_output(vtbl, g_fmtarginvalid, argv[0]);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
/* Format the router sockaddr instance */
|
||||
|
||||
memset(&router, 0, sizeof(router));
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
router.sin_family = AF_INET6;
|
||||
memcpy(&router.sin6_addr, &inaddr, sizeof(struct in6_addr));
|
||||
#else
|
||||
router.sin_family = AF_INET;
|
||||
router.sin_addr = inaddr;
|
||||
#endif
|
||||
|
||||
/* Then add the route */
|
||||
|
||||
ret = addroute(sockfd,
|
||||
(FAR struct sockaddr_storage *)&target,
|
||||
(FAR struct sockaddr_storage *)&netmask,
|
||||
(FAR struct sockaddr_storage *)&router);
|
||||
if (ret < 0)
|
||||
{
|
||||
nsh_output(vtbl, g_fmtcmdfailed, argv[0], "addroute", NSH_ERRNO);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
close(sockfd);
|
||||
return OK;
|
||||
|
||||
errout:
|
||||
close(sockfd);
|
||||
return ERROR;
|
||||
}
|
||||
#endif /* !CONFIG_NSH_DISABLE_ADDROUTE */
|
||||
|
||||
/****************************************************************************
|
||||
* Name: cmd_delroute
|
||||
*
|
||||
* nsh> delroute <target> <netmask>
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef CONFIG_NSH_DISABLE_DELROUTE
|
||||
int cmd_delroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
||||
{
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
struct sockaddr_in6 target;
|
||||
struct sockaddr_in6 netmask;
|
||||
struct in6_addr inaddr;
|
||||
#else
|
||||
struct sockaddr_in target;
|
||||
struct sockaddr_in netmask;
|
||||
struct in_addr inaddr;
|
||||
#endif
|
||||
int sockfd;
|
||||
int ret;
|
||||
|
||||
/* NSH has already verified that there are exactly two arguments, so
|
||||
* we don't have to look at the argument list.
|
||||
*/
|
||||
|
||||
/* We need to have a socket (any socket) in order to perform the ioctl */
|
||||
|
||||
sockfd = socket(PF_INET, UIPLIB_SOCK_IOCTL, 0);
|
||||
if (sockfd < 0)
|
||||
{
|
||||
nsh_output(vtbl, g_fmtcmdfailed, argv[0], "socket", NSH_ERRNO);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
/* Convert the target IP address string into its binary form */
|
||||
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
ret = inet_pton(AF_INET6, argv[1], &inaddr);
|
||||
#else
|
||||
ret = inet_pton(AF_INET, argv[1], &inaddr);
|
||||
#endif
|
||||
if (ret != 1)
|
||||
{
|
||||
nsh_output(vtbl, g_fmtarginvalid, argv[0]);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
/* Format the target sockaddr instance */
|
||||
|
||||
memset(&target, 0, sizeof(target));
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
target.sin_family = AF_INET6;
|
||||
memcpy(&target.sin6_addr, &inaddr, sizeof(struct in6_addr));
|
||||
#else
|
||||
target.sin_family = AF_INET;
|
||||
target.sin_addr = inaddr;
|
||||
#endif
|
||||
|
||||
/* Convert the netmask IP address string into its binary form */
|
||||
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
ret = inet_pton(AF_INET6, argv[2], &inaddr);
|
||||
#else
|
||||
ret = inet_pton(AF_INET, argv[2], &inaddr);
|
||||
#endif
|
||||
if (ret != 1)
|
||||
{
|
||||
nsh_output(vtbl, g_fmtarginvalid, argv[0]);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
/* Format the netmask sockaddr instance */
|
||||
|
||||
memset(&netmask, 0, sizeof(netmask));
|
||||
#ifdef CONFIG_NET_IPv6
|
||||
netmask.sin_family = AF_INET6;
|
||||
memcpy(&netmask.sin6_addr, &inaddr, sizeof(struct in6_addr));
|
||||
#else
|
||||
netmask.sin_family = AF_INET;
|
||||
netmask.sin_addr = inaddr;
|
||||
#endif
|
||||
|
||||
/* Then delete the route */
|
||||
|
||||
ret = delroute(sockfd,
|
||||
(FAR struct sockaddr_storage *)&target,
|
||||
(FAR struct sockaddr_storage *)&netmask);
|
||||
if (ret < 0)
|
||||
{
|
||||
nsh_output(vtbl, g_fmtcmdfailed, argv[0], "addroute", NSH_ERRNO);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
close(sockfd);
|
||||
return OK;
|
||||
|
||||
errout:
|
||||
close(sockfd);
|
||||
return ERROR;
|
||||
}
|
||||
#endif /* !CONFIG_NSH_DISABLE_DELROUTE */
|
||||
|
||||
/****************************************************************************
|
||||
* Name: cmd_route
|
||||
*
|
||||
* nsh> route
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#if !defined(CONFIG_NSH_DISABLE_DELROUTE) && !defined(CONFIG_NUTTX_KERNEL)
|
||||
/* Perhaps... someday. This would current depend on using the internal
|
||||
* OS interface net_foreachroute and internal OS data structrues defined
|
||||
* in nuttx/net/net_route.h
|
||||
*/
|
||||
#endif /* !CONFIG_NSH_DISABLE_DELROUTE && !CONFIG_NUTTX_KERNEL */
|
||||
|
||||
#endif /* CONFIG_NET && CONFIG_NET_ROUTE */
|
@ -74,7 +74,7 @@ endif # USBMSC_COMPOSITE
|
||||
if CDCACM_COMPOSITE
|
||||
|
||||
config SYSTEM_COMPOSITE_TTYUSB
|
||||
int "USB serial device minor number
|
||||
int "USB serial device minor number"
|
||||
default 0
|
||||
---help---
|
||||
The minor number of the USB serial device. Default is zero
|
||||
@ -153,4 +153,3 @@ config SYSTEM_COMPOSITE_DEBUGMM
|
||||
Enables some debug tests to check for memory usage and memory leaks.
|
||||
|
||||
endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user