提交 6d702e57 编写于 作者: Lawlieta's avatar Lawlieta

[net][sal] Remove DFS dependencies in the SAL

上级 2d894b41
...@@ -5,7 +5,6 @@ menu "Socket abstraction layer" ...@@ -5,7 +5,6 @@ menu "Socket abstraction layer"
config RT_USING_SAL config RT_USING_SAL
bool "Enable socket abstraction layer" bool "Enable socket abstraction layer"
default n default n
select RT_USING_DFS
if RT_USING_SAL if RT_USING_SAL
...@@ -28,14 +27,24 @@ config RT_USING_SAL ...@@ -28,14 +27,24 @@ config RT_USING_SAL
config SAL_USING_POSIX config SAL_USING_POSIX
bool "Enable BSD socket operated by file system API" bool "Enable BSD socket operated by file system API"
default y if RT_USING_POSIX
default n
select RT_USING_DFS
select RT_USING_LIBC select RT_USING_LIBC
select RT_USING_POSIX select RT_USING_POSIX
default n
help help
Let BSD socket operated by file system API, such as read/write and involveed in select/poll POSIX APIs. Let BSD socket operated by file system API, such as read/write and involveed in select/poll POSIX APIs.
if !SAL_USING_POSIX
config SAL_SOCKETS_NUM
int "the maximum number of sockets"
default 16
endif
config SAL_PROTO_FAMILIES_NUM config SAL_PROTO_FAMILIES_NUM
int "the number of protocol family" int "the maximum number of protocol families"
default 4 default 4
endif endif
......
...@@ -67,7 +67,7 @@ path = [GetCurrentDir() + '/src', ...@@ -67,7 +67,7 @@ path = [GetCurrentDir() + '/src',
GetCurrentDir() + '/src/arch/include', GetCurrentDir() + '/src/arch/include',
GetCurrentDir() + '/src/include/netif'] GetCurrentDir() + '/src/include/netif']
if not GetDepend('RT_USING_POSIX') or not GetDepend('SAL_USING_POSIX'): if not GetDepend('RT_USING_SAL'):
path += [GetCurrentDir() + '/src/include/posix'] path += [GetCurrentDir() + '/src/include/posix']
if GetDepend(['RT_LWIP_SNMP']): if GetDepend(['RT_LWIP_SNMP']):
......
...@@ -5,10 +5,9 @@ from building import * ...@@ -5,10 +5,9 @@ from building import *
cwd = GetCurrentDir() cwd = GetCurrentDir()
src = Glob('src/*.c') src = Glob('src/*.c')
src += Glob('socket/*.c') src += Glob('socket/net_netdb.c')
CPPPATH = [cwd + '/include'] CPPPATH = [cwd + '/include']
CPPPATH += [cwd + '/include/dfs_net']
CPPPATH += [cwd + '/include/socket'] CPPPATH += [cwd + '/include/socket']
if GetDepend('SAL_USING_LWIP'): if GetDepend('SAL_USING_LWIP'):
...@@ -21,6 +20,8 @@ if GetDepend('SAL_USING_LWIP') or GetDepend('SAL_USING_AT'): ...@@ -21,6 +20,8 @@ if GetDepend('SAL_USING_LWIP') or GetDepend('SAL_USING_AT'):
CPPPATH += [cwd + '/impl'] CPPPATH += [cwd + '/impl']
if GetDepend('SAL_USING_POSIX'): if GetDepend('SAL_USING_POSIX'):
CPPPATH += [cwd + '/include/dfs_net']
src += Glob('socket/net_sockets.c')
src += Glob('dfs_net/*.c') src += Glob('dfs_net/*.c')
if not GetDepend('HAVE_SYS_SELECT_H'): if not GetDepend('HAVE_SYS_SELECT_H'):
......
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,8 @@
* 2018-06-06 ChenYong First version * 2018-06-06 ChenYong First version
*/ */
#include <rtthread.h>
#include <netdb.h> #include <netdb.h>
#include <sal.h> #include <sal.h>
...@@ -91,8 +93,6 @@ static const struct proto_ops at_inet_stream_ops = ...@@ -91,8 +93,6 @@ static const struct proto_ops at_inet_stream_ops =
#ifdef SAL_USING_POSIX #ifdef SAL_USING_POSIX
at_poll, at_poll,
#else
NULL,
#endif /* SAL_USING_POSIX */ #endif /* SAL_USING_POSIX */
}; };
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
#endif #endif
#endif #endif
#ifdef SAL_USING_POSIX
/* /*
* Re-define lwip socket * Re-define lwip socket
* *
...@@ -73,9 +74,7 @@ struct lwip_sock { ...@@ -73,9 +74,7 @@ struct lwip_sock {
/** counter of how many threads are waiting for this socket using select */ /** counter of how many threads are waiting for this socket using select */
SELWAIT_T select_waiting; SELWAIT_T select_waiting;
#ifdef SAL_USING_POSIX
rt_wqueue_t wait_head; rt_wqueue_t wait_head;
#endif
}; };
extern struct lwip_sock *lwip_tryget_socket(int s); extern struct lwip_sock *lwip_tryget_socket(int s);
...@@ -160,14 +159,14 @@ static void event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len ...@@ -160,14 +159,14 @@ static void event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len
if (event) if (event)
{ {
#ifdef SAL_USING_POSIX
rt_wqueue_wakeup(&sock->wait_head, (void*) event); rt_wqueue_wakeup(&sock->wait_head, (void*) event);
#endif
} }
} }
#endif /* SAL_USING_POSIX */
static int inet_socket(int domain, int type, int protocol) static int inet_socket(int domain, int type, int protocol)
{ {
#ifdef SAL_USING_POSIX
int socket; int socket;
socket = lwip_socket(domain, type, protocol); socket = lwip_socket(domain, type, protocol);
...@@ -178,17 +177,18 @@ static int inet_socket(int domain, int type, int protocol) ...@@ -178,17 +177,18 @@ static int inet_socket(int domain, int type, int protocol)
lwsock = lwip_tryget_socket(socket); lwsock = lwip_tryget_socket(socket);
lwsock->conn->callback = event_callback; lwsock->conn->callback = event_callback;
#ifdef SAL_USING_POSIX
rt_wqueue_init(&lwsock->wait_head); rt_wqueue_init(&lwsock->wait_head);
#endif
} }
return socket; return socket;
#else
return lwip_socket(domain, type, protocol);
#endif /* SAL_USING_POSIX */
} }
static int inet_accept(int socket, struct sockaddr *addr, socklen_t *addrlen) static int inet_accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
{ {
#ifdef SAL_USING_POSIX
int new_socket; int new_socket;
new_socket = lwip_accept(socket, addr, addrlen); new_socket = lwip_accept(socket, addr, addrlen);
...@@ -198,12 +198,13 @@ static int inet_accept(int socket, struct sockaddr *addr, socklen_t *addrlen) ...@@ -198,12 +198,13 @@ static int inet_accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
lwsock = lwip_tryget_socket(new_socket); lwsock = lwip_tryget_socket(new_socket);
#ifdef SAL_USING_POSIX
rt_wqueue_init(&lwsock->wait_head); rt_wqueue_init(&lwsock->wait_head);
#endif
} }
return new_socket; return new_socket;
#else
return lwip_accept(socket, addr, addrlen);
#endif /* SAL_USING_POSIX */
} }
static int inet_getsockname(int socket, struct sockaddr *name, socklen_t *namelen) static int inet_getsockname(int socket, struct sockaddr *name, socklen_t *namelen)
...@@ -216,6 +217,7 @@ static int inet_getsockname(int socket, struct sockaddr *name, socklen_t *namele ...@@ -216,6 +217,7 @@ static int inet_getsockname(int socket, struct sockaddr *name, socklen_t *namele
return lwip_getsockname(socket, name, namelen); return lwip_getsockname(socket, name, namelen);
} }
#ifdef SAL_USING_POSIX
static int inet_poll(struct dfs_fd *file, struct rt_pollreq *req) static int inet_poll(struct dfs_fd *file, struct rt_pollreq *req)
{ {
int mask = 0; int mask = 0;
...@@ -253,6 +255,7 @@ static int inet_poll(struct dfs_fd *file, struct rt_pollreq *req) ...@@ -253,6 +255,7 @@ static int inet_poll(struct dfs_fd *file, struct rt_pollreq *req)
return mask; return mask;
} }
#endif
static const struct proto_ops lwip_inet_stream_ops = { static const struct proto_ops lwip_inet_stream_ops = {
inet_socket, inet_socket,
...@@ -270,7 +273,9 @@ static const struct proto_ops lwip_inet_stream_ops = { ...@@ -270,7 +273,9 @@ static const struct proto_ops lwip_inet_stream_ops = {
lwip_getpeername, lwip_getpeername,
inet_getsockname, inet_getsockname,
lwip_ioctl, lwip_ioctl,
#ifdef SAL_USING_POSIX
inet_poll, inet_poll,
#endif
}; };
static int inet_create(struct sal_socket *socket, int type, int protocol) static int inet_create(struct sal_socket *socket, int type, int protocol)
......
...@@ -25,9 +25,12 @@ ...@@ -25,9 +25,12 @@
#ifndef SAL_H__ #ifndef SAL_H__
#define SAL_H__ #define SAL_H__
#include <dfs_file.h>
#include <rtdevice.h> #include <rtdevice.h>
#ifdef SAL_USING_POSIX
#include <dfs_file.h>
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
...@@ -40,7 +43,9 @@ typedef uint32_t socklen_t; ...@@ -40,7 +43,9 @@ typedef uint32_t socklen_t;
#define SAL_SOCKET_MAGIC 0x5A10 #define SAL_SOCKET_MAGIC 0x5A10
/* The maximum number of sockets structure */ /* The maximum number of sockets structure */
#ifndef SAL_SOCKETS_NUM
#define SAL_SOCKETS_NUM DFS_FD_MAX #define SAL_SOCKETS_NUM DFS_FD_MAX
#endif
/* The maximum number of protocol families */ /* The maximum number of protocol families */
#ifndef SAL_PROTO_FAMILIES_NUM #ifndef SAL_PROTO_FAMILIES_NUM
...@@ -68,7 +73,9 @@ struct proto_ops ...@@ -68,7 +73,9 @@ struct proto_ops
int (*getpeername)(int s, struct sockaddr *name, socklen_t *namelen); int (*getpeername)(int s, struct sockaddr *name, socklen_t *namelen);
int (*getsockname)(int s, struct sockaddr *name, socklen_t *namelen); int (*getsockname)(int s, struct sockaddr *name, socklen_t *namelen);
int (*ioctlsocket)(int s, long cmd, void *arg); int (*ioctlsocket)(int s, long cmd, void *arg);
#ifdef SAL_USING_POSIX
int (*poll) (struct dfs_fd *file, struct rt_pollreq *req); int (*poll) (struct dfs_fd *file, struct rt_pollreq *req);
#endif
}; };
struct sal_socket struct sal_socket
......
...@@ -26,19 +26,21 @@ ...@@ -26,19 +26,21 @@
#ifndef SYS_SOCKET_H_ #ifndef SYS_SOCKET_H_
#define SYS_SOCKET_H_ #define SYS_SOCKET_H_
#include <rtthread.h>
#include <sal_socket.h> #include <sal_socket.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#ifdef SAL_USING_POSIX
int accept(int s, struct sockaddr *addr, socklen_t *addrlen); int accept(int s, struct sockaddr *addr, socklen_t *addrlen);
int bind(int s, const struct sockaddr *name, socklen_t namelen); int bind(int s, const struct sockaddr *name, socklen_t namelen);
int shutdown(int s, int how); int shutdown(int s, int how);
int getpeername (int s, struct sockaddr *name, socklen_t *namelen); int getpeername(int s, struct sockaddr *name, socklen_t *namelen);
int getsockname (int s, struct sockaddr *name, socklen_t *namelen); int getsockname(int s, struct sockaddr *name, socklen_t *namelen);
int getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen); int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen); int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
int connect(int s, const struct sockaddr *name, socklen_t namelen); int connect(int s, const struct sockaddr *name, socklen_t namelen);
int listen(int s, int backlog); int listen(int s, int backlog);
int recv(int s, void *mem, size_t len, int flags); int recv(int s, void *mem, size_t len, int flags);
...@@ -50,6 +52,24 @@ int sendto(int s, const void *dataptr, size_t size, int flags, ...@@ -50,6 +52,24 @@ int sendto(int s, const void *dataptr, size_t size, int flags,
int socket(int domain, int type, int protocol); int socket(int domain, int type, int protocol);
int closesocket(int s); int closesocket(int s);
int ioctlsocket(int s, long cmd, void *arg); int ioctlsocket(int s, long cmd, void *arg);
#else
#define accept(s, addr, addrlen) sal_accept(s, addr, addrlen)
#define bind(s, name, namelen) sal_bind(s, name, namelen)
#define shutdown(s, how) sal_shutdown(s, how)
#define getpeername(s, name, namelen) sal_getpeername(s, name, namelen)
#define getsockname(s, name, namelen) sal_getsockname(s, name, namelen)
#define getsockopt(s, level, optname, optval, optlen) sal_getsockopt(s, level, optname, optval, optlen)
#define setsockopt(s, level, optname, optval, optlen) sal_setsockopt(s, level, optname, optval, optlen)
#define connect(s, name, namelen) sal_connect(s, name, namelen)
#define listen(s, backlog) sal_listen(s, backlog)
#define recv(s, mem, len, flags) sal_recvfrom(s, mem, len, flags, NULL, NULL)
#define recvfrom(s, mem, len, flags, from, fromlen) sal_recvfrom(s, mem, len, flags, from, fromlen)
#define send(s, dataptr, size, flags) sal_sendto(s, dataptr, size, flags, NULL, NULL)
#define sendto(s, dataptr, size, flags, to, tolen) sal_sendto(s, dataptr, size, flags, to, tolen)
#define socket(domain, type, protocol) sal_socket(domain, type, protocol)
#define closesocket(s) sal_closesocket(s)
#define ioctlsocket(s, cmd, arg) sal_ioctlsocket(s, cmd, arg)
#endif /* SAL_USING_POSIX */
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -705,6 +705,7 @@ int sal_ioctlsocket(int socket, long cmd, void *arg) ...@@ -705,6 +705,7 @@ int sal_ioctlsocket(int socket, long cmd, void *arg)
return sock->ops->ioctlsocket((int) sock->user_data, cmd, arg); return sock->ops->ioctlsocket((int) sock->user_data, cmd, arg);
} }
#ifdef SAL_USING_POSIX
int sal_poll(struct dfs_fd *file, struct rt_pollreq *req) int sal_poll(struct dfs_fd *file, struct rt_pollreq *req)
{ {
struct sal_socket *sock; struct sal_socket *sock;
...@@ -723,6 +724,7 @@ int sal_poll(struct dfs_fd *file, struct rt_pollreq *req) ...@@ -723,6 +724,7 @@ int sal_poll(struct dfs_fd *file, struct rt_pollreq *req)
return sock->ops->poll(file, req); return sock->ops->poll(file, req);
} }
#endif
struct hostent *sal_gethostbyname(const char *name) struct hostent *sal_gethostbyname(const char *name)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册