rexecd/rexec: support AF_RPMSG to communicate

Signed-off-by: Jiuzhu Dong <dongjiuzhu1@xiaomi.com>
This commit is contained in:
Jiuzhu Dong 2021-09-09 11:14:35 +08:00 committed by Xiang Xiao
parent 00e7be92dc
commit 2add33e6a3
2 changed files with 22 additions and 6 deletions

View File

@ -66,14 +66,15 @@ static int do_rexec(FAR struct rexec_arg_s *arg);
static void usage(FAR const char *progname) static void usage(FAR const char *progname)
{ {
fprintf(stderr, "Usage: %s [-u user] [-H host] [-p password] " 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" fprintf(stderr, "Remote Execution Client:\n"
" -u, Specify the user, default is \\0\n" " -u, Specify the user, default is \\0\n"
" -H, Specify the hostname\n" " -H, Specify the hostname\n"
" -p, Specify the password, default is \\0\n" " -p, Specify the password, default is \\0\n"
" -P, Specify the port to connect to, default is 512\n" " -P, Specify the port to connect to, default is 512\n"
" -4, Specify address family AF_INET(default)\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); exit(EXIT_FAILURE);
} }
@ -123,7 +124,7 @@ int main(int argc, FAR char **argv)
arg.port = REXEC_SERVER_PORT; arg.port = REXEC_SERVER_PORT;
arg.af = AF_INET; 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) switch (option)
{ {
@ -145,6 +146,9 @@ int main(int argc, FAR char **argv)
case '6': case '6':
arg.af = AF_INET6; arg.af = AF_INET6;
break; break;
case 'r':
arg.af = AF_RPMSG;
break;
default: default:
usage(argv[0]); usage(argv[0]);
} }

View File

@ -25,6 +25,7 @@
#include <errno.h> #include <errno.h>
#include <netdb.h> #include <netdb.h>
#include <pthread.h> #include <pthread.h>
#include <netpacket/rpmsg.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <unistd.h> #include <unistd.h>
@ -128,10 +129,11 @@ errout:
static void usage(FAR const char *progname) 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" fprintf(stderr, "Remote Execution Deamon:\n"
" -4, Specify address family to AF_INET(default)\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); exit(EXIT_FAILURE);
} }
@ -147,7 +149,7 @@ int main(int argc, FAR char **argv)
int ret; int ret;
family = AF_INET; family = AF_INET;
while ((option = getopt(argc, argv, "46")) != ERROR) while ((option = getopt(argc, argv, "46r")) != ERROR)
{ {
switch (option) switch (option)
{ {
@ -157,6 +159,9 @@ int main(int argc, FAR char **argv)
case '6': case '6':
family = AF_INET6; family = AF_INET6;
break; break;
case 'r':
family = AF_RPMSG;
break;
default: default:
usage(argv[0]); usage(argv[0]);
} }
@ -168,6 +173,7 @@ int main(int argc, FAR char **argv)
return serv; return serv;
} }
memset(&addr, 0, sizeof(addr));
switch (family) switch (family)
{ {
case AF_INET: 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_family = AF_INET6;
((FAR struct sockaddr_in6 *)&addr)->sin6_port = REXECD_PORT; ((FAR struct sockaddr_in6 *)&addr)->sin6_port = REXECD_PORT;
ret = sizeof(struct sockaddr_in6); 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); ret = bind(serv, (FAR struct sockaddr *)&addr, ret);