diff --git a/sys/include/net/sock.h b/sys/include/net/sock.h index ec64be366e..3b78182c60 100644 --- a/sys/include/net/sock.h +++ b/sys/include/net/sock.h @@ -18,6 +18,7 @@ * About * ===== * + * ~~~~~~~~~~~~~~~~~~~~ * +---------------+ * | Application | * +---------------+ @@ -31,6 +32,7 @@ * +---------------+ * | Network Stack | * +---------------+ + * ~~~~~~~~~~~~~~~~~~~~ * * This module provides a minimal set of functions to establish connections or * send and receives datagrams using different types of communication. Together, @@ -65,28 +67,25 @@ * the network stack underneath to be switched simply by changing the * `USEMODULE` definitions in the application's Makefile. * - * @{ - * - * @file - * @brief Sock API definitions - * * @author Alexander Aring * @author Simon Brummer * @author Cenk Gündoğan * @author Peter Kietzmann * @author Martine Lenders * @author Kaspar Schleiser + * + * @{ + * + * @file + * @brief Common sock API definitions + * + * @author Martine Lenders + * @author Kaspar Schleiser */ #ifndef NET_SOCK_H_ #define NET_SOCK_H_ -#include - -#include "net/sock/ip.h" -#include "net/sock/tcp.h" -#include "net/sock/udp.h" - #ifdef __cplusplus extern "C" { #endif @@ -99,13 +98,80 @@ extern "C" { #endif /** - * @brief Common flags for @ref net_conn + * @brief Common flags for @ref net_conn + * @name net_sock_flags * @{ */ -#define SOCK_FLAGS_REUSE_EP (0x00000001) /**< allow to reuse end point on bind */ +#define SOCK_FLAGS_REUSE_EP (0x0001) /**< allow to reuse end point on bind */ /** @} */ +/** + * @brief Special netif ID for "any interface" + * @todo Use an equivalent defintion from PR #5511 + */ +#define SOCK_ADDR_ANY_NETIF (0) + +/** + * @brief Address to bind to any IPv4 address + */ +#define SOCK_IPV4_EP_ANY(netif) { .family = AF_INET, \ + .addr = { .ipv4 = 0U }, \ + .netif = (netif) } + +#if defined(SOCK_HAS_IPV6) || defined(DOXYGEN) +/** + * @brief Address to bind to any IPv6 address + */ +#define SOCK_IPV6_EP_ANY(netif) { .family = AF_INET6, \ + .addr = { .ipv6 = { 0 } }, \ + .netif = (netif) } +#endif + +/** + * @brief Abstract IP end point and end point for a raw IP sock object. + */ +typedef struct { + /** + * @brief family of sock_ip_ep_t::addr + * + * @see @ref net_af + */ + int family; + + union { +#if defined(SOCK_HAS_IPV6) || defined(DOXYGEN) + /** + * @brief IPv6 address mode + * + * @note only available if @ref SOCK_HAS_IPV6 is defined. + */ + uint8_t ipv6[16]; +#endif + uint32_t ipv4; /**< IPv4 address mode */ + } addr; /**< address */ + + /** + * @brief stack-specific network interface ID + * + * @todo port to common network interface identifiers in PR #5511. + * + * Use @ref SOCK_ADDR_ANY_NETIF for any interface. + * For reception this is the local interface the message came over, + * for transmission, this is the local interface the message should be send + * over + */ + uint16_t netif; +} sock_ip_ep_t; + +/** + * @brief Common IP-based transport layer end point + */ +typedef struct _sock_tl_ep { + sock_ip_ep_t ip; /**< IP end point */ + uint16_t port; /**< transport layer port */ +}; + #ifdef __cplusplus } #endif diff --git a/sys/include/net/sock/addr.h b/sys/include/net/sock/addr.h deleted file mode 100644 index ee90b8595d..0000000000 --- a/sys/include/net/sock/addr.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2016 Freie Universität Berlin - * Kaspar Schleiser - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - */ - -/** - * @defgroup net_sock_addr Address abstractions - * @ingroup net_sock - * @brief Address abstractions for usage with @ref net_sock - * @{ - * - * @file - * @brief Address abstraction definitions for @ref net_sock - * - * @author Martine Lenders - * @author Kaspar Schleiser - */ -#ifndef SOCK_ADDR_H_ -#define SOCK_ADDR_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief Special netif ID for "any interface" - * @todo Use an equivalent defintion from #5511 - */ -#define SOCK_ADDR_ANY_NETIF (0) - -/** - * @brief Address to bind to any IPv4 address - */ -#define SOCK_ADDR_IPV4_ANY (0U) - -/** - * @brief Address to bind to any IPv6 address - */ -#define SOCK_ADDR_IPV6_ANY { { 0 } } - -typedef uint32_t sock_addr_ipv4_t; - -/** - * @brief Type to represent an IPv6 address - */ -typedef struct { - uint8_t u8[16]; /**< bytes of the address */ -} sock_addr_ipv6_t; - -/** - * @brief Type to abstract both IPv4 and IPv6 addresses - */ -typedef union { -#if defined(SOCK_HAS_IPV6) || defined(DOXYGEN) - /** - * @brief IPv6 address mode - * - * @note only available if @ref SOCK_HAS_IPV6 is defined. - */ - sock_addr_ipv6_t ipv6; -#endif - sock_addr_ipv4_t ipv4; /**< IPv4 address mode */ -} sock_addr_ip_t; - -#ifdef __cplusplus -} -#endif - -#endif /* SOCK_ADDR_H_ */ -/** @} */ diff --git a/sys/include/net/sock/ip.h b/sys/include/net/sock/ip.h index 7abee1698e..69ccc572e6 100644 --- a/sys/include/net/sock/ip.h +++ b/sys/include/net/sock/ip.h @@ -33,7 +33,7 @@ #include #include -#include "net/sock/addr.h" +#include "net/sock.h" #ifdef __cplusplus extern "C" { @@ -108,7 +108,7 @@ typedef struct sock_ip sock_ip_t; * remote. */ int sock_ip_create(sock_ip_t *sock, const sock_ip_ep_t *local, - const sock_ip_ep_t *remote, uint8_t proto, uint32_t flags); + const sock_ip_ep_t *remote, uint8_t proto, uint16_t flags); /** * @brief Closes a raw IPv4/IPv6 sock object diff --git a/sys/include/net/sock/tcp.h b/sys/include/net/sock/tcp.h index b9ef89690b..01d69df468 100644 --- a/sys/include/net/sock/tcp.h +++ b/sys/include/net/sock/tcp.h @@ -32,32 +32,13 @@ #include #include -#include "net/sock/addr.h" +#include "net/sock.h" #ifdef __cplusplus extern "C" { #endif -/** - * @brief An end point for a TCP sock object - */ -typedef struct { - uint16_t family; /**< family of sock_ip_ep_t::addr as defined in @ref net_af */ - - /** - * @brief stack-specific network interface ID - * - * @todo port to common network interface identifiers in PR #5511. - * - * Use @ref SOCK_ADDR_ANY_NETIF for any interface. - * For reception this is the local interface the message came over, - * for transmission, this is the local interface the message should be send - * over - */ - uint16_t netif; - sock_addr_ip_t addr; /**< IP address */ - uint16_t port; /**< port for the TCP end point */ -} sock_tcp_ep_t; +typedef struct _sock_tl_ep sock_tcp_ep_t; /**< An end point for a TCP sock object */ /** * @brief Implementation-specific type of a TCP sock object @@ -103,7 +84,7 @@ typedef struct sock_tcp_queue sock_tcp_queue_t; * @return -ETIMEDOUT, if the connection attempt to @p remote timed out. */ int sock_tcp_connect(sock_tcp_t *sock, const sock_tcp_ep_t *remote, - uint16_t local_port, uint32_t flags); + uint16_t local_port, uint16_t flags); /** * @brief Listen for an incoming connection request on @p local end point @@ -128,7 +109,7 @@ int sock_tcp_connect(sock_tcp_t *sock, const sock_tcp_ep_t *remote, */ int sock_tcp_listen(sock_tcp_queue_t *queue, const sock_tcp_ep_t *local, sock_tcp_t[] queue_array, unsigned queue_len, - uint32_t flags); + uint16_t flags); /** * @brief Disconnects a TCP connection diff --git a/sys/include/net/sock/udp.h b/sys/include/net/sock/udp.h index fc48fc71bd..fd5a80bc8f 100644 --- a/sys/include/net/sock/udp.h +++ b/sys/include/net/sock/udp.h @@ -33,32 +33,13 @@ #include #include -#include "net/sock/addr.h" +#include "net/sock.h" #ifdef __cplusplus extern "C" { #endif -/** - * @brief An end point for a UDP sock object - */ -typedef struct { - uint16_t family; /**< family of sock_ip_ep_t::addr as defined in @ref net_af */ - - /** - * @brief stack-specific network interface ID - * - * @todo port to common network interface identifiers in PR #5511. - * - * Use @ref SOCK_ADDR_ANY_NETIF for any interface. - * For reception this is the local interface the message came over, - * for transmission, this is the local interface the message should be send - * over - */ - uint16_t netif; - sock_addr_ip_t addr; /**< IP address */ - uint16_t port; /**< port for the UDP end point */ -} sock_udp_ep_t; +typedef struct _sock_tl_ep sock_tcp_ep_t; /**< An end point for a TCP sock object */ /** * @brief Implementation-specific type of a UDP sock object @@ -107,7 +88,7 @@ typedef struct sock_udp sock_udp_t; * ` */ int sock_udp_create(sock_udp_t *sock, const sock_udp_ep_t *local, - const sock_udp_ep_t *remote, uint32_t flags); + const sock_udp_ep_t *remote, uint16_t flags); /** * @brief Closes a UDP sock object