From 70355464227909a2df79b46b1370b7df5e15d004 Mon Sep 17 00:00:00 2001 From: liyi Date: Fri, 26 Aug 2022 16:13:56 +0800 Subject: [PATCH] fix use of addroute/delroute Signed-off-by: liyi --- 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 *)⌖ + 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);