Loading...
Searching...
No Matches
tcp.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015-2017 Simon Brummer
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
20
21#include <stdint.h>
22
23#include "compiler_hints.h"
24#include "net/gnrc/pkt.h"
25#include "net/gnrc/tcp/tcb.h"
26
27#ifdef SOCK_HAS_IPV6
28# include "net/sock.h"
29#else
30# ifdef MODULE_GNRC_IPV6
31# include "net/gnrc/ipv6.h"
32# endif
33#endif
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39/* Note: This value if configurable for test purposes. Do not override it.
40 * Changing this value may lead to errors that are hard to track down.
41 */
42#ifndef GNRC_TCP_NO_TIMEOUT
46#define GNRC_TCP_NO_TIMEOUT (UINT32_MAX)
47#endif
48
49#ifdef SOCK_HAS_IPV6
50/* Reuse sock endpoint if sock is available and supporting IPv6. */
51typedef struct _sock_tl_ep gnrc_tcp_ep_t;
52
53#else
58typedef struct {
59 int family;
60 union {
61#ifdef MODULE_GNRC_IPV6
62 uint8_t ipv6[sizeof(ipv6_addr_t)];
63#endif
64 uint8_t dummy;
65 } addr;
66 uint16_t netif;
67 uint16_t port;
69#endif
70
85ACCESS(read_only, 3, 4)
86int gnrc_tcp_ep_init(gnrc_tcp_ep_t *ep, int family, const uint8_t *addr, size_t addr_size,
87 uint16_t port, uint16_t netif);
88
103int gnrc_tcp_ep_from_str(gnrc_tcp_ep_t *ep, const char *str);
104
114
122
130
157int gnrc_tcp_open(gnrc_tcp_tcb_t *tcb, const gnrc_tcp_ep_t *remote, uint16_t local_port);
158
181int gnrc_tcp_listen(gnrc_tcp_tcb_queue_t *queue, gnrc_tcp_tcb_t *tcbs, size_t tcbs_len,
182 const gnrc_tcp_ep_t *local);
183
206 const uint32_t user_timeout_duration_ms);
207
233ACCESS(read_only, 2, 3)
234ssize_t gnrc_tcp_send(gnrc_tcp_tcb_t *tcb, const void *data, const size_t len,
235 const uint32_t user_timeout_duration_ms);
236
268ACCESS(write_only, 2, 3)
269ssize_t gnrc_tcp_recv(gnrc_tcp_tcb_t *tcb, void *data, size_t max_len,
270 uint32_t user_timeout_duration_ms);
271
281
291
303
317
331
345
357int gnrc_tcp_calc_csum(const gnrc_pktsnip_t *hdr, const gnrc_pktsnip_t *pseudo_hdr);
358
369gnrc_pktsnip_t *gnrc_tcp_hdr_build(gnrc_pktsnip_t *payload, uint16_t src, uint16_t dst);
370
371#ifdef __cplusplus
372}
373#endif
374
Common macros and compiler attributes/pragmas configuration.
#define ACCESS(mode, ptr_idx, size_idx)
Emit an attribute (if supported by the compiler) that declares how a function will access its paramet...
Definitions for GNRC's IPv6 implementation.
struct gnrc_pktsnip gnrc_pktsnip_t
Type to represent parts (either headers or payload) of a packet, called snips.
void gnrc_tcp_close(gnrc_tcp_tcb_t *tcb)
Close a TCP connection.
void gnrc_tcp_tcb_queue_init(gnrc_tcp_tcb_queue_t *queue)
Initialize Transmission Control Block (TCB) queue.
void gnrc_tcp_stop_listen(gnrc_tcp_tcb_queue_t *queue)
Close connections and stop listening on TCB queue.
int gnrc_tcp_init(void)
Initialize TCP.
int gnrc_tcp_queue_get_local(gnrc_tcp_tcb_queue_t *queue, gnrc_tcp_ep_t *ep)
Gets the local end point of a TCB queue.
int gnrc_tcp_calc_csum(const gnrc_pktsnip_t *hdr, const gnrc_pktsnip_t *pseudo_hdr)
Calculate and set checksum in TCP header.
int gnrc_tcp_get_local(gnrc_tcp_tcb_t *tcb, gnrc_tcp_ep_t *ep)
Get the local end point of a connected TCB.
int gnrc_tcp_accept(gnrc_tcp_tcb_queue_t *queue, gnrc_tcp_tcb_t **tcb, const uint32_t user_timeout_duration_ms)
Accept TCP connection from listening queue.
int gnrc_tcp_ep_init(gnrc_tcp_ep_t *ep, int family, const uint8_t *addr, size_t addr_size, uint16_t port, uint16_t netif)
Initialize TCP connection endpoint.
int gnrc_tcp_ep_from_str(gnrc_tcp_ep_t *ep, const char *str)
Construct TCP connection endpoint from string.
int gnrc_tcp_get_remote(gnrc_tcp_tcb_t *tcb, gnrc_tcp_ep_t *ep)
Get the remote end point of a connected TCB.
int gnrc_tcp_listen(gnrc_tcp_tcb_queue_t *queue, gnrc_tcp_tcb_t *tcbs, size_t tcbs_len, const gnrc_tcp_ep_t *local)
Configures a sequence of TCBs to wait for incoming connections.
void gnrc_tcp_abort(gnrc_tcp_tcb_t *tcb)
Abort a TCP connection.
gnrc_pktsnip_t * gnrc_tcp_hdr_build(gnrc_pktsnip_t *payload, uint16_t src, uint16_t dst)
Adds a TCP header to a given payload.
ssize_t gnrc_tcp_recv(gnrc_tcp_tcb_t *tcb, void *data, size_t max_len, uint32_t user_timeout_duration_ms)
Receive Data from the peer.
int gnrc_tcp_open(gnrc_tcp_tcb_t *tcb, const gnrc_tcp_ep_t *remote, uint16_t local_port)
Opens a connection.
void gnrc_tcp_tcb_init(gnrc_tcp_tcb_t *tcb)
Initialize Transmission Control Block (TCB)
ssize_t gnrc_tcp_send(gnrc_tcp_tcb_t *tcb, const void *data, const size_t len, const uint32_t user_timeout_duration_ms)
Transmit data to connected peer.
General definitions for network packets and their helper functions.
Common sock API definitions.
Common IP-based transport layer end point.
Definition sock.h:211
union _sock_tl_ep::@145104007015077003173063335316042002054250273140 addr
address
Address information for a single TCP connection endpoint.
Definition tcp.h:58
uint16_t netif
Network interface ID.
Definition tcp.h:66
uint8_t ipv6[sizeof(ipv6_addr_t)]
IPv6 address storage.
Definition tcp.h:62
int family
IP address family.
Definition tcp.h:59
uint16_t port
Port number (in host byte order)
Definition tcp.h:67
uint8_t dummy
Enable build without network module.
Definition tcp.h:64
GNRC TCP transmission control block (TCB)
struct sock_tcp_queue gnrc_tcp_tcb_queue_t
Transmission control block queue.
struct sock_tcp gnrc_tcp_tcb_t
Transmission control block of GNRC TCP.
Data type to represent an IPv6 address.
Definition addr.h:64