This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 6296aeecdb7 net/route/ramroute: replace prealloc with netpool
6296aeecdb7 is described below

commit 6296aeecdb7aa5b3340ef8efefa3f62e96b244d6
Author: zhanghongyu <[email protected]>
AuthorDate: Mon Jul 28 15:28:02 2025 +0800

    net/route/ramroute: replace prealloc with netpool
    
    reuse the netpool module to optimize the code implementation.
    
    Signed-off-by: zhanghongyu <[email protected]>
---
 net/route/net_add_ramroute.c     |  10 ++-
 net/route/net_alloc_ramroute.c   | 149 +++++++++++++++------------------------
 net/route/net_foreach_ramroute.c |  12 ++--
 net/route/net_initroute.c        |   4 --
 net/route/ramroute.h             |  45 +++++++-----
 5 files changed, 92 insertions(+), 128 deletions(-)

diff --git a/net/route/net_add_ramroute.c b/net/route/net_add_ramroute.c
index e0c95943d51..140a21f2bbf 100644
--- a/net/route/net_add_ramroute.c
+++ b/net/route/net_add_ramroute.c
@@ -82,13 +82,13 @@ int net_addroute_ipv4(in_addr_t target, in_addr_t netmask, 
in_addr_t router)
 
   /* Get exclusive address to the networking data structures */
 
-  net_lock();
+  net_lockroute_ipv4();
 
   /* Then add the new entry to the table */
 
   ramroute_ipv4_addlast((FAR struct net_route_ipv4_entry_s *)route,
                         &g_ipv4_routes);
-  net_unlock();
+  net_unlockroute_ipv4();
 
   netlink_route_notify(route, RTM_NEWROUTE, AF_INET);
   return OK;
