You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/08/27 15:50:50 UTC

[incubator-nuttx-apps] branch master updated: fix use of addroute/delroute

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/incubator-nuttx-apps.git


The following commit(s) were added to refs/heads/master by this push:
     new 703554642 fix use of addroute/delroute
703554642 is described below

commit 70355464227909a2df79b46b1370b7df5e15d004
Author: liyi <li...@xiaomi.com>
AuthorDate: Fri Aug 26 16:13:56 2022 +0800

    fix use of addroute/delroute
    
    Signed-off-by: liyi <li...@xiaomi.com>
---
 examples/mld/mld_main.c                | 43 +++++++++++++++++-----------------
 netutils/netlib/netlib_setdripv4addr.c | 26 ++++++++++----------
 nshlib/nsh_routecmds.c                 | 14 +++++------
 3 files changed, 40 insertions(+), 43 deletions(-)

diff --git a/examples/mld/mld_main.c b/examples/mld/mld_main.c
index dd7a894f9..30411df2b 100644
--- a/examples/mld/mld_main.c
+++ b/examples/mld/mld_main.c
@@ -258,9 +258,10 @@ int main(int argc, FAR char *argv[])
   FAR char *iobuffer = NULL;
   struct sockaddr_in6 host;
 #ifdef CONFIG_NET_ROUTE
-  struct sockaddr_in6 target;
-  struct sockaddr_in6 router;
-  struct sockaddr_in6 netmask;
+  struct sockaddr_storage target;
+  struct sockaddr_storage router;
+  struct sockaddr_storage netmask;
+  FAR struct sockaddr_in6 *v6_addr;
 #endif
   struct ipv6_mreq mrec;
   int nsec;
@@ -359,31 +360,31 @@ int main(int argc, FAR char *argv[])
 
   /* Set up a routing table entry for the address of the multicast group */
 
-  memset(&target, 0, sizeof(struct sockaddr_in6));
-  target.sin6_family  = AF_INET6;
-  target.sin6_port    = HTONS(0x4321);
-  memcpy(target.sin6_addr.s6_addr16, g_grp_addr, sizeof(struct in6_addr));
+  memset(&target, 0, sizeof(target));
+  v6_addr = (FAR struct sockaddr_in6 *)&target;
+  v6_addr->sin6_family  = AF_INET6;
+  v6_addr->sin6_port    = HTONS(0x4321);
+  memcpy(v6_addr->sin6_addr.s6_addr16, g_grp_addr, sizeof(struct in6_addr));
 
-  memset(&netmask, 0, sizeof(struct sockaddr_in6));
-  netmask.sin6_family  = AF_INET6;
-  netmask.sin6_port    = HTONS(0x4321);
-  memset(netmask.sin6_addr.s6_addr16, 0xff, sizeof(struct in6_addr));
+  memset(&netmask, 0, sizeof(netmask));
+  v6_addr = (FAR struct sockaddr_in6 *)&netmask;
+  v6_addr->sin6_family  = AF_INET6;
+  v6_addr->sin6_port    = HTONS(0x4321);
+  memset(v6_addr->sin6_addr.s6_addr16, 0xff, sizeof(struct in6_addr));
 
-  memset(&router, 0, sizeof(struct sockaddr_in6));
-  router.sin6_family  = AF_INET6;
-  router.sin6_port    = HTONS(0x4321);
+  memset(&router, 0, sizeof(router));
+  v6_addr = (FAR struct sockaddr_in6 *)&router;
+  v6_addr->sin6_family  = AF_INET6;
+  v6_addr->sin6_port    = HTONS(0x4321);
 
-  ret = netlib_get_ipv6addr("eth0", &router.sin6_addr);
+  ret = netlib_get_ipv6addr("eth0", &v6_addr->sin6_addr);
   if (ret < 0)
     {
       fprintf(stderr, "ERROR: netlib_get_ipv6addr() failed: %d\n", ret);
     }
   else
     {
-      ret = addroute(sockfd,
-                     (FAR struct sockaddr_storage *)&target,
-                     (FAR struct sockaddr_storage *)&netmask,
-                     (FAR struct sockaddr_storage *)&router);
+      ret = addroute(sockfd, &target, &netmask, &router);
       if (ret < 0)
         {
           fprintf(stderr, "ERROR: addroute() failed: %d\n", errno);
@@ -405,9 +406,7 @@ int main(int argc, FAR char *argv[])
         }
     }
 
