16#ifndef ZEPHYR_INCLUDE_NET_NET_PKT_H_
17#define ZEPHYR_INCLUDE_NET_NET_PKT_H_
24#if defined(CONFIG_IEEE802154)
89#if defined(CONFIG_NET_TCP)
93#if defined(CONFIG_NET_ROUTING) || defined(CONFIG_NET_ETHERNET_BRIDGE)
97#if defined(CONFIG_NET_PKT_TIMESTAMP)
105#if defined(CONFIG_NET_PKT_RXTIME_STATS) || defined(CONFIG_NET_PKT_TXTIME_STATS)
110#if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL) || \
111 defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
126#if defined(CONFIG_NET_PKT_TXTIME)
139#if defined(CONFIG_NET_IP)
165#if defined(CONFIG_NET_IPV4_AUTO)
172#if defined(CONFIG_NET_LLDP)
179#if defined(CONFIG_NET_TCP)
199#if defined(CONFIG_NET_IP)
204#if defined(CONFIG_NET_IPV6)
207#if defined(CONFIG_NET_IPV4)
213#if defined(CONFIG_NET_IPV4)
216#if defined(CONFIG_NET_IPV6)
221#if defined(CONFIG_NET_IPV4_FRAGMENT) || defined(CONFIG_NET_IPV6_FRAGMENT)
223#if defined(CONFIG_NET_IPV4_FRAGMENT)
229#if defined(CONFIG_NET_IPV6_FRAGMENT)
239#if defined(CONFIG_NET_IPV6)
251#if defined(CONFIG_NET_IP_DSCP_ECN)
260#if defined(CONFIG_NET_VLAN)
269#if defined(NET_PKT_HAS_CONTROL_BLOCK)
274#if defined(CONFIG_IEEE802154)
278 struct net_pkt_cb_ieee802154 cb;
303static inline void net_pkt_set_context(
struct net_pkt *pkt,
309static inline struct net_if *net_pkt_iface(
struct net_pkt *pkt)
314static inline void net_pkt_set_iface(
struct net_pkt *pkt,
struct net_if *iface)
325 pkt->lladdr_src.type = type;
326 pkt->lladdr_dst.type = type;
330static inline struct net_if *net_pkt_orig_iface(
struct net_pkt *pkt)
332#if defined(CONFIG_NET_ROUTING) || defined(CONFIG_NET_ETHERNET_BRIDGE)
333 return pkt->orig_iface;
339static inline void net_pkt_set_orig_iface(
struct net_pkt *pkt,
342#if defined(CONFIG_NET_ROUTING) || defined(CONFIG_NET_ETHERNET_BRIDGE)
343 pkt->orig_iface = iface;
352static inline void net_pkt_set_family(
struct net_pkt *pkt,
uint8_t family)
354 pkt->family = family;
357static inline bool net_pkt_is_ptp(
struct net_pkt *pkt)
359 return !!(pkt->ptp_pkt);
362static inline void net_pkt_set_ptp(
struct net_pkt *pkt,
bool is_ptp)
364 pkt->ptp_pkt = is_ptp;
367static inline bool net_pkt_is_captured(
struct net_pkt *pkt)
369 return !!(pkt->captured);
372static inline void net_pkt_set_captured(
struct net_pkt *pkt,
bool is_captured)
374 pkt->captured = is_captured;
377static inline bool net_pkt_is_l2_bridged(
struct net_pkt *pkt)
379 return IS_ENABLED(CONFIG_NET_ETHERNET_BRIDGE) ? !!(pkt->l2_bridged) : 0;
382static inline void net_pkt_set_l2_bridged(
struct net_pkt *pkt,
bool is_l2_bridged)
385 pkt->l2_bridged = is_l2_bridged;
389static inline bool net_pkt_is_l2_processed(
struct net_pkt *pkt)
391 return !!(pkt->l2_processed);
394static inline void net_pkt_set_l2_processed(
struct net_pkt *pkt,
395 bool is_l2_processed)
397 pkt->l2_processed = is_l2_processed;
402#if defined(CONFIG_NET_IP)
403 return pkt->ip_hdr_len;
409static inline void net_pkt_set_ip_hdr_len(
struct net_pkt *pkt,
uint8_t len)
411#if defined(CONFIG_NET_IP)
412 pkt->ip_hdr_len = len;
418#if defined(CONFIG_NET_IP_DSCP_ECN)
425static inline void net_pkt_set_ip_dscp(
struct net_pkt *pkt,
uint8_t dscp)
427#if defined(CONFIG_NET_IP_DSCP_ECN)
434#if defined(CONFIG_NET_IP_DSCP_ECN)
441static inline void net_pkt_set_ip_ecn(
struct net_pkt *pkt,
uint8_t ecn)
443#if defined(CONFIG_NET_IP_DSCP_ECN)
450 return pkt->sent_or_eof;
453static inline void net_pkt_set_sent(
struct net_pkt *pkt,
bool sent)
455 pkt->sent_or_eof = sent;
460 return pkt->pkt_queued;
463static inline void net_pkt_set_queued(
struct net_pkt *pkt,
bool send)
465 pkt->pkt_queued =
send;
470#if defined(CONFIG_NET_TCP)
471 return pkt->tcp_first_msg;
477static inline void net_pkt_set_tcp_1st_msg(
struct net_pkt *pkt,
bool is_1st)
479#if defined(CONFIG_NET_TCP)
480 pkt->tcp_first_msg = is_1st;
487#if defined(CONFIG_NET_SOCKETS)
490 return pkt->sent_or_eof;
493static inline void net_pkt_set_eof(
struct net_pkt *pkt,
bool eof)
495 pkt->sent_or_eof = eof;
499#if defined(CONFIG_NET_ROUTE)
500static inline bool net_pkt_forwarding(
struct net_pkt *pkt)
502 return pkt->forwarding;
505static inline void net_pkt_set_forwarding(
struct net_pkt *pkt,
bool forward)
507 pkt->forwarding = forward;
510static inline bool net_pkt_forwarding(
struct net_pkt *pkt)
516#if defined(CONFIG_NET_IPV4)
519 return pkt->ipv4_ttl;
522static inline void net_pkt_set_ipv4_ttl(
struct net_pkt *pkt,
530 return pkt->ipv4_opts_len;
533static inline void net_pkt_set_ipv4_opts_len(
struct net_pkt *pkt,
536 pkt->ipv4_opts_len = opts_len;
546static inline void net_pkt_set_ipv4_ttl(
struct net_pkt *pkt,
559static inline void net_pkt_set_ipv4_opts_len(
struct net_pkt *pkt,
563 ARG_UNUSED(opts_len);
567#if defined(CONFIG_NET_IPV6)
568static inline uint8_t net_pkt_ipv6_ext_opt_len(
struct net_pkt *pkt)
570 return pkt->ipv6_ext_opt_len;
573static inline void net_pkt_set_ipv6_ext_opt_len(
struct net_pkt *pkt,
576 pkt->ipv6_ext_opt_len = len;
581 return pkt->ipv6_next_hdr;
584static inline void net_pkt_set_ipv6_next_hdr(
struct net_pkt *pkt,
587 pkt->ipv6_next_hdr = next_hdr;
592 return pkt->ipv6_ext_len;
595static inline void net_pkt_set_ipv6_ext_len(
struct net_pkt *pkt,
uint16_t len)
597 pkt->ipv6_ext_len = len;
602 return pkt->ipv6_prev_hdr_start;
605static inline void net_pkt_set_ipv6_hdr_prev(
struct net_pkt *pkt,
608 pkt->ipv6_prev_hdr_start = offset;
613 return pkt->ipv6_hop_limit;
616static inline void net_pkt_set_ipv6_hop_limit(
struct net_pkt *pkt,
619 pkt->ipv6_hop_limit = hop_limit;
622static inline uint8_t net_pkt_ipv6_ext_opt_len(
struct net_pkt *pkt)
629static inline void net_pkt_set_ipv6_ext_opt_len(
struct net_pkt *pkt,
643static inline void net_pkt_set_ipv6_next_hdr(
struct net_pkt *pkt,
647 ARG_UNUSED(next_hdr);
657static inline void net_pkt_set_ipv6_ext_len(
struct net_pkt *pkt,
uint16_t len)
670static inline void net_pkt_set_ipv6_hdr_prev(
struct net_pkt *pkt,
684static inline void net_pkt_set_ipv6_hop_limit(
struct net_pkt *pkt,
688 ARG_UNUSED(hop_limit);
694#if defined(CONFIG_NET_IPV6)
695 return pkt->ipv6_ext_len;
696#elif defined(CONFIG_NET_IPV4)
697 return pkt->ipv4_opts_len;
705#if defined(CONFIG_NET_IPV4_FRAGMENT)
706static inline uint16_t net_pkt_ipv4_fragment_offset(
struct net_pkt *pkt)
708 return (pkt->ipv4_fragment.flags & NET_IPV4_FRAGH_OFFSET_MASK) * 8;
711static inline bool net_pkt_ipv4_fragment_more(
struct net_pkt *pkt)
713 return (pkt->ipv4_fragment.flags & NET_IPV4_MORE_FRAG_MASK) != 0;
718 pkt->ipv4_fragment.flags =
flags;
723 return pkt->ipv4_fragment.id;
726static inline void net_pkt_set_ipv4_fragment_id(
struct net_pkt *pkt,
uint32_t id)
728 pkt->ipv4_fragment.id = id;
731static inline uint16_t net_pkt_ipv4_fragment_offset(
struct net_pkt *pkt)
738static inline bool net_pkt_ipv4_fragment_more(
struct net_pkt *pkt)
758static inline void net_pkt_set_ipv4_fragment_id(
struct net_pkt *pkt,
uint32_t id)
765#if defined(CONFIG_NET_IPV6_FRAGMENT)
768 return pkt->ipv6_fragment.hdr_start;
771static inline void net_pkt_set_ipv6_fragment_start(
struct net_pkt *pkt,
774 pkt->ipv6_fragment.hdr_start = start;
777static inline uint16_t net_pkt_ipv6_fragment_offset(
struct net_pkt *pkt)
779 return pkt->ipv6_fragment.flags & NET_IPV6_FRAGH_OFFSET_MASK;
781static inline bool net_pkt_ipv6_fragment_more(
struct net_pkt *pkt)
783 return (pkt->ipv6_fragment.flags & 0x01) != 0;
786static inline void net_pkt_set_ipv6_fragment_flags(
struct net_pkt *pkt,
789 pkt->ipv6_fragment.flags =
flags;
794 return pkt->ipv6_fragment.id;
797static inline void net_pkt_set_ipv6_fragment_id(
struct net_pkt *pkt,
800 pkt->ipv6_fragment.id = id;
810static inline void net_pkt_set_ipv6_fragment_start(
struct net_pkt *pkt,
817static inline uint16_t net_pkt_ipv6_fragment_offset(
struct net_pkt *pkt)
824static inline bool net_pkt_ipv6_fragment_more(
struct net_pkt *pkt)
831static inline void net_pkt_set_ipv6_fragment_flags(
struct net_pkt *pkt,
845static inline void net_pkt_set_ipv6_fragment_id(
struct net_pkt *pkt,
855 return pkt->priority;
858static inline void net_pkt_set_priority(
struct net_pkt *pkt,
861 pkt->priority = priority;
864#if defined(CONFIG_NET_VLAN)
880static inline void net_pkt_set_vlan_priority(
struct net_pkt *pkt,
886static inline bool net_pkt_vlan_dei(
struct net_pkt *pkt)
891static inline void net_pkt_set_vlan_dei(
struct net_pkt *pkt,
bool dei)
896static inline void net_pkt_set_vlan_tci(
struct net_pkt *pkt,
uint16_t tci)
903 return pkt->vlan_tci;
923static inline bool net_pkt_vlan_dei(
struct net_pkt *pkt)
928static inline void net_pkt_set_vlan_dei(
struct net_pkt *pkt,
bool dei)
939static inline void net_pkt_set_vlan_tci(
struct net_pkt *pkt,
uint16_t tci)
946#if defined(CONFIG_NET_PKT_TIMESTAMP)
949 return &pkt->timestamp;
952static inline void net_pkt_set_timestamp(
struct net_pkt *pkt,
955 pkt->timestamp.second = timestamp->
second;
956 pkt->timestamp.nanosecond = timestamp->
nanosecond;
966static inline void net_pkt_set_timestamp(
struct net_pkt *pkt,
970 ARG_UNUSED(timestamp);
974#if defined(CONFIG_NET_PKT_RXTIME_STATS) || defined(CONFIG_NET_PKT_TXTIME_STATS)
977 return pkt->create_time;
980static inline void net_pkt_set_create_time(
struct net_pkt *pkt,
983 pkt->create_time = create_time;
993static inline void net_pkt_set_create_time(
struct net_pkt *pkt,
997 ARG_UNUSED(create_time);
1001#if defined(CONFIG_NET_PKT_TXTIME)
1007static inline void net_pkt_set_txtime(
struct net_pkt *pkt,
uint64_t txtime)
1009 pkt->txtime = txtime;
1019static inline void net_pkt_set_txtime(
struct net_pkt *pkt,
uint64_t txtime)
1026#if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL) || \
1027 defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
1030 return pkt->detail.stat;
1033static inline int net_pkt_stats_tick_count(
struct net_pkt *pkt)
1035 return pkt->detail.count;
1038static inline void net_pkt_stats_tick_reset(
struct net_pkt *pkt)
1040 memset(&pkt->detail, 0,
sizeof(pkt->detail));
1046 if (pkt->detail.count >= NET_PKT_DETAIL_STATS_COUNT) {
1047 NET_ERR(
"Detail stats count overflow (%d >= %d)",
1048 pkt->detail.count, NET_PKT_DETAIL_STATS_COUNT);
1052 pkt->detail.stat[pkt->detail.count++] = tick;
1055#define net_pkt_set_tx_stats_tick(pkt, tick) net_pkt_set_stats_tick(pkt, tick)
1056#define net_pkt_set_rx_stats_tick(pkt, tick) net_pkt_set_stats_tick(pkt, tick)
1065static inline int net_pkt_stats_tick_count(
struct net_pkt *pkt)
1072static inline void net_pkt_stats_tick_reset(
struct net_pkt *pkt)
1077static inline void net_pkt_set_stats_tick(
struct net_pkt *pkt,
uint32_t tick)
1083#define net_pkt_set_tx_stats_tick(pkt, tick)
1084#define net_pkt_set_rx_stats_tick(pkt, tick)
1088static inline size_t net_pkt_get_len(
struct net_pkt *pkt)
1103static inline bool net_pkt_is_empty(
struct net_pkt *pkt)
1110 return &pkt->lladdr_src;
1115 return &pkt->lladdr_dst;
1118static inline void net_pkt_lladdr_swap(
struct net_pkt *pkt)
1122 net_pkt_lladdr_src(pkt)->addr = net_pkt_lladdr_dst(pkt)->addr;
1123 net_pkt_lladdr_dst(pkt)->addr =
addr;
1126static inline void net_pkt_lladdr_clear(
struct net_pkt *pkt)
1128 net_pkt_lladdr_src(pkt)->addr = NULL;
1129 net_pkt_lladdr_src(pkt)->len = 0U;
1134 return pkt->ll_proto_type;
1139 pkt->ll_proto_type =
type;
1142#if defined(CONFIG_NET_IPV4_AUTO)
1143static inline bool net_pkt_ipv4_auto(
struct net_pkt *pkt)
1145 return pkt->ipv4_auto_arp_msg;
1148static inline void net_pkt_set_ipv4_auto(
struct net_pkt *pkt,
1149 bool is_auto_arp_msg)
1151 pkt->ipv4_auto_arp_msg = is_auto_arp_msg;
1154static inline bool net_pkt_ipv4_auto(
struct net_pkt *pkt)
1161static inline void net_pkt_set_ipv4_auto(
struct net_pkt *pkt,
1162 bool is_auto_arp_msg)
1165 ARG_UNUSED(is_auto_arp_msg);
1169#if defined(CONFIG_NET_LLDP)
1170static inline bool net_pkt_is_lldp(
struct net_pkt *pkt)
1172 return pkt->lldp_pkt;
1175static inline void net_pkt_set_lldp(
struct net_pkt *pkt,
bool is_lldp)
1177 pkt->lldp_pkt = is_lldp;
1180static inline bool net_pkt_is_lldp(
struct net_pkt *pkt)
1187static inline void net_pkt_set_lldp(
struct net_pkt *pkt,
bool is_lldp)
1190 ARG_UNUSED(is_lldp);
1194#if defined(CONFIG_NET_L2_PPP)
1195static inline bool net_pkt_is_ppp(
struct net_pkt *pkt)
1197 return pkt->ppp_msg;
1200static inline void net_pkt_set_ppp(
struct net_pkt *pkt,
1203 pkt->ppp_msg = is_ppp_msg;
1206static inline bool net_pkt_is_ppp(
struct net_pkt *pkt)
1213static inline void net_pkt_set_ppp(
struct net_pkt *pkt,
1217 ARG_UNUSED(is_ppp_msg);
1221#if defined(NET_PKT_HAS_CONTROL_BLOCK)
1222static inline void *net_pkt_cb(
struct net_pkt *pkt)
1227static inline void *net_pkt_cb(
struct net_pkt *pkt)
1235#define NET_IPV6_HDR(pkt) ((struct net_ipv6_hdr *)net_pkt_ip_data(pkt))
1236#define NET_IPV4_HDR(pkt) ((struct net_ipv4_hdr *)net_pkt_ip_data(pkt))
1238static inline void net_pkt_set_src_ipv6_addr(
struct net_pkt *pkt)
1241 net_pkt_context(pkt)),
1242 (
struct in6_addr *)NET_IPV6_HDR(pkt)->src);
1245static inline void net_pkt_set_overwrite(
struct net_pkt *pkt,
bool overwrite)
1247 pkt->overwrite = overwrite;
1250static inline bool net_pkt_is_being_overwritten(
struct net_pkt *pkt)
1252 return pkt->overwrite;
1255#ifdef CONFIG_NET_PKT_FILTER
1257bool net_pkt_filter_send_ok(
struct net_pkt *pkt);
1258bool net_pkt_filter_recv_ok(
struct net_pkt *pkt);
1262static inline bool net_pkt_filter_send_ok(
struct net_pkt *pkt)
1269static inline bool net_pkt_filter_recv_ok(
struct net_pkt *pkt)
1293#define NET_PKT_SLAB_DEFINE(name, count) \
1294 K_MEM_SLAB_DEFINE(name, sizeof(struct net_pkt), count, 4)
1297#define NET_PKT_TX_SLAB_DEFINE(name, count) NET_PKT_SLAB_DEFINE(name, count)
1312#define NET_PKT_DATA_POOL_DEFINE(name, count) \
1313 NET_BUF_POOL_DEFINE(name, count, CONFIG_NET_BUF_DATA_SIZE, \
1318#if defined(CONFIG_NET_DEBUG_NET_PKT_ALLOC) || \
1319 (CONFIG_NET_PKT_LOG_LEVEL >= LOG_LEVEL_DBG)
1320#define NET_PKT_DEBUG_ENABLED
1323#if defined(NET_PKT_DEBUG_ENABLED)
1335#define net_pkt_get_reserve_data(pool, min_len, timeout) \
1336 net_pkt_get_reserve_data_debug(pool, min_len, timeout, __func__, __LINE__)
1338struct net_buf *net_pkt_get_reserve_rx_data_debug(
size_t min_len,
1342#define net_pkt_get_reserve_rx_data(min_len, timeout) \
1343 net_pkt_get_reserve_rx_data_debug(min_len, timeout, __func__, __LINE__)
1345struct net_buf *net_pkt_get_reserve_tx_data_debug(
size_t min_len,
1349#define net_pkt_get_reserve_tx_data(min_len, timeout) \
1350 net_pkt_get_reserve_tx_data_debug(min_len, timeout, __func__, __LINE__)
1352struct net_buf *net_pkt_get_frag_debug(
struct net_pkt *pkt,
size_t min_len,
1354 const char *caller,
int line);
1355#define net_pkt_get_frag(pkt, min_len, timeout) \
1356 net_pkt_get_frag_debug(pkt, min_len, timeout, __func__, __LINE__)
1358void net_pkt_unref_debug(
struct net_pkt *pkt,
const char *caller,
int line);
1359#define net_pkt_unref(pkt) net_pkt_unref_debug(pkt, __func__, __LINE__)
1361struct net_pkt *net_pkt_ref_debug(
struct net_pkt *pkt,
const char *caller,
1363#define net_pkt_ref(pkt) net_pkt_ref_debug(pkt, __func__, __LINE__)
1366 const char *caller,
int line);
1367#define net_pkt_frag_ref(frag) net_pkt_frag_ref_debug(frag, __func__, __LINE__)
1369void net_pkt_frag_unref_debug(
struct net_buf *frag,
1370 const char *caller,
int line);
1371#define net_pkt_frag_unref(frag) \
1372 net_pkt_frag_unref_debug(frag, __func__, __LINE__)
1377 const char *caller,
int line);
1378#define net_pkt_frag_del(pkt, parent, frag) \
1379 net_pkt_frag_del_debug(pkt, parent, frag, __func__, __LINE__)
1381void net_pkt_frag_add_debug(
struct net_pkt *pkt,
struct net_buf *frag,
1382 const char *caller,
int line);
1383#define net_pkt_frag_add(pkt, frag) \
1384 net_pkt_frag_add_debug(pkt, frag, __func__, __LINE__)
1386void net_pkt_frag_insert_debug(
struct net_pkt *pkt,
struct net_buf *frag,
1387 const char *caller,
int line);
1388#define net_pkt_frag_insert(pkt, frag) \
1389 net_pkt_frag_insert_debug(pkt, frag, __func__, __LINE__)
1402#if defined(NET_PKT_DEBUG_ENABLED)
1405#define net_pkt_print_frags(pkt)
1422#if !defined(NET_PKT_DEBUG_ENABLED)
1440#if !defined(NET_PKT_DEBUG_ENABLED)
1456#if !defined(NET_PKT_DEBUG_ENABLED)
1470#if !defined(NET_PKT_DEBUG_ENABLED)
1483#if !defined(NET_PKT_DEBUG_ENABLED)
1496#if !defined(NET_PKT_DEBUG_ENABLED)
1505#if !defined(NET_PKT_DEBUG_ENABLED)
1519#if !defined(NET_PKT_DEBUG_ENABLED)
1531#if !defined(NET_PKT_DEBUG_ENABLED)
1541#if !defined(NET_PKT_DEBUG_ENABLED)
1562 struct k_mem_slab **tx,
1568#if defined(CONFIG_NET_DEBUG_NET_PKT_ALLOC)
1572void net_pkt_print(
void);
1574typedef void (*net_pkt_allocs_cb_t)(
struct net_pkt *pkt,
1576 const char *func_alloc,
1578 const char *func_free,
1583void net_pkt_allocs_foreach(net_pkt_allocs_cb_t cb,
void *
user_data);
1585const char *net_pkt_slab2str(
struct k_mem_slab *slab);
1586const char *net_pkt_pool2str(
struct net_buf_pool *pool);
1589#define net_pkt_print(...)
1595#if defined(NET_PKT_DEBUG_ENABLED)
1598 const char *caller,
int line);
1599#define net_pkt_alloc(_timeout) \
1600 net_pkt_alloc_debug(_timeout, __func__, __LINE__)
1602struct net_pkt *net_pkt_alloc_from_slab_debug(
struct k_mem_slab *
slab,
1604 const char *caller,
int line);
1605#define net_pkt_alloc_from_slab(_slab, _timeout) \
1606 net_pkt_alloc_from_slab_debug(_slab, _timeout, __func__, __LINE__)
1609 const char *caller,
int line);
1610#define net_pkt_rx_alloc(_timeout) \
1611 net_pkt_rx_alloc_debug(_timeout, __func__, __LINE__)
1617#define net_pkt_alloc_on_iface(_iface, _timeout) \
1618 net_pkt_alloc_on_iface_debug(_iface, _timeout, __func__, __LINE__)
1624#define net_pkt_rx_alloc_on_iface(_iface, _timeout) \
1625 net_pkt_rx_alloc_on_iface_debug(_iface, _timeout, \
1628int net_pkt_alloc_buffer_debug(
struct net_pkt *pkt,
1632 const char *caller,
int line);
1633#define net_pkt_alloc_buffer(_pkt, _size, _proto, _timeout) \
1634 net_pkt_alloc_buffer_debug(_pkt, _size, _proto, _timeout, \
1644#define net_pkt_alloc_with_buffer(_iface, _size, _family, \
1646 net_pkt_alloc_with_buffer_debug(_iface, _size, _family, \
1657#define net_pkt_rx_alloc_with_buffer(_iface, _size, _family, \
1659 net_pkt_rx_alloc_with_buffer_debug(_iface, _size, _family, \
1675#if !defined(NET_PKT_DEBUG_ENABLED)
1693#if !defined(NET_PKT_DEBUG_ENABLED)
1708#if !defined(NET_PKT_DEBUG_ENABLED)
1720#if !defined(NET_PKT_DEBUG_ENABLED)
1744#if !defined(NET_PKT_DEBUG_ENABLED)
1762#if !defined(NET_PKT_DEBUG_ENABLED)
2163#if !defined(CONFIG_NET_HEADERS_ALWAYS_CONTIGUOUS)
2169#if defined(CONFIG_NET_HEADERS_ALWAYS_CONTIGUOUS)
2170#define NET_PKT_DATA_ACCESS_DEFINE(_name, _type) \
2171 struct net_pkt_data_access _name = { \
2172 .size = sizeof(_type), \
2175#define NET_PKT_DATA_ACCESS_CONTIGUOUS_DEFINE(_name, _type) \
2176 NET_PKT_DATA_ACCESS_DEFINE(_name, _type)
2179#define NET_PKT_DATA_ACCESS_DEFINE(_name, _type) \
2180 _type _hdr_##_name; \
2181 struct net_pkt_data_access _name = { \
2182 .data = &_hdr_##_name, \
2183 .size = sizeof(_type), \
2186#define NET_PKT_DATA_ACCESS_CONTIGUOUS_DEFINE(_name, _type) \
2187 struct net_pkt_data_access _name = { \
2189 .size = sizeof(_type), \
long atomic_t
Definition: atomic.h:22
#define ALWAYS_INLINE
Definition: common.h:124
ZTEST_BMEM int timeout
Definition: main.c:31
ZTEST_BMEM int count
Definition: main.c:33
VLAN specific definitions.
static ssize_t send(int sock, const void *buf, size_t len, int flags)
Definition: socket.h:738
unsigned short int sa_family_t
Definition: net_ip.h:164
#define htons(x)
Convert 16-bit value from host to network byte order.
Definition: net_ip.h:120
#define htonl(x)
Convert 32-bit value from host to network byte order.
Definition: net_ip.h:128
net_ip_protocol
Definition: net_ip.h:62
static size_t net_buf_frags_len(struct net_buf *buf)
Calculate amount of bytes stored in fragments.
Definition: buf.h:2454
static struct net_if * net_context_get_iface(struct net_context *context)
Get network interface for this context.
Definition: net_context.h:643
static struct net_linkaddr * net_if_get_link_addr(struct net_if *iface)
Get an network interface's link address.
Definition: net_if.h:859
static const struct in6_addr * net_if_ipv6_select_src_addr(struct net_if *iface, const struct in6_addr *dst)
Get a IPv6 source address that should be used when sending network data to destination.
Definition: net_if.h:1653
void net_pkt_frag_add(struct net_pkt *pkt, struct net_buf *frag)
Add a fragment to a packet at the end of its fragment list.
static int net_pkt_write_be32(struct net_pkt *pkt, uint32_t data)
Definition: net_pkt.h:2069
void net_pkt_cursor_init(struct net_pkt *pkt)
Initialize net_pkt cursor.
int net_pkt_skip(struct net_pkt *pkt, size_t length)
Skip some data from a net_pkt.
struct net_pkt * net_pkt_shallow_clone(struct net_pkt *pkt, k_timeout_t timeout)
Clone pkt and increase the refcount of its buffer.
void net_pkt_append_buffer(struct net_pkt *pkt, struct net_buf *buffer)
Append a buffer in packet.
#define net_pkt_print_frags(pkt)
Print fragment list and the fragment sizes.
Definition: net_pkt.h:1405
int net_pkt_update_length(struct net_pkt *pkt, size_t length)
Update the overall length of a packet.
int net_pkt_pull(struct net_pkt *pkt, size_t length)
Remove data from the packet at current location.
int net_pkt_copy(struct net_pkt *pkt_dst, struct net_pkt *pkt_src, size_t length)
Copy data from a packet into another one.
struct net_pkt * net_pkt_rx_alloc(k_timeout_t timeout)
Allocate an initialized net_pkt for RX.
struct net_pkt * net_pkt_ref(struct net_pkt *pkt)
Increase the packet ref count.
int net_pkt_read_be16(struct net_pkt *pkt, uint16_t *data)
Read uint16_t big endian data from a net_pkt.
struct net_pkt * net_pkt_alloc_with_buffer(struct net_if *iface, size_t size, sa_family_t family, enum net_ip_protocol proto, k_timeout_t timeout)
Allocate a network packet and buffer at once.
void net_pkt_frag_unref(struct net_buf *frag)
Decrease the packet fragment ref count.
struct net_pkt * net_pkt_rx_alloc_with_buffer(struct net_if *iface, size_t size, sa_family_t family, enum net_ip_protocol proto, k_timeout_t timeout)
struct net_pkt * net_pkt_rx_clone(struct net_pkt *pkt, k_timeout_t timeout)
Clone pkt and its buffer. The cloned packet will be allocated on the RX packet poll.
void net_pkt_trim_buffer(struct net_pkt *pkt)
Trim net_pkt buffer.
struct net_pkt * net_pkt_alloc_on_iface(struct net_if *iface, k_timeout_t timeout)
Allocate a network packet for a specific network interface.
void net_pkt_get_info(struct k_mem_slab **rx, struct k_mem_slab **tx, struct net_buf_pool **rx_data, struct net_buf_pool **tx_data)
Get information about predefined RX, TX and DATA pools.
void net_pkt_unref(struct net_pkt *pkt)
Place packet back into the available packets slab.
static int net_pkt_write_be16(struct net_pkt *pkt, uint16_t data)
Definition: net_pkt.h:2061
struct net_pkt * net_pkt_alloc(k_timeout_t timeout)
Allocate an initialized net_pkt.
int net_pkt_read(struct net_pkt *pkt, void *data, size_t length)
Read some data from a net_pkt.
struct net_buf * net_pkt_frag_del(struct net_pkt *pkt, struct net_buf *parent, struct net_buf *frag)
Delete existing fragment from a packet.
int net_pkt_set_data(struct net_pkt *pkt, struct net_pkt_data_access *access)
Set contiguous data into a network packet.
void * net_pkt_get_data(struct net_pkt *pkt, struct net_pkt_data_access *access)
Get data from a network packet in a contiguous way.
static int net_pkt_write_u8(struct net_pkt *pkt, uint8_t data)
Definition: net_pkt.h:2055
size_t net_pkt_available_payload_buffer(struct net_pkt *pkt, enum net_ip_protocol proto)
Get available buffer space for payload from a pkt.
int net_pkt_read_le16(struct net_pkt *pkt, uint16_t *data)
Read uint16_t little endian data from a net_pkt.
int net_pkt_read_be32(struct net_pkt *pkt, uint32_t *data)
Read uint32_t big endian data from a net_pkt.
struct net_pkt * net_pkt_rx_alloc_on_iface(struct net_if *iface, k_timeout_t timeout)
int net_pkt_remove_tail(struct net_pkt *pkt, size_t length)
Remove length bytes from tail of packet.
struct net_buf * net_pkt_get_reserve_tx_data(size_t min_len, k_timeout_t timeout)
Get TX DATA buffer from pool. Normally you should use net_pkt_get_frag() instead.
static void * net_pkt_cursor_get_pos(struct net_pkt *pkt)
Returns current position of the cursor.
Definition: net_pkt.h:1883
void net_pkt_frag_insert(struct net_pkt *pkt, struct net_buf *frag)
Insert a fragment to a packet at the beginning of its fragment list.
int net_pkt_memset(struct net_pkt *pkt, int byte, size_t length)
Memset some data in a net_pkt.
static void net_pkt_cursor_backup(struct net_pkt *pkt, struct net_pkt_cursor *backup)
Backup net_pkt cursor.
Definition: net_pkt.h:1856
void net_pkt_compact(struct net_pkt *pkt)
Compact the fragment list of a packet.
static int net_pkt_acknowledge_data(struct net_pkt *pkt, struct net_pkt_data_access *access)
Definition: net_pkt.h:2230
static int net_pkt_write_le16(struct net_pkt *pkt, uint16_t data)
Definition: net_pkt.h:2085
static void net_pkt_cursor_restore(struct net_pkt *pkt, struct net_pkt_cursor *backup)
Restore net_pkt cursor from a backup.
Definition: net_pkt.h:1869
uint16_t net_pkt_get_current_offset(struct net_pkt *pkt)
Get the actual offset in the packet from its cursor.
size_t net_pkt_remaining_data(struct net_pkt *pkt)
Get the amount of data which can be read from current cursor position.
int net_pkt_alloc_buffer(struct net_pkt *pkt, size_t size, enum net_ip_protocol proto, k_timeout_t timeout)
Allocate buffer for a net_pkt.
int net_pkt_write(struct net_pkt *pkt, const void *data, size_t length)
Write data into a net_pkt.
struct net_buf * net_pkt_frag_ref(struct net_buf *frag)
Increase the packet fragment ref count.
size_t net_pkt_available_buffer(struct net_pkt *pkt)
Get available buffer space from a pkt.
struct net_pkt * net_pkt_clone(struct net_pkt *pkt, k_timeout_t timeout)
Clone pkt and its buffer. The cloned packet will be allocated on the same pool as the original one.
struct net_pkt * net_pkt_alloc_from_slab(struct k_mem_slab *slab, k_timeout_t timeout)
Allocate an initialized net_pkt from a specific slab.
static int net_pkt_write_le32(struct net_pkt *pkt, uint32_t data)
Definition: net_pkt.h:2077
struct net_buf * net_pkt_get_reserve_rx_data(size_t min_len, k_timeout_t timeout)
Get RX DATA buffer from pool. Normally you should use net_pkt_get_frag() instead.
bool net_pkt_is_contiguous(struct net_pkt *pkt, size_t size)
Check if a data size could fit contiguously.
static int net_pkt_read_u8(struct net_pkt *pkt, uint8_t *data)
Definition: net_pkt.h:1992
struct net_buf * net_pkt_get_frag(struct net_pkt *pkt, size_t min_len, k_timeout_t timeout)
Get a data fragment that might be from user specific buffer pool or from global DATA pool.
size_t net_pkt_get_contiguous_len(struct net_pkt *pkt)
#define IS_ENABLED(config_macro)
Check for macro definition in compiler-visible expressions.
Definition: util_macro.h:124
static uint16_t net_eth_vlan_set_vid(uint16_t tci, uint16_t vid)
Set VLAN identifier to TCI.
Definition: ethernet_vlan.h:76
static uint8_t net_eth_vlan_get_dei(uint16_t tci)
Get Drop Eligible Indicator from TCI.
Definition: ethernet_vlan.h:51
#define NET_VLAN_TAG_UNSPEC
Definition: ethernet_vlan.h:30
static uint16_t net_eth_vlan_set_dei(uint16_t tci, bool dei)
Set Drop Eligible Indicator to TCI.
Definition: ethernet_vlan.h:89
static uint16_t net_eth_vlan_get_vid(uint16_t tci)
Get VLAN identifier from TCI.
Definition: ethernet_vlan.h:39
static uint16_t net_eth_vlan_set_pcp(uint16_t tci, uint8_t pcp)
Set Priority Code Point to TCI.
Definition: ethernet_vlan.h:102
static uint8_t net_eth_vlan_get_pcp(uint16_t tci)
Get Priority Code Point from TCI.
Definition: ethernet_vlan.h:63
Packet data common to all IEEE 802.15.4 L2 layers.
Network context definitions.
Network core definitions.
Public API for network interface.
IPv6 and IPv4 definitions.
Public API for network link address.
flags
Definition: parser.h:96
Public functions for the Precision Time Protocol time specification.
struct _snode sys_snode_t
Definition: slist.h:33
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__INTPTR_TYPE__ intptr_t
Definition: stdint.h:104
__UINT64_TYPE__ uint64_t
Definition: stdint.h:91
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
void * memset(void *buf, int c, size_t n)
Kernel timeout type.
Definition: sys_clock.h:65
Network buffer pool representation.
Definition: buf.h:971
Network buffer representation.
Definition: buf.h:906
uint8_t * data
Definition: buf.h:932
uint16_t len
Definition: buf.h:935
Definition: net_context.h:201
Network Interface structure.
Definition: net_if.h:516
Hardware link address structure.
Definition: net_linkaddr.h:67
uint8_t * addr
Definition: net_linkaddr.h:69
uint8_t type
Definition: net_linkaddr.h:75
uint8_t * pos
Definition: net_pkt.h:53
struct net_buf * buf
Definition: net_pkt.h:51
Definition: net_pkt.h:2162
const size_t size
Definition: net_pkt.h:2166
void * data
Definition: net_pkt.h:2164
Network packet.
Definition: net_pkt.h:62
struct net_buf * frags
Definition: net_pkt.h:74
struct net_context * context
Definition: net_pkt.h:82
struct net_pkt_cursor cursor
Definition: net_pkt.h:79
struct net_if * iface
Definition: net_pkt.h:85
intptr_t fifo
Definition: net_pkt.h:67
struct net_buf * buffer
Definition: net_pkt.h:75
struct k_mem_slab * slab
Definition: net_pkt.h:70
Precision Time Protocol Timestamp format.
Definition: ptp_time.h:39
uint32_t nanosecond
Definition: ptp_time.h:57
uint64_t second
Definition: ptp_time.h:53
#define sys_cpu_to_le32(val)
Convert 32-bit integer from host endianness to little-endian.
Definition: byteorder.h:198
#define sys_cpu_to_le16(val)
Convert 16-bit integer from host endianness to little-endian.
Definition: byteorder.h:194
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
static ZTEST_BMEM char buffer[8]
Definition: test_mbox_api.c:551
static const char * tag(void)
Definition: main.c:27
static const intptr_t user_data[5]
Definition: main.c:588