You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by pk...@apache.org on 2022/08/26 08:00:29 UTC
[incubator-nuttx] 02/04: update IPv6 NIC parameters unconditionally when ICMPv6 RA is received
This is an automated email from the ASF dual-hosted git repository.
pkarashchenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 00cf3e559d367f16d93511ce272c0963285684c0
Author: luojun1 <lu...@xiaomi.com>
AuthorDate: Fri Jul 29 19:22:27 2022 +0800
update IPv6 NIC parameters unconditionally when ICMPv6 RA is received
Signed-off-by: luojun1 <lu...@xiaomi.com>
Signed-off-by: chao.an <an...@xiaomi.com>
---
net/icmpv6/icmpv6.h | 25 ++++++++++++++++++++-----
net/icmpv6/icmpv6_input.c | 8 ++++++--
net/icmpv6/icmpv6_rnotify.c | 24 +++++++-----------------
3 files changed, 33 insertions(+), 24 deletions(-)
diff --git a/net/icmpv6/icmpv6.h b/net/icmpv6/icmpv6.h
index 1e3fbbe2e0..5b1b498afb 100644
--- a/net/icmpv6/icmpv6.h
+++ b/net/icmpv6/icmpv6.h
@@ -424,6 +424,24 @@ void icmpv6_notify(net_ipv6addr_t ipaddr);
int icmpv6_autoconfig(FAR struct net_driver_s *dev);
#endif
+/****************************************************************************
+ * Name: icmpv6_setaddresses
+ *
+ * Description:
+ * We successfully obtained the Router Advertisement. Set the new IPv6
+ * addresses in the driver structure.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_NET_ICMPv6_AUTOCONF
+void icmpv6_setaddresses(FAR struct net_driver_s *dev,
+ const net_ipv6addr_t draddr,
+ const net_ipv6addr_t prefix,
+ unsigned int preflen);
+#else
+# define icmpv6_setaddresses(d,d,p,p) (0)
+#endif
+
/****************************************************************************
* Name: icmpv6_rwait_setup
*
@@ -502,12 +520,9 @@ int icmpv6_rwait(FAR struct icmpv6_rnotify_s *notify, unsigned int timeout);
****************************************************************************/
#ifdef CONFIG_NET_ICMPv6_AUTOCONF
-void icmpv6_rnotify(FAR struct net_driver_s *dev,
- const net_ipv6addr_t draddr,
- const net_ipv6addr_t prefix,
- unsigned int preflen);
+void icmpv6_rnotify(FAR struct net_driver_s *dev);
#else
-# define icmpv6_rnotify(d,p,l)
+# define icmpv6_rnotify(d) (0)
#endif
/****************************************************************************
diff --git a/net/icmpv6/icmpv6_input.c b/net/icmpv6/icmpv6_input.c
index 4684eb0f49..1408f1d82a 100644
--- a/net/icmpv6/icmpv6_input.c
+++ b/net/icmpv6/icmpv6_input.c
@@ -391,10 +391,14 @@ void icmpv6_input(FAR struct net_driver_s *dev, unsigned int iplen)
if ((prefixopt->flags & ICMPv6_PRFX_FLAG_A) != 0)
{
- /* Notify any waiting threads */
+ /* Yes.. Set the new network addresses. */
- icmpv6_rnotify(dev, ipv6->srcipaddr,
+ icmpv6_setaddresses(dev, ipv6->srcipaddr,
prefixopt->prefix, prefixopt->preflen);
+
+ /* Notify any waiting threads */
+
+ icmpv6_rnotify(dev);
prefix = true;
}
}
diff --git a/net/icmpv6/icmpv6_rnotify.c b/net/icmpv6/icmpv6_rnotify.c
index 5c5c563a0b..392b83883f 100644
--- a/net/icmpv6/icmpv6_rnotify.c
+++ b/net/icmpv6/icmpv6_rnotify.c
@@ -58,22 +58,22 @@
static struct icmpv6_rnotify_s *g_icmpv6_rwaiters;
/****************************************************************************
- * Private Functions
+ * Public Functions
****************************************************************************/
/****************************************************************************
* Name: icmpv6_setaddresses
*
* Description:
- * We successfully obtained the Router Advertisement. See the new IPv6
+ * We successfully obtained the Router Advertisement. Set the new IPv6
* addresses in the driver structure.
*
****************************************************************************/
-static void icmpv6_setaddresses(FAR struct net_driver_s *dev,
- const net_ipv6addr_t draddr,
- const net_ipv6addr_t prefix,
- unsigned int preflen)
+void icmpv6_setaddresses(FAR struct net_driver_s *dev,
+ const net_ipv6addr_t draddr,
+ const net_ipv6addr_t prefix,
+ unsigned int preflen)
{
unsigned int i;
@@ -139,10 +139,6 @@ static void icmpv6_setaddresses(FAR struct net_driver_s *dev,
net_unlock();
}
-/****************************************************************************
- * Public Functions
- ****************************************************************************/
-
/****************************************************************************
* Name: icmpv6_rwait_setup
*
@@ -287,9 +283,7 @@ int icmpv6_rwait(FAR struct icmpv6_rnotify_s *notify, unsigned int timeout)
*
****************************************************************************/
-void icmpv6_rnotify(FAR struct net_driver_s *dev,
- const net_ipv6addr_t draddr, const net_ipv6addr_t prefix,
- unsigned int preflen)
+void icmpv6_rnotify(FAR struct net_driver_s *dev)
{
FAR struct icmpv6_rnotify_s *curr;
@@ -307,10 +301,6 @@ void icmpv6_rnotify(FAR struct net_driver_s *dev,
if (curr->rn_result != OK &&
strncmp(curr->rn_ifname, dev->d_ifname, IFNAMSIZ) == 0)
{
- /* Yes.. Set the new network addresses. */
-
- icmpv6_setaddresses(dev, draddr, prefix, preflen);
-
/* And signal the waiting, returning success */
curr->rn_result = OK;