netlib/route: add length for add/del route-func to reduce caller stack usage

Signed-off-by: meijian <meijian@xiaomi.com>
diff --git a/include/net/route.h b/include/net/route.h
index 0564dde..2df0c39 100644
--- a/include/net/route.h
+++ b/include/net/route.h
@@ -101,15 +101,15 @@
  *   netmask  - Network mask defining the external network (required)
  *   router   - Router address that on our network that can forward to the
  *              external network.
+ *   len      - The address struct length.
  *
  * Returned Value:
  *   OK on success; -1 on failure with the errno variable set appropriately.
  *
  ****************************************************************************/
 
-int addroute(int sockfd, FAR struct sockaddr_storage *target,
-             FAR struct sockaddr_storage *netmask,
-             FAR struct sockaddr_storage *router);
+int addroute(int sockfd, FAR void *target, FAR void *netmask,
+             FAR void *router, socklen_t len);
 
 /****************************************************************************
  * Name: net_delroute
@@ -122,14 +122,14 @@
  *   sockfd   - Any socket descriptor
  *   target   - Target address on the remote network (required)
  *   netmask  - Network mask defining the external network (required)
+ *   len      - The address struct length.
  *
  * Returned Value:
  *   OK on success; -1 on failure with the errno variable set appropriately.
  *
  ****************************************************************************/
 
-int delroute(int sockfd, FAR struct sockaddr_storage *target,
-             FAR struct sockaddr_storage *netmask);
+int delroute(int sockfd, FAR void *target, FAR void *netmask, socklen_t len);
 
 #undef EXTERN
 #ifdef __cplusplus
diff --git a/libs/libc/net/lib_addroute.c b/libs/libc/net/lib_addroute.c
index 5602319..7f6bac6 100644
--- a/libs/libc/net/lib_addroute.c
+++ b/libs/libc/net/lib_addroute.c
@@ -24,6 +24,7 @@
 
 #include <nuttx/config.h>
 
+#include <errno.h>
 #include <sys/socket.h>
 #include <sys/ioctl.h>
 #include <stdint.h>
@@ -47,24 +48,29 @@
  *   netmask  - Network mask defining the external network (required)
  *   router   - Router address that on our network that can forward to the
  *              external network.
+ *   len      - The address struct length.
  *
  * Returned Value:
  *   OK on success; -1 on failure with the errno variable set appropriately.
  *
  ****************************************************************************/
 
-int addroute(int sockfd, FAR struct sockaddr_storage *target,
-             FAR struct sockaddr_storage *netmask,
-             FAR struct sockaddr_storage *router)
+int addroute(int sockfd, FAR void *target, FAR void *netmask,
+             FAR void *router, socklen_t len)
 {
   struct rtentry entry;
 
+  if (len < sizeof(struct in_addr) || len > sizeof(struct sockaddr_storage))
+    {
+      return -EINVAL;
+    }
+
   /* Set up the rtentry structure */
 
   memset(&entry, 0, sizeof(struct rtentry));
-  memcpy(&entry.rt_dst, target, sizeof(struct sockaddr_storage));
-  memcpy(&entry.rt_genmask, netmask, sizeof(struct sockaddr_storage));
-  memcpy(&entry.rt_gateway, router, sizeof(struct sockaddr_storage));
+  memcpy(&entry.rt_dst, target, len);
+  memcpy(&entry.rt_genmask, netmask, len);
+  memcpy(&entry.rt_gateway, router, len);
 
   /* Then perform the ioctl */
 
diff --git a/libs/libc/net/lib_delroute.c b/libs/libc/net/lib_delroute.c
index ac8343c..f4c3681 100644
--- a/libs/libc/net/lib_delroute.c
+++ b/libs/libc/net/lib_delroute.c
@@ -24,6 +24,7 @@
 
 #include <nuttx/config.h>
 
+#include <errno.h>
 #include <sys/socket.h>
 #include <sys/ioctl.h>
 #include <stdint.h>
@@ -45,22 +46,27 @@
  *   sockfd   - Any socket descriptor
  *   target   - Target address on the remote network (required)
  *   netmask  - Network mask defining the external network (required)
+ *   len      - The address struct length.
  *
  * Returned Value:
  *   OK on success; -1 on failure with the errno variable set appropriately.
  *
  ****************************************************************************/
 
-int delroute(int sockfd, FAR struct sockaddr_storage *target,
-             FAR struct sockaddr_storage *netmask)
+int delroute(int sockfd, FAR void *target, FAR void *netmask, socklen_t len)
 {
   struct rtentry entry;
 
+  if (len < sizeof(struct in_addr) || len > sizeof(struct sockaddr_storage))
+    {
+      return -EINVAL;
+    }
+
   /* Set up the rtentry structure */
 
   memset(&entry, 0, sizeof(struct rtentry));
-  memcpy(&entry.rt_dst, target, sizeof(struct sockaddr_storage));
-  memcpy(&entry.rt_genmask, netmask, sizeof(struct sockaddr_storage));
+  memcpy(&entry.rt_dst, target, len);
+  memcpy(&entry.rt_genmask, netmask, len);
 
   /* Then perform the ioctl */