diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-11-04 18:54:04 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-11-04 18:54:04 +0000 |
commit | 08a0eae6371ad7d6af7c0d941381fa1e11370a86 (patch) | |
tree | 7a3a8ae8e2b29e3832a17a7def5b0531383172bb /apps/netutils | |
parent | 813efa266bb67269669e532b5ce6f00ee2097948 (diff) | |
download | nuttx-08a0eae6371ad7d6af7c0d941381fa1e11370a86.tar.gz nuttx-08a0eae6371ad7d6af7c0d941381fa1e11370a86.tar.bz2 nuttx-08a0eae6371ad7d6af7c0d941381fa1e11370a86.zip |
Add interfaces flags, extend ifconfig, add ifup and ifdown commands (Darcy Gong
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5308 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps/netutils')
-rw-r--r-- | apps/netutils/uiplib/Makefile | 3 | ||||
-rw-r--r-- | apps/netutils/uiplib/uip_gethostaddr.c | 2 | ||||
-rw-r--r-- | apps/netutils/uiplib/uip_getifflag.c | 118 | ||||
-rw-r--r-- | apps/netutils/uiplib/uip_getmacaddr.c | 2 | ||||
-rw-r--r-- | apps/netutils/uiplib/uip_setifflag.c | 141 | ||||
-rw-r--r-- | apps/netutils/uiplib/uiplib.c | 57 | ||||
-rw-r--r-- | apps/netutils/webclient/webclient.c | 1 |
7 files changed, 323 insertions, 1 deletions
diff --git a/apps/netutils/uiplib/Makefile b/apps/netutils/uiplib/Makefile index 189b32acc..c1b128c26 100644 --- a/apps/netutils/uiplib/Makefile +++ b/apps/netutils/uiplib/Makefile @@ -41,7 +41,8 @@ include $(APPDIR)/Make.defs ASRCS = CSRCS = uiplib.c uip_sethostaddr.c uip_gethostaddr.c uip_setdraddr.c \ - uip_setnetmask.c uip_parsehttpurl.c + uip_setnetmask.c uip_parsehttpurl.c uip_setifflag.c \ + uip_getifflag.c # These require TCP support diff --git a/apps/netutils/uiplib/uip_gethostaddr.c b/apps/netutils/uiplib/uip_gethostaddr.c index c5c70b1be..0b2b5dd28 100644 --- a/apps/netutils/uiplib/uip_gethostaddr.c +++ b/apps/netutils/uiplib/uip_gethostaddr.c @@ -45,6 +45,7 @@ #include <string.h> #include <errno.h> +#include <unistd.h> #include <netinet/in.h> #include <net/if.h> @@ -97,6 +98,7 @@ int uip_gethostaddr(const char *ifname, struct in_addr *addr) memcpy(addr, &req.ifr_addr, sizeof(struct in_addr)); #endif } + close(sockfd); } } return ret; diff --git a/apps/netutils/uiplib/uip_getifflag.c b/apps/netutils/uiplib/uip_getifflag.c new file mode 100644 index 000000000..8574d331a --- /dev/null +++ b/apps/netutils/uiplib/uip_getifflag.c @@ -0,0 +1,118 @@ +/**************************************************************************** + * netutils/uiplib/uip_getifflag.c + * + * Copyright (C) 2007-2009, 2011 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> +#if defined(CONFIG_NET) && CONFIG_NSOCKET_DESCRIPTORS > 0 + +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <stdint.h> +#include <stdbool.h> +#include <unistd.h> +#include <string.h> +#include <errno.h> + +#include <netinet/in.h> +#include <net/if.h> + +#include <apps/netutils/uiplib.h> + +/**************************************************************************** + * Global Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: uip_getifstatus + * + * Description: + * Get the network driver ifup/ifdown status + * + * Parameters: + * ifname The name of the interface to use + * status interface flag ifup or ifdown status + * + * Return: + * 0 on sucess; -1 on failure + * + ****************************************************************************/ + +int uip_getifstatus(const char *ifname, bool *status) +{ + int ret = ERROR; + if (ifname) + { + /* Get a socket (only so that we get access to the INET subsystem) */ + + int sockfd = socket(PF_INET, UIPLIB_SOCK_IOCTL, 0); + if (sockfd >= 0) + { + struct ifreq req; + memset (&req, 0, sizeof(struct ifreq)); + + /* Put the driver name into the request */ + + strncpy(req.ifr_name, ifname, IFNAMSIZ); + + /* Perform the ioctl to ifup or ifdown status */ + + ret = ioctl(sockfd, SIOCGIFFLAGS, (unsigned long)&req); + if (!ret) + { + /* Return the ifup or ifdown status */ + + if ((req.ifr_flags & IF_FLAG_IFUP) == (req.ifr_flags & IF_FLAG_IFDOWN)) + { + ret = ERROR; + } + else if(req.ifr_flags & IF_FLAG_IFUP) + { + *status = true; + } + else + { + *status = false; + } + } + close(sockfd); + } + } + return ret; +} + +#endif /* CONFIG_NET && CONFIG_NSOCKET_DESCRIPTORS */ diff --git a/apps/netutils/uiplib/uip_getmacaddr.c b/apps/netutils/uiplib/uip_getmacaddr.c index f4f01a7f3..e0f72f4a7 100644 --- a/apps/netutils/uiplib/uip_getmacaddr.c +++ b/apps/netutils/uiplib/uip_getmacaddr.c @@ -44,6 +44,7 @@ #include <sys/ioctl.h> #include <stdint.h> #include <string.h> +#include <unistd.h> #include <errno.h> #include <netinet/in.h> @@ -96,6 +97,7 @@ int uip_getmacaddr(const char *ifname, uint8_t *macaddr) memcpy(macaddr, &req.ifr_hwaddr.sa_data, IFHWADDRLEN); } + close(sockfd); } } return ret; diff --git a/apps/netutils/uiplib/uip_setifflag.c b/apps/netutils/uiplib/uip_setifflag.c new file mode 100644 index 000000000..317ddcce1 --- /dev/null +++ b/apps/netutils/uiplib/uip_setifflag.c @@ -0,0 +1,141 @@ +/**************************************************************************** + * netutils/uiplib/uip_setifflag.c + * + * Copyright (C) 2007-2009, 2011 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> +#if defined(CONFIG_NET) && CONFIG_NSOCKET_DESCRIPTORS > 0 + +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <stdint.h> +#include <string.h> +#include <unistd.h> +#include <errno.h> + +#include <netinet/in.h> +#include <net/if.h> + +#include <apps/netutils/uiplib.h> + +/**************************************************************************** + * Global Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: uip_ifup + * + * Description: + * Set the network interface UP + * + * Parameters: + * ifname The name of the interface to use + * + * Return: + * 0 on sucess; -1 on failure + * + ****************************************************************************/ + +int uip_ifup(const char *ifname) +{ + int ret = ERROR; + if (ifname) + { + /* Get a socket (only so that we get access to the INET subsystem) */ + + int sockfd = socket(PF_INET, UIPLIB_SOCK_IOCTL, 0); + if (sockfd >= 0) + { + struct ifreq req; + memset (&req, 0, sizeof(struct ifreq)); + + /* Put the driver name into the request */ + + strncpy(req.ifr_name, ifname, IFNAMSIZ); + + /* Perform the ioctl to ifup flag */ + req.ifr_flags |= IF_FLAG_IFUP; + + ret = ioctl(sockfd, SIOCSIFFLAGS, (unsigned long)&req); + close(sockfd); + } + } + return ret; +} + +/**************************************************************************** + * Name: uip_ifdown + * + * Description: + * Set the network interface DOWN + * + * Parameters: + * ifname The name of the interface to use + * + * Return: + * 0 on sucess; -1 on failure + * + ****************************************************************************/ + +int uip_ifdown(const char *ifname) +{ + int ret = ERROR; + if (ifname) + { + /* Get a socket (only so that we get access to the INET subsystem) */ + + int sockfd = socket(PF_INET, UIPLIB_SOCK_IOCTL, 0); + if (sockfd >= 0) + { + struct ifreq req; + memset (&req, 0, sizeof(struct ifreq)); + + /* Put the driver name into the request */ + + strncpy(req.ifr_name, ifname, IFNAMSIZ); + + /* Perform the ioctl to ifup flag */ + req.ifr_flags |= IF_FLAG_IFDOWN; + + ret = ioctl(sockfd, SIOCSIFFLAGS, (unsigned long)&req); + close(sockfd); + } + } + return ret; +} + +#endif /* CONFIG_NET && CONFIG_NSOCKET_DESCRIPTORS */ diff --git a/apps/netutils/uiplib/uiplib.c b/apps/netutils/uiplib/uiplib.c index f863b7343..32ffaeb06 100644 --- a/apps/netutils/uiplib/uiplib.c +++ b/apps/netutils/uiplib/uiplib.c @@ -45,10 +45,12 @@ #include <stdint.h> #include <stdbool.h> +#include <debug.h> #include <nuttx/net/uip/uip.h> #include <apps/netutils/uiplib.h> + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -93,3 +95,58 @@ bool uiplib_ipaddrconv(const char *addrstr, uint8_t *ipaddr) } return true; } + +bool uiplib_hwmacconv(const char *hwstr, uint8_t *hw) +{ + unsigned char tmp; + char c; + unsigned char i; + unsigned char j; + + if (strlen(hwstr)!=17) + { + return false; + } + + tmp = 0; + + for (i = 0; i < 6; ++i) + { + j = 0; + do + { + c = *hwstr; + ++j; + if (j > 3) + { + return false; + } + if (c == ':' || c == 0) + { + *hw = tmp; + nvdbg("HWMAC[%d]%0.2X\n",i,tmp); + ++hw; + tmp = 0; + } + else if(c >= '0' && c <= '9') + { + tmp = (tmp << 4) + (c - '0'); + } + else if(c >= 'a' && c <= 'f') + { + tmp = (tmp << 4) + (c - 'a' + 10); + } + else if(c >= 'A' && c <= 'F') + { + tmp = (tmp << 4) + (c - 'A' + 10); + } + else + { + return false; + } + ++hwstr; + } + while(c != ':' && c != 0); + } + return true; +} diff --git a/apps/netutils/webclient/webclient.c b/apps/netutils/webclient/webclient.c index 4dbd130ec..2604ce020 100644 --- a/apps/netutils/webclient/webclient.c +++ b/apps/netutils/webclient/webclient.c @@ -56,6 +56,7 @@ #include <sys/socket.h> #include <stdint.h> +#include <stdio.h> #include <stdbool.h> #include <unistd.h> #include <string.h> |