diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2014-11-21 14:14:39 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2014-11-21 14:14:39 -0600 |
commit | 4dcd92adad4ac5f4e3d8c948f8d30b2f02d55cc2 (patch) | |
tree | aececacd314eee02641bc868640ba157966be797 | |
parent | 9b0f4c18f07dbead978f50897509b29cd5b1dcff (diff) | |
download | px4-nuttx-4dcd92adad4ac5f4e3d8c948f8d30b2f02d55cc2.tar.gz px4-nuttx-4dcd92adad4ac5f4e3d8c948f8d30b2f02d55cc2.tar.bz2 px4-nuttx-4dcd92adad4ac5f4e3d8c948f8d30b2f02d55cc2.zip |
Network: Add logic to get a default network device (for the case where are multiple devices). For INADDR_ANY
-rw-r--r-- | nuttx/net/netdev/Make.defs | 2 | ||||
-rw-r--r-- | nuttx/net/netdev/netdev.h | 8 | ||||
-rw-r--r-- | nuttx/net/netdev/netdev_default.c | 124 | ||||
-rw-r--r-- | nuttx/net/netdev/netdev_findbyaddr.c | 2 | ||||
-rw-r--r-- | nuttx/net/netdev/netdev_findbyname.c | 2 |
5 files changed, 135 insertions, 3 deletions
diff --git a/nuttx/net/netdev/Make.defs b/nuttx/net/netdev/Make.defs index 62827c978..50fffc8bb 100644 --- a/nuttx/net/netdev/Make.defs +++ b/nuttx/net/netdev/Make.defs @@ -38,7 +38,7 @@ NETDEV_CSRCS += netdev_register.c netdev_ioctl.c netdev_txnotify.c NETDEV_CSRCS += netdev_findbyname.c netdev_findbyaddr.c netdev_count.c NETDEV_CSRCS += netdev_foreach.c netdev_unregister.c netdev_sem.c -NETDEV_CSRCS += netdev_carrier.c +NETDEV_CSRCS += netdev_carrier.c netdev_default.c ifeq ($(CONFIG_NET_RXAVAIL),y) NETDEV_CSRCS += netdev_rxnotify.c diff --git a/nuttx/net/netdev/netdev.h b/nuttx/net/netdev/netdev.h index 3fc2d5eb0..2ab83ed00 100644 --- a/nuttx/net/netdev/netdev.h +++ b/nuttx/net/netdev/netdev.h @@ -97,6 +97,12 @@ FAR struct net_driver_s *netdev_findbyname(FAR const char *ifname); FAR struct net_driver_s *netdev_findbyaddr(const net_ipaddr_t addr); #endif +/* netdev_default.c ***********************************************************/ + +#if CONFIG_NSOCKET_DESCRIPTORS > 0 +FAR struct net_driver_s *netdev_default(void); +#endif + /* netdev_txnotify.c *********************************************************/ #if CONFIG_NSOCKET_DESCRIPTORS > 0 @@ -111,7 +117,7 @@ void netdev_rxnotify(const net_ipaddr_t addr); # define netdev_rxnotify(addr) #endif -/* net_count.c ***************************************************************/ +/* netdev_count.c ************************************************************/ #if CONFIG_NSOCKET_DESCRIPTORS > 0 int netdev_count(void); diff --git a/nuttx/net/netdev/netdev_default.c b/nuttx/net/netdev/netdev_default.c new file mode 100644 index 000000000..5efdba741 --- /dev/null +++ b/nuttx/net/netdev/netdev_default.c @@ -0,0 +1,124 @@ +/**************************************************************************** + * net/netdev/netdev_default.c + * + * Copyright (C) 2014 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 <nuttx/net/netdev.h> +#include "netdev/netdev.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Private Types + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Function: netdev_maskcmp + ****************************************************************************/ + +/**************************************************************************** + * Global Functions + ****************************************************************************/ + +/**************************************************************************** + * Function: netdev_default + * + * Description: + * Return the default network device. REVISIT: At present this function + * arbitrarily returns the first UP device at the head of the device + * list. Perhaps the default device should be a device name + * configuration option? + * + * So why is this here: It represents my current though for what to do + * if a socket is connected with INADDY_ANY. In this case, I suppose we + * should use the IP address associated with some default device??? + * + * Parameters: + * NULL + * + * Returned Value: + * Pointer to default network driver on success; null on failure + * + * Assumptions: + * Called from normal user mode + * + ****************************************************************************/ + +FAR struct net_driver_s *netdev_default(void) +{ + FAR struct net_driver_s *dev; + + /* Examine each registered network device */ + + netdev_semtake(); + for (dev = g_netdevices; dev; dev = dev->flink) + { + /* Is the interface in the "up" state? */ + + if ((dev->d_flags & IFF_UP) != 0) + { + /* Return a reference to the first device we find that is in the UP + * state. + */ + + netdev_semgive(); + return dev; + } + } + + netdev_semgive(); + return NULL; +} + +#endif /* CONFIG_NET */ diff --git a/nuttx/net/netdev/netdev_findbyaddr.c b/nuttx/net/netdev/netdev_findbyaddr.c index 79ade21dc..a3948ab12 100644 --- a/nuttx/net/netdev/netdev_findbyaddr.c +++ b/nuttx/net/netdev/netdev_findbyaddr.c @@ -96,7 +96,7 @@ static FAR struct net_driver_s *netdev_finddevice(const net_ipaddr_t addr) { - struct net_driver_s *dev; + FAR struct net_driver_s *dev; /* Examine each registered network device */ diff --git a/nuttx/net/netdev/netdev_findbyname.c b/nuttx/net/netdev/netdev_findbyname.c index 60a965441..5da78ec49 100644 --- a/nuttx/net/netdev/netdev_findbyname.c +++ b/nuttx/net/netdev/netdev_findbyname.c @@ -103,8 +103,10 @@ FAR struct net_driver_s *netdev_findbyname(const char *ifname) return dev; } } + netdev_semgive(); } + return NULL; } |