mirror of
https://github.com/apache/nuttx.git
synced 2026-05-27 11:26:12 +08:00
netdev_findby_ipv[4|6]addr return netdev_default() as last resort but don't return loopback device if another network device is in the UP state.
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* net/netdev/netdev_default.c
|
* net/netdev/netdev_default.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 2014-2015 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2014-2015, 2018 Gregory Nutt. All rights reserved.
|
||||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -72,6 +72,7 @@
|
|||||||
|
|
||||||
FAR struct net_driver_s *netdev_default(void)
|
FAR struct net_driver_s *netdev_default(void)
|
||||||
{
|
{
|
||||||
|
FAR struct net_driver_s *ret = NULL;
|
||||||
FAR struct net_driver_s *dev;
|
FAR struct net_driver_s *dev;
|
||||||
|
|
||||||
/* Examine each registered network device */
|
/* Examine each registered network device */
|
||||||
@@ -83,17 +84,21 @@ FAR struct net_driver_s *netdev_default(void)
|
|||||||
|
|
||||||
if ((dev->d_flags & IFF_UP) != 0)
|
if ((dev->d_flags & IFF_UP) != 0)
|
||||||
{
|
{
|
||||||
/* Return a reference to the first device we find that is in the UP
|
/* Return a reference to the first device that we find in the UP
|
||||||
* state.
|
* state (but not the loopback device unless it is the only
|
||||||
|
* device).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
net_unlock();
|
ret = dev;
|
||||||
return dev;
|
if (dev->d_lltype != NET_LL_LOOPBACK)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
net_unlock();
|
net_unlock();
|
||||||
return NULL;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_NET */
|
#endif /* CONFIG_NET */
|
||||||
|
|||||||
@@ -203,13 +203,9 @@ FAR struct net_driver_s *netdev_findby_ipv4addr(in_addr_t lipaddr,
|
|||||||
* broadcast packet out ALL locally available networks. I am not
|
* broadcast packet out ALL locally available networks. I am not
|
||||||
* sure of that and, in any event, there is nothing we can do
|
* sure of that and, in any event, there is nothing we can do
|
||||||
* about that here.
|
* about that here.
|
||||||
*
|
|
||||||
* REVISIT: For now, arbitrarily return the first network
|
|
||||||
* interface in the list of network devices. The broadcast
|
|
||||||
* will be sent on that device only.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return g_netdevices;
|
return netdev_default();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -250,15 +246,11 @@ FAR struct net_driver_s *netdev_findby_ipv4addr(in_addr_t lipaddr,
|
|||||||
#endif /* CONFIG_NET_ROUTE */
|
#endif /* CONFIG_NET_ROUTE */
|
||||||
|
|
||||||
/* The above lookup will fail if the packet is being sent out of our
|
/* The above lookup will fail if the packet is being sent out of our
|
||||||
* out subnet to a router and there is no routing information.
|
* out subnet to a router and there is no routing information. Let's
|
||||||
|
* try the default network device.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* If we will did not find the network device, then we might as well fail
|
return netdev_default();
|
||||||
* because we are not configured properly to determine the route to the
|
|
||||||
* destination.
|
|
||||||
*/
|
|
||||||
|
|
||||||
return dev;
|
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_NET_IPv4 */
|
#endif /* CONFIG_NET_IPv4 */
|
||||||
|
|
||||||
@@ -302,13 +294,9 @@ FAR struct net_driver_s *netdev_findby_ipv6addr(const net_ipv6addr_t lipaddr,
|
|||||||
* broadcast packet out ALL locally available networks. I am not
|
* broadcast packet out ALL locally available networks. I am not
|
||||||
* sure of that and, in any event, there is nothing we can do
|
* sure of that and, in any event, there is nothing we can do
|
||||||
* about that here.
|
* about that here.
|
||||||
*
|
|
||||||
* REVISIT: For now, arbitrarily return the first network
|
|
||||||
* interface in the list of network devices. The broadcast
|
|
||||||
* will be sent on that device only.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return g_netdevices;
|
return netdev_default();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -349,15 +337,11 @@ FAR struct net_driver_s *netdev_findby_ipv6addr(const net_ipv6addr_t lipaddr,
|
|||||||
#endif /* CONFIG_NET_ROUTE */
|
#endif /* CONFIG_NET_ROUTE */
|
||||||
|
|
||||||
/* The above lookup will fail if the packet is being sent out of our
|
/* The above lookup will fail if the packet is being sent out of our
|
||||||
* out subnet to a router and there is no routing information.
|
* out subnet to a router and there is no routing information. Let's
|
||||||
|
* try the default network device.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* If we will did not find the network device, then we might as well fail
|
return netdev_default();
|
||||||
* because we are not configured properly to determine the route to the
|
|
||||||
* destination.
|
|
||||||
*/
|
|
||||||
|
|
||||||
return dev;
|
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_NET_IPv6 */
|
#endif /* CONFIG_NET_IPv6 */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user