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 2021/11/04 18:30:05 UTC

[incubator-nuttx] 05/06: socket_rpmsg: fix save rp_name error when accept

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.git

commit 883d66b906ce8be414b7650c49f4c3709832aecb
Author: ligd <li...@xiaomi.com>
AuthorDate: Mon Oct 18 23:06:10 2021 +0800

    socket_rpmsg: fix save rp_name error when accept
    
    Signed-off-by: ligd <li...@xiaomi.com>
---
 drivers/rptun/Kconfig    |  8 ++++++--
 net/rpmsg/rpmsg_sockif.c | 34 ++++++++++++++++++++++------------
 2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/drivers/rptun/Kconfig b/drivers/rptun/Kconfig
index 82243eb..b02afba 100644
--- a/drivers/rptun/Kconfig
+++ b/drivers/rptun/Kconfig
@@ -21,7 +21,11 @@ config RPTUN_STACKSIZE
 	default DEFAULT_TASK_STACKSIZE
 
 config RPTUN_LOADER
-        bool "rptun loader support"
-        default n
+	bool "rptun loader support"
+	default n
+
+config RPTUN_LOCAL_CPUNAME
+	string "rptun local cpuname"
+	default LIBC_HOSTNAME
 
 endif # RPTUN
diff --git a/net/rpmsg/rpmsg_sockif.c b/net/rpmsg/rpmsg_sockif.c
index f32b637..0252ac4 100644
--- a/net/rpmsg/rpmsg_sockif.c
+++ b/net/rpmsg/rpmsg_sockif.c
@@ -48,12 +48,13 @@
 #  define MIN(a, b) ((a) < (b) ? (a) : (b))
 #endif
 
-#define RPMSG_SOCKET_CMD_SYNC       1
-#define RPMSG_SOCKET_CMD_DATA       2
-#define RPMSG_SOCKET_NAME_PREFIX    "rpmsg-socket"
+#define RPMSG_SOCKET_CMD_SYNC           1
+#define RPMSG_SOCKET_CMD_DATA           2
+#define RPMSG_SOCKET_NAME_PREFIX        "rpmsg-socket:"
+#define RPMSG_SOCKET_NAME_PREFIX_LEN    13
 
-static_assert(RPMSG_SOCKET_NAME_SIZE + 13 <= RPMSG_NAME_SIZE,
-              "socket name size should NOT bigger then RPMSG_NAME_SIZE");
+static_assert(RPMSG_SOCKET_NAME_SIZE + RPMSG_SOCKET_NAME_PREFIX_LEN
+              <= RPMSG_NAME_SIZE, "socket name size config error");
 
 /****************************************************************************
  * Private Types
@@ -420,7 +421,7 @@ static void rpmsg_socket_device_created(FAR struct rpmsg_device *rdev,
   if (strcmp(conn->rpaddr.rp_cpu, rpmsg_get_cpuname(rdev)) == 0)
     {
       conn->ept.priv = conn;
-      snprintf(buf, sizeof(buf), "%s:%s", RPMSG_SOCKET_NAME_PREFIX,
+      snprintf(buf, sizeof(buf), "%s%s", RPMSG_SOCKET_NAME_PREFIX,
                conn->rpaddr.rp_name);
 
       rpmsg_create_ept(&conn->ept, rdev, buf,
@@ -464,7 +465,7 @@ static void rpmsg_socket_ns_bind(FAR struct rpmsg_device *rdev,
   int cnt = 0;
   int ret;
 
-  snprintf(buf, sizeof(buf), "%s:%s", RPMSG_SOCKET_NAME_PREFIX,
+  snprintf(buf, sizeof(buf), "%s%s", RPMSG_SOCKET_NAME_PREFIX,
            server->rpaddr.rp_name);
   if (strncmp(name, buf, strlen(buf)))
     {
@@ -503,7 +504,7 @@ static void rpmsg_socket_ns_bind(FAR struct rpmsg_device *rdev,
     }
 
   strcpy(new->rpaddr.rp_cpu, rpmsg_get_cpuname(rdev));
-  strcpy(new->rpaddr.rp_name, name);
+  strcpy(new->rpaddr.rp_name, name + RPMSG_SOCKET_NAME_PREFIX_LEN);
 
   rpmsg_socket_lock(&server->recvlock);
 
@@ -606,17 +607,26 @@ static int rpmsg_socket_bind(FAR struct socket *psock,
 }
 
 static int rpmsg_socket_getsockname(FAR struct socket *psock,
-                                   FAR struct sockaddr *addr,
-                                   FAR socklen_t *addrlen)
+                                    FAR struct sockaddr *addr,
+                                    FAR socklen_t *addrlen)
 {
-  return rpmsg_socket_getaddr(psock->s_conn, addr, addrlen);
+  int ret;
+
+  ret = rpmsg_socket_getaddr(psock->s_conn, addr, addrlen);
+  if (ret >= 0)
+    {
+      strncpy(((struct sockaddr_rpmsg *)addr)->rp_cpu,
+              CONFIG_RPTUN_LOCAL_CPUNAME, RPMSG_SOCKET_CPU_SIZE);
+    }
+
+  return ret;
 }
 
 static int rpmsg_socket_getconnname(FAR struct socket *psock,
                                     FAR struct sockaddr *addr,
                                     FAR socklen_t *addrlen)
 {
-  return rpmsg_socket_getsockname(psock, addr, addrlen);
+  return rpmsg_socket_getaddr(psock->s_conn, addr, addrlen);
 }
 
 static int rpmsg_socket_listen(FAR struct socket *psock, int backlog)