nshlib/: ifconfig now uses /proc/net/eth0 to display network configuration. You will need to enable the procfs file system in order to use ifconfig

This commit is contained in:
Gregory Nutt 2015-11-27 16:57:22 -06:00
parent 6c6df5e4ed
commit bb88ff9b12
3 changed files with 22 additions and 234 deletions

View File

@ -1466,8 +1466,8 @@
calls (2015-11-25).
* apps/nshlib: If CONFIG_NETDEV_STATISTICS=y, then print the network
driver statistics in the ifconfig (15-11-26).
* apps/nshlib: The 'ifconfig' command now uses /proc/net/stat to
show network statistics. A consequence of this is that you cannot
view network statistics if the procfs is not enabled and mounted
at /proc (2015-11-27).
* apps/nshlib: The 'ifconfig' command now uses /proc/net/<dev> to view
and network device configuration/status and /proc/net/stat to show
network statistics. A consequence of this is that you cannot view
this network information if the procfs is not enabled and mounted at
/proc (2015-11-27).

View File

@ -601,16 +601,23 @@
*/
#if defined(CONFIG_BUILD_PROTECTED) || defined(CONFIG_BUILD_KERNEL)
# undef CONFIG_NSH_DISABLE_PS /* 'ps' depends on sched_foreach */
# undef CONFIG_NSH_DISABLE_PS /* 'ps' depends on sched_foreach */
# define CONFIG_NSH_DISABLE_PS 1
# undef CONFIG_NSH_DISABLE_DF /* 'df' depends on foreach_mountpoint */
# undef CONFIG_NSH_DISABLE_DF /* 'df' depends on foreach_mountpoint */
# define CONFIG_NSH_DISABLE_DF 1
# undef CONFIG_NSH_DISABLE_MKFATFS /* 'mkfatfs' depends on mkfatfs interface */
# undef CONFIG_NSH_DISABLE_MKFATFS /* 'mkfatfs' depends on mkfatfs interface */
# define CONFIG_NSH_DISABLE_MKFATFS 1
# undef CONFIG_NSH_DISABLE_MKRD /* 'mkrd' depends on ramdisk_register */
# undef CONFIG_NSH_DISABLE_MKRD /* 'mkrd' depends on ramdisk_register */
# define CONFIG_NSH_DISABLE_MKRD 1
#endif
/* Certain commands are only available if the procfs file system is enable */
#if !defined(CONFIG_FS_PROCFS) || defined(CONFIG_FS_PROCFS_EXCLUDE_NET)
# undef CONFIG_NSH_DISABLE_IFCONFIG /* 'ifconfig' depends on network procfs */
# define CONFIG_NSH_DISABLE_IFCONFIG 1
#endif
/****************************************************************************
* Public Types
****************************************************************************/

View File

