From 86df036ff21d243244c5c53dd288aad8527a989c Mon Sep 17 00:00:00 2001 From: Jussi Kivilinna Date: Mon, 31 Jul 2017 07:38:24 -0600 Subject: [PATCH] net/usrsock: fix USRSOCK to work with recent changes to networking layer --- include/nuttx/net/usrsock.h | 8 ++++---- net/socket/inet_recvfrom.c | 8 ++++++++ net/socket/inet_sockif.c | 35 +++++++++++++++++++---------------- net/usrsock/usrsock.h | 7 ++++--- net/usrsock/usrsock_event.c | 2 +- net/usrsock/usrsock_poll.c | 4 ++-- 6 files changed, 38 insertions(+), 26 deletions(-) diff --git a/include/nuttx/net/usrsock.h b/include/nuttx/net/usrsock.h index 3ca990d44e..0e20d3c5a2 100644 --- a/include/nuttx/net/usrsock.h +++ b/include/nuttx/net/usrsock.h @@ -54,10 +54,10 @@ /* Event message flags */ -#define USRSOCK_EVENT_ABORT (1 << 0) -#define USRSOCK_EVENT_SENDTO_READY (1 << 1) -#define USRSOCK_EVENT_RECVFROM_AVAIL (1 << 2) -#define USRSOCK_EVENT_REMOTE_CLOSED (1 << 3) +#define USRSOCK_EVENT_ABORT (1 << 1) +#define USRSOCK_EVENT_SENDTO_READY (1 << 2) +#define USRSOCK_EVENT_RECVFROM_AVAIL (1 << 3) +#define USRSOCK_EVENT_REMOTE_CLOSED (1 << 4) /* Response message flags */ diff --git a/net/socket/inet_recvfrom.c b/net/socket/inet_recvfrom.c index d908e12cd4..11cc05e9a7 100644 --- a/net/socket/inet_recvfrom.c +++ b/net/socket/inet_recvfrom.c @@ -1611,6 +1611,14 @@ ssize_t inet_recvfrom(FAR struct socket *psock, FAR void *buf, size_t len, #endif default: +#ifdef CONFIG_NET_USRSOCK + if (psock->s_type == SOCK_USRSOCK_TYPE) + { + minlen = 0; + break; + } +#endif + DEBUGPANIC(); return -EINVAL; } diff --git a/net/socket/inet_sockif.c b/net/socket/inet_sockif.c index b61effa816..1e7204fa45 100644 --- a/net/socket/inet_sockif.c +++ b/net/socket/inet_sockif.c @@ -208,6 +208,8 @@ static int inet_udp_alloc(FAR struct socket *psock) static int usrsock_socket_setup(int domain, int type, int protocol, FAR struct socket *psock) { + int ret; + switch (domain) { default: @@ -219,13 +221,13 @@ static int usrsock_socket_setup(int domain, int type, int protocol, #ifndef CONFIG_NET_USRSOCK_UDP if (type == SOCK_DGRAM) { - return OK; + return -ENETDOWN; } #endif #ifndef CONFIG_NET_USRSOCK_TCP if (type == SOCK_STREAM) { - return OK; + return -ENETDOWN; } #endif psock->s_type = PF_UNSPEC; @@ -240,7 +242,13 @@ static int usrsock_socket_setup(int domain, int type, int protocol, * to open socket with kernel networking stack in this case. */ - return usrsock_socket(domain, type, protocol, psock); + ret = usrsock_socket(domain, type, protocol, psock); + if (ret == -ENETDOWN) + { + nwarn("WARNING: usrsock daemon is not running\n"); + } + + return ret; } } } @@ -275,20 +283,15 @@ static int inet_setup(FAR struct socket *psock, int protocol) /* Handle special setup for user INET sockets */ ret = usrsock_socket_setup(psock->s_domain, psock->s_type, protocol, psock); - if (ret < 0) + if (ret == -ENETDOWN) { - if (ret == -ENETDOWN) - { - /* -ENETDOWN means that usrsock daemon is not running. Attempt to - * open socket with kernel networking stack. - */ - - nwarn("WARNING: usrsock daemon is not running\n"); - } - else - { - return ret; - } + /* -ENETDOWN means that usrsock daemon is not running. Attempt to + * open socket with kernel networking stack. + */ + } + else + { + return ret; } #endif /* CONFIG_NET_USRSOCK */ diff --git a/net/usrsock/usrsock.h b/net/usrsock/usrsock.h index 55d92187e2..e9a59a295e 100644 --- a/net/usrsock/usrsock.h +++ b/net/usrsock/usrsock.h @@ -66,9 +66,10 @@ /* Internal event flags */ -#define USRSOCK_EVENT_REQ_COMPLETE (1 << 14) -#define USRSOCK_EVENT_CONNECT_RESP (1 << 15) -#define USRSOCK_EVENT_INTERNAL_MASK 0xf000U +#define USRSOCK_EVENT_CONNECT_READY (1 << 0) +#define USRSOCK_EVENT_REQ_COMPLETE (1 << 15) +#define USRSOCK_EVENT_INTERNAL_MASK (USRSOCK_EVENT_CONNECT_READY | \ + USRSOCK_EVENT_REQ_COMPLETE) /**************************************************************************** * Public Type Definitions diff --git a/net/usrsock/usrsock_event.c b/net/usrsock/usrsock_event.c index 87ca8598c2..ec1df67f9d 100644 --- a/net/usrsock/usrsock_event.c +++ b/net/usrsock/usrsock_event.c @@ -86,7 +86,7 @@ int usrsock_event(FAR struct usrsock_conn_s *conn, uint16_t events) if (conn->state == USRSOCK_CONN_STATE_CONNECTING) { conn->state = USRSOCK_CONN_STATE_READY; - events |= USRSOCK_EVENT_CONNECT_RESP; + events |= USRSOCK_EVENT_CONNECT_READY; if (conn->resp.result == 0) { diff --git a/net/usrsock/usrsock_poll.c b/net/usrsock/usrsock_poll.c index 4af267766b..0e4fb82cf1 100644 --- a/net/usrsock/usrsock_poll.c +++ b/net/usrsock/usrsock_poll.c @@ -94,7 +94,7 @@ static uint16_t poll_event(FAR struct net_driver_s *dev, FAR void *pvconn, eventset |= (POLLERR | POLLHUP); } - else if ((flags & USRSOCK_EVENT_CONNECT_RESP) && !conn->connected) + else if ((flags & USRSOCK_EVENT_CONNECT_READY) && !conn->connected) { ninfo("socket connect failed.\n"); @@ -213,7 +213,7 @@ static int usrsock_pollsetup(FAR struct socket *psock, FAR struct pollfd *fds) * callback processing. */ - cb->flags = USRSOCK_EVENT_ABORT | USRSOCK_EVENT_CONNECT_RESP | + cb->flags = USRSOCK_EVENT_ABORT | USRSOCK_EVENT_CONNECT_READY | USRSOCK_EVENT_SENDTO_READY | USRSOCK_EVENT_RECVFROM_AVAIL | USRSOCK_EVENT_REMOTE_CLOSED; cb->priv = (FAR void *)info;