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/09/13 01:00:27 UTC

[incubator-nuttx-apps] 02/02: rexecd/rexec: support AF_RPMSG to communicate

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

commit 2add33e6a339c34b88c4ebaf47f06960fd424901
Author: Jiuzhu Dong <do...@xiaomi.com>
AuthorDate: Thu Sep 9 11:14:35 2021 +0800

    rexecd/rexec: support AF_RPMSG to communicate
    
    Signed-off-by: Jiuzhu Dong <do...@xiaomi.com>
---
 netutils/rexec/rexec.c   | 10 +++++++---
 netutils/rexecd/rexecd.c | 18 +++++++++++++++---
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/netutils/rexec/rexec.c b/netutils/rexec/rexec.c
index 6c19338..209517f 100644
--- a/netutils/rexec/rexec.c
+++ b/netutils/rexec/rexec.c
@@ -66,14 +66,15 @@ static int do_rexec(FAR struct rexec_arg_s *arg);
 static void usage(FAR const char *progname)
 {
   fprintf(stderr, "Usage: %s [-u user] [-H host] [-p password] "
-                  "[-P port] [-4|-6] command\n", progname);
+                  "[-P port] [-4|-6|-r] command\n", progname);
   fprintf(stderr, "Remote Execution Client:\n"
                   "  -u, Specify the user, default is \\0\n"
                   "  -H, Specify the hostname\n"
                   "  -p, Specify the password, default is \\0\n"
                   "  -P, Specify the port to connect to, default is 512\n"
                   "  -4, Specify address family AF_INET(default)\n"
-                  "  -6, Specify address family AF_INET6\n");
+                  "  -6, Specify address family AF_INET6\n"
+                  "  -r, Specify address family AF_RPMSG\n");
   exit(EXIT_FAILURE);
 }
 
@@ -123,7 +124,7 @@ int main(int argc, FAR char **argv)
   arg.port = REXEC_SERVER_PORT;
   arg.af = AF_INET;
 
-  while ((option = getopt(argc, argv, "u:H:p:P:46")) != ERROR)
+  while ((option = getopt(argc, argv, "u:H:p:P:46r")) != ERROR)
     {
       switch (option)
         {
@@ -145,6 +146,9 @@ int main(int argc, FAR char **argv)
           case '6':
             arg.af = AF_INET6;
             break;
+          case 'r':
+            arg.af = AF_RPMSG;
+            break;
           default:
             usage(argv[0]);
         }
diff --git a/netutils/rexecd/rexecd.c b/netutils/rexecd/rexecd.c
index bcdad50..d48876e 100644
--- a/netutils/rexecd/rexecd.c
+++ b/netutils/rexecd/rexecd.c
@@ -25,6 +25,7 @@
 #include <errno.h>
 #include <netdb.h>
 #include <pthread.h>
+#include <netpacket/rpmsg.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
@@ -128,10 +129,11 @@ errout:
 
 static void usage(FAR const char *progname)
 {
-  fprintf(stderr, "Usage: %s [-4|-6]\n", progname);
+  fprintf(stderr, "Usage: %s [-4|-6|-r]\n", progname);
   fprintf(stderr, "Remote Execution Deamon:\n"
                   " -4, Specify address family to AF_INET(default)\n"
-                  " -6, Specify address family to AF_INET6\n");
+                  " -6, Specify address family to AF_INET6\n"
+                  " -r, Specify address family to AF_RPMSG\n");
   exit(EXIT_FAILURE);
 }
 
@@ -147,7 +149,7 @@ int main(int argc, FAR char **argv)
   int ret;
 
   family = AF_INET;
-  while ((option = getopt(argc, argv, "46")) != ERROR)
+  while ((option = getopt(argc, argv, "46r")) != ERROR)
     {
       switch (option)
         {
@@ -157,6 +159,9 @@ int main(int argc, FAR char **argv)
           case '6':
             family = AF_INET6;
             break;
+          case 'r':
+            family = AF_RPMSG;
+            break;
           default:
             usage(argv[0]);
         }
@@ -168,6 +173,7 @@ int main(int argc, FAR char **argv)
       return serv;
     }
 
+  memset(&addr, 0, sizeof(addr));
   switch (family)
     {
       case AF_INET:
@@ -179,6 +185,12 @@ int main(int argc, FAR char **argv)
         ((FAR struct sockaddr_in6 *)&addr)->sin6_family = AF_INET6;
         ((FAR struct sockaddr_in6 *)&addr)->sin6_port = REXECD_PORT;
         ret = sizeof(struct sockaddr_in6);
+        break;
+      case AF_RPMSG:
+        ((FAR struct sockaddr_rpmsg *)&addr)->rp_family = AF_RPMSG;
+        snprintf(((FAR struct sockaddr_rpmsg *)&addr)->rp_name,
+                 RPMSG_SOCKET_NAME_SIZE, "%d", REXECD_PORT);
+        ret = sizeof(struct sockaddr_rpmsg);
     }
 
   ret = bind(serv, (FAR struct sockaddr *)&addr, ret);