summaryrefslogtreecommitdiff
path: root/components/net/sal/include
diff options
context:
space:
mode:
authorMan, Jianting (Meco) <[email protected]>2022-02-19 11:07:45 -0500
committerGitHub <[email protected]>2022-02-20 00:07:45 +0800
commit6895da53071358cdd4da8f15f32c977dfedfbe89 (patch)
treec65401f29a630222c0928487415b1d0346b0488b /components/net/sal/include
parent5a61304a09bb2341565407d8fdc0a14f03c50aa3 (diff)
[net] adjust folder structure (#5587)
* [net] adjust folder structure - 将lwip相关的文件夹,移入lwip文件夹 - Kconfig 分散到at netdev lwip sal文件夹中,使用menuconfig代替menu
Diffstat (limited to 'components/net/sal/include')
-rw-r--r--components/net/sal/include/dfs_net/dfs_net.h29
-rw-r--r--components/net/sal/include/sal.h114
-rw-r--r--components/net/sal/include/sal_netdb.h86
-rw-r--r--components/net/sal/include/sal_socket.h218
-rw-r--r--components/net/sal/include/sal_tls.h68
-rw-r--r--components/net/sal/include/socket/netdb.h36
-rw-r--r--components/net/sal/include/socket/netinet/in.h20
-rw-r--r--components/net/sal/include/socket/netinet/tcp.h16
-rw-r--r--components/net/sal/include/socket/netinet/udp.h16
-rw-r--r--components/net/sal/include/socket/sys_socket/sys/socket.h67
10 files changed, 670 insertions, 0 deletions
diff --git a/components/net/sal/include/dfs_net/dfs_net.h b/components/net/sal/include/dfs_net/dfs_net.h
new file mode 100644
index 0000000000..82b7526603
--- /dev/null
+++ b/components/net/sal/include/dfs_net/dfs_net.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2015-02-17 Bernard First version
+ * 2016-05-05 Bernard rename dfs_lwip to dfs_net.
+ */
+
+#ifndef DFS_NET_H__
+#define DFS_NET_H__
+
+#include <dfs_file.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+const struct dfs_file_ops* dfs_net_get_fops(void);
+int dfs_net_getsocket(int fd);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/components/net/sal/include/sal.h b/components/net/sal/include/sal.h
new file mode 100644
index 0000000000..dd250e37b6
--- /dev/null
+++ b/components/net/sal/include/sal.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2018-05-17 ChenYong First version
+ */
+
+#ifndef SAL_H__
+#define SAL_H__
+
+#include <rtdevice.h>
+
+#ifdef SAL_USING_POSIX
+#include <dfs_file.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(socklen_t) && !defined(SOCKLEN_T_DEFINED)
+typedef uint32_t socklen_t;
+#endif
+
+/* SAL socket magic word */
+#define SAL_SOCKET_MAGIC 0x5A10
+
+/* The maximum number of sockets structure */
+#ifndef SAL_SOCKETS_NUM
+#define SAL_SOCKETS_NUM DFS_FD_MAX
+#endif
+
+/* The maximum number of protocol families */
+#ifndef SAL_PROTO_FAMILIES_NUM
+#define SAL_PROTO_FAMILIES_NUM 4
+#endif
+
+/* SAL socket offset */
+#ifndef SAL_SOCKET_OFFSET
+#define SAL_SOCKET_OFFSET 0
+#endif
+
+struct sal_socket
+{
+ uint32_t magic; /* SAL socket magic word */
+
+ int socket; /* SAL socket descriptor */
+ int domain;
+ int type;
+ int protocol;
+
+ struct netdev *netdev; /* SAL network interface device */
+
+ void *user_data; /* user-specific data */
+#ifdef SAL_USING_TLS
+ void *user_data_tls; /* user-specific TLS data */
+#endif
+};
+
+/* network interface socket opreations */
+struct sal_socket_ops
+{
+ int (*socket) (int domain, int type, int protocol);
+ int (*closesocket)(int s);
+ int (*bind) (int s, const struct sockaddr *name, socklen_t namelen);
+ int (*listen) (int s, int backlog);
+ int (*connect) (int s, const struct sockaddr *name, socklen_t namelen);
+ int (*accept) (int s, struct sockaddr *addr, socklen_t *addrlen);
+ int (*sendto) (int s, const void *data, size_t size, int flags, const struct sockaddr *to, socklen_t tolen);
+ int (*recvfrom) (int s, void *mem, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
+ 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 (*shutdown) (int s, int how);
+ int (*getpeername)(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);
+#ifdef SAL_USING_POSIX
+ int (*poll) (struct dfs_fd *file, struct rt_pollreq *req);
+#endif
+};
+
+/* sal network database name resolving */
+struct sal_netdb_ops
+{
+ struct hostent* (*gethostbyname) (const char *name);
+ int (*gethostbyname_r)(const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop);
+ int (*getaddrinfo) (const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res);
+ void (*freeaddrinfo) (struct addrinfo *ai);
+};
+
+struct sal_proto_family
+{
+ int family; /* primary protocol families type */
+ int sec_family; /* secondary protocol families type */
+ const struct sal_socket_ops *skt_ops; /* socket opreations */
+ const struct sal_netdb_ops *netdb_ops; /* network database opreations */
+};
+
+/* SAL(Socket Abstraction Layer) initialize */
+int sal_init(void);
+/* Get SAL socket object by socket descriptor */
+struct sal_socket *sal_get_socket(int sock);
+
+/* check SAL socket netweork interface device internet status */
+int sal_check_netdev_internet_up(struct netdev *netdev);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SAL_H__ */
diff --git a/components/net/sal/include/sal_netdb.h b/components/net/sal/include/sal_netdb.h
new file mode 100644
index 0000000000..9b1421270f
--- /dev/null
+++ b/components/net/sal/include/sal_netdb.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2018-05-24 ChenYong First version
+ */
+#ifndef SAL_NETDB_H__
+#define SAL_NETDB_H__
+
+#include <stddef.h>
+#include "sal_socket.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EAI_NONAME 200
+#define EAI_SERVICE 201
+#define EAI_FAIL 202
+#define EAI_MEMORY 203
+#define EAI_FAMILY 204
+
+#define HOST_NOT_FOUND 210
+#define NO_DATA 211
+#define NO_RECOVERY 212
+#define TRY_AGAIN 213
+
+#define AI_PASSIVE 0x01
+#define AI_CANONNAME 0x02
+#define AI_NUMERICHOST 0x04
+#define AI_NUMERICSERV 0x08
+#define AI_V4MAPPED 0x10
+#define AI_ALL 0x20
+#define AI_ADDRCONFIG 0x40
+
+/* input flags for structure addrinfo */
+#define AI_PASSIVE 0x01
+#define AI_CANONNAME 0x02
+#define AI_NUMERICHOST 0x04
+#define AI_NUMERICSERV 0x08
+#define AI_V4MAPPED 0x10
+#define AI_ALL 0x20
+#define AI_ADDRCONFIG 0x40
+
+#define DNS_MAX_NAME_LENGTH 256
+
+struct hostent {
+ char *h_name; /* Official name of the host. */
+ char **h_aliases; /* A pointer to an array of pointers to alternative host names,
+ terminated by a null pointer. */
+ int h_addrtype; /* Address type. */
+ int h_length; /* The length, in bytes, of the address. */
+ char **h_addr_list; /* A pointer to an array of pointers to network addresses (in
+ network byte order) for the host, terminated by a null pointer. */
+#define h_addr h_addr_list[0] /* for backward compatibility */
+};
+
+struct addrinfo {
+ int ai_flags; /* Input flags. */
+ int ai_family; /* Address family of socket. */
+ int ai_socktype; /* Socket type. */
+ int ai_protocol; /* Protocol of socket. */
+ socklen_t ai_addrlen; /* Length of socket address. */
+ struct sockaddr *ai_addr; /* Socket address of socket. */
+ char *ai_canonname; /* Canonical name of service location. */
+ struct addrinfo *ai_next; /* Pointer to next in list. */
+};
+
+struct hostent *sal_gethostbyname(const char *name);
+
+int sal_gethostbyname_r(const char *name, struct hostent *ret, char *buf,
+ size_t buflen, struct hostent **result, int *h_errnop);
+void sal_freeaddrinfo(struct addrinfo *ai);
+int sal_getaddrinfo(const char *nodename,
+ const char *servname,
+ const struct addrinfo *hints,
+ struct addrinfo **res);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SAL_NETDB_H__ */
diff --git a/components/net/sal/include/sal_socket.h b/components/net/sal/include/sal_socket.h
new file mode 100644
index 0000000000..c479d21c62
--- /dev/null
+++ b/components/net/sal/include/sal_socket.h
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2018-05-24 ChenYong First version
+ */
+
+#ifndef SAL_SOCKET_H__
+#define SAL_SOCKET_H__
+
+#include <stddef.h>
+#include <arpa/inet.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(socklen_t) && !defined(SOCKLEN_T_DEFINED)
+typedef uint32_t socklen_t;
+#endif
+
+#if !defined(sa_family_t) && !defined(SA_FAMILY_T_DEFINED)
+typedef uint8_t sa_family_t;
+#endif
+
+/* If your port already typedef's in_port_t, define IN_PORT_T_DEFINED
+ to prevent this code from redefining it. */
+#if !defined(in_port_t) && !defined(IN_PORT_T_DEFINED)
+typedef uint16_t in_port_t;
+#endif
+
+/* Socket protocol types (TCP/UDP/RAW) */
+#define SOCK_STREAM 1
+#define SOCK_DGRAM 2
+#define SOCK_RAW 3
+
+#define SOCK_MAX (SOCK_RAW + 1)
+
+/* Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c) */
+#define SO_REUSEADDR 0x0004 /* Allow local address reuse */
+#define SO_KEEPALIVE 0x0008 /* keep connections alive */
+#define SO_BROADCAST 0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */
+
+/* Additional options, not kept in so_options */
+#define SO_DEBUG 0x0001 /* Unimplemented: turn on debugging info recording */
+#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
+#define SO_DONTROUTE 0x0010 /* Unimplemented: just use interface addresses */
+#define SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */
+#define SO_LINGER 0x0080 /* linger on close if data present */
+#define SO_DONTLINGER ((int)(~SO_LINGER))
+#define SO_OOBINLINE 0x0100 /* Unimplemented: leave received OOB data in line */
+#define SO_REUSEPORT 0x0200 /* Unimplemented: allow local address & port reuse */
+#define SO_SNDBUF 0x1001 /* Unimplemented: send buffer size */
+#define SO_RCVBUF 0x1002 /* receive buffer size */
+#define SO_SNDLOWAT 0x1003 /* Unimplemented: send low-water mark */
+#define SO_RCVLOWAT 0x1004 /* Unimplemented: receive low-water mark */
+#define SO_SNDTIMEO 0x1005 /* send timeout */
+#define SO_RCVTIMEO 0x1006 /* receive timeout */
+#define SO_ERROR 0x1007 /* get error status and clear */
+#define SO_TYPE 0x1008 /* get socket type */
+#define SO_CONTIMEO 0x1009 /* Unimplemented: connect timeout */
+#define SO_NO_CHECK 0x100a /* don't create UDP checksum */
+
+/* Level number for (get/set)sockopt() to apply to socket itself */
+#define SOL_SOCKET 0xfff /* options for socket level */
+
+#define AF_UNSPEC 0
+#define AF_INET 2
+#define AF_INET6 10
+#define AF_CAN 29 /* Controller Area Network */
+#define AF_AT 45 /* AT socket */
+#define AF_WIZ 46 /* WIZnet socket */
+#define PF_INET AF_INET
+#define PF_INET6 AF_INET6
+#define PF_UNSPEC AF_UNSPEC
+#define PF_CAN AF_CAN
+#define PF_AT AF_AT
+#define PF_WIZ AF_WIZ
+
+#define AF_MAX (AF_WIZ + 1) /* For now.. */
+
+#define IPPROTO_IP 0
+#define IPPROTO_ICMP 1
+#define IPPROTO_TCP 6
+#define IPPROTO_UDP 17
+#define IPPROTO_IPV6 41
+#define IPPROTO_ICMPV6 58
+#define IPPROTO_UDPLITE 136
+#define IPPROTO_RAW 255
+
+/* Flags we can use with send and recv */
+#define MSG_PEEK 0x01 /* Peeks at an incoming message */
+#define MSG_WAITALL 0x02 /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */
+#define MSG_OOB 0x04 /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */
+#define MSG_DONTWAIT 0x08 /* Nonblocking i/o for this operation only */
+#define MSG_MORE 0x10 /* Sender will send more */
+
+/* Options for level IPPROTO_IP */
+#define IP_TOS 1
+#define IP_TTL 2
+
+/* Options for level IPPROTO_TCP */
+#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */
+#define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */
+#define TCP_KEEPIDLE 0x03 /* set pcb->keep_idle - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */
+#define TCP_KEEPINTVL 0x04 /* set pcb->keep_intvl - Use seconds for get/setsockopt */
+#define TCP_KEEPCNT 0x05 /* set pcb->keep_cnt - Use number of probes sent for get/setsockopt */
+
+/* Options and types related to multicast membership */
+#define IP_ADD_MEMBERSHIP 3
+#define IP_DROP_MEMBERSHIP 4
+/* Options and types for UDP multicast traffic handling */
+#define IP_MULTICAST_TTL 5
+#define IP_MULTICAST_IF 6
+#define IP_MULTICAST_LOOP 7
+
+typedef struct ip_mreq
+{
+ struct in_addr imr_multiaddr; /* IP multicast address of group */
+ struct in_addr imr_interface; /* local IP address of interface */
+} ip_mreq;
+
+/* The Type of Service provides an indication of the abstract parameters of the quality of service desired */
+#define IPTOS_TOS_MASK 0x1E
+#define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK)
+#define IPTOS_LOWDELAY 0x10
+#define IPTOS_THROUGHPUT 0x08
+#define IPTOS_RELIABILITY 0x04
+#define IPTOS_LOWCOST 0x02
+#define IPTOS_MINCOST IPTOS_LOWCOST
+
+/* The Network Control precedence designation is intended to be used within a network only */
+#define IPTOS_PREC_MASK 0xe0
+#define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK)
+#define IPTOS_PREC_NETCONTROL 0xe0
+#define IPTOS_PREC_INTERNETCONTROL 0xc0
+#define IPTOS_PREC_CRITIC_ECP 0xa0
+#define IPTOS_PREC_FLASHOVERRIDE 0x80
+#define IPTOS_PREC_FLASH 0x60
+#define IPTOS_PREC_IMMEDIATE 0x40
+#define IPTOS_PREC_PRIORITY 0x20
+#define IPTOS_PREC_ROUTINE 0x00
+
+/* Options for shatdown type */
+#ifndef SHUT_RD
+ #define SHUT_RD 0
+ #define SHUT_WR 1
+ #define SHUT_RDWR 2
+#endif
+
+struct sockaddr
+{
+ uint8_t sa_len;
+ sa_family_t sa_family;
+ char sa_data[14];
+};
+
+#if NETDEV_IPV4
+/* members are in network byte order */
+struct sockaddr_in
+{
+ uint8_t sin_len;
+ sa_family_t sin_family;
+ in_port_t sin_port;
+ struct in_addr sin_addr;
+#define SIN_ZERO_LEN 8
+ char sin_zero[SIN_ZERO_LEN];
+};
+#endif /* NETDEV_IPV4 */
+
+#if NETDEV_IPV6
+struct sockaddr_in6
+{
+ uint8_t sin6_len; /* length of this structure */
+ sa_family_t sin6_family; /* AF_INET6 */
+ in_port_t sin6_port; /* Transport layer port # */
+ uint32_t sin6_flowinfo; /* IPv6 flow information */
+ struct in6_addr sin6_addr; /* IPv6 address */
+ uint32_t sin6_scope_id; /* Set of interfaces for scope */
+};
+#endif /* NETDEV_IPV6 */
+
+struct sockaddr_storage
+{
+ uint8_t s2_len;
+ sa_family_t ss_family;
+ char s2_data1[2];
+ uint32_t s2_data2[3];
+#if NETDEV_IPV6
+ uint32_t s2_data3[3];
+#endif /* NETDEV_IPV6 */
+};
+
+int sal_accept(int socket, struct sockaddr *addr, socklen_t *addrlen);
+int sal_bind(int socket, const struct sockaddr *name, socklen_t namelen);
+int sal_shutdown(int socket, int how);
+int sal_getpeername (int socket, struct sockaddr *name, socklen_t *namelen);
+int sal_getsockname (int socket, struct sockaddr *name, socklen_t *namelen);
+int sal_getsockopt (int socket, int level, int optname, void *optval, socklen_t *optlen);
+int sal_setsockopt (int socket, int level, int optname, const void *optval, socklen_t optlen);
+int sal_connect(int socket, const struct sockaddr *name, socklen_t namelen);
+int sal_listen(int socket, int backlog);
+int sal_recvfrom(int socket, void *mem, size_t len, int flags,
+ struct sockaddr *from, socklen_t *fromlen);
+int sal_sendto(int socket, const void *dataptr, size_t size, int flags,
+ const struct sockaddr *to, socklen_t tolen);
+int sal_socket(int domain, int type, int protocol);
+int sal_closesocket(int socket);
+int sal_ioctlsocket(int socket, long cmd, void *arg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* SAL_SOCKET_H__ */
diff --git a/components/net/sal/include/sal_tls.h b/components/net/sal/include/sal_tls.h
new file mode 100644
index 0000000000..f211a3c1f8
--- /dev/null
+++ b/components/net/sal/include/sal_tls.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2018-11-10 ChenYong First version
+ */
+#ifndef __SAL_TLS_H__
+#define __SAL_TLS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <rtthread.h>
+
+/* Protocol level for TLS.
+ * Here, the same socket protocol level for TLS as in Linux was used.
+ */
+#define SOL_TLS 282
+
+/* Socket options for TLS */
+
+/* Socket option to select TLS credentials to use. */
+#define TLS_CRET_LIST 1
+/* Socket option to set select ciphersuites to use. */
+#define TLS_CIPHERSUITE_LIST 2
+/* Socket option to set peer verification level for TLS connection. */
+#define TLS_PEER_VERIFY 3
+/* Socket option to set role for DTLS connection. */
+#define TLS_DTLS_ROLE 4
+
+/* Protocol numbers for TLS protocols */
+#define PROTOCOL_TLS 256
+#define PROTOCOL_DTLS 257
+
+
+struct sal_proto_tls_ops
+{
+ int (*init)(void);
+ void* (*socket)(int socket);
+ int (*connect)(void *sock);
+ int (*send)(void *sock, const void *data, size_t size);
+ int (*recv)(void *sock, void *mem, size_t len);
+ int (*closesocket)(void *sock);
+
+ int (*set_cret_list)(void *sock, const void *cert, size_t size); /* Set TLS credentials */
+ int (*set_ciphersurite)(void *sock, const void* ciphersurite, size_t size); /* Set select ciphersuites */
+ int (*set_peer_verify)(void *sock, const void* peer_verify, size_t size); /* Set peer verification */
+ int (*set_dtls_role)(void *sock, const void *dtls_role, size_t size); /* Set role for DTLS */
+};
+
+struct sal_proto_tls
+{
+ char name[RT_NAME_MAX]; /* TLS protocol name */
+ const struct sal_proto_tls_ops *ops; /* SAL TLS protocol options */
+};
+
+/* SAL TLS protocol register */
+int sal_proto_tls_register(const struct sal_proto_tls *pt);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __SAL_TLS_H__ */
diff --git a/components/net/sal/include/socket/netdb.h b/components/net/sal/include/socket/netdb.h
new file mode 100644
index 0000000000..8394fddea5
--- /dev/null
+++ b/components/net/sal/include/socket/netdb.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2015-02-17 Bernard First version
+ * 2018-05-24 ChenYong Add socket abstraction layer
+ */
+
+#ifndef NETDB_H__
+#define NETDB_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stddef.h>
+#include <sal_netdb.h>
+
+struct hostent *gethostbyname(const char *name);
+
+int gethostbyname_r(const char *name, struct hostent *ret, char *buf,
+ size_t buflen, struct hostent **result, int *h_errnop);
+void freeaddrinfo(struct addrinfo *ai);
+int getaddrinfo(const char *nodename,
+ const char *servname,
+ const struct addrinfo *hints,
+ struct addrinfo **res);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/components/net/sal/include/socket/netinet/in.h b/components/net/sal/include/socket/netinet/in.h
new file mode 100644
index 0000000000..37240547b4
--- /dev/null
+++ b/components/net/sal/include/socket/netinet/in.h
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2015-02-17 Bernard First version
+ */
+
+#ifndef IN_H__
+#define IN_H__
+
+#include <sys/socket.h>
+
+#ifndef IN6_IS_ADDR_MULTICAST
+#define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff)
+#endif
+
+#endif
diff --git a/components/net/sal/include/socket/netinet/tcp.h b/components/net/sal/include/socket/netinet/tcp.h
new file mode 100644
index 0000000000..a3b530186a
--- /dev/null
+++ b/components/net/sal/include/socket/netinet/tcp.h
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2015-02-17 Bernard First version
+ */
+
+#ifndef TCP_H__
+#define TCP_H__
+
+#include <sys/socket.h>
+
+#endif
diff --git a/components/net/sal/include/socket/netinet/udp.h b/components/net/sal/include/socket/netinet/udp.h
new file mode 100644
index 0000000000..21f50d55e5
--- /dev/null
+++ b/components/net/sal/include/socket/netinet/udp.h
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2015-02-17 Bernard First version
+ */
+
+#ifndef UDP_H__
+#define UDP_H__
+
+#include <sys/socket.h>
+
+#endif
diff --git a/components/net/sal/include/socket/sys_socket/sys/socket.h b/components/net/sal/include/socket/sys_socket/sys/socket.h
new file mode 100644
index 0000000000..a86240e2ff
--- /dev/null
+++ b/components/net/sal/include/socket/sys_socket/sys/socket.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2006-2021, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2015-02-17 Bernard First version
+ * 2018-05-17 ChenYong Add socket abstraction layer
+ */
+
+#ifndef SYS_SOCKET_H_
+#define SYS_SOCKET_H_
+
+#include <rtthread.h>
+#include <sal_socket.h>
+#ifdef SAL_USING_TLS
+#include <sal_tls.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef SAL_USING_POSIX
+int accept(int s, struct sockaddr *addr, socklen_t *addrlen);
+int bind(int s, const struct sockaddr *name, socklen_t namelen);
+int shutdown(int s, int how);
+int getpeername(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 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 listen(int s, int backlog);
+int recv(int s, void *mem, size_t len, int flags);
+int recvfrom(int s, void *mem, size_t len, int flags,
+ struct sockaddr *from, socklen_t *fromlen);
+int send(int s, const void *dataptr, size_t size, int flags);
+int sendto(int s, const void *dataptr, size_t size, int flags,
+ const struct sockaddr *to, socklen_t tolen);
+int socket(int domain, int type, int protocol);
+int closesocket(int s);
+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
+}
+#endif
+
+#endif /* _SYS_SOCKET_H_ */