@@ -119,13 +119,11 @@ int net_addroute_ipv6(net_ipv6addr_t target, 
net_ipv6addr_t netmask,
 
   /* Get exclusive address to the networking data structures */
 
-  net_lock();
-
-  /* Then add the new entry to the table */
+  net_lockroute_ipv6();
 
   ramroute_ipv6_addlast((FAR struct net_route_ipv6_entry_s *)route,
                         &g_ipv6_routes);
-  net_unlock();
+  net_unlockroute_ipv6();
 
   netlink_route_notify(route, RTM_NEWROUTE, AF_INET6);
   return OK;
diff --git a/net/route/net_alloc_ramroute.c b/net/route/net_alloc_ramroute.c
index e5ec79ece31..2f4c62617fa 100644
--- a/net/route/net_alloc_ramroute.c
+++ b/net/route/net_alloc_ramroute.c
@@ -33,6 +33,7 @@
 #include <nuttx/net/net.h>
 #include <arch/irq.h>
 
+#include "utils/utils.h"
 #include "route/ramroute.h"
 #include "route/route.h"
 
@@ -58,80 +59,22 @@ FAR struct net_route_ipv6_queue_s g_ipv6_routes;
  * Private Data
  ****************************************************************************/
 
-/* These are lists of free routing table entries */
+/* The array containing all routing table entries. */
 
 #ifdef CONFIG_ROUTE_IPv4_RAMROUTE
-static struct net_route_ipv4_queue_s g_free_ipv4routes;
+NET_BUFPOOL_DECLARE(g_ipv4routes, sizeof(struct net_route_ipv4_entry_s),
+                    CONFIG_ROUTE_MAX_IPv4_RAMROUTES, 0, 0);
 #endif
 
 #ifdef CONFIG_ROUTE_IPv6_RAMROUTE
-static struct net_route_ipv6_queue_s g_free_ipv6routes;
-#endif
-
-/* These are arrays of pre-allocated network routes */
-
-#ifdef CONFIG_ROUTE_IPv4_RAMROUTE
-static struct net_route_ipv4_entry_s
-  g_prealloc_ipv4routes[CONFIG_ROUTE_MAX_IPv4_RAMROUTES];
-#endif
-
-#ifdef CONFIG_ROUTE_IPv6_RAMROUTE
-static struct net_route_ipv6_entry_s
-  g_prealloc_ipv6routes[CONFIG_ROUTE_MAX_IPv6_RAMROUTES];
+NET_BUFPOOL_DECLARE(g_ipv6routes, sizeof(struct net_route_ipv6_entry_s),
+                    CONFIG_ROUTE_MAX_IPv6_RAMROUTES, 0, 0);
 #endif
 
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
 
-/****************************************************************************
- * Name: net_init_ramroute
- *
- * Description:
- *   Initialize the in-memory, RAM routing table
- *
- * Input Parameters:
- *   None
- *
- * Returned Value:
- *   None
- *
- * Assumptions:
- *   Called early in initialization so that no special protection is needed.
- *
- ****************************************************************************/
-
-void net_init_ramroute(void)
-{
-  int i;
-
-  /* Initialize the routing table and the free list */
-
-#ifdef CONFIG_ROUTE_IPv4_RAMROUTE
-  ramroute_init(&g_ipv4_routes);
-  ramroute_init(&g_free_ipv4routes);
-
-  /* Add all of the pre-allocated routing table entries to a free list */
-
-  for (i = 0; i < CONFIG_ROUTE_MAX_IPv4_RAMROUTES; i++)
-    {
-      ramroute_ipv4_addlast(&g_prealloc_ipv4routes[i], &g_free_ipv4routes);
-    }
-#endif
-
-#ifdef CONFIG_ROUTE_IPv6_RAMROUTE
-  ramroute_init(&g_ipv6_routes);
-  ramroute_init(&g_free_ipv6routes);
-
-  /* Add all of the pre-allocated routing table entries to a free list */
-
-  for (i = 0; i < CONFIG_ROUTE_MAX_IPv6_RAMROUTES; i++)
-    {
-      ramroute_ipv6_addlast(&g_prealloc_ipv6routes[i], &g_free_ipv6routes);
-    }
-#endif
-}
-
 /****************************************************************************
  * Name: net_allocroute_ipv4 and net_allocroute_ipv6
  *
@@ -152,15 +95,11 @@ FAR struct net_route_ipv4_s *net_allocroute_ipv4(void)
 {
   FAR struct net_route_ipv4_entry_s *route;
 
-  /* Get exclusive address to the networking data structures */
-
-  net_lock();
-
-  /* Then add the remove the first entry from the table */
-
-  route = ramroute_ipv4_remfirst(&g_free_ipv4routes);
+  /* Get exclusive address to the networking data structures and
+   * then remove the first entry from the g_ipv4routes pool
+   */
 
-  net_unlock();
+  route = NET_BUFPOOL_TRYALLOC(g_ipv4routes);
   if (!route)
     {
       return NULL;
@@ -175,15 +114,11 @@ FAR struct net_route_ipv6_s *net_allocroute_ipv6(void)
 {
   FAR struct net_route_ipv6_entry_s *route;
 
-  /* Get exclusive address to the networking data structures */
+  /* Get exclusive address to the networking data structures and
+   * then remove the first entry from the g_ipv6routes pool
+   */
 
-  net_lock();
-
-  /* Then add the remove the first entry from the table */
-
-  route = ramroute_ipv6_remfirst(&g_free_ipv6routes);
-
-  net_unlock();
+  route = NET_BUFPOOL_TRYALLOC(g_ipv6routes);
   if (!route)
     {
       return NULL;
@@ -212,15 +147,9 @@ void net_freeroute_ipv4(FAR struct net_route_ipv4_s *route)
 {
   DEBUGASSERT(route);
 
-  /* Get exclusive address to the networking data structures */
-
-  net_lock();
+  /* Add the new entry to the g_ipv4routes pool */
 
-  /* Then add the new entry to the table */
-
-  ramroute_ipv4_addlast((FAR struct net_route_ipv4_entry_s *)route,
-                        &g_free_ipv4routes);
-  net_unlock();
+  NET_BUFPOOL_FREE(g_ipv4routes, (FAR struct net_route_ipv4_entry_s *)route);
 }
 #endif
 
@@ -229,15 +158,49 @@ void net_freeroute_ipv6(FAR struct net_route_ipv6_s 
*route)
 {
   DEBUGASSERT(route);
 
-  /* Get exclusive address to the networking data structures */
+  /* Add the new entry to the g_ipv6routes pool */
+
+  NET_BUFPOOL_FREE(g_ipv6routes, (FAR struct net_route_ipv6_entry_s *)route);
+}
+#endif
+
+/****************************************************************************
+ * Name: net_lockroute_ipv4 and net_unlockroute_ipv4
+ *
+ * Description:
+ *   Lock and unlock the g_ipv4routes pool
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ROUTE_IPv4_RAMROUTE
+void net_lockroute_ipv4(void)
+{
+  NET_BUFPOOL_LOCK(g_ipv4routes);
+}
+
+void net_unlockroute_ipv4(void)
+{
+  NET_BUFPOOL_UNLOCK(g_ipv4routes);
+}
+#endif
 
-  net_lock();
+/****************************************************************************
+ * Name: net_lockroute_ipv6 and net_unlockroute_ipv6
+ *
+ * Description:
+ *   Lock and unlock the g_ipv6routes pool
+ *
+ ****************************************************************************/
 
-  /* Then add the new entry to the table */
+#ifdef CONFIG_ROUTE_IPv6_RAMROUTE
+void net_lockroute_ipv6(void)
+{
+  NET_BUFPOOL_LOCK(g_ipv6routes);
+}
 
-  ramroute_ipv6_addlast((FAR struct net_route_ipv6_entry_s *)route,
-                        &g_free_ipv6routes);
-  net_unlock();
+void net_unlockroute_ipv6(void)
+{
+  NET_BUFPOOL_UNLOCK(g_ipv6routes);
 }
 #endif
 
diff --git a/net/route/net_foreach_ramroute.c b/net/route/net_foreach_ramroute.c
index 97b2fcfe093..90f5959f0a6 100644
--- a/net/route/net_foreach_ramroute.c
+++ b/net/route/net_foreach_ramroute.c
@@ -68,7 +68,7 @@ int net_foreachroute_ipv4(route_handler_ipv4_t handler, FAR 
void *arg)
 
   /* Prevent concurrent access to the routing table */
 
-  net_lock();
+  net_lockroute_ipv4();
 
   /* Visit each entry in the routing table */
 
@@ -82,9 +82,9 @@ int net_foreachroute_ipv4(route_handler_ipv4_t handler, FAR 
void *arg)
       ret  = handler(&route->entry, arg);
     }
 
-  /* Unlock the network */
+  /* Unlock the g_ipv4_routes */
 
-  net_unlock();
+  net_unlockroute_ipv4();
   return ret;
 }
 #endif
@@ -98,7 +98,7 @@ int net_foreachroute_ipv6(route_handler_ipv6_t handler, FAR 
void *arg)
 
   /* Prevent concurrent access to the routing table */
 
-  net_lock();
+  net_lockroute_ipv6();
 
   /* Visit each entry in the routing table */
 
@@ -112,9 +112,9 @@ int net_foreachroute_ipv6(route_handler_ipv6_t handler, FAR 
void *arg)
       ret  = handler(&route->entry, arg);
     }
 
-  /* Unlock the network */
+  /* Unlock the g_ipv6_routes */
 
-  net_unlock();
+  net_unlockroute_ipv6();
   return ret;
 }
 #endif
