17#ifndef ZEPHYR_INCLUDE_NET_SOCKET_H_
18#define ZEPHYR_INCLUDE_NET_SOCKET_H_
53#define ZSOCK_POLLPRI 2
55#define ZSOCK_POLLOUT 4
57#define ZSOCK_POLLERR 8
59#define ZSOCK_POLLHUP 0x10
61#define ZSOCK_POLLNVAL 0x20
69#define ZSOCK_MSG_PEEK 0x02
72#define ZSOCK_MSG_CTRUNC 0x08
76#define ZSOCK_MSG_TRUNC 0x20
78#define ZSOCK_MSG_DONTWAIT 0x40
80#define ZSOCK_MSG_WAITALL 0x100
92#define ZSOCK_SHUT_RD 0
94#define ZSOCK_SHUT_WR 1
96#define ZSOCK_SHUT_RDWR 2
113#define ZSOCK_SOL_TLS 282
119#define ZSOCK_TLS_SEC_TAG_LIST 1
124#define ZSOCK_TLS_HOSTNAME 2
130#define ZSOCK_TLS_CIPHERSUITE_LIST 3
135#define ZSOCK_TLS_CIPHERSUITE_USED 4
146#define ZSOCK_TLS_PEER_VERIFY 5
155#define ZSOCK_TLS_DTLS_ROLE 6
161#define ZSOCK_TLS_ALPN_LIST 7
166#define ZSOCK_TLS_DTLS_HANDSHAKE_TIMEOUT_MIN 8
172#define ZSOCK_TLS_DTLS_HANDSHAKE_TIMEOUT_MAX 9
178#define ZSOCK_TLS_CERT_NOCOPY 10
189#define ZSOCK_TLS_NATIVE 11
194#define ZSOCK_TLS_SESSION_CACHE 12
198#define ZSOCK_TLS_SESSION_CACHE_PURGE 13
210#define ZSOCK_TLS_DTLS_CID 14
220#define ZSOCK_TLS_DTLS_CID_STATUS 15
225#define ZSOCK_TLS_DTLS_CID_VALUE 16
232#define ZSOCK_TLS_DTLS_PEER_CID_VALUE 17
240#define ZSOCK_TLS_DTLS_HANDSHAKE_ON_CONNECT 18
250#define ZSOCK_TLS_CERT_VERIFY_RESULT 19
263#define ZSOCK_TLS_CERT_VERIFY_CALLBACK 20
266#define ZSOCK_TLS_PEER_VERIFY_NONE 0
267#define ZSOCK_TLS_PEER_VERIFY_OPTIONAL 1
268#define ZSOCK_TLS_PEER_VERIFY_REQUIRED 2
271#define ZSOCK_TLS_DTLS_ROLE_CLIENT 0
272#define ZSOCK_TLS_DTLS_ROLE_SERVER 1
275#define ZSOCK_TLS_CERT_NOCOPY_NONE 0
276#define ZSOCK_TLS_CERT_NOCOPY_OPTIONAL 1
279#define ZSOCK_TLS_SESSION_CACHE_DISABLED 0
280#define ZSOCK_TLS_SESSION_CACHE_ENABLED 1
283#define ZSOCK_TLS_DTLS_CID_DISABLED 0
284#define ZSOCK_TLS_DTLS_CID_SUPPORTED 1
285#define ZSOCK_TLS_DTLS_CID_ENABLED 2
288#define ZSOCK_TLS_DTLS_CID_STATUS_DISABLED 0
289#define ZSOCK_TLS_DTLS_CID_STATUS_DOWNLINK 1
290#define ZSOCK_TLS_DTLS_CID_STATUS_UPLINK 2
291#define ZSOCK_TLS_DTLS_CID_STATUS_BIDIRECTIONAL 3
575static inline int zsock_fcntl_wrapper(
int sock,
int cmd, ...)
581 flags = va_arg(args,
int);
586#define zsock_fcntl zsock_fcntl_wrapper
609static inline int zsock_ioctl_wrapper(
int sock,
unsigned long request, ...)
614 va_start(args, request);
621#define zsock_ioctl zsock_ioctl_wrapper
722 char *dst,
size_t size)
740__syscall
int z_zsock_getaddrinfo_internal(
const char *host,
753#define ZSOCK_AI_PASSIVE 0x1
755#define ZSOCK_AI_CANONNAME 0x2
757#define ZSOCK_AI_NUMERICHOST 0x4
759#define ZSOCK_AI_V4MAPPED 0x8
761#define ZSOCK_AI_ALL 0x10
763#define ZSOCK_AI_ADDRCONFIG 0x20
765#define ZSOCK_AI_NUMERICSERV 0x400
767#define ZSOCK_AI_EXTFLAGS 0x800
813#define ZSOCK_NI_NUMERICHOST 1
815#define ZSOCK_NI_NUMERICSERV 2
817#define ZSOCK_NI_NOFQDN 4
819#define ZSOCK_NI_NAMEREQD 8
821#define ZSOCK_NI_DGRAM 16
826#ifndef ZSOCK_NI_MAXHOST
827#define ZSOCK_NI_MAXHOST 64
850#define ZSOCK_SOL_SOCKET 1
855#define ZSOCK_SO_DEBUG 1
857#define ZSOCK_SO_REUSEADDR 2
859#define ZSOCK_SO_TYPE 3
861#define ZSOCK_SO_ERROR 4
863#define ZSOCK_SO_DONTROUTE 5
865#define ZSOCK_SO_BROADCAST 6
868#define ZSOCK_SO_SNDBUF 7
870#define ZSOCK_SO_RCVBUF 8
873#define ZSOCK_SO_KEEPALIVE 9
875#define ZSOCK_SO_OOBINLINE 10
877#define ZSOCK_SO_PRIORITY 12
879#define ZSOCK_SO_LINGER 13
881#define ZSOCK_SO_REUSEPORT 15
884#define ZSOCK_SO_RCVLOWAT 18
886#define ZSOCK_SO_SNDLOWAT 19
892#define ZSOCK_SO_RCVTIMEO 20
894#define ZSOCK_SO_SNDTIMEO 21
897#define ZSOCK_SO_BINDTODEVICE 25
900#define ZSOCK_SO_ACCEPTCONN 30
903#define ZSOCK_SO_TIMESTAMPING 37
906#define ZSOCK_SO_PROTOCOL 38
909#define ZSOCK_SO_DOMAIN 39
912#define ZSOCK_SO_SOCKS5 60
915#define ZSOCK_SO_TXTIME 61
917#define ZSOCK_SCM_TXTIME ZSOCK_SO_TXTIME
922#define ZSOCK_SOF_TIMESTAMPING_RX_HARDWARE BIT(0)
927#define ZSOCK_SOF_TIMESTAMPING_TX_HARDWARE BIT(1)
939#define ZSOCK_TCP_NODELAY 1
941#define ZSOCK_TCP_KEEPIDLE 2
943#define ZSOCK_TCP_KEEPINTVL 3
945#define ZSOCK_TCP_KEEPCNT 4
955#define ZSOCK_IP_TOS 1
958#define ZSOCK_IP_TTL 2
964#define ZSOCK_IP_PKTINFO 8
969#define ZSOCK_IP_RECVTTL 12
975#define ZSOCK_IP_MTU 14
978#define ZSOCK_IP_MULTICAST_IF 32
980#define ZSOCK_IP_MULTICAST_TTL 33
982#define ZSOCK_IP_MULTICAST_LOOP 34
984#define ZSOCK_IP_ADD_MEMBERSHIP 35
986#define ZSOCK_IP_DROP_MEMBERSHIP 36
989#define ZSOCK_IP_LOCAL_PORT_RANGE 51
999#define ZSOCK_IPV6_UNICAST_HOPS 16
1002#define ZSOCK_IPV6_MULTICAST_IF 17
1005#define ZSOCK_IPV6_MULTICAST_HOPS 18
1008#define ZSOCK_IPV6_MULTICAST_LOOP 19
1011#define ZSOCK_IPV6_ADD_MEMBERSHIP 20
1014#define ZSOCK_IPV6_DROP_MEMBERSHIP 21
1017#define ZSOCK_IPV6_JOIN_GROUP ZSOCK_IPV6_ADD_MEMBERSHIP
1020#define ZSOCK_IPV6_LEAVE_GROUP ZSOCK_IPV6_DROP_MEMBERSHIP
1027#define ZSOCK_IPV6_MTU 24
1030#define ZSOCK_IPV6_V6ONLY 26
1036#define ZSOCK_IPV6_RECVPKTINFO 49
1039#define ZSOCK_IPV6_PKTINFO 50
1044#define ZSOCK_IPV6_RECVHOPLIMIT 51
1047#define ZSOCK_IPV6_HOPLIMIT 52
1050#define ZSOCK_IPV6_ADDR_PREFERENCES 72
1053#define ZSOCK_IPV6_PREFER_SRC_TMP 0x0001
1055#define ZSOCK_IPV6_PREFER_SRC_PUBLIC 0x0002
1060#define ZSOCK_IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100
1062#define ZSOCK_IPV6_PREFER_SRC_COA 0x0004
1064#define ZSOCK_IPV6_PREFER_SRC_HOME 0x0400
1066#define ZSOCK_IPV6_PREFER_SRC_CGA 0x0008
1068#define ZSOCK_IPV6_PREFER_SRC_NONCGA 0x0800
1071#define ZSOCK_IPV6_TCLASS 67
1079#define ZSOCK_SOMAXCONN 128
1087#define ZSOCK_IN6_IS_ADDR_UNSPECIFIED(addr) \
1088 net_ipv6_addr_cmp(net_ipv6_unspecified_address(), addr)
1091#define ZSOCK_IN6_IS_ADDR_LOOPBACK(addr) net_ipv6_is_addr_loopback(addr)
1094#define ZSOCK_IN6_IS_ADDR_MULTICAST(addr) net_ipv6_is_addr_mcast(addr)
1097#define ZSOCK_IN6_IS_ADDR_LINKLOCAL(addr) net_ipv6_is_ll_addr(addr)
1100#define ZSOCK_IN6_IS_ADDR_SITELOCAL(addr) net_ipv6_is_sl_addr(addr)
1103#define ZSOCK_IN6_IS_ADDR_V4MAPPED(addr) net_ipv6_addr_is_v4_mapped(addr)
1106#define ZSOCK_IN6_IS_ADDR_MC_GLOBAL(addr) net_ipv6_is_addr_mcast_global(addr)
1109#define ZSOCK_IN6_IS_ADDR_MC_NODELOCAL(addr) net_ipv6_is_addr_mcast_iface(addr)
1112#define ZSOCK_IN6_IS_ADDR_MC_LINKLOCAL(addr) net_ipv6_is_addr_mcast_link(addr)
1115#define ZSOCK_IN6_IS_ADDR_MC_SITELOCAL(addr) net_ipv6_is_addr_mcast_site(addr)
1118#define ZSOCK_IN6_IS_ADDR_MC_ORGLOCAL(addr) net_ipv6_is_addr_mcast_org(addr)
1126struct net_socket_register {
1129 bool (*is_supported)(
int family,
int type,
int proto);
1130 int (*handler)(
int family,
int type,
int proto);
1131#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1135 const char *
const name;
1139#define NET_SOCKET_DEFAULT_PRIO CONFIG_NET_SOCKETS_PRIORITY_DEFAULT
1141#define NET_SOCKET_GET_NAME(socket_name, prio) \
1142 __net_socket_register_##prio##_##socket_name
1144#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1145#define K_OBJ_TYPE_SOCK K_OBJ_TYPE_ID_GEN("SOCK")
1147#define NET_SOCKET_REGISTER_NAME(_name) \
1148 .name = STRINGIFY(_name),
1150#define NET_SOCKET_REGISTER_NAME(_name)
1153#define _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, _is_offloaded) \
1154 static const STRUCT_SECTION_ITERABLE(net_socket_register, \
1155 NET_SOCKET_GET_NAME(socket_name, prio)) = { \
1156 .family = _family, \
1157 .is_offloaded = _is_offloaded, \
1158 .is_supported = _is_supported, \
1159 .handler = _handler, \
1160 NET_SOCKET_REGISTER_NAME(socket_name) \
1163#define NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1164 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, false)
1166#define NET_SOCKET_OFFLOAD_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1167 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, true)
1169struct socket_op_vtable {
1170 struct fd_op_vtable fd_vtable;
1171 int (*
shutdown)(
void *obj,
int how);
1173 int (*
connect)(
void *obj,
const struct net_sockaddr *addr,
1175 int (*
listen)(
void *obj,
int backlog);
1178 const struct net_sockaddr *dest_addr,
net_socklen_t addrlen);
1181 int (*
getsockopt)(
void *obj,
int level,
int optname,
1183 int (*
setsockopt)(
void *obj,
int level,
int optname,
1187 int (*
getpeername)(
void *obj,
struct net_sockaddr *addr,
1189 int (*
getsockname)(
void *obj,
struct net_sockaddr *addr,
1199#include <zephyr/syscalls/socket.h>
int zvfs_poll(struct zvfs_pollfd *fds, int nfds, int poll_timeout)
int zsock_ioctl_impl(int sock, unsigned long request, va_list ap)
Control underlying socket parameters.
ssize_t zsock_recvmsg(int sock, struct net_msghdr *msg, int flags)
Receive a message from an arbitrary network address.
int zsock_accept(int sock, struct net_sockaddr *addr, net_socklen_t *addrlen)
Accept a connection on listening socket.
int zsock_socketpair(int family, int type, int proto, int *sv)
Create an unnamed pair of connected sockets.
void * zsock_get_context_object(int sock)
Obtain a file descriptor's associated net context.
static ssize_t zsock_send(int sock, const void *buf, size_t len, int flags)
Send data to a connected peer.
Definition socket.h:496
static int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout)
Efficiently poll multiple sockets for events.
Definition socket.h:636
int zsock_socket(int family, int type, int proto)
Create a network socket.
int zsock_getnameinfo(const struct net_sockaddr *addr, net_socklen_t addrlen, char *host, net_socklen_t hostlen, char *serv, net_socklen_t servlen, int flags)
Resolve a network address to a domain name or ASCII address.
int zsock_getsockopt(int sock, int level, int optname, void *optval, net_socklen_t *optlen)
Get various socket options.
int zsock_getsockname(int sock, struct net_sockaddr *addr, net_socklen_t *addrlen)
Get socket name.
int zsock_bind(int sock, const struct net_sockaddr *addr, net_socklen_t addrlen)
Bind a socket to a local network address.
int zsock_setsockopt(int sock, int level, int optname, const void *optval, net_socklen_t optlen)
Set various socket options.
int zsock_getpeername(int sock, struct net_sockaddr *addr, net_socklen_t *addrlen)
Get peer name.
void zsock_freeaddrinfo(struct zsock_addrinfo *ai)
Free results returned by zsock_getaddrinfo()
ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len, int flags, struct net_sockaddr *src_addr, net_socklen_t *addrlen)
Receive data from an arbitrary network address.
static ssize_t zsock_recv(int sock, void *buf, size_t max_len, int flags)
Receive data from a connected peer.
Definition socket.h:551
int zsock_gethostname(char *buf, size_t len)
Get local host name.
ssize_t zsock_sendto(int sock, const void *buf, size_t len, int flags, const struct net_sockaddr *dest_addr, net_socklen_t addrlen)
Send data to an arbitrary network address.
const char * zsock_gai_strerror(int errcode)
Convert zsock_getaddrinfo() error code to textual message.
int zsock_fcntl_impl(int sock, int cmd, int flags)
Control blocking/non-blocking mode of a socket.
int zsock_shutdown(int sock, int how)
Shutdown socket send/receive operations.
ssize_t zsock_sendmsg(int sock, const struct net_msghdr *msg, int flags)
Send data to an arbitrary network address.
static char * zsock_inet_ntop(net_sa_family_t family, const void *src, char *dst, size_t size)
Convert network address from internal to numeric ASCII form.
Definition socket.h:721
int zsock_connect(int sock, const struct net_sockaddr *addr, net_socklen_t addrlen)
Connect a socket to a peer network address.
int zsock_close(int sock)
Close a network socket.
int zsock_listen(int sock, int backlog)
Set up a STREAM socket to accept peer connections.
int zsock_inet_pton(net_sa_family_t family, const char *src, void *dst)
Convert network address from numeric ASCII form to internal representation.
int zsock_getaddrinfo(const char *host, const char *service, const struct zsock_addrinfo *hints, struct zsock_addrinfo **res)
Resolve a domain name to one or more network addresses.
#define DNS_MAX_NAME_SIZE
Max size of the resolved name.
Definition dns_resolve.h:76
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition ft8xx_reference_api.h:153
uint32_t net_socklen_t
Length of a socket address.
Definition net_ip.h:171
unsigned short int net_sa_family_t
Socket address family type.
Definition net_ip.h:168
char * net_addr_ntop(net_sa_family_t family, const void *src, char *dst, size_t size)
Convert IP address to string form.
#define NULL
Definition iar_missing_defs.h:20
__SIZE_TYPE__ ssize_t
Definition types.h:28
IPv6 and IPv4 definitions.
flags
Definition parser.h:97
int bind(int sock, const struct sockaddr *addr, socklen_t addrlen)
ssize_t recvfrom(int sock, void *buf, size_t max_len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen)
int getpeername(int sock, struct sockaddr *addr, socklen_t *addrlen)
int accept(int sock, struct sockaddr *addr, socklen_t *addrlen)
int listen(int sock, int backlog)
int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen)
ssize_t sendmsg(int sock, const struct msghdr *message, int flags)
int shutdown(int sock, int how)
int connect(int sock, const struct sockaddr *addr, socklen_t addrlen)
int getsockname(int sock, struct sockaddr *addr, socklen_t *addrlen)
ssize_t sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
ssize_t recvmsg(int sock, struct msghdr *msg, int flags)
BSD select support functions.
#define bool
Definition stdbool.h:13
Message struct.
Definition net_ip.h:254
Generic sockaddr struct.
Definition net_ip.h:408
Definition used when querying address information.
Definition socket.h:314
net_socklen_t ai_addrlen
Length of the socket address.
Definition socket.h:321
struct net_sockaddr * ai_addr
Pointer to the address.
Definition socket.h:322
struct zsock_addrinfo * ai_next
Pointer to next address entry.
Definition socket.h:315
int ai_family
Address family of the returned addresses.
Definition socket.h:317
int ai_flags
Additional options.
Definition socket.h:316
char * ai_canonname
Optional official name of the host.
Definition socket.h:323
int ai_protocol
Protocol for addresses, 0 means any protocol.
Definition socket.h:319
int ai_socktype
Socket type, for example NET_SOCK_STREAM or NET_SOCK_DGRAM.
Definition socket.h:318
int ai_eflags
Extended flags for special usage.
Definition socket.h:320
Definition of the monitored socket/file descriptor.
Definition socket_poll.h:31
Data structure for ZSOCK_TLS_CERT_VERIFY_CALLBACK socket option.
Definition socket.h:294
void * cb
A pointer to the certificate verification callback function.
Definition socket.h:300
void * ctx
A pointer to an opaque context passed to the callback.
Definition socket.h:303