Skip to content

Commit d2fc3f2

Browse files
yintaoxiaoxiang781216
yintao
authored andcommitted
net/rpmsg: use hash to handle rp_name
expand the user's rpname size hash when exceed RPMSG_SOCKET_NAME_LEN due to the limitation of eptname Signed-off-by: yintao <[email protected]>
1 parent cb2a6a3 commit d2fc3f2

File tree

2 files changed

+33
-18
lines changed

2 files changed

+33
-18
lines changed

include/netpacket/rpmsg.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
****************************************************************************/
3535

3636
#define RPMSG_SOCKET_CPU_SIZE 16
37-
#define RPMSG_SOCKET_NAME_SIZE 16
37+
#define RPMSG_SOCKET_NAME_SIZE 108
3838

3939
/****************************************************************************
4040
* Public Type Definitions

net/rpmsg/rpmsg_sockif.c

+32-17
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
#include <nuttx/kmalloc.h>
3838
#include <nuttx/circbuf.h>
39+
#include <nuttx/crc32.h>
3940
#include <nuttx/rpmsg/rpmsg.h>
4041
#include <nuttx/mutex.h>
4142
#include <nuttx/semaphore.h>
@@ -53,12 +54,9 @@
5354
#define RPMSG_SOCKET_CMD_SYNC 1
5455
#define RPMSG_SOCKET_CMD_DATA 2
5556
#define RPMSG_SOCKET_CMD_SHUTDOWN 3
56-
#define RPMSG_SOCKET_NAME_PREFIX "sk:"
57-
#define RPMSG_SOCKET_NAME_PREFIX_LEN 3
58-
#define RPMSG_SOCKET_NAME_ID_LEN 13
59-
60-
static_assert(RPMSG_SOCKET_NAME_SIZE + RPMSG_SOCKET_NAME_PREFIX_LEN
61-
<= RPMSG_NAME_SIZE, "socket name size config error");
57+
#define RPMSG_SOCKET_NAME_PREFIX "s:"
58+
#define RPMSG_SOCKET_NAME_PREFIX_LEN 2
59+
#define RPMSG_SOCKET_NAME_LEN 10
6260

6361
/****************************************************************************
6462
* Private Types
@@ -100,7 +98,7 @@ struct rpmsg_socket_conn_s
10098
struct rpmsg_endpoint ept;
10199

102100
struct sockaddr_rpmsg rpaddr;
103-
char nameid[RPMSG_SOCKET_NAME_ID_LEN];
101+
char nameid[RPMSG_SOCKET_NAME_LEN];
104102
uint16_t crefs;
105103
uint32_t how;
106104

@@ -222,7 +220,7 @@ const struct sock_intf_s g_rpmsg_sockif =
222220
* Private Data
223221
****************************************************************************/
224222

225-
static uint64_t g_rpmsg_id;
223+
static uint32_t g_rpmsg_id;
226224

227225
/****************************************************************************
228226
* Private Functions
@@ -496,11 +494,30 @@ static void rpmsg_socket_ept_release(FAR struct rpmsg_endpoint *ept)
496494
}
497495
}
498496

497+
static void rpmsg_socket_format_name(FAR struct rpmsg_socket_conn_s *conn,
498+
FAR char *namebuf)
499+
{
500+
if (strlen(conn->rpaddr.rp_name) > RPMSG_SOCKET_NAME_LEN)
501+
{
502+
uint32_t crc = crc32((const uint8_t *)conn->rpaddr.rp_name,
503+
strlen(conn->rpaddr.rp_name));
504+
snprintf(namebuf, RPMSG_NAME_SIZE, "%s%.2s%08" PRIx32 "%s",
505+
RPMSG_SOCKET_NAME_PREFIX, conn->rpaddr.rp_name,
506+
crc, conn->nameid);
507+
}
508+
else
509+
{
510+
snprintf(namebuf, RPMSG_NAME_SIZE, "%s%.*s%s",
511+
RPMSG_SOCKET_NAME_PREFIX, RPMSG_SOCKET_NAME_LEN,
512+
conn->rpaddr.rp_name, conn->nameid);
513+
}
514+
}
515+
499516
static void rpmsg_socket_device_created(FAR struct rpmsg_device *rdev,
500517
FAR void *priv)
501518
{
502519
FAR struct rpmsg_socket_conn_s *conn = priv;
503-
char buf[RPMSG_NAME_SIZE];
520+
char namebuf[RPMSG_NAME_SIZE];
504521

505522
if (conn->ept.rdev)
506523
{
@@ -512,10 +529,9 @@ static void rpmsg_socket_device_created(FAR struct rpmsg_device *rdev,
512529
conn->ept.priv = conn;
513530
conn->ept.ns_bound_cb = rpmsg_socket_ns_bound;
514531
conn->ept.release_cb = rpmsg_socket_ept_release;
515-
snprintf(buf, sizeof(buf), "%s%s%s", RPMSG_SOCKET_NAME_PREFIX,
516-
conn->rpaddr.rp_name, conn->nameid);
532+
rpmsg_socket_format_name(conn, namebuf);
517533

518-
rpmsg_create_ept(&conn->ept, rdev, buf,
534+
rpmsg_create_ept(&conn->ept, rdev, namebuf,
519535
RPMSG_ADDR_ANY, RPMSG_ADDR_ANY,
520536
rpmsg_socket_ept_cb, rpmsg_socket_ns_unbind);
521537
}
@@ -526,11 +542,10 @@ static bool rpmsg_socket_ns_match(FAR struct rpmsg_device *rdev,
526542
uint32_t dest)
527543
{
528544
FAR struct rpmsg_socket_conn_s *server = priv;
529-
char buf[RPMSG_NAME_SIZE];
545+
char namebuf[RPMSG_NAME_SIZE];
530546

531-
snprintf(buf, sizeof(buf), "%s%s", RPMSG_SOCKET_NAME_PREFIX,
532-
server->rpaddr.rp_name);
533-
if (strncmp(name, buf, strlen(buf)))
547+
rpmsg_socket_format_name(server, namebuf);
548+
if (strncmp(name, namebuf, strlen(namebuf)))
534549
{
535550
return false;
536551
}
@@ -640,7 +655,7 @@ static int rpmsg_socket_setaddr(FAR struct rpmsg_socket_conn_s *conn,
640655

641656
if (suffix)
642657
{
643-
snprintf(conn->nameid, sizeof(conn->nameid), ":%" PRIx64,
658+
snprintf(conn->nameid, sizeof(conn->nameid), ":%" PRIx32,
644659
g_rpmsg_id++);
645660
}
646661
else

0 commit comments

Comments
 (0)