Zephyr Project API  3.3.0
A Scalable Open Source RTOS
net_context.h
Go to the documentation of this file.
1
7/*
8 * Copyright (c) 2016 Intel Corporation
9 * Copyright (c) 2021 Nordic Semiconductor
10 *
11 * SPDX-License-Identifier: Apache-2.0
12 */
13
14#ifndef ZEPHYR_INCLUDE_NET_NET_CONTEXT_H_
15#define ZEPHYR_INCLUDE_NET_NET_CONTEXT_H_
16
24#include <zephyr/kernel.h>
25#include <zephyr/sys/atomic.h>
26
27#include <zephyr/net/net_ip.h>
28#include <zephyr/net/net_if.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
36#define NET_CONTEXT_IN_USE BIT(0)
37
47};
48
54#define NET_CONTEXT_FAMILY (BIT(3) | BIT(4) | BIT(5))
55
57#define NET_CONTEXT_TYPE (BIT(6) | BIT(7))
58
60#define NET_CONTEXT_REMOTE_ADDR_SET BIT(8)
61
63#define NET_CONTEXT_ACCEPTING_SOCK BIT(9)
64
66#define NET_CONTEXT_CLOSING_SOCK BIT(10)
67
68/* Context is bound to a specific interface */
69#define NET_CONTEXT_BOUND_TO_IFACE BIT(11)
70
71struct net_context;
72
93typedef void (*net_context_recv_cb_t)(struct net_context *context,
94 struct net_pkt *pkt,
95 union net_ip_header *ip_hdr,
96 union net_proto_header *proto_hdr,
97 int status,
98 void *user_data);
99
114typedef void (*net_context_send_cb_t)(struct net_context *context,
115 int status,
116 void *user_data);
117
134typedef void (*net_tcp_accept_cb_t)(struct net_context *new_context,
135 struct sockaddr *addr,
136 socklen_t addrlen,
137 int status,
138 void *user_data);
139
161typedef void (*net_context_connect_cb_t)(struct net_context *context,
162 int status,
163 void *user_data);
164
165/* The net_pkt_get_slab_func_t is here in order to avoid circular
166 * dependency between net_pkt.h and net_context.h
167 */
176typedef struct k_mem_slab *(*net_pkt_get_slab_func_t)(void);
177
178/* The net_pkt_get_pool_func_t is here in order to avoid circular
179 * dependency between net_pkt.h and net_context.h
180 */
189typedef struct net_buf_pool *(*net_pkt_get_pool_func_t)(void);
190
191struct net_tcp;
192
193struct net_conn_handle;
194
201__net_socket struct net_context {
205
209
213
216 struct k_mutex lock;
217
221 struct sockaddr_ptr local;
222
227
229 struct net_conn_handle *conn_handler;
230
235
240
245
246#if defined(CONFIG_NET_CONTEXT_NET_PKT_POOL)
250
253 net_pkt_get_pool_func_t data_pool;
254#endif /* CONFIG_NET_CONTEXT_NET_PKT_POOL */
255
256#if defined(CONFIG_NET_TCP)
258 void *tcp;
259#endif /* CONFIG_NET_TCP */
260
261#if defined(CONFIG_NET_CONTEXT_SYNC_RECV)
265 struct k_sem recv_data_wait;
266#endif /* CONFIG_NET_CONTEXT_SYNC_RECV */
267
268#if defined(CONFIG_NET_SOCKETS)
270 void *socket_data;
271
273 union {
274 struct k_fifo recv_q;
275 struct k_fifo accept_q;
276 };
277
278 struct {
280 struct k_condvar recv;
281
283 struct k_mutex *lock;
284 } cond;
285#endif /* CONFIG_NET_SOCKETS */
286
287#if defined(CONFIG_NET_OFFLOAD)
289 void *offload_context;
290#endif /* CONFIG_NET_OFFLOAD */
291
292#if defined(CONFIG_NET_SOCKETS_CAN)
293 int can_filter_id;
294#endif /* CONFIG_NET_SOCKETS_CAN */
295
297 struct {
298#if defined(CONFIG_NET_CONTEXT_PRIORITY)
300 uint8_t priority;
301#endif
302#if defined(CONFIG_NET_CONTEXT_TXTIME)
303 bool txtime;
304#endif
305#if defined(CONFIG_SOCKS)
306 struct {
307 struct sockaddr addr;
308 socklen_t addrlen;
309 } proxy;
310#endif
311#if defined(CONFIG_NET_CONTEXT_RCVTIMEO)
312 k_timeout_t rcvtimeo;
313#endif
314#if defined(CONFIG_NET_CONTEXT_SNDTIMEO)
315 k_timeout_t sndtimeo;
316#endif
317#if defined(CONFIG_NET_CONTEXT_RCVBUF)
318 uint16_t rcvbuf;
319#endif
320#if defined(CONFIG_NET_CONTEXT_SNDBUF)
321 uint16_t sndbuf;
322#endif
323#if defined(CONFIG_NET_CONTEXT_DSCP_ECN)
324 uint8_t dscp_ecn;
325#endif
327
330
333
336
338 union {
341 };
342
343#if defined(CONFIG_SOCKS)
344 bool proxy_enabled;
345#endif
346
347};
348
349static inline bool net_context_is_used(struct net_context *context)
350{
351 NET_ASSERT(context);
352
353 return context->flags & NET_CONTEXT_IN_USE;
354}
355
356static inline bool net_context_is_bound_to_iface(struct net_context *context)
357{
358 NET_ASSERT(context);
359
360 return context->flags & NET_CONTEXT_BOUND_TO_IFACE;
361}
362
370static inline bool net_context_is_accepting(struct net_context *context)
371{
372 NET_ASSERT(context);
373
374 return context->flags & NET_CONTEXT_ACCEPTING_SOCK;
375}
376
383static inline void net_context_set_accepting(struct net_context *context,
384 bool accepting)
385{
386 NET_ASSERT(context);
387
388 if (accepting) {
390 } else {
391 context->flags &= ~NET_CONTEXT_ACCEPTING_SOCK;
392 }
393}
394
402static inline bool net_context_is_closing(struct net_context *context)
403{
404 NET_ASSERT(context);
405
406 return context->flags & NET_CONTEXT_CLOSING_SOCK;
407}
408
415static inline void net_context_set_closing(struct net_context *context,
416 bool closing)
417{
418 NET_ASSERT(context);
419
420 if (closing) {
422 } else {
423 context->flags &= ~NET_CONTEXT_CLOSING_SOCK;
424 }
425}
426
427#define NET_CONTEXT_STATE_SHIFT 1
428#define NET_CONTEXT_STATE_MASK 0x03
429
439static inline
441{
442 NET_ASSERT(context);
443
444 return (enum net_context_state)
445 ((context->flags >> NET_CONTEXT_STATE_SHIFT) &
447}
448
457static inline void net_context_set_state(struct net_context *context,
459{
460 NET_ASSERT(context);
461
463 context->flags |= ((state & NET_CONTEXT_STATE_MASK) <<
465}
466
477static inline sa_family_t net_context_get_family(struct net_context *context)
478{
479 NET_ASSERT(context);
480
481 return ((context->flags & NET_CONTEXT_FAMILY) >> 3);
482}
483
493static inline void net_context_set_family(struct net_context *context,
494 sa_family_t family)
495{
496 uint8_t flag = 0U;
497
498 NET_ASSERT(context);
499
500 if (family == AF_UNSPEC || family == AF_INET || family == AF_INET6 ||
501 family == AF_PACKET || family == AF_CAN) {
502 /* Family is in BIT(4), BIT(5) and BIT(6) */
503 flag = family << 3;
504 }
505
506 context->flags |= flag;
507}
508
519static inline
521{
522 NET_ASSERT(context);
523
524 return (enum net_sock_type)((context->flags & NET_CONTEXT_TYPE) >> 6);
525}
526
536static inline void net_context_set_type(struct net_context *context,
537 enum net_sock_type type)
538{
539 uint16_t flag = 0U;
540
541 NET_ASSERT(context);
542
543 if (type == SOCK_DGRAM || type == SOCK_STREAM || type == SOCK_RAW) {
544 /* Type is in BIT(6) and BIT(7)*/
545 flag = type << 6;
546 }
547
548 context->flags |= flag;
549}
550
559#if defined(CONFIG_NET_SOCKETS_CAN)
560static inline void net_context_set_can_filter_id(struct net_context *context,
561 int filter_id)
562{
563 NET_ASSERT(context);
564
565 context->can_filter_id = filter_id;
566}
567#else
568static inline void net_context_set_can_filter_id(struct net_context *context,
569 int filter_id)
570{
571 ARG_UNUSED(context);
572 ARG_UNUSED(filter_id);
573}
574#endif
575
585#if defined(CONFIG_NET_SOCKETS_CAN)
586static inline int net_context_get_can_filter_id(struct net_context *context)
587{
588 NET_ASSERT(context);
589
590 return context->can_filter_id;
591}
592#else
593static inline int net_context_get_can_filter_id(struct net_context *context)
594{
595 ARG_UNUSED(context);
596
597 return -1;
598}
599#endif
600
611static inline uint16_t net_context_get_proto(struct net_context *context)
612{
613 return context->proto;
614}
615
626static inline void net_context_set_proto(struct net_context *context,
627 uint16_t proto)
628{
629 context->proto = proto;
630}
631
642static inline
644{
645 NET_ASSERT(context);
646
647 return net_if_get_by_index(context->iface);
648}
649
658static inline void net_context_set_iface(struct net_context *context,
659 struct net_if *iface)
660{
661 NET_ASSERT(iface);
662
663 context->iface = net_if_get_by_iface(iface);
664}
665
666static inline uint8_t net_context_get_ipv4_ttl(struct net_context *context)
667{
668 return context->ipv4_ttl;
669}
670
671static inline void net_context_set_ipv4_ttl(struct net_context *context,
672 uint8_t ttl)
673{
674 context->ipv4_ttl = ttl;
675}
676
678{
679 return context->ipv6_hop_limit;
680}
681
682static inline void net_context_set_ipv6_hop_limit(struct net_context *context,
683 uint8_t hop_limit)
684{
685 context->ipv6_hop_limit = hop_limit;
686}
687
688#if defined(CONFIG_SOCKS)
689static inline void net_context_set_proxy_enabled(struct net_context *context,
690 bool enable)
691{
692 context->proxy_enabled = enable;
693}
694
695static inline bool net_context_is_proxy_enabled(struct net_context *context)
696{
697 return context->proxy_enabled;
698}
699#else
700static inline void net_context_set_proxy_enabled(struct net_context *context,
701 bool enable)
702{
703 ARG_UNUSED(context);
704 ARG_UNUSED(enable);
705}
706
707static inline bool net_context_is_proxy_enabled(struct net_context *context)
708{
709 return false;
710}
711#endif
712
731 enum net_sock_type type,
732 uint16_t ip_proto,
733 struct net_context **context);
734
748int net_context_put(struct net_context *context);
749
762int net_context_ref(struct net_context *context);
763
777int net_context_unref(struct net_context *context);
778
789#if defined(CONFIG_NET_IPV4)
790int net_context_create_ipv4_new(struct net_context *context,
791 struct net_pkt *pkt,
792 const struct in_addr *src,
793 const struct in_addr *dst);
794#else
795static inline int net_context_create_ipv4_new(struct net_context *context,
796 struct net_pkt *pkt,
797 const struct in_addr *src,
798 const struct in_addr *dst)
799{
800 return -1;
801}
802#endif /* CONFIG_NET_IPV4 */
803
814#if defined(CONFIG_NET_IPV6)
815int net_context_create_ipv6_new(struct net_context *context,
816 struct net_pkt *pkt,
817 const struct in6_addr *src,
818 const struct in6_addr *dst);
819#else
820static inline int net_context_create_ipv6_new(struct net_context *context,
821 struct net_pkt *pkt,
822 const struct in6_addr *src,
823 const struct in6_addr *dst)
824{
825 return -1;
826}
827#endif /* CONFIG_NET_IPV6 */
828
840int net_context_bind(struct net_context *context,
841 const struct sockaddr *addr,
842 socklen_t addrlen);
843
854int net_context_listen(struct net_context *context,
855 int backlog);
856
886 const struct sockaddr *addr,
887 socklen_t addrlen,
890 void *user_data);
891
917int net_context_accept(struct net_context *context,
920 void *user_data);
921
941int net_context_send(struct net_context *context,
942 const void *buf,
943 size_t len,
946 void *user_data);
947
969int net_context_sendto(struct net_context *context,
970 const void *buf,
971 size_t len,
972 const struct sockaddr *dst_addr,
973 socklen_t addrlen,
976 void *user_data);
977
997 const struct msghdr *msghdr,
998 int flags,
1001 void *user_data);
1002
1039int net_context_recv(struct net_context *context,
1042 void *user_data);
1043
1065 int32_t delta);
1066
1076};
1077
1089 enum net_context_option option,
1090 const void *value, size_t len);
1091
1103 enum net_context_option option,
1104 void *value, size_t *len);
1105
1113typedef void (*net_context_cb_t)(struct net_context *context, void *user_data);
1114
1123
1144#if defined(CONFIG_NET_CONTEXT_NET_PKT_POOL)
1145static inline void net_context_setup_pools(struct net_context *context,
1147 net_pkt_get_pool_func_t data_pool)
1148{
1149 NET_ASSERT(context);
1150
1151 context->tx_slab = tx_slab;
1152 context->data_pool = data_pool;
1153}
1154#else
1155#define net_context_setup_pools(context, tx_pool, data_pool)
1156#endif
1157
1172 uint16_t local_port, const struct sockaddr *local_addr);
1173
1174#ifdef __cplusplus
1175}
1176#endif
1177
1182#endif /* ZEPHYR_INCLUDE_NET_NET_CONTEXT_H_ */
long atomic_t
Definition: atomic.h:22
ZTEST_BMEM int timeout
Definition: main.c:31
static ssize_t recv(int sock, void *buf, size_t max_len, int flags)
Definition: socket.h:744
unsigned short int sa_family_t
Definition: net_ip.h:164
#define AF_CAN
Definition: net_ip.h:56
#define AF_INET
Definition: net_ip.h:53
#define AF_INET6
Definition: net_ip.h:54
#define AF_PACKET
Definition: net_ip.h:55
net_sock_type
Definition: net_ip.h:84
size_t socklen_t
Definition: net_ip.h:167
#define AF_UNSPEC
Definition: net_ip.h:52
net_ip_protocol
Definition: net_ip.h:62
@ SOCK_DGRAM
Definition: net_ip.h:86
@ SOCK_RAW
Definition: net_ip.h:87
@ SOCK_STREAM
Definition: net_ip.h:85
static void net_context_set_type(struct net_context *context, enum net_sock_type type)
Set context type for this network context.
Definition: net_context.h:536
void(* net_context_cb_t)(struct net_context *context, void *user_data)
Callback used while iterating over network contexts.
Definition: net_context.h:1113
void(* net_context_recv_cb_t)(struct net_context *context, struct net_pkt *pkt, union net_ip_header *ip_hdr, union net_proto_header *proto_hdr, int status, void *user_data)
Network data receive callback.
Definition: net_context.h:93
static void net_context_set_ipv6_hop_limit(struct net_context *context, uint8_t hop_limit)
Definition: net_context.h:682
int net_context_unref(struct net_context *context)
Decrement the reference count to a network context.
int net_context_bind(struct net_context *context, const struct sockaddr *addr, socklen_t addrlen)
Assign a socket a local address.
static void net_context_set_iface(struct net_context *context, struct net_if *iface)
Set network interface for this context.
Definition: net_context.h:658
static void net_context_set_ipv4_ttl(struct net_context *context, uint8_t ttl)
Definition: net_context.h:671
int net_context_accept(struct net_context *context, net_tcp_accept_cb_t cb, k_timeout_t timeout, void *user_data)
Accept a network connection attempt.
int net_context_put(struct net_context *context)
Close and unref a network context.
static enum net_sock_type net_context_get_type(struct net_context *context)
Get context type for this network context.
Definition: net_context.h:520
static bool net_context_is_accepting(struct net_context *context)
Is this context is accepting data now.
Definition: net_context.h:370
static sa_family_t net_context_get_family(struct net_context *context)
Get address family for this network context.
Definition: net_context.h:477
static bool net_context_is_bound_to_iface(struct net_context *context)
Definition: net_context.h:356
void(* net_tcp_accept_cb_t)(struct net_context *new_context, struct sockaddr *addr, socklen_t addrlen, int status, void *user_data)
Accept callback.
Definition: net_context.h:134
int net_context_listen(struct net_context *context, int backlog)
Mark the context as a listening one.
static bool net_context_is_used(struct net_context *context)
Definition: net_context.h:349
int net_context_sendmsg(struct net_context *context, const struct msghdr *msghdr, int flags, net_context_send_cb_t cb, k_timeout_t timeout, void *user_data)
Send data in iovec to a peer specified in msghdr struct.
struct k_mem_slab *(* net_pkt_get_slab_func_t)(void)
Function that is called to get the slab that is used for net_pkt allocations.
Definition: net_context.h:176
int net_context_ref(struct net_context *context)
Take a reference count to a net_context, preventing destruction.
void(* net_context_send_cb_t)(struct net_context *context, int status, void *user_data)
Network data send callback.
Definition: net_context.h:114
static enum net_context_state net_context_get_state(struct net_context *context)
Get state for this network context.
Definition: net_context.h:440
struct net_buf_pool *(* net_pkt_get_pool_func_t)(void)
Function that is called to get the pool that is used for net_buf allocations.
Definition: net_context.h:189
int net_context_connect(struct net_context *context, const struct sockaddr *addr, socklen_t addrlen, net_context_connect_cb_t cb, k_timeout_t timeout, void *user_data)
Create a network connection.
static void net_context_set_can_filter_id(struct net_context *context, int filter_id)
Set CAN filter id for this network context.
Definition: net_context.h:568
static bool net_context_is_proxy_enabled(struct net_context *context)
Definition: net_context.h:707
#define NET_CONTEXT_IN_USE
Definition: net_context.h:36
static void net_context_set_accepting(struct net_context *context, bool accepting)
Set this context to accept data now.
Definition: net_context.h:383
net_context_state
Definition: net_context.h:39
bool net_context_port_in_use(enum net_ip_protocol ip_proto, uint16_t local_port, const struct sockaddr *local_addr)
Check if a port is in use (bound)
static void net_context_set_family(struct net_context *context, sa_family_t family)
Set address family for this network context.
Definition: net_context.h:493
static int net_context_create_ipv6_new(struct net_context *context, struct net_pkt *pkt, const struct in6_addr *src, const struct in6_addr *dst)
Create IPv6 packet in provided net_pkt from context.
Definition: net_context.h:820
static int net_context_create_ipv4_new(struct net_context *context, struct net_pkt *pkt, const struct in_addr *src, const struct in_addr *dst)
Create IPv4 packet in provided net_pkt from context.
Definition: net_context.h:795
int net_context_recv(struct net_context *context, net_context_recv_cb_t cb, k_timeout_t timeout, void *user_data)
Receive network data from a peer specified by context.
static int net_context_get_can_filter_id(struct net_context *context)
Get CAN filter id for this network context.
Definition: net_context.h:593
#define NET_CONTEXT_CLOSING_SOCK
Definition: net_context.h:66
static uint8_t net_context_get_ipv6_hop_limit(struct net_context *context)
Definition: net_context.h:677
static void net_context_set_closing(struct net_context *context, bool closing)
Set this context to closing.
Definition: net_context.h:415
static void net_context_set_proxy_enabled(struct net_context *context, bool enable)
Definition: net_context.h:700
static uint8_t net_context_get_ipv4_ttl(struct net_context *context)
Definition: net_context.h:666
#define NET_CONTEXT_BOUND_TO_IFACE
Definition: net_context.h:69
void(* net_context_connect_cb_t)(struct net_context *context, int status, void *user_data)
Connection callback.
Definition: net_context.h:161
static void net_context_set_state(struct net_context *context, enum net_context_state state)
Set state for this network context.
Definition: net_context.h:457
net_context_option
Definition: net_context.h:1067
int net_context_update_recv_wnd(struct net_context *context, int32_t delta)
Update TCP receive window for context.
void net_context_foreach(net_context_cb_t cb, void *user_data)
Go through all the network connections and call callback for each network context.
int net_context_set_option(struct net_context *context, enum net_context_option option, const void *value, size_t len)
Set an connection option for this context.
#define NET_CONTEXT_STATE_MASK
Definition: net_context.h:428
int net_context_send(struct net_context *context, const void *buf, size_t len, net_context_send_cb_t cb, k_timeout_t timeout, void *user_data)
Send data to a peer.
static bool net_context_is_closing(struct net_context *context)
Is this context closing.
Definition: net_context.h:402
#define NET_CONTEXT_FAMILY
Definition: net_context.h:54
#define NET_CONTEXT_TYPE
Definition: net_context.h:57
#define NET_CONTEXT_STATE_SHIFT
Definition: net_context.h:427
static void net_context_set_proto(struct net_context *context, uint16_t proto)
Set context IP protocol for this network context.
Definition: net_context.h:626
#define net_context_setup_pools(context, tx_pool, data_pool)
Set custom network buffer pools for context send operations.
Definition: net_context.h:1155
static uint16_t net_context_get_proto(struct net_context *context)
Get context IP protocol for this network context.
Definition: net_context.h:611
int net_context_get(sa_family_t family, enum net_sock_type type, uint16_t ip_proto, struct net_context **context)
Get network context.
#define NET_CONTEXT_ACCEPTING_SOCK
Definition: net_context.h:63
int net_context_get_option(struct net_context *context, enum net_context_option option, void *value, size_t *len)
Get connection option value for this context.
int net_context_sendto(struct net_context *context, const void *buf, size_t len, const struct sockaddr *dst_addr, socklen_t addrlen, net_context_send_cb_t cb, k_timeout_t timeout, void *user_data)
Send data to a peer specified by address.
static struct net_if * net_context_get_iface(struct net_context *context)
Get network interface for this context.
Definition: net_context.h:643
@ NET_CONTEXT_CONNECTED
Definition: net_context.h:45
@ NET_CONTEXT_IDLE
Definition: net_context.h:40
@ NET_CONTEXT_CONNECTING
Definition: net_context.h:43
@ NET_CONTEXT_READY
Definition: net_context.h:44
@ NET_CONTEXT_UNCONNECTED
Definition: net_context.h:41
@ NET_CONTEXT_CONFIGURING
Definition: net_context.h:42
@ NET_CONTEXT_LISTENING
Definition: net_context.h:46
@ NET_OPT_SNDBUF
Definition: net_context.h:1074
@ NET_OPT_PRIORITY
Definition: net_context.h:1068
@ NET_OPT_RCVTIMEO
Definition: net_context.h:1071
@ NET_OPT_TXTIME
Definition: net_context.h:1069
@ NET_OPT_SNDTIMEO
Definition: net_context.h:1072
@ NET_OPT_SOCKS5
Definition: net_context.h:1070
@ NET_OPT_RCVBUF
Definition: net_context.h:1073
@ NET_OPT_DSCP_ECN
Definition: net_context.h:1075
int net_if_get_by_iface(struct net_if *iface)
Get interface index according to pointer.
struct net_if * net_if_get_by_index(int index)
Get interface according to index.
Public kernel APIs.
Public API for network interface.
IPv6 and IPv4 definitions.
Network statistics.
flags
Definition: parser.h:96
state
Definition: parser_state.h:29
static ZTEST_DMEM int flag
Definition: main.c:26
__INT32_TYPE__ int32_t
Definition: stdint.h:74
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
__INT8_TYPE__ int8_t
Definition: stdint.h:72
Definition: net_ip.h:139
Definition: net_ip.h:151
Definition: kernel.h:2872
Definition: kernel.h:2252
Definition: kernel.h:2764
Kernel timeout type.
Definition: sys_clock.h:65
Definition: net_ip.h:235
Network buffer pool representation.
Definition: buf.h:970
Definition: net_context.h:201
struct net_context::@233 options
atomic_t refcount
Definition: net_context.h:212
void * user_data
Definition: net_context.h:208
void * fifo_reserved
Definition: net_context.h:204
uint16_t flags
Definition: net_context.h:332
net_context_send_cb_t send_cb
Definition: net_context.h:239
struct sockaddr remote
Definition: net_context.h:226
struct k_mutex lock
Definition: net_context.h:216
struct sockaddr_ptr local
Definition: net_context.h:221
uint8_t ipv4_ttl
Definition: net_context.h:340
net_context_connect_cb_t connect_cb
Definition: net_context.h:244
struct net_conn_handle * conn_handler
Definition: net_context.h:229
uint16_t proto
Definition: net_context.h:329
int8_t iface
Definition: net_context.h:335
void * tcp
Definition: net_context.h:258
net_context_recv_cb_t recv_cb
Definition: net_context.h:234
uint8_t ipv6_hop_limit
Definition: net_context.h:339
Network Interface structure.
Definition: net_if.h:510
Network packet.
Definition: net_pkt.h:62
Definition: net_ip.h:344
static const intptr_t user_data[5]
Definition: main.c:588