15#ifndef ZEPHYR_INCLUDE_NET_SOCKET_H_
16#define ZEPHYR_INCLUDE_NET_SOCKET_H_
51#define ZSOCK_POLLPRI 2
53#define ZSOCK_POLLOUT 4
55#define ZSOCK_POLLERR 8
57#define ZSOCK_POLLHUP 0x10
59#define ZSOCK_POLLNVAL 0x20
67#define ZSOCK_MSG_PEEK 0x02
70#define ZSOCK_MSG_CTRUNC 0x08
74#define ZSOCK_MSG_TRUNC 0x20
76#define ZSOCK_MSG_DONTWAIT 0x40
78#define ZSOCK_MSG_WAITALL 0x100
90#define ZSOCK_SHUT_RD 0
92#define ZSOCK_SHUT_WR 1
94#define ZSOCK_SHUT_RDWR 2
117#define TLS_SEC_TAG_LIST 1
122#define TLS_HOSTNAME 2
128#define TLS_CIPHERSUITE_LIST 3
133#define TLS_CIPHERSUITE_USED 4
144#define TLS_PEER_VERIFY 5
153#define TLS_DTLS_ROLE 6
159#define TLS_ALPN_LIST 7
164#define TLS_DTLS_HANDSHAKE_TIMEOUT_MIN 8
170#define TLS_DTLS_HANDSHAKE_TIMEOUT_MAX 9
176#define TLS_CERT_NOCOPY 10
192#define TLS_SESSION_CACHE 12
196#define TLS_SESSION_CACHE_PURGE 13
208#define TLS_DTLS_CID 14
218#define TLS_DTLS_CID_STATUS 15
223#define TLS_DTLS_CID_VALUE 16
230#define TLS_DTLS_PEER_CID_VALUE 17
238#define TLS_DTLS_HANDSHAKE_ON_CONNECT 18
241#define TLS_PEER_VERIFY_NONE 0
242#define TLS_PEER_VERIFY_OPTIONAL 1
243#define TLS_PEER_VERIFY_REQUIRED 2
246#define TLS_DTLS_ROLE_CLIENT 0
247#define TLS_DTLS_ROLE_SERVER 1
250#define TLS_CERT_NOCOPY_NONE 0
251#define TLS_CERT_NOCOPY_OPTIONAL 1
254#define TLS_SESSION_CACHE_DISABLED 0
255#define TLS_SESSION_CACHE_ENABLED 1
258#define TLS_DTLS_CID_DISABLED 0
259#define TLS_DTLS_CID_SUPPORTED 1
260#define TLS_DTLS_CID_ENABLED 2
263#define TLS_DTLS_CID_STATUS_DISABLED 0
264#define TLS_DTLS_CID_STATUS_DOWNLINK 1
265#define TLS_DTLS_CID_STATUS_UPLINK 2
266#define TLS_DTLS_CID_STATUS_BIDIRECTIONAL 3
537static inline int zsock_fcntl_wrapper(
int sock,
int cmd, ...)
543 flags = va_arg(args,
int);
548#define zsock_fcntl zsock_fcntl_wrapper
571static inline int zsock_ioctl_wrapper(
int sock,
unsigned long request, ...)
576 va_start(args, request);
583#define zsock_ioctl zsock_ioctl_wrapper
684 char *dst,
size_t size)
702__syscall
int z_zsock_getaddrinfo_internal(
const char *host,
715#define AI_PASSIVE 0x1
717#define AI_CANONNAME 0x2
719#define AI_NUMERICHOST 0x4
721#define AI_V4MAPPED 0x8
725#define AI_ADDRCONFIG 0x20
727#define AI_NUMERICSERV 0x400
729#define AI_EXTFLAGS 0x800
775#define NI_NUMERICHOST 1
777#define NI_NUMERICSERV 2
812#if defined(CONFIG_NET_INTERFACE_NAME)
813#define IFNAMSIZ CONFIG_NET_INTERFACE_NAME_LEN
815#define IFNAMSIZ Z_DEVICE_MAX_NAME_LEN
836#define SO_REUSEADDR 2
842#define SO_DONTROUTE 5
844#define SO_BROADCAST 6
852#define SO_KEEPALIVE 9
854#define SO_OOBINLINE 10
856#define SO_PRIORITY 12
860#define SO_REUSEPORT 15
863#define SO_RCVLOWAT 18
865#define SO_SNDLOWAT 19
871#define SO_RCVTIMEO 20
873#define SO_SNDTIMEO 21
876#define SO_BINDTODEVICE 25
879#define SO_ACCEPTCONN 30
882#define SO_TIMESTAMPING 37
885#define SO_PROTOCOL 38
896#define SCM_TXTIME SO_TXTIME
901#define SOF_TIMESTAMPING_RX_HARDWARE BIT(0)
906#define SOF_TIMESTAMPING_TX_HARDWARE BIT(1)
920#define TCP_KEEPIDLE 2
922#define TCP_KEEPINTVL 3
964#define IP_MULTICAST_IF 32
966#define IP_MULTICAST_TTL 33
968#define IP_ADD_MEMBERSHIP 35
970#define IP_DROP_MEMBERSHIP 36
990#define IP_LOCAL_PORT_RANGE 51
1000#define IPV6_UNICAST_HOPS 16
1003#define IPV6_MULTICAST_IF 17
1006#define IPV6_MULTICAST_HOPS 18
1009#define IPV6_ADD_MEMBERSHIP 20
1012#define IPV6_DROP_MEMBERSHIP 21
1015#define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP
1018#define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP
1039#define IPV6_V6ONLY 26
1045#define IPV6_RECVPKTINFO 49
1048#define IPV6_ADDR_PREFERENCES 72
1051#define IPV6_PREFER_SRC_TMP 0x0001
1053#define IPV6_PREFER_SRC_PUBLIC 0x0002
1058#define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100
1060#define IPV6_PREFER_SRC_COA 0x0004
1062#define IPV6_PREFER_SRC_HOME 0x0400
1064#define IPV6_PREFER_SRC_CGA 0x0008
1066#define IPV6_PREFER_SRC_NONCGA 0x0800
1080#define IPV6_TCLASS 67
1088#define SOMAXCONN 128
1096#define IN6_IS_ADDR_UNSPECIFIED(addr) \
1097 net_ipv6_addr_cmp(net_ipv6_unspecified_address(), addr)
1100#define IN6_IS_ADDR_LOOPBACK(addr) net_ipv6_is_addr_loopback(addr)
1103#define IN6_IS_ADDR_MULTICAST(addr) net_ipv6_is_addr_mcast(addr)
1106#define IN6_IS_ADDR_LINKLOCAL(addr) net_ipv6_is_ll_addr(addr)
1109#define IN6_IS_ADDR_SITELOCAL(addr) net_ipv6_is_sl_addr(addr)
1112#define IN6_IS_ADDR_V4MAPPED(addr) net_ipv6_addr_is_v4_mapped(addr)
1115#define IN6_IS_ADDR_MC_GLOBAL(addr) net_ipv6_is_addr_mcast_global(addr)
1118#define IN6_IS_ADDR_MC_NODELOCAL(addr) net_ipv6_is_addr_mcast_iface(addr)
1121#define IN6_IS_ADDR_MC_LINKLOCAL(addr) net_ipv6_is_addr_mcast_link(addr)
1124#define IN6_IS_ADDR_MC_SITELOCAL(addr) net_ipv6_is_addr_mcast_site(addr)
1127#define IN6_IS_ADDR_MC_ORGLOCAL(addr) net_ipv6_is_addr_mcast_org(addr)
1135struct net_socket_register {
1138 bool (*is_supported)(
int family,
int type,
int proto);
1139 int (*handler)(
int family,
int type,
int proto);
1140#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1144 const char *
const name;
1148#define NET_SOCKET_DEFAULT_PRIO CONFIG_NET_SOCKETS_PRIORITY_DEFAULT
1150#define NET_SOCKET_GET_NAME(socket_name, prio) \
1151 __net_socket_register_##prio##_##socket_name
1153#if defined(CONFIG_NET_SOCKETS_OBJ_CORE)
1154#define K_OBJ_TYPE_SOCK K_OBJ_TYPE_ID_GEN("SOCK")
1156#define NET_SOCKET_REGISTER_NAME(_name) \
1157 .name = STRINGIFY(_name),
1159#define NET_SOCKET_REGISTER_NAME(_name)
1162#define _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, _is_offloaded) \
1163 static const STRUCT_SECTION_ITERABLE(net_socket_register, \
1164 NET_SOCKET_GET_NAME(socket_name, prio)) = { \
1165 .family = _family, \
1166 .is_offloaded = _is_offloaded, \
1167 .is_supported = _is_supported, \
1168 .handler = _handler, \
1169 NET_SOCKET_REGISTER_NAME(socket_name) \
1172#define NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1173 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, false)
1175#define NET_SOCKET_OFFLOAD_REGISTER(socket_name, prio, _family, _is_supported, _handler) \
1176 _NET_SOCKET_REGISTER(socket_name, prio, _family, _is_supported, _handler, true)
1184#include <zephyr/syscalls/socket.h>
1198#if defined(CONFIG_POSIX_API)
1199#if !defined(ZEPHYR_INCLUDE_POSIX_ARPA_INET_H_)
1202#if !defined(ZEPHYR_INCLUDE_POSIX_NETDB_H_)
1205#if !defined(ZEPHYR_INCLUDE_POSIX_UNISTD_H_)
1208#if !defined(ZEPHYR_INCLUDE_POSIX_POLL_H_)
1211#if !defined(ZEPHYR_INCLUDE_POSIX_SYS_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.
int zsock_getpeername(int sock, struct sockaddr *addr, socklen_t *addrlen)
Get peer name.
ssize_t zsock_sendto(int sock, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
Send data to an arbitrary network address.
int zsock_connect(int sock, const struct sockaddr *addr, socklen_t addrlen)
Connect a socket to a peer network address.
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.
int zsock_accept(int sock, struct sockaddr *addr, socklen_t *addrlen)
Accept a connection on listening socket.
static ssize_t zsock_send(int sock, const void *buf, size_t len, int flags)
Send data to a connected peer.
Definition socket.h:458
int zsock_bind(int sock, const struct sockaddr *addr, socklen_t addrlen)
Bind a socket to a local network address.
static int zsock_poll(struct zsock_pollfd *fds, int nfds, int timeout)
Efficiently poll multiple sockets for events.
Definition socket.h:598
int zsock_socket(int family, int type, int proto)
Create a network socket.
int zsock_getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen)
Get various socket options.
void zsock_freeaddrinfo(struct zsock_addrinfo *ai)
Free results returned by zsock_getaddrinfo()
static ssize_t zsock_recv(int sock, void *buf, size_t max_len, int flags)
Receive data from a connected peer.
Definition socket.h:513
int zsock_gethostname(char *buf, size_t len)
Get local host name.
int zsock_getsockname(int sock, struct sockaddr *addr, socklen_t *addrlen)
Get socket name.
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_recvmsg(int sock, struct msghdr *msg, int flags)
Receive a message from an arbitrary network address.
ssize_t zsock_recvfrom(int sock, void *buf, size_t max_len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
Receive data from an arbitrary network address.
#define IFNAMSIZ
Network interface name length.
Definition socket.h:815
int zsock_setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen)
Set various socket options.
ssize_t zsock_sendmsg(int sock, const struct msghdr *msg, int flags)
Send data to an arbitrary network address.
static char * zsock_inet_ntop(sa_family_t family, const void *src, char *dst, size_t size)
Convert network address from internal to numeric ASCII form.
Definition socket.h:683
int zsock_inet_pton(sa_family_t family, const char *src, void *dst)
Convert network address from numeric ASCII form to internal representation.
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_getnameinfo(const struct sockaddr *addr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags)
Resolve a network address to a domain name or ASCII address.
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:46
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition ft8xx_reference_api.h:153
unsigned short int sa_family_t
Socket address family type.
Definition net_ip.h:168
char * net_addr_ntop(sa_family_t family, const void *src, char *dst, size_t size)
Convert IP address to string form.
size_t socklen_t
Length of a socket address.
Definition net_ip.h:172
__SIZE_TYPE__ ssize_t
Definition types.h:28
IPv6 and IPv4 definitions.
flags
Definition parser.h:96
BSD select support functions.
#define bool
Definition stdbool.h:13
Interface description structure.
Definition socket.h:819
char ifr_name[Z_DEVICE_MAX_NAME_LEN]
Network interface name.
Definition socket.h:820
IPv6 address struct.
Definition net_ip.h:143
Incoming IPv6 packet information.
Definition socket.h:1074
struct in6_addr ipi6_addr
Destination IPv6 address.
Definition socket.h:1075
unsigned int ipi6_ifindex
Receive interface index.
Definition socket.h:1076
IPv4 address struct.
Definition net_ip.h:155
Incoming IPv4 packet information.
Definition socket.h:951
unsigned int ipi_ifindex
Network interface index.
Definition socket.h:952
struct in_addr ipi_spec_dst
Local address.
Definition socket.h:953
struct in_addr ipi_addr
Header Destination address.
Definition socket.h:954
Struct used when setting a IPv4 multicast network interface.
Definition socket.h:984
struct in_addr imr_interface
IP address of local interface.
Definition socket.h:986
struct in_addr imr_multiaddr
IP multicast group address.
Definition socket.h:985
Struct used when joining or leaving a IPv4 multicast group.
Definition socket.h:975
int imr_ifindex
Network interface index.
Definition socket.h:978
struct in_addr imr_multiaddr
IP multicast group address.
Definition socket.h:976
struct in_addr imr_address
IP address of local interface.
Definition socket.h:977
Struct used when joining or leaving a IPv6 multicast group.
Definition socket.h:1023
struct in6_addr ipv6mr_multiaddr
IPv6 multicast address of group.
Definition socket.h:1025
int ipv6mr_ifindex
Network interface index of the local IPv6 address.
Definition socket.h:1028
Message struct.
Definition net_ip.h:257
Generic sockaddr struct.
Definition net_ip.h:408
Definition used when querying address information.
Definition socket.h:276
struct zsock_addrinfo * ai_next
Pointer to next address entry.
Definition socket.h:277
int ai_family
Address family of the returned addresses.
Definition socket.h:279
int ai_flags
Additional options.
Definition socket.h:278
char * ai_canonname
Optional official name of the host.
Definition socket.h:285
int ai_protocol
Protocol for addresses, 0 means any protocol.
Definition socket.h:281
struct sockaddr * ai_addr
Pointer to the address.
Definition socket.h:284
int ai_socktype
Socket type, for example SOCK_STREAM or SOCK_DGRAM.
Definition socket.h:280
int ai_eflags
Extended flags for special usage.
Definition socket.h:282
socklen_t ai_addrlen
Length of the socket address.
Definition socket.h:283
Definition of the monitored socket/file descriptor.
Definition socket_poll.h:31