@ -285,88 +285,6 @@ static inline void net_statistics(FAR struct nsh_vtbl_s *vtbl)
# define net_statistics(vtbl)
#endif
/****************************************************************************
* Name: net_statistics
****************************************************************************/
#if defined(CONFIG_NETDEV_STATISTICS) && !defined(CONFIG_NSH_DISABLE_IFCONFIG)
static inline void netdev_statistics(FAR struct nsh_vtbl_s *vtbl,
FAR struct net_driver_s *dev)
{
FAR struct netdev_statistics_s *stats = &dev->d_statistics;
FAR char *fmt;
/* Rx Statistics */
nsh_output(vtbl, "\tRX: %-8s %-8s %-8s\n",
"Received", "Fragment", "Errors");
nsh_output(vtbl, "\t %08lx %08lx %08lx\n",
(unsigned long)stats->rx_packets,
(unsigned long)stats->rx_fragments,
(unsigned long)stats->rx_errors);
fmt = "\t "
#ifdef CONFIG_NET_IPv4
"%-8s "
#endif
#ifdef CONFIG_NET_IPv6
"%-8s "
#endif
#ifdef CONFIG_NET_ARP
"%-8s "
#endif
"%-8s\n";
nsh_output(vtbl, fmt
#ifdef CONFIG_NET_IPv4
, "IPv4"
#endif
#ifdef CONFIG_NET_IPv6
, "IPv6"
#endif
#ifdef CONFIG_NET_ARP
, "ARP"
#endif
, "Dropped");
fmt = "\t "
#ifdef CONFIG_NET_IPv4
"%08lx "
#endif
#ifdef CONFIG_NET_IPv6
"%08lx "
#endif
#ifdef CONFIG_NET_ARP
"%08lx "
#endif
"%08lx\n";
nsh_output(vtbl, fmt
#ifdef CONFIG_NET_IPv4
, (unsigned long)stats->rx_ipv4
#endif
#ifdef CONFIG_NET_IPv6
, (unsigned long)stats->rx_ipv6
#endif
#ifdef CONFIG_NET_ARP
, (unsigned long)stats->rx_arp
#endif
, (unsigned long)stats->rx_dropped);
nsh_output(vtbl, "\tTX: %-8s %-8s %-8s %-8s\n",
"Queued", "Sent", "Erorts", "Timeouts");
nsh_output(vtbl, "\t %08lx %08lx %08lx %08lx\n",
(unsigned long)stats->tx_packets,
(unsigned long)stats->tx_done,
(unsigned long)stats->tx_errors,
(unsigned long)stats->tx_timeouts);
nsh_output(vtbl, "\tTotal Errors: %08x\n\n",
(unsigned long)stats->errors);
}
#else
# define netdev_statistics(vtbl,dev)
#endif
/****************************************************************************
* Name: ifconfig_callback
****************************************************************************/
@ -374,153 +292,16 @@ static inline void netdev_statistics(FAR struct nsh_vtbl_s *vtbl,
#if !defined(CONFIG_NSH_DISABLE_IFUPDOWN) || !defined(CONFIG_NSH_DISABLE_IFCONFIG)
static int ifconfig_callback(FAR struct net_driver_s *dev, void *arg)
{
struct nsh_vtbl_s *vtbl = (struct nsh_vtbl_s*)arg;
#ifdef CONFIG_NET_IPv4
struct in_addr addr;
#endif
#ifdef CONFIG_NET_IPv6
char addrstr[INET6_ADDRSTRLEN];
uint8_t preflen;
#endif
uint8_t iff;
const char *status;
int ret;
FAR struct nsh_vtbl_s *vtbl = (FAR struct nsh_vtbl_s *)arg;
char buffer[IFNAMSIZ + 12];
/* Get the interface status: RUNNING, UP, or DOWN */
DEBUGASSERT(dev != NULL && vtbl != NULL);
ret = netlib_getifstatus(dev->d_ifname, &iff);
if (ret != OK)
{
nsh_output(vtbl, "\tGet %s interface flags error: %d\n",
dev->d_ifname, ret);
}
/* Construct the full path to the /proc/net entry for this device */
if (iff & IFF_RUNNING)
{
status = "RUNNING";
}
else if (iff & IFF_UP)
{
status = "UP";
}
else
{
status = "DOWN";
}
snprintf(buffer, IFNAMSIZ + 12, "/proc/net/%s", dev->d_ifname);
(void)nsh_catfile(vtbl, "ifconfig", buffer);
#if defined(CONFIG_NET_MULTILINK)
/* If there are multiple link types being supported, then selected the
* output appropriate for the link type associated with this device.
*/
switch (dev->d_lltype)
{
# if defined(CONFIG_NET_ETHERNET)
case NET_LL_ETHERNET:
nsh_output(vtbl, "%s\tLink encap:Ethernet HWaddr %s",
dev->d_ifname, ether_ntoa(&dev->d_mac));
break;
# endif
# if defined(CONFIG_NET_LOOPBACK)
case NET_LL_LOOPBACK:
nsh_output(vtbl, "%s\tLink encap:Local Loopback", dev->d_ifname);
break;
# endif
# if defined(CONFIG_NET_SLIP)
case NET_LL_SLIP:
nsh_output(vtbl, "%s\tLink encap:SLIP", dev->d_ifname);
break;
# endif
# if defined(CONFIG_NET_PPP)
case NET_LL_PPP:
nsh_output(vtbl, "%s\tLink encap:P-t-P", dev->d_ifname);
break;
# endif
# if defined(CONFIG_NET_TUN)
case NET_LL_TUN:
nsh_output(vtbl, "%s\tLink encap:TUN", dev->d_ifname);
break;
# endif
default:
nsh_output(vtbl, "%s\tLink encap:UNSPEC", dev->d_ifname);
}
nsh_output(vtbl, " at %s\n", status);
#elif defined(CONFIG_NET_ETHERNET)
nsh_output(vtbl, "%s\tLink encap:Ethernet HWaddr %s at %s\n",
dev->d_ifname, ether_ntoa(&dev->d_mac), status);
#elif defined(CONFIG_NET_LOOPBACK)
nsh_output(vtbl, "%s\tLink encap:Local Loopback at %s\n", dev->d_ifname, status);
#elif defined(CONFIG_NET_SLIP)
nsh_output(vtbl, "%s\tLink encap:SLIP at %s\n", dev->d_ifname, status);
#elif defined(CONFIG_NET_PPP)
nsh_output(vtbl, "%s\tLink encap:P-t-P at %s\n", dev->d_ifname, status);
#elif defined(CONFIG_NET_TUN)
nsh_output(vtbl, "%s\tLink encap:TUN at %s\n", dev->d_ifname, status);
#endif
#ifdef CONFIG_NET_IPv4
/* Show the IPv4 address */
addr.s_addr = dev->d_ipaddr;
nsh_output(vtbl, "\tinet addr:%s ", inet_ntoa(addr));
/* Show the IPv4 default router address */
addr.s_addr = dev->d_draddr;
nsh_output(vtbl, "DRaddr:%s ", inet_ntoa(addr));
/* Show the IPv4 network mask */
addr.s_addr = dev->d_netmask;
nsh_output(vtbl, "Mask:%s\n", inet_ntoa(addr));
#if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS)
netlib_get_ipv4dnsaddr(&addr);
nsh_output(vtbl, "\tDNSaddr:%s\n", inet_ntoa(addr));
#endif
#endif
#ifdef CONFIG_NET_IPv6
/* Convert the 128 network mask to a human friendly prefix length */
preflen = netlib_ipv6netmask2prefix(dev->d_ipv6netmask);
/* Show the assigned IPv6 address */
if (inet_ntop(AF_INET6, dev->d_ipv6addr, addrstr, INET6_ADDRSTRLEN))
{
nsh_output(vtbl, "\tinet6 addr:%s/%d\n", addrstr, preflen);
}
/* REVISIT: Show the IPv6 default router address */
if (inet_ntop(AF_INET6, dev->d_ipv6draddr, addrstr, INET6_ADDRSTRLEN))
{
nsh_output(vtbl, "\tinet6 DRaddr:%s/%d\n", addrstr, preflen);
}
#if defined(CONFIG_NSH_DHCPCv6) || defined(CONFIG_NSH_DNS)
# warning Missing logic
#endif
#endif
nsh_output(vtbl, "\n");
/* Show driver statistics */
netdev_statistics(vtbl, dev);
return OK;
}
#endif /* !CONFIG_NSH_DISABLE_IFUPDOWN || !CONFIG_NSH_DISABLE_IFCONFIG */