-  ret = delroute(sockfd,
-                 (FAR struct sockaddr_storage *)&target,
-                 (FAR struct sockaddr_storage *)&netmask);
+  ret = delroute(sockfd, &target, &netmask);
   if (ret < 0)
     {
       fprintf(stderr, "ERROR: delroute() failed: %d\n", errno);
diff --git a/netutils/netlib/netlib_setdripv4addr.c b/netutils/netlib/netlib_setdripv4addr.c
index f04dba417..c11b1847e 100644
--- a/netutils/netlib/netlib_setdripv4addr.c
+++ b/netutils/netlib/netlib_setdripv4addr.c
@@ -66,18 +66,21 @@ int netlib_set_dripv4addr(FAR const char *ifname,
   int ret = ERROR;
 
 #ifdef CONFIG_NET_ROUTE
-  struct sockaddr_in target;
-  struct sockaddr_in netmask;
-  struct sockaddr_in router;
+  FAR struct sockaddr_in *v4_addr;
+  struct sockaddr_storage target;
+  struct sockaddr_storage netmask;
+  struct sockaddr_storage router;
 
   memset(&target, 0, sizeof(target));
-  target.sin_family  = AF_INET;
+  target.ss_family  = AF_INET;
 
   memset(&netmask, 0, sizeof(netmask));
-  netmask.sin_family  = AF_INET;
+  netmask.ss_family  = AF_INET;
 
-  router.sin_addr    = *addr;
-  router.sin_family  = AF_INET;
+  memset(&router, 0, sizeof(router));
+  v4_addr = (FAR struct sockaddr_in *)&router;
+  v4_addr->sin_family  = AF_INET;
+  v4_addr->sin_addr    = *addr;
 #endif
 
   if (ifname && addr)
@@ -108,16 +111,11 @@ int netlib_set_dripv4addr(FAR const char *ifname,
 
               /* This call fails if no default route exists, but it's OK */
 
-              delroute(sockfd,
-                       (FAR struct sockaddr_storage *)&target,
-                       (FAR struct sockaddr_storage *)&netmask);
+              delroute(sockfd, &target, &netmask);
 
               /* Then add the new default route */
 
-              ret = addroute(sockfd,
-                             (FAR struct sockaddr_storage *)&target,
-                             (FAR struct sockaddr_storage *)&netmask,
-                             (FAR struct sockaddr_storage *)&router);
+              ret = addroute(sockfd, &target, &netmask, &router);
             }
 #endif
 
diff --git a/nshlib/nsh_routecmds.c b/nshlib/nsh_routecmds.c
index 61b95589c..f2dc7d75b 100644
--- a/nshlib/nsh_routecmds.c
+++ b/nshlib/nsh_routecmds.c
@@ -99,6 +99,7 @@ int cmd_addroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 #ifdef CONFIG_NET_IPv6
     struct sockaddr_in6 ipv6;
 #endif
+    struct sockaddr_storage ipx;
   } target;
 
   union
@@ -109,6 +110,7 @@ int cmd_addroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 #ifdef CONFIG_NET_IPv6
     struct sockaddr_in6 ipv6;
 #endif
+    struct sockaddr_storage ipx;
   } netmask;
 
   union
@@ -119,6 +121,7 @@ int cmd_addroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 #ifdef CONFIG_NET_IPv6
   struct sockaddr_in6 ipv6;
 #endif
+  struct sockaddr_storage ipx;
   } router;
 
   union
@@ -430,10 +433,7 @@ int cmd_addroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 
   /* Then add the route */
 
-  ret = addroute(sockfd,
-                 (FAR struct sockaddr_storage *)&target,
-                 (FAR struct sockaddr_storage *)&netmask,
-                 (FAR struct sockaddr_storage *)&router);
+  ret = addroute(sockfd, &target.ipx, &netmask.ipx, &router.ipx);
   if (ret < 0)
     {
       nsh_error(vtbl, g_fmtcmdfailed, argv[0], "addroute", NSH_ERRNO);
@@ -468,6 +468,7 @@ int cmd_delroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 #ifdef CONFIG_NET_IPv6
     struct sockaddr_in6 ipv6;
 #endif
+    struct sockaddr_storage ipx;
   } target;
 
   union
@@ -478,6 +479,7 @@ int cmd_delroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 #ifdef CONFIG_NET_IPv6
     struct sockaddr_in6 ipv6;
 #endif
+    struct sockaddr_storage ipx;
   } netmask;
 
   union
@@ -673,9 +675,7 @@ int cmd_delroute(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
 
   /* Then delete the route */
 
-  ret = delroute(sockfd,
-                 (FAR struct sockaddr_storage *)&target,
-                 (FAR struct sockaddr_storage *)&netmask);
+  ret = delroute(sockfd, &target.ipx, &netmask.ipx);
   if (ret < 0)
     {
       nsh_error(vtbl, g_fmtcmdfailed, argv[0], "delroute", NSH_ERRNO);