16#ifndef ZEPHYR_INCLUDE_NET_NET_PKT_H_
17#define ZEPHYR_INCLUDE_NET_NET_PKT_H_
44struct canbus_net_isotp_tx_ctx;
45struct canbus_net_isotp_rx_ctx;
89#if defined(CONFIG_NET_ROUTING)
93#if defined(CONFIG_NET_PKT_TIMESTAMP)
98#if defined(CONFIG_NET_PKT_RXTIME_STATS) || defined(CONFIG_NET_PKT_TXTIME_STATS)
103#if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL) || \
104 defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
119#if defined(CONFIG_NET_PKT_TXTIME)
131#if defined(CONFIG_NET_TCP2)
178#if defined(CONFIG_NET_TCP)
204#if defined(CONFIG_NET_IPV4)
207#if defined(CONFIG_NET_IPV6)
217#if defined(CONFIG_NET_VLAN)
226#if defined(CONFIG_NET_IPV6)
234#if defined(CONFIG_NET_IPV6_FRAGMENT)
244#if defined(CONFIG_IEEE802154)
248 uint8_t ieee802154_ack_fpb : 1;
249 uint8_t ieee802154_frame_secured : 1;
253 uint8_t ieee802154_mac_hdr_rdy : 1;
258#if defined(CONFIG_IEEE802154_2015)
260 uint8_t ieee802154_ack_seb : 1;
265#if defined(CONFIG_NET_L2_CANBUS)
267 struct canbus_isotp_tx_ctx *canbus_tx_ctx;
268 struct canbus_isotp_rx_ctx *canbus_rx_ctx;
287static inline void net_pkt_set_context(
struct net_pkt *pkt,
293static inline struct net_if *net_pkt_iface(
struct net_pkt *pkt)
298static inline void net_pkt_set_iface(
struct net_pkt *pkt,
struct net_if *iface)
312static inline struct net_if *net_pkt_orig_iface(
struct net_pkt *pkt)
314#if defined(CONFIG_NET_ROUTING)
315 return pkt->orig_iface;
321static inline void net_pkt_set_orig_iface(
struct net_pkt *pkt,
324#if defined(CONFIG_NET_ROUTING)
325 pkt->orig_iface = iface;
334static inline void net_pkt_set_family(
struct net_pkt *pkt,
uint8_t family)
336 pkt->family = family;
339static inline bool net_pkt_is_gptp(
struct net_pkt *pkt)
341 return !!(pkt->gptp_pkt);
344static inline void net_pkt_set_gptp(
struct net_pkt *pkt,
bool is_gptp)
346 pkt->gptp_pkt = is_gptp;
349static inline bool net_pkt_is_captured(
struct net_pkt *pkt)
351 return !!(pkt->captured);
354static inline void net_pkt_set_captured(
struct net_pkt *pkt,
bool is_captured)
356 pkt->captured = is_captured;
359static inline bool net_pkt_is_l2_bridged(
struct net_pkt *pkt)
361 return IS_ENABLED(CONFIG_NET_ETHERNET_BRIDGE) ? !!(pkt->l2_bridged) : 0;
364static inline void net_pkt_set_l2_bridged(
struct net_pkt *pkt,
bool is_l2_bridged)
367 pkt->l2_bridged = is_l2_bridged;
373 return pkt->ip_hdr_len;
376static inline void net_pkt_set_ip_hdr_len(
struct net_pkt *pkt,
uint8_t len)
378 pkt->ip_hdr_len = len;
383 return pkt->sent_or_eof;
386static inline void net_pkt_set_sent(
struct net_pkt *pkt,
bool sent)
388 pkt->sent_or_eof = sent;
393 return pkt->pkt_queued;
396static inline void net_pkt_set_queued(
struct net_pkt *pkt,
bool send)
398 pkt->pkt_queued =
send;
403#if defined(CONFIG_NET_TCP)
404 return pkt->tcp_first_msg;
410static inline void net_pkt_set_tcp_1st_msg(
struct net_pkt *pkt,
bool is_1st)
412#if defined(CONFIG_NET_TCP)
413 pkt->tcp_first_msg = is_1st;
420#if defined(CONFIG_NET_SOCKETS)
423 return pkt->sent_or_eof;
426static inline void net_pkt_set_eof(
struct net_pkt *pkt,
bool eof)
428 pkt->sent_or_eof = eof;
432#if defined(CONFIG_NET_ROUTE)
433static inline bool net_pkt_forwarding(
struct net_pkt *pkt)
435 return pkt->forwarding;
438static inline void net_pkt_set_forwarding(
struct net_pkt *pkt,
bool forward)
440 pkt->forwarding = forward;
443static inline bool net_pkt_forwarding(
struct net_pkt *pkt)
449#if defined(CONFIG_NET_IPV4)
452 return pkt->ipv4_ttl;
455static inline void net_pkt_set_ipv4_ttl(
struct net_pkt *pkt,
463 return pkt->ipv4_opts_len;
466static inline void net_pkt_set_ipv4_opts_len(
struct net_pkt *pkt,
469 pkt->ipv4_opts_len = opts_len;
479static inline void net_pkt_set_ipv4_ttl(
struct net_pkt *pkt,
492static inline void net_pkt_set_ipv4_opts_len(
struct net_pkt *pkt,
496 ARG_UNUSED(opts_len);
500#if defined(CONFIG_NET_IPV6)
501static inline uint8_t net_pkt_ipv6_ext_opt_len(
struct net_pkt *pkt)
503 return pkt->ipv6_ext_opt_len;
506static inline void net_pkt_set_ipv6_ext_opt_len(
struct net_pkt *pkt,
509 pkt->ipv6_ext_opt_len = len;
514 return pkt->ipv6_next_hdr;
517static inline void net_pkt_set_ipv6_next_hdr(
struct net_pkt *pkt,
520 pkt->ipv6_next_hdr = next_hdr;
525 return pkt->ipv6_ext_len;
528static inline void net_pkt_set_ipv6_ext_len(
struct net_pkt *pkt,
uint16_t len)
530 pkt->ipv6_ext_len = len;
535 return pkt->ipv6_prev_hdr_start;
538static inline void net_pkt_set_ipv6_hdr_prev(
struct net_pkt *pkt,
541 pkt->ipv6_prev_hdr_start = offset;
546 return pkt->ipv6_hop_limit;
549static inline void net_pkt_set_ipv6_hop_limit(
struct net_pkt *pkt,
552 pkt->ipv6_hop_limit = hop_limit;
555static inline uint8_t net_pkt_ipv6_ext_opt_len(
struct net_pkt *pkt)
562static inline void net_pkt_set_ipv6_ext_opt_len(
struct net_pkt *pkt,
576static inline void net_pkt_set_ipv6_next_hdr(
struct net_pkt *pkt,
580 ARG_UNUSED(next_hdr);
590static inline void net_pkt_set_ipv6_ext_len(
struct net_pkt *pkt,
uint16_t len)
603static inline void net_pkt_set_ipv6_hdr_prev(
struct net_pkt *pkt,
617static inline void net_pkt_set_ipv6_hop_limit(
struct net_pkt *pkt,
621 ARG_UNUSED(hop_limit);
627#if defined(CONFIG_NET_IPV6)
628 return pkt->ipv6_ext_len;
629#elif defined(CONFIG_NET_IPV4)
630 return pkt->ipv4_opts_len;
638#if defined(CONFIG_NET_IPV6_FRAGMENT)
641 return pkt->ipv6_frag_hdr_start;
644static inline void net_pkt_set_ipv6_fragment_start(
struct net_pkt *pkt,
647 pkt->ipv6_frag_hdr_start = start;
650static inline uint16_t net_pkt_ipv6_fragment_offset(
struct net_pkt *pkt)
652 return pkt->ipv6_fragment_offset;
655static inline void net_pkt_set_ipv6_fragment_offset(
struct net_pkt *pkt,
658 pkt->ipv6_fragment_offset = offset;
663 return pkt->ipv6_fragment_id;
666static inline void net_pkt_set_ipv6_fragment_id(
struct net_pkt *pkt,
669 pkt->ipv6_fragment_id = id;
679static inline void net_pkt_set_ipv6_fragment_start(
struct net_pkt *pkt,
686static inline uint16_t net_pkt_ipv6_fragment_offset(
struct net_pkt *pkt)
693static inline void net_pkt_set_ipv6_fragment_offset(
struct net_pkt *pkt,
707static inline void net_pkt_set_ipv6_fragment_id(
struct net_pkt *pkt,
717 return pkt->priority;
720static inline void net_pkt_set_priority(
struct net_pkt *pkt,
723 pkt->priority = priority;
726#if defined(CONFIG_NET_VLAN)
742static inline void net_pkt_set_vlan_priority(
struct net_pkt *pkt,
748static inline bool net_pkt_vlan_dei(
struct net_pkt *pkt)
753static inline void net_pkt_set_vlan_dei(
struct net_pkt *pkt,
bool dei)
758static inline void net_pkt_set_vlan_tci(
struct net_pkt *pkt,
uint16_t tci)
765 return pkt->vlan_tci;
785static inline bool net_pkt_vlan_dei(
struct net_pkt *pkt)
790static inline void net_pkt_set_vlan_dei(
struct net_pkt *pkt,
bool dei)
801static inline void net_pkt_set_vlan_tci(
struct net_pkt *pkt,
uint16_t tci)
808#if defined(CONFIG_NET_PKT_TIMESTAMP)
811 return &pkt->timestamp;
814static inline void net_pkt_set_timestamp(
struct net_pkt *pkt,
817 pkt->timestamp.second = timestamp->
second;
818 pkt->timestamp.nanosecond = timestamp->
nanosecond;
828static inline void net_pkt_set_timestamp(
struct net_pkt *pkt,
832 ARG_UNUSED(timestamp);
836#if defined(CONFIG_NET_PKT_RXTIME_STATS) || defined(CONFIG_NET_PKT_TXTIME_STATS)
839 return pkt->create_time;
842static inline void net_pkt_set_create_time(
struct net_pkt *pkt,
845 pkt->create_time = create_time;
855static inline void net_pkt_set_create_time(
struct net_pkt *pkt,
859 ARG_UNUSED(create_time);
863#if defined(CONFIG_NET_PKT_TXTIME)
869static inline void net_pkt_set_txtime(
struct net_pkt *pkt,
uint64_t txtime)
871 pkt->txtime = txtime;
881static inline void net_pkt_set_txtime(
struct net_pkt *pkt,
uint64_t txtime)
888#if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL) || \
889 defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
892 return pkt->detail.stat;
895static inline int net_pkt_stats_tick_count(
struct net_pkt *pkt)
897 return pkt->detail.count;
900static inline void net_pkt_stats_tick_reset(
struct net_pkt *pkt)
902 memset(&pkt->detail, 0,
sizeof(pkt->detail));
908 if (pkt->detail.count >= NET_PKT_DETAIL_STATS_COUNT) {
909 NET_ERR(
"Detail stats count overflow (%d >= %d)",
910 pkt->detail.count, NET_PKT_DETAIL_STATS_COUNT);
914 pkt->detail.stat[pkt->detail.count++] = tick;
917#define net_pkt_set_tx_stats_tick(pkt, tick) net_pkt_set_stats_tick(pkt, tick)
918#define net_pkt_set_rx_stats_tick(pkt, tick) net_pkt_set_stats_tick(pkt, tick)
927static inline int net_pkt_stats_tick_count(
struct net_pkt *pkt)
934static inline void net_pkt_stats_tick_reset(
struct net_pkt *pkt)
939static inline void net_pkt_set_stats_tick(
struct net_pkt *pkt,
uint32_t tick)
945#define net_pkt_set_tx_stats_tick(pkt, tick)
946#define net_pkt_set_rx_stats_tick(pkt, tick)
950static inline size_t net_pkt_get_len(
struct net_pkt *pkt)
965static inline bool net_pkt_is_empty(
struct net_pkt *pkt)
972 return &pkt->lladdr_src;
977 return &pkt->lladdr_dst;
980static inline void net_pkt_lladdr_swap(
struct net_pkt *pkt)
984 net_pkt_lladdr_src(pkt)->addr = net_pkt_lladdr_dst(pkt)->addr;
985 net_pkt_lladdr_dst(pkt)->addr =
addr;
988static inline void net_pkt_lladdr_clear(
struct net_pkt *pkt)
990 net_pkt_lladdr_src(pkt)->addr = NULL;
991 net_pkt_lladdr_src(pkt)->len = 0U;
994#if defined(CONFIG_IEEE802154) || defined(CONFIG_IEEE802154_RAW_MODE)
997 return pkt->ieee802154_rssi;
1000static inline void net_pkt_set_ieee802154_rssi(
struct net_pkt *pkt,
1003 pkt->ieee802154_rssi = rssi;
1008 return pkt->ieee802154_lqi;
1011static inline void net_pkt_set_ieee802154_lqi(
struct net_pkt *pkt,
1014 pkt->ieee802154_lqi = lqi;
1017static inline bool net_pkt_ieee802154_arb(
struct net_pkt *pkt)
1019 return pkt->ieee802154_arb;
1022static inline void net_pkt_set_ieee802154_arb(
struct net_pkt *pkt,
bool arb)
1024 pkt->ieee802154_arb = arb;
1027static inline bool net_pkt_ieee802154_ack_fpb(
struct net_pkt *pkt)
1029 return pkt->ieee802154_ack_fpb;
1032static inline void net_pkt_set_ieee802154_ack_fpb(
struct net_pkt *pkt,
1035 pkt->ieee802154_ack_fpb = fpb;
1038static inline bool net_pkt_ieee802154_frame_secured(
struct net_pkt *pkt)
1040 return pkt->ieee802154_frame_secured;
1043static inline void net_pkt_set_ieee802154_frame_secured(
struct net_pkt *pkt,
1046 pkt->ieee802154_frame_secured = secured;
1049static inline bool net_pkt_ieee802154_mac_hdr_rdy(
struct net_pkt *pkt)
1051 return pkt->ieee802154_mac_hdr_rdy;
1054static inline void net_pkt_set_ieee802154_mac_hdr_rdy(
struct net_pkt *pkt,
1057 pkt->ieee802154_mac_hdr_rdy = rdy;
1060#if defined(CONFIG_IEEE802154_2015)
1061static inline bool net_pkt_ieee802154_fv2015(
struct net_pkt *pkt)
1063 return pkt->ieee802154_fv2015;
1066static inline void net_pkt_set_ieee802154_fv2015(
struct net_pkt *pkt,
bool fv2015)
1068 pkt->ieee802154_fv2015 = fv2015;
1071static inline bool net_pkt_ieee802154_ack_seb(
struct net_pkt *pkt)
1073 return pkt->ieee802154_ack_seb;
1076static inline void net_pkt_set_ieee802154_ack_seb(
struct net_pkt *pkt,
bool seb)
1078 pkt->ieee802154_ack_seb = seb;
1083 return pkt->ieee802154_ack_fc;
1086static inline void net_pkt_set_ieee802154_ack_fc(
struct net_pkt *pkt,
1089 pkt->ieee802154_ack_fc = fc;
1092static inline uint8_t net_pkt_ieee802154_ack_keyid(
struct net_pkt *pkt)
1094 return pkt->ieee802154_ack_keyid;
1097static inline void net_pkt_set_ieee802154_ack_keyid(
struct net_pkt *pkt,
1100 pkt->ieee802154_ack_keyid = keyid;
1105#if defined(CONFIG_NET_IPV4_AUTO)
1106static inline bool net_pkt_ipv4_auto(
struct net_pkt *pkt)
1108 return pkt->ipv4_auto_arp_msg;
1111static inline void net_pkt_set_ipv4_auto(
struct net_pkt *pkt,
1112 bool is_auto_arp_msg)
1114 pkt->ipv4_auto_arp_msg = is_auto_arp_msg;
1117static inline bool net_pkt_ipv4_auto(
struct net_pkt *pkt)
1124static inline void net_pkt_set_ipv4_auto(
struct net_pkt *pkt,
1125 bool is_auto_arp_msg)
1128 ARG_UNUSED(is_auto_arp_msg);
1132#if defined(CONFIG_NET_LLDP)
1133static inline bool net_pkt_is_lldp(
struct net_pkt *pkt)
1135 return pkt->lldp_pkt;
1138static inline void net_pkt_set_lldp(
struct net_pkt *pkt,
bool is_lldp)
1140 pkt->lldp_pkt = is_lldp;
1143static inline bool net_pkt_is_lldp(
struct net_pkt *pkt)
1150static inline void net_pkt_set_lldp(
struct net_pkt *pkt,
bool is_lldp)
1153 ARG_UNUSED(is_lldp);
1157#if defined(CONFIG_NET_PPP)
1158static inline bool net_pkt_is_ppp(
struct net_pkt *pkt)
1160 return pkt->ppp_msg;
1163static inline void net_pkt_set_ppp(
struct net_pkt *pkt,
1166 pkt->ppp_msg = is_ppp_msg;
1169static inline bool net_pkt_is_ppp(
struct net_pkt *pkt)
1176static inline void net_pkt_set_ppp(
struct net_pkt *pkt,
1180 ARG_UNUSED(is_ppp_msg);
1184#define NET_IPV6_HDR(pkt) ((struct net_ipv6_hdr *)net_pkt_ip_data(pkt))
1185#define NET_IPV4_HDR(pkt) ((struct net_ipv4_hdr *)net_pkt_ip_data(pkt))
1187static inline void net_pkt_set_src_ipv6_addr(
struct net_pkt *pkt)
1190 net_pkt_context(pkt)),
1191 &NET_IPV6_HDR(pkt)->src);
1194static inline void net_pkt_set_overwrite(
struct net_pkt *pkt,
bool overwrite)
1196 pkt->overwrite = overwrite;
1199static inline bool net_pkt_is_being_overwritten(
struct net_pkt *pkt)
1201 return pkt->overwrite;
1219#define NET_PKT_SLAB_DEFINE(name, count) \
1220 K_MEM_SLAB_DEFINE(name, sizeof(struct net_pkt), count, 4)
1223#define NET_PKT_TX_SLAB_DEFINE(name, count) NET_PKT_SLAB_DEFINE(name, count)
1238#define NET_PKT_DATA_POOL_DEFINE(name, count) \
1239 NET_BUF_POOL_DEFINE(name, count, CONFIG_NET_BUF_DATA_SIZE, \
1240 CONFIG_NET_BUF_USER_DATA_SIZE, NULL)
1244#if defined(CONFIG_NET_DEBUG_NET_PKT_ALLOC) || \
1245 (CONFIG_NET_PKT_LOG_LEVEL >= LOG_LEVEL_DBG)
1246#define NET_PKT_DEBUG_ENABLED
1249#if defined(NET_PKT_DEBUG_ENABLED)
1260#define net_pkt_get_reserve_data(pool, timeout) \
1261 net_pkt_get_reserve_data_debug(pool, timeout, __func__, __LINE__)
1266#define net_pkt_get_reserve_rx_data(timeout) \
1267 net_pkt_get_reserve_rx_data_debug(timeout, __func__, __LINE__)
1272#define net_pkt_get_reserve_tx_data(timeout) \
1273 net_pkt_get_reserve_tx_data_debug(timeout, __func__, __LINE__)
1277 const char *caller,
int line);
1278#define net_pkt_get_frag(pkt, timeout) \
1279 net_pkt_get_frag_debug(pkt, timeout, __func__, __LINE__)
1281void net_pkt_unref_debug(
struct net_pkt *pkt,
const char *caller,
int line);
1282#define net_pkt_unref(pkt) net_pkt_unref_debug(pkt, __func__, __LINE__)
1284struct net_pkt *net_pkt_ref_debug(
struct net_pkt *pkt,
const char *caller,
1286#define net_pkt_ref(pkt) net_pkt_ref_debug(pkt, __func__, __LINE__)
1289 const char *caller,
int line);
1290#define net_pkt_frag_ref(frag) net_pkt_frag_ref_debug(frag, __func__, __LINE__)
1292void net_pkt_frag_unref_debug(
struct net_buf *frag,
1293 const char *caller,
int line);
1294#define net_pkt_frag_unref(frag) \
1295 net_pkt_frag_unref_debug(frag, __func__, __LINE__)
1300 const char *caller,
int line);
1301#define net_pkt_frag_del(pkt, parent, frag) \
1302 net_pkt_frag_del_debug(pkt, parent, frag, __func__, __LINE__)
1304void net_pkt_frag_add_debug(
struct net_pkt *pkt,
struct net_buf *frag,
1305 const char *caller,
int line);
1306#define net_pkt_frag_add(pkt, frag) \
1307 net_pkt_frag_add_debug(pkt, frag, __func__, __LINE__)
1309void net_pkt_frag_insert_debug(
struct net_pkt *pkt,
struct net_buf *frag,
1310 const char *caller,
int line);
1311#define net_pkt_frag_insert(pkt, frag) \
1312 net_pkt_frag_insert_debug(pkt, frag, __func__, __LINE__)
1325#if defined(NET_PKT_DEBUG_ENABLED)
1328#define net_pkt_print_frags(pkt)
1344#if !defined(NET_PKT_DEBUG_ENABLED)
1361#if !defined(NET_PKT_DEBUG_ENABLED)
1376#if !defined(NET_PKT_DEBUG_ENABLED)
1389#if !defined(NET_PKT_DEBUG_ENABLED)
1402#if !defined(NET_PKT_DEBUG_ENABLED)
1415#if !defined(NET_PKT_DEBUG_ENABLED)
1424#if !defined(NET_PKT_DEBUG_ENABLED)
1438#if !defined(NET_PKT_DEBUG_ENABLED)
1450#if !defined(NET_PKT_DEBUG_ENABLED)
1460#if !defined(NET_PKT_DEBUG_ENABLED)
1483 struct k_mem_slab **tx,
1489#if defined(CONFIG_NET_DEBUG_NET_PKT_ALLOC)
1493void net_pkt_print(
void);
1495typedef void (*net_pkt_allocs_cb_t)(
struct net_pkt *pkt,
1497 const char *func_alloc,
1499 const char *func_free,
1504void net_pkt_allocs_foreach(net_pkt_allocs_cb_t cb,
void *
user_data);
1506const char *net_pkt_slab2str(
struct k_mem_slab *slab);
1507const char *net_pkt_pool2str(
struct net_buf_pool *pool);
1510#define net_pkt_print(...)
1516#if defined(NET_PKT_DEBUG_ENABLED)
1519 const char *caller,
int line);
1520#define net_pkt_alloc(_timeout) \
1521 net_pkt_alloc_debug(_timeout, __func__, __LINE__)
1523struct net_pkt *net_pkt_alloc_from_slab_debug(
struct k_mem_slab *
slab,
1525 const char *caller,
int line);
1526#define net_pkt_alloc_from_slab(_slab, _timeout) \
1527 net_pkt_alloc_from_slab_debug(_slab, _timeout, __func__, __LINE__)
1530 const char *caller,
int line);
1531#define net_pkt_rx_alloc(_timeout) \
1532 net_pkt_rx_alloc_debug(_timeout, __func__, __LINE__)
1538#define net_pkt_alloc_on_iface(_iface, _timeout) \
1539 net_pkt_alloc_on_iface_debug(_iface, _timeout, __func__, __LINE__)
1545#define net_pkt_rx_alloc_on_iface(_iface, _timeout) \
1546 net_pkt_rx_alloc_on_iface_debug(_iface, _timeout, \
1549int net_pkt_alloc_buffer_debug(
struct net_pkt *pkt,
1553 const char *caller,
int line);
1554#define net_pkt_alloc_buffer(_pkt, _size, _proto, _timeout) \
1555 net_pkt_alloc_buffer_debug(_pkt, _size, _proto, _timeout, \
1565#define net_pkt_alloc_with_buffer(_iface, _size, _family, \
1567 net_pkt_alloc_with_buffer_debug(_iface, _size, _family, \
1578#define net_pkt_rx_alloc_with_buffer(_iface, _size, _family, \
1580 net_pkt_rx_alloc_with_buffer_debug(_iface, _size, _family, \
1596#if !defined(NET_PKT_DEBUG_ENABLED)
1614#if !defined(NET_PKT_DEBUG_ENABLED)
1629#if !defined(NET_PKT_DEBUG_ENABLED)
1641#if !defined(NET_PKT_DEBUG_ENABLED)
1665#if !defined(NET_PKT_DEBUG_ENABLED)
1683#if !defined(NET_PKT_DEBUG_ENABLED)
2072#if !defined(CONFIG_NET_HEADERS_ALWAYS_CONTIGUOUS)
2078#if defined(CONFIG_NET_HEADERS_ALWAYS_CONTIGUOUS)
2079#define NET_PKT_DATA_ACCESS_DEFINE(_name, _type) \
2080 struct net_pkt_data_access _name = { \
2081 .size = sizeof(_type), \
2084#define NET_PKT_DATA_ACCESS_CONTIGUOUS_DEFINE(_name, _type) \
2085 NET_PKT_DATA_ACCESS_DEFINE(_name, _type)
2088#define NET_PKT_DATA_ACCESS_DEFINE(_name, _type) \
2089 _type _hdr_##_name; \
2090 struct net_pkt_data_access _name = { \
2091 .data = &_hdr_##_name, \
2092 .size = sizeof(_type), \
2095#define NET_PKT_DATA_ACCESS_CONTIGUOUS_DEFINE(_name, _type) \
2096 struct net_pkt_data_access _name = { \
2098 .size = sizeof(_type), \
int atomic_t
Definition: atomic.h:21
#define sys_cpu_to_le32(val)
Convert 32-bit integer from host endianness to little-endian.
Definition: byteorder.h:177
#define sys_cpu_to_le16(val)
Convert 16-bit integer from host endianness to little-endian.
Definition: byteorder.h:173
#define ALWAYS_INLINE
Definition: common.h:116
ZTEST_BMEM int timeout
Definition: main.c:31
ZTEST_BMEM int count
Definition: main.c:33
void
Definition: eswifi_shell.c:15
VLAN specific definitions.
unsigned short int sa_family_t
Definition: net_ip.h:158
#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 ZTEST_BMEM char buffer[8]
Test mailbox enhance capabilities.
Definition: test_mbox_api.c:566
static size_t net_buf_frags_len(struct net_buf *buf)
Calculate amount of bytes stored in fragments.
Definition: buf.h:2435
static struct net_if * net_context_get_iface(struct net_context *context)
Get network interface for this context.
Definition: net_context.h:633
static struct net_linkaddr * net_if_get_link_addr(struct net_if *iface)
Get an network interface's link address.
Definition: net_if.h:680
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:1428
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:1978
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:1328
int net_pkt_update_length(struct net_pkt *pkt, size_t length)
Update the overall length of a packet.
struct net_buf * net_pkt_get_reserve_rx_data(k_timeout_t timeout)
Get RX DATA buffer from pool. Normally you should use net_pkt_get_frag() instead.
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)
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.
bool net_pkt_compact(struct net_pkt *pkt)
Compact the fragment list of a packet.
static int net_pkt_write_be16(struct net_pkt *pkt, uint16_t data)
Definition: net_pkt.h:1970
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:1964
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.
static void * net_pkt_cursor_get_pos(struct net_pkt *pkt)
Returns current position of the cursor.
Definition: net_pkt.h:1804
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:1777
static int net_pkt_acknowledge_data(struct net_pkt *pkt, struct net_pkt_data_access *access)
Definition: net_pkt.h:2139
static int net_pkt_write_le16(struct net_pkt *pkt, uint16_t data)
Definition: net_pkt.h:1994
struct net_buf * net_pkt_get_reserve_tx_data(k_timeout_t timeout)
Get TX DATA buffer from pool. Normally you should use net_pkt_get_frag() instead.
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:1790
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.
struct net_buf * net_pkt_get_frag(struct net_pkt *pkt, k_timeout_t timeout)
Get a data fragment that might be from user specific buffer pool or from global DATA pool.
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.
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:1986
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:1901
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:101
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
Network context definitions.
Network core definitions.
Public API for network interface.
IPv6 and IPv4 definitions.
Public API for network link address.
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:60
__INTPTR_TYPE__ intptr_t
Definition: stdint.h:74
__UINT64_TYPE__ uint64_t
Definition: stdint.h:61
__UINT8_TYPE__ uint8_t
Definition: stdint.h:58
__UINT16_TYPE__ uint16_t
Definition: stdint.h:59
void * memset(void *buf, int c, size_t n)
Kernel timeout type.
Definition: sys_clock.h:65
Network buffer pool representation.
Definition: buf.h:983
Network buffer representation.
Definition: buf.h:919
uint8_t * data
Definition: buf.h:944
uint16_t len
Definition: buf.h:947
Definition: net_context.h:201
Network Interface structure.
Definition: net_if.h:468
Hardware link address structure.
Definition: net_linkaddr.h:69
uint8_t * addr
Definition: net_linkaddr.h:71
uint8_t type
Definition: net_linkaddr.h:77
uint8_t * pos
Definition: net_pkt.h:53
struct net_buf * buf
Definition: net_pkt.h:51
Definition: net_pkt.h:2071
const size_t size
Definition: net_pkt.h:2075
void * data
Definition: net_pkt.h:2073
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:59
uint64_t second
Definition: ptp_time.h:55
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
static const char * tag(void)
Definition: main.c:27
static const intptr_t user_data[5]
Definition: main.c:590
NMI_API sint16 send(SOCKET sock, void *pvSendBuffer, uint16 u16SendLength, uint16 u16Flags)