diff --git a/net/route/net_initroute.c b/net/route/net_initroute.c
index aedaa758bac..ac4a1fa50d9 100644
--- a/net/route/net_initroute.c
+++ b/net/route/net_initroute.c
@@ -52,10 +52,6 @@
 
 void net_init_route(void)
 {
-#if defined(CONFIG_ROUTE_IPv4_RAMROUTE) || defined(CONFIG_ROUTE_IPv6_RAMROUTE)
-  net_init_ramroute();
-#endif
-
 #if defined(CONFIG_ROUTE_IPv4_CACHEROUTE) || 
defined(CONFIG_ROUTE_IPv6_CACHEROUTE)
   net_init_cacheroute();
 #endif
diff --git a/net/route/ramroute.h b/net/route/ramroute.h
index 74aff0c0c67..b3c9cf0f6af 100644
--- a/net/route/ramroute.h
+++ b/net/route/ramroute.h
@@ -119,25 +119,6 @@ extern struct net_route_ipv6_queue_s g_ipv6_routes;
  * Public Function Prototypes
  ****************************************************************************/
 
-/****************************************************************************
- * Name: net_init_ramroute
- *
- * Description:
- *   Initialize the in-memory, RAM routing table
- *
- * Input Parameters:
- *   None
- *
- * Returned Value:
- *   None
- *
- * Assumptions:
- *   Called early in initialization so that no special protection is needed.
- *
- ****************************************************************************/
-
-void net_init_ramroute(void);
-
 /****************************************************************************
  * Name: net_allocroute_ipv4 and net_allocroute_ipv6
  *
@@ -183,6 +164,32 @@ void net_freeroute_ipv4(FAR struct net_route_ipv4_s 
*route);
 void net_freeroute_ipv6(FAR struct net_route_ipv6_s *route);
 #endif
 
+/****************************************************************************
+ * Name: net_lockroute_ipv4 and net_unlockroute_ipv4
+ *
+ * Description:
+ *   Lock and unlock the g_ipv4routes pool
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ROUTE_IPv4_RAMROUTE
+void net_lockroute_ipv4(void);
+void net_unlockroute_ipv4(void);
+#endif
+
+/****************************************************************************
+ * Name: net_lockroute_ipv6 and net_unlockroute_ipv6
+ *
+ * Description:
+ *   Lock and unlock the g_ipv6routes pool
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_ROUTE_IPv6_RAMROUTE
+void net_lockroute_ipv6(void);
+void net_unlockroute_ipv6(void);
+#endif
+
 /****************************************************************************
  * Name: (various low-level list operations)
  *

Reply via email to