From 8369052a2212555cfe29d46314c14e15ad6b4cbb Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sat, 8 Apr 2017 12:21:40 -0600 Subject: [PATCH] NSH library: Extend ifconfig to support 6loWPAN. Adapt to some changes in configuration variable usage. --- netutils/netlib/Makefile | 2 +- nshlib/nsh.h | 5 +++-- nshlib/nsh_netcmds.c | 47 +++++++++++++++++++++++++++------------- nshlib/nsh_netinit.c | 18 +++++++++------ 4 files changed, 47 insertions(+), 25 deletions(-) diff --git a/netutils/netlib/Makefile b/netutils/netlib/Makefile index 01c1e73ab..b5a8f96d2 100644 --- a/netutils/netlib/Makefile +++ b/netutils/netlib/Makefile @@ -87,7 +87,7 @@ CSRCS += netlib_setmacaddr.c netlib_getmacaddr.c endif ifeq ($(CONFIG_NET_6LOWPAN),y) -CSRCS += netlib_setnodeaddr.c netlib_nodeaddrconv.c +CSRCS += netlib_setnodeaddr.c netlib_nodeaddrconv.c endif # IGMP support diff --git a/nshlib/nsh.h b/nshlib/nsh.h index 94e7e55d8..0231ef510 100644 --- a/nshlib/nsh.h +++ b/nshlib/nsh.h @@ -155,8 +155,9 @@ * domain sockets were enable. */ -#if !defined(CONFIG_NET_ETHERNET) && !defined(CONFIG_NET_LOOPBACK) && \ - !defined(CONFIG_NET_SLIP) && !defined(CONFIG_NET_TUN) +#if !defined(CONFIG_NET_ETHERNET) && !defined(CONFIG_NET_6LOWPAN) && \ + !defined(CONFIG_NET_LOOPBACK) && !defined(CONFIG_NET_SLIP) && \ + !defined(CONFIG_NET_TUN) /* No link layer protocol is a good indication that there is no network * device. */ diff --git a/nshlib/nsh_netcmds.c b/nshlib/nsh_netcmds.c index 592f02b3f..35f19354e 100644 --- a/nshlib/nsh_netcmds.c +++ b/nshlib/nsh_netcmds.c @@ -79,6 +79,10 @@ #include #include +#ifdef CONFIG_NET_6LOWPAN +#include +#endif + #if defined(CONFIG_NET_ICMP) && defined(CONFIG_NET_ICMP_PING) && \ !defined(CONFIG_DISABLE_SIGNALS) # include "netutils/netlib.h" @@ -252,7 +256,7 @@ static int ping_options(FAR struct nsh_vtbl_s *vtbl, /* There should be exactly on parameter left on the command-line */ - if (optind == argc-1) + if (optind == argc - 1) { *staddr = argv[optind]; } @@ -371,7 +375,7 @@ int tftpc_parseargs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv, /* There should be exactly one parameter left on the command-line */ - if (optind == argc-1) + if (optind == argc - 1) { args->srcpath = argv[optind]; } @@ -384,7 +388,7 @@ int tftpc_parseargs(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv, goto errout; } - /* optind < argc-1 means that there are too many arguments on the + /* optind < argc - 1 means that there are too many arguments on the * command-line */ @@ -744,7 +748,7 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) FAR char *gwip = NULL; FAR char *mask = NULL; FAR char *tmp = NULL; -#ifdef CONFIG_NET_ETHERNET +#if defined(CONFIG_NET_ETHERNET) || defined(CONFIG_NET_6LOWPAN) FAR char *hw = NULL; #endif #if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS) @@ -754,7 +758,12 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) bool inet6 = false; #endif bool badarg = false; +#ifdef CONFIG_NET_ETHERNET uint8_t mac[IFHWADDRLEN]; +#endif +#ifdef CONFIG_NET_6LOWPAN + uint8_t nodeaddr[NET_6LOWPAN_RIMEADDR_SIZE]; +#endif #if defined(CONFIG_NSH_DHCPC) FAR void *handle; #endif @@ -802,9 +811,9 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) tmp = argv[i]; if (!strcmp(tmp, "dr") || !strcmp(tmp, "gw") || !strcmp(tmp, "gateway")) { - if (argc-1 >= i+1) + if (argc - 1 >= i + 1) { - gwip = argv[i+1]; + gwip = argv[i + 1]; i++; } else @@ -814,9 +823,9 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) } else if (!strcmp(tmp, "netmask")) { - if (argc-1 >= i+1) + if (argc - 1 >= i + 1) { - mask = argv[i+1]; + mask = argv[i + 1]; i++; } else @@ -841,16 +850,20 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) #endif } -#ifdef CONFIG_NET_ETHERNET +#if defined(CONFIG_NET_ETHERNET) || defined(CONFIG_NET_6LOWPAN) /* REVISIT: How will we handle Ethernet and SLIP networks together? */ else if (!strcmp(tmp, "hw")) { - if (argc-1>=i+1) + if (argc - 1 >= i + 1) { - hw = argv[i+1]; + hw = argv[i + 1]; i++; +#ifdef CONFIG_NET_ETHERNET badarg = !netlib_ethaddrconv(hw, mac); +#else + badarg = !netlib_nodeaddrconv(hw, nodeaddr); +#endif } else { @@ -862,9 +875,9 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) #if defined(CONFIG_NSH_DHCPC) || defined(CONFIG_NSH_DNS) else if (!strcmp(tmp, "dns")) { - if (argc-1 >= i+1) + if (argc - 1 >= i + 1) { - dns = argv[i+1]; + dns = argv[i + 1]; i++; } else @@ -883,14 +896,18 @@ int cmd_ifconfig(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) return ERROR; } -#ifdef CONFIG_NET_ETHERNET +#if defined(CONFIG_NET_ETHERNET) || defined(CONFIG_NET_6LOWPAN) /* Set Hardware Ethernet MAC address */ /* REVISIT: How will we handle Ethernet and SLIP networks together? */ if (hw) { ninfo("HW MAC: %s\n", hw); +#ifdef CONFIG_NET_ETHERNET netlib_setmacaddr(intf, mac); +#else + netlib_setnodeaddr(intf, nodeaddr); +#endif } #endif @@ -1620,7 +1637,7 @@ int cmd_wget(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) /* There should be exactly on parameter left on the command-line */ - if (optind == argc-1) + if (optind == argc - 1) { url = argv[optind]; } diff --git a/nshlib/nsh_netinit.c b/nshlib/nsh_netinit.c index 38c862a30..f1f1f557f 100644 --- a/nshlib/nsh_netinit.c +++ b/nshlib/nsh_netinit.c @@ -72,6 +72,10 @@ # include "netutils/dhcpc.h" #endif +#ifdef CONFIG_NET_6LOWPAN +# include +#endif + #ifdef CONFIG_NETUTILS_NTPCLIENT # include "netutils/ntpclient.h" #endif @@ -90,9 +94,9 @@ #if defined(CONFIG_NET_ETHERNET) || defined(CONFIG_NET_6LOWPAN) # define HAVE_MAC 1 # if defined(CONFIG_NET_6LOWPAN) -# if (CONFIG_NET_6LOWPAN_RIMEADDR_SIZE == 2) && CONFIG_NSH_MACADDR > 0xffff +# if !defined(CONFIG_NET_6LOWPAN_RIMEADDR_EXTENDED) && CONFIG_NSH_MACADDR > 0xffff # error Invalid 6loWPAN node address for SIZE == 2 -# elif (CONFIG_NET_6LOWPAN_RIMEADDR_SIZE == 8) && CONFIG_NSH_MACADDR > 0xffffffffffffffffull +# elif defined(CONFIG_NET_6LOWPAN_RIMEADDR_EXTENDED) && CONFIG_NSH_MACADDR > 0xffffffffffffffffull # error Invalid 6loWPAN node address for SIZE == 8 # endif # endif @@ -249,7 +253,7 @@ static void nsh_netinit_configure(void) #if defined(CONFIG_NET_ETHERNET) uint8_t mac[IFHWADDRLEN]; #elif defined(CONFIG_NET_6LOWPAN) - uint8_t nodeaddr[CONFIG_NET_6LOWPAN_RIMEADDR_SIZE]; + uint8_t nodeaddr[NET_6LOWPAN_RIMEADDR_SIZE]; #endif #endif @@ -275,10 +279,7 @@ static void nsh_netinit_configure(void) #elif defined(CONFIG_NET_6LOWPAN) /* Use the configured, fixed MAC address */ -#if CONFIG_NET_6LOWPAN_RIMEADDR_SIZE == 2 - nodeaddr[0] = (CONFIG_NSH_MACADDR >> (8 * 1)) & 0xff; - nodeaddr[1] = (CONFIG_NSH_MACADDR >> (8 * 0)) & 0xff; -#elif CONFIG_NET_6LOWPAN_RIMEADDR_SIZE == 8 +#ifdef CONFIG_NET_6LOWPAN_RIMEADDR_EXTENDED nodeaddr[0] = (CONFIG_NSH_MACADDR >> (8 * 7)) & 0xff; nodeaddr[1] = (CONFIG_NSH_MACADDR >> (8 * 6)) & 0xff; nodeaddr[2] = (CONFIG_NSH_MACADDR >> (8 * 5)) & 0xff; @@ -287,6 +288,9 @@ static void nsh_netinit_configure(void) nodeaddr[5] = (CONFIG_NSH_MACADDR >> (8 * 2)) & 0xff; nodeaddr[6] = (CONFIG_NSH_MACADDR >> (8 * 1)) & 0xff; nodeaddr[7] = (CONFIG_NSH_MACADDR >> (8 * 0)) & 0xff; +#else + nodeaddr[0] = (CONFIG_NSH_MACADDR >> (8 * 1)) & 0xff; + nodeaddr[1] = (CONFIG_NSH_MACADDR >> (8 * 0)) & 0xff; #endif /* Set the 6loWPAN node address */