forked from nuttx/nuttx-update
move usrsock to kernel space
Signed-off-by: 梁超众 <liangchaozhong@xiaomi.com>
This commit is contained in:
parent
0a885da434
commit
aca1a065a8
8 changed files with 1242 additions and 14 deletions
|
@ -45,7 +45,6 @@ CONFIG_NETDEV_STATISTICS=y
|
||||||
CONFIG_NETINIT_DHCPC=y
|
CONFIG_NETINIT_DHCPC=y
|
||||||
CONFIG_NETINIT_THREAD=y
|
CONFIG_NETINIT_THREAD=y
|
||||||
CONFIG_NETUTILS_DHCPC=y
|
CONFIG_NETUTILS_DHCPC=y
|
||||||
CONFIG_NETUTILS_USRSOCK_RPMSG=y
|
|
||||||
CONFIG_NET_ARP_SEND=y
|
CONFIG_NET_ARP_SEND=y
|
||||||
CONFIG_NET_BROADCAST=y
|
CONFIG_NET_BROADCAST=y
|
||||||
CONFIG_NET_ICMP=y
|
CONFIG_NET_ICMP=y
|
||||||
|
@ -59,6 +58,7 @@ CONFIG_NET_TCPBACKLOG=y
|
||||||
CONFIG_NET_TCP_WRITE_BUFFERS=y
|
CONFIG_NET_TCP_WRITE_BUFFERS=y
|
||||||
CONFIG_NET_UDP=y
|
CONFIG_NET_UDP=y
|
||||||
CONFIG_NET_UDP_WRITE_BUFFERS=y
|
CONFIG_NET_UDP_WRITE_BUFFERS=y
|
||||||
|
CONFIG_NET_USRSOCK_RPMSG_SERVER=y
|
||||||
CONFIG_NSH_ARCHINIT=y
|
CONFIG_NSH_ARCHINIT=y
|
||||||
CONFIG_NSH_BUILTIN_APPS=y
|
CONFIG_NSH_BUILTIN_APPS=y
|
||||||
CONFIG_NSH_PROMPT_STRING="server> "
|
CONFIG_NSH_PROMPT_STRING="server> "
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include <nuttx/serial/pty.h>
|
#include <nuttx/serial/pty.h>
|
||||||
#include <nuttx/syslog/syslog.h>
|
#include <nuttx/syslog/syslog.h>
|
||||||
#include <nuttx/syslog/syslog_console.h>
|
#include <nuttx/syslog/syslog_console.h>
|
||||||
|
#include <nuttx/usrsock/usrsock_rpmsg.h>
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
|
@ -177,4 +178,10 @@ void drivers_initialize(void)
|
||||||
#ifdef CONFIG_RPMSGMTD_SERVER
|
#ifdef CONFIG_RPMSGMTD_SERVER
|
||||||
rpmsgmtd_server_init();
|
rpmsgmtd_server_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_USRSOCK_RPMSG_SERVER
|
||||||
|
/* Initialize the user socket rpmsg server */
|
||||||
|
|
||||||
|
usrsock_rpmsg_server_initialize();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,3 +35,27 @@ config NET_USRSOCK_RPMSG_CPUNAME
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
endif # NET_USRSOCK
|
endif # NET_USRSOCK
|
||||||
|
|
||||||
|
config NET_USRSOCK_RPMSG_SERVER
|
||||||
|
bool "RPMSG usrsock"
|
||||||
|
default n
|
||||||
|
depends on NET && RPTUN
|
||||||
|
---help---
|
||||||
|
Enable usrsock through rpmsg channel.
|
||||||
|
|
||||||
|
if NET_USRSOCK_RPMSG_SERVER
|
||||||
|
|
||||||
|
config NET_USRSOCK_RPMSG_SERVER_NSOCKS
|
||||||
|
int "The maximum number of socket descriptors for usrsock monitoring"
|
||||||
|
default 64
|
||||||
|
---help---
|
||||||
|
The maximum number of socket description for usrsosck monitoring.
|
||||||
|
|
||||||
|
config NET_USRSOCK_RPMSG_SERVER_NIOVEC
|
||||||
|
int "The maximum number of I/O vector for reassemble buffer"
|
||||||
|
default 8
|
||||||
|
---help---
|
||||||
|
The maximum number of I/O vector for reassemble buffer.
|
||||||
|
|
||||||
|
endif # NET_USRSOCK_RPMSG_SERVER
|
||||||
|
|
||||||
|
|
|
@ -36,3 +36,13 @@ DEPPATH += --dep-path usrsock
|
||||||
VPATH += :usrsock
|
VPATH += :usrsock
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_NET_USRSOCK_RPMSG_SERVER),y)
|
||||||
|
|
||||||
|
CSRCS += usrsock_rpmsg_server.c
|
||||||
|
|
||||||
|
# Include User Socket Driver build support
|
||||||
|
|
||||||
|
DEPPATH += --dep-path usrsock
|
||||||
|
VPATH += :usrsock
|
||||||
|
endif
|
||||||
|
|
|
@ -25,8 +25,7 @@
|
||||||
#include <nuttx/net/dns.h>
|
#include <nuttx/net/dns.h>
|
||||||
#include <nuttx/rptun/openamp.h>
|
#include <nuttx/rptun/openamp.h>
|
||||||
#include <nuttx/semaphore.h>
|
#include <nuttx/semaphore.h>
|
||||||
|
#include <nuttx/usrsock/usrsock_rpmsg.h>
|
||||||
#include "usrsock_rpmsg.h"
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Private Types
|
* Private Types
|
||||||
|
@ -85,6 +84,7 @@ static int usrsock_rpmsg_send_dns_request(FAR void *arg,
|
||||||
FAR struct rpmsg_endpoint *ept = &priv->ept;
|
FAR struct rpmsg_endpoint *ept = &priv->ept;
|
||||||
FAR struct usrsock_rpmsg_dns_request_s *dns;
|
FAR struct usrsock_rpmsg_dns_request_s *dns;
|
||||||
uint32_t len;
|
uint32_t len;
|
||||||
|
int ret;
|
||||||
|
|
||||||
dns = rpmsg_get_tx_payload_buffer(ept, &len, true);
|
dns = rpmsg_get_tx_payload_buffer(ept, &len, true);
|
||||||
if (dns == NULL)
|
if (dns == NULL)
|
||||||
|
@ -98,7 +98,11 @@ static int usrsock_rpmsg_send_dns_request(FAR void *arg,
|
||||||
dns->addrlen = addrlen;
|
dns->addrlen = addrlen;
|
||||||
memcpy(dns + 1, addr, addrlen);
|
memcpy(dns + 1, addr, addrlen);
|
||||||
|
|
||||||
return rpmsg_send_nocopy(ept, dns, sizeof(*dns) + addrlen);
|
net_lock();
|
||||||
|
ret = rpmsg_send_nocopy(ept, dns, sizeof(*dns) + addrlen);
|
||||||
|
net_unlock();
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -141,10 +145,14 @@ static int usrsock_rpmsg_ept_cb(FAR struct rpmsg_endpoint *ept,
|
||||||
{
|
{
|
||||||
return usrsock_rpmsg_dns_handler(ept, data);
|
return usrsock_rpmsg_dns_handler(ept, data);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (common->msgid == USRSOCK_RPMSG_FRAG_RESPONSE)
|
||||||
{
|
{
|
||||||
return usrsock_response(data, len, NULL);
|
data = (FAR char *)data + sizeof(struct usrsock_message_frag_ack_s);
|
||||||
|
len -= sizeof(struct usrsock_message_frag_ack_s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return usrsock_response(data, len, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void usrsock_rpmsg_device_created(FAR struct rpmsg_device *rdev,
|
static void usrsock_rpmsg_device_created(FAR struct rpmsg_device *rdev,
|
||||||
|
@ -223,6 +231,7 @@ int usrsock_request(FAR struct iovec *iov, unsigned int iovcnt)
|
||||||
|
|
||||||
if (done)
|
if (done)
|
||||||
{
|
{
|
||||||
|
ret = OK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1135
drivers/usrsock/usrsock_rpmsg_server.c
Normal file
1135
drivers/usrsock/usrsock_rpmsg_server.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* drivers/usrsock/usrsock_rpmsg.h
|
* include/nuttx/usrsock/usrsock_rpmsg.h
|
||||||
*
|
*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
* contributor license agreements. See the NOTICE file distributed with
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
@ -18,8 +18,8 @@
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef __DRIVERS_USRSOCK_USRSOCK_RPMSG_H
|
#ifndef __INCLUDE_NUTTX_USRSOCK_USRSOCK_RPMSG_H
|
||||||
#define __DRIVERS_USRSOCK_USRSOCK_RPMSG_H
|
#define __INCLUDE_NUTTX_USRSOCK_USRSOCK_RPMSG_H
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Included Files
|
* Included Files
|
||||||
|
@ -34,7 +34,9 @@
|
||||||
#define USRSOCK_RPMSG_EPT_NAME "rpmsg-usrsock"
|
#define USRSOCK_RPMSG_EPT_NAME "rpmsg-usrsock"
|
||||||
|
|
||||||
#define USRSOCK_RPMSG_DNS_REQUEST USRSOCK_REQUEST__MAX
|
#define USRSOCK_RPMSG_DNS_REQUEST USRSOCK_REQUEST__MAX
|
||||||
#define USRSOCK_RPMSG_DNS_EVENT 127
|
|
||||||
|
#define USRSOCK_RPMSG_DNS_EVENT 126
|
||||||
|
#define USRSOCK_RPMSG_FRAG_RESPONSE 127
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Types
|
* Public Types
|
||||||
|
@ -58,4 +60,45 @@ begin_packed_struct struct usrsock_rpmsg_dns_event_s
|
||||||
uint16_t addrlen;
|
uint16_t addrlen;
|
||||||
} end_packed_struct;
|
} end_packed_struct;
|
||||||
|
|
||||||
#endif /* __DRIVERS_USRSOCK_USRSOCK_RPMSG_H */
|
/* fragemented ack message */
|
||||||
|
|
||||||
|
begin_packed_struct struct usrsock_message_frag_ack_s
|
||||||
|
{
|
||||||
|
struct usrsock_message_req_ack_s reqack;
|
||||||
|
|
||||||
|
/* head.result => positive buflen, negative error-code. */
|
||||||
|
|
||||||
|
uint32_t datalen; /* fragment's payload length */
|
||||||
|
} end_packed_struct;
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Function Prototypes
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define EXTERN extern "C"
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#else
|
||||||
|
#define EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: usrsock_rpmsg_server_initialize()
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Initialize the User Socket rpmsg server. Called once and only
|
||||||
|
* from the driver layer.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_USRSOCK_RPMSG_SERVER
|
||||||
|
int usrsock_rpmsg_server_initialize(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef EXTERN
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __INCLUDE_NUTTX_USRSOCK_USRSOCK_RPMSG_H */
|
|
@ -625,7 +625,7 @@ ssize_t usrsock_iovec_put(FAR struct iovec *iov, int iovcnt, size_t pos,
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: usrsock_request() - finish usrsock's request
|
* Name: usrsock_do_request() - finish usrsock's request
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int usrsock_do_request(FAR struct usrsock_conn_s *conn,
|
int usrsock_do_request(FAR struct usrsock_conn_s *conn,
|
||||||
|
@ -657,7 +657,7 @@ int usrsock_do_request(FAR struct usrsock_conn_s *conn,
|
||||||
req->ackxid = req_head->xid;
|
req->ackxid = req_head->xid;
|
||||||
|
|
||||||
ret = usrsock_request(iov, iovcnt);
|
ret = usrsock_request(iov, iovcnt);
|
||||||
if (ret == OK)
|
if (ret >= 0)
|
||||||
{
|
{
|
||||||
/* Wait ack for request. */
|
/* Wait ack for request. */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue