19#ifndef ZEPHYR_INCLUDE_NET_NET_PKT_H_
20#define ZEPHYR_INCLUDE_NET_NET_PKT_H_
27#if defined(CONFIG_IEEE802154)
75#define NET_PKT_FRAG_FOR_EACH(_pkt, _var) \
76 for (struct net_buf *_var = (_pkt)->frags; _var != NULL; \
81#if defined(CONFIG_NET_PKT_ALLOC_STATS)
82struct net_pkt_alloc_stats {
88struct net_pkt_alloc_stats_slab {
89 struct net_pkt_alloc_stats ok;
90 struct net_pkt_alloc_stats fail;
91 struct k_mem_slab *slab;
94#define NET_PKT_ALLOC_STATS_DEFINE(alloc_name, slab_name) \
95 STRUCT_SECTION_ITERABLE(net_pkt_alloc_stats_slab, alloc_name) = { \
100#define NET_PKT_ALLOC_STATS_DEFINE(name, slab)
104struct net_pkt_cursor {
146#if defined(CONFIG_NET_TCP) || defined(CONFIG_NET_UDP_OPTIONS)
149#if defined(CONFIG_NET_TCP)
153#if defined(CONFIG_NET_UDP_OPTIONS)
160#if defined(CONFIG_NET_PKT_ORIG_IFACE)
161 struct net_if *orig_iface;
164#if defined(CONFIG_NET_VPN)
169 union net_ip_header ip_hdr;
171 union net_proto_header proto_hdr;
177#if defined(CONFIG_NET_PKT_TIMESTAMP) || defined(CONFIG_NET_PKT_TXTIME)
196 struct net_ptp_time timestamp;
199#if defined(CONFIG_NET_PKT_RXTIME_STATS) || defined(CONFIG_NET_PKT_TXTIME_STATS) || \
200 defined(CONFIG_TRACING_NET_CORE)
205#if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL) || \
206 defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
221#if defined(CONFIG_NET_PKT_ALLOC_STATS)
222 struct net_pkt_alloc_stats_slab *alloc_stats;
229 struct net_linkaddr lladdr_src;
230 struct net_linkaddr lladdr_dst;
233#if defined(CONFIG_NET_IP)
246#if defined(CONFIG_NET_IPV4_ACD)
269#if defined(CONFIG_NET_IP_FRAGMENT)
272#if defined(CONFIG_NET_PKT_TIMESTAMP)
278#if defined(CONFIG_NET_IP)
283#if defined(CONFIG_NET_IPV6)
286#if defined(CONFIG_NET_IPV4)
292#if defined(CONFIG_NET_IPV4)
295#if defined(CONFIG_NET_IPV6)
300#if defined(CONFIG_NET_IPV4_ROUTE)
305 struct net_in_addr ipv4_ll_resolve_addr;
308#if defined(CONFIG_NET_IP_FRAGMENT)
310#if defined(CONFIG_NET_IPV4_FRAGMENT)
316#if defined(CONFIG_NET_IPV6_FRAGMENT)
326#if defined(CONFIG_NET_IPV6)
338#if defined(CONFIG_NET_IP_DSCP_ECN)
347#if defined(CONFIG_NET_VLAN)
356#if defined(CONFIG_NET_PKT_CONTROL_BLOCK)
359 uint8_t cb[CONFIG_NET_PKT_CONTROL_BLOCK_SIZE];
360#if defined(CONFIG_IEEE802154)
364 struct net_pkt_cb_ieee802154 cb_ieee802154;
374#if defined(CONFIG_NET_OFFLOAD) || defined(CONFIG_NET_L2_IPIP)
380 struct net_sockaddr remote;
386 struct net_sockaddr_storage remote_storage;
390#if defined(CONFIG_NET_CAPTURE_COOKED_MODE)
395#if defined(CONFIG_NET_IPV4_PMTU)
399#if defined(CONFIG_NET_IPV4_ROUTE)
400 uint8_t ipv4_ll_resolve_addr_set : 1;
422static inline void net_pkt_set_context(
struct net_pkt *pkt,
428static inline struct net_if *net_pkt_iface(
struct net_pkt *pkt)
433static inline void net_pkt_set_iface(
struct net_pkt *pkt,
struct net_if *iface)
443 if (lladdr != NULL) {
444 pkt->lladdr_src.type = lladdr->
type;
445 pkt->lladdr_dst.type = lladdr->
type;
449static inline struct net_if *net_pkt_orig_iface(
struct net_pkt *pkt)
451#if defined(CONFIG_NET_PKT_ORIG_IFACE)
452 return pkt->orig_iface;
458static inline void net_pkt_set_orig_iface(
struct net_pkt *pkt,
461#if defined(CONFIG_NET_PKT_ORIG_IFACE)
462 pkt->orig_iface = iface;
469#if defined(CONFIG_NET_VPN)
470static inline struct net_if *net_pkt_vpn_iface(
struct net_pkt *pkt)
472 return pkt->vpn.
iface;
475static inline void net_pkt_set_vpn_iface(
struct net_pkt *pkt,
478 pkt->vpn.
iface = iface;
481static inline union net_ip_header *net_pkt_vpn_ip_hdr(
struct net_pkt *pkt)
483 return &pkt->vpn.ip_hdr;
486static inline void net_pkt_set_vpn_ip_hdr(
struct net_pkt *pkt,
487 union net_ip_header *ip_hdr)
489 pkt->vpn.ip_hdr = *ip_hdr;
492static inline union net_proto_header *net_pkt_vpn_udp_hdr(
struct net_pkt *pkt)
494 return &pkt->vpn.proto_hdr;
497static inline void net_pkt_set_vpn_udp_hdr(
struct net_pkt *pkt,
498 union net_proto_header *proto_hdr)
500 pkt->vpn.proto_hdr = *proto_hdr;
503static inline int net_pkt_vpn_peer_id(
struct net_pkt *pkt)
505 return pkt->vpn.peer_id;
508static inline void net_pkt_set_vpn_peer_id(
struct net_pkt *pkt,
511 pkt->vpn.peer_id = peer_id;
515#if defined(CONFIG_NET_UDP_OPTIONS)
518 return pkt->udp_opt_surplus_len;
521static inline void net_pkt_set_udp_opt_surplus_len(
struct net_pkt *pkt,
524 pkt->udp_opt_surplus_len = len;
534#define net_pkt_set_udp_opt_surplus_len(...)
542static inline void net_pkt_set_family(
struct net_pkt *pkt,
uint8_t family)
544 pkt->family = family;
547static inline bool net_pkt_is_tx_timestamping(
struct net_pkt *pkt)
549#if defined(CONFIG_NET_PKT_TIMESTAMP)
550 return !!(pkt->tx_timestamping);
558static inline void net_pkt_set_tx_timestamping(
struct net_pkt *pkt,
bool is_timestamping)
560#if defined(CONFIG_NET_PKT_TIMESTAMP)
561 pkt->tx_timestamping = is_timestamping;
564 ARG_UNUSED(is_timestamping);
568static inline bool net_pkt_is_rx_timestamping(
struct net_pkt *pkt)
570#if defined(CONFIG_NET_PKT_TIMESTAMP)
571 return !!(pkt->rx_timestamping);
579static inline void net_pkt_set_rx_timestamping(
struct net_pkt *pkt,
bool is_timestamping)
581#if defined(CONFIG_NET_PKT_TIMESTAMP)
582 pkt->rx_timestamping = is_timestamping;
585 ARG_UNUSED(is_timestamping);
589static inline bool net_pkt_is_captured(
struct net_pkt *pkt)
591 return !!(pkt->captured);
594static inline void net_pkt_set_captured(
struct net_pkt *pkt,
bool is_captured)
596 pkt->captured = is_captured;
599static inline bool net_pkt_is_l2_bridged(
struct net_pkt *pkt)
601 return IS_ENABLED(CONFIG_NET_ETHERNET_BRIDGE) ? !!(pkt->l2_bridged) : 0;
604static inline void net_pkt_set_l2_bridged(
struct net_pkt *pkt,
bool is_l2_bridged)
607 pkt->l2_bridged = is_l2_bridged;
611static inline bool net_pkt_is_l2_processed(
struct net_pkt *pkt)
613 return !!(pkt->l2_processed);
616static inline void net_pkt_set_l2_processed(
struct net_pkt *pkt,
617 bool is_l2_processed)
619 pkt->l2_processed = is_l2_processed;
622static inline bool net_pkt_is_chksum_done(
struct net_pkt *pkt)
624 return !!(pkt->chksum_done);
627static inline void net_pkt_set_chksum_done(
struct net_pkt *pkt,
630 pkt->chksum_done = is_chksum_done;
635#if defined(CONFIG_NET_IP)
636 return pkt->ip_hdr_len;
644static inline void net_pkt_set_ip_hdr_len(
struct net_pkt *pkt,
uint8_t len)
646#if defined(CONFIG_NET_IP)
647 pkt->ip_hdr_len = len;
656#if defined(CONFIG_NET_IP_DSCP_ECN)
665static inline void net_pkt_set_ip_dscp(
struct net_pkt *pkt,
uint8_t dscp)
667#if defined(CONFIG_NET_IP_DSCP_ECN)
677#if defined(CONFIG_NET_IP_DSCP_ECN)
686static inline void net_pkt_set_ip_ecn(
struct net_pkt *pkt,
uint8_t ecn)
688#if defined(CONFIG_NET_IP_DSCP_ECN)
701static inline void net_pkt_set_eof(
struct net_pkt *pkt,
bool eof)
706static inline bool net_pkt_forwarding(
struct net_pkt *pkt)
708 return !!(pkt->forwarding);
711static inline void net_pkt_set_forwarding(
struct net_pkt *pkt,
bool forward)
713 pkt->forwarding = forward;
716#if defined(CONFIG_NET_IPV4)
719 return pkt->ipv4_ttl;
722static inline void net_pkt_set_ipv4_ttl(
struct net_pkt *pkt,
730 return pkt->ipv4_opts_len;
733static inline void net_pkt_set_ipv4_opts_len(
struct net_pkt *pkt,
736 pkt->ipv4_opts_len = opts_len;
746static inline void net_pkt_set_ipv4_ttl(
struct net_pkt *pkt,
759static inline void net_pkt_set_ipv4_opts_len(
struct net_pkt *pkt,
763 ARG_UNUSED(opts_len);
767#if defined(CONFIG_NET_IPV6)
768static inline uint8_t net_pkt_ipv6_ext_opt_len(
struct net_pkt *pkt)
770 return pkt->ipv6_ext_opt_len;
773static inline void net_pkt_set_ipv6_ext_opt_len(
struct net_pkt *pkt,
776 pkt->ipv6_ext_opt_len = len;
781 return pkt->ipv6_next_hdr;
784static inline void net_pkt_set_ipv6_next_hdr(
struct net_pkt *pkt,
787 pkt->ipv6_next_hdr = next_hdr;
792 return pkt->ipv6_ext_len;
795static inline void net_pkt_set_ipv6_ext_len(
struct net_pkt *pkt,
uint16_t len)
797 pkt->ipv6_ext_len = len;
802 return pkt->ipv6_prev_hdr_start;
805static inline void net_pkt_set_ipv6_hdr_prev(
struct net_pkt *pkt,
808 pkt->ipv6_prev_hdr_start = offset;
813 return pkt->ipv6_hop_limit;
816static inline void net_pkt_set_ipv6_hop_limit(
struct net_pkt *pkt,
819 pkt->ipv6_hop_limit = hop_limit;
822static inline uint8_t net_pkt_ipv6_ext_opt_len(
struct net_pkt *pkt)
829static inline void net_pkt_set_ipv6_ext_opt_len(
struct net_pkt *pkt,
843static inline void net_pkt_set_ipv6_next_hdr(
struct net_pkt *pkt,
847 ARG_UNUSED(next_hdr);
857static inline void net_pkt_set_ipv6_ext_len(
struct net_pkt *pkt,
uint16_t len)
870static inline void net_pkt_set_ipv6_hdr_prev(
struct net_pkt *pkt,
884static inline void net_pkt_set_ipv6_hop_limit(
struct net_pkt *pkt,
888 ARG_UNUSED(hop_limit);
894#if defined(CONFIG_NET_IPV6)
895 return pkt->ipv6_ext_len;
896#elif defined(CONFIG_NET_IPV4)
897 return pkt->ipv4_opts_len;
905#if defined(CONFIG_NET_IPV4_PMTU)
906static inline bool net_pkt_ipv4_pmtu(
struct net_pkt *pkt)
908 return !!pkt->ipv4_pmtu;
911static inline void net_pkt_set_ipv4_pmtu(
struct net_pkt *pkt,
bool value)
913 pkt->ipv4_pmtu = value;
916static inline bool net_pkt_ipv4_pmtu(
struct net_pkt *pkt)
923static inline void net_pkt_set_ipv4_pmtu(
struct net_pkt *pkt,
bool value)
930#if defined(CONFIG_NET_IPV4_ROUTE)
931static inline const struct net_in_addr *net_pkt_ipv4_ll_resolve_addr(
struct net_pkt *pkt)
933 return pkt->ipv4_ll_resolve_addr_set ? &pkt->ipv4_ll_resolve_addr : NULL;
936static inline void net_pkt_set_ipv4_ll_resolve_addr(
struct net_pkt *pkt,
941 pkt->ipv4_ll_resolve_addr_set = 1U;
943 pkt->ipv4_ll_resolve_addr_set = 0U;
947static inline const struct net_in_addr *net_pkt_ipv4_ll_resolve_addr(
struct net_pkt *pkt)
954static inline void net_pkt_set_ipv4_ll_resolve_addr(
struct net_pkt *pkt,
962static inline bool net_pkt_dont_fragment(
struct net_pkt *pkt)
964 return !!pkt->dont_fragment;
967static inline void net_pkt_set_dont_fragment(
struct net_pkt *pkt,
bool value)
969 pkt->dont_fragment = value;
972#if defined(CONFIG_NET_IPV4_FRAGMENT)
973static inline uint16_t net_pkt_ipv4_fragment_offset(
struct net_pkt *pkt)
975 return (pkt->ipv4_fragment.flags & NET_IPV4_FRAGH_OFFSET_MASK) * 8;
978static inline bool net_pkt_ipv4_fragment_more(
struct net_pkt *pkt)
980 return (pkt->ipv4_fragment.flags & NET_IPV4_MORE_FRAG_MASK) != 0;
985 pkt->ipv4_fragment.flags =
flags;
990 return pkt->ipv4_fragment.id;
993static inline void net_pkt_set_ipv4_fragment_id(
struct net_pkt *pkt,
uint32_t id)
995 pkt->ipv4_fragment.id = id;
998static inline uint16_t net_pkt_ipv4_fragment_offset(
struct net_pkt *pkt)
1005static inline bool net_pkt_ipv4_fragment_more(
struct net_pkt *pkt)
1025static inline void net_pkt_set_ipv4_fragment_id(
struct net_pkt *pkt,
uint32_t id)
1032#if defined(CONFIG_NET_IPV6_FRAGMENT)
1033static inline uint16_t net_pkt_ipv6_fragment_start(
struct net_pkt *pkt)
1035 return pkt->ipv6_fragment.hdr_start;
1038static inline void net_pkt_set_ipv6_fragment_start(
struct net_pkt *pkt,
1041 pkt->ipv6_fragment.hdr_start = start;
1044static inline uint16_t net_pkt_ipv6_fragment_offset(
struct net_pkt *pkt)
1046 return pkt->ipv6_fragment.flags & NET_IPV6_FRAGH_OFFSET_MASK;
1048static inline bool net_pkt_ipv6_fragment_more(
struct net_pkt *pkt)
1050 return (pkt->ipv6_fragment.flags & 0x01) != 0;
1053static inline void net_pkt_set_ipv6_fragment_flags(
struct net_pkt *pkt,
1056 pkt->ipv6_fragment.flags =
flags;
1061 return pkt->ipv6_fragment.id;
1064static inline void net_pkt_set_ipv6_fragment_id(
struct net_pkt *pkt,
1067 pkt->ipv6_fragment.id = id;
1070static inline uint16_t net_pkt_ipv6_fragment_start(
struct net_pkt *pkt)
1077static inline void net_pkt_set_ipv6_fragment_start(
struct net_pkt *pkt,
1084static inline uint16_t net_pkt_ipv6_fragment_offset(
struct net_pkt *pkt)
1091static inline bool net_pkt_ipv6_fragment_more(
struct net_pkt *pkt)
1098static inline void net_pkt_set_ipv6_fragment_flags(
struct net_pkt *pkt,
1112static inline void net_pkt_set_ipv6_fragment_id(
struct net_pkt *pkt,
1120static inline bool net_pkt_is_loopback(
struct net_pkt *pkt)
1122 return !!(pkt->loopback);
1125static inline void net_pkt_set_loopback(
struct net_pkt *pkt,
1128 pkt->loopback = loopback;
1131#if defined(CONFIG_NET_IP_FRAGMENT)
1132static inline bool net_pkt_is_ip_reassembled(
struct net_pkt *pkt)
1134 return !!(pkt->ip_reassembled);
1137static inline void net_pkt_set_ip_reassembled(
struct net_pkt *pkt,
1140 pkt->ip_reassembled = reassembled;
1143static inline bool net_pkt_is_ip_reassembled(
struct net_pkt *pkt)
1150static inline void net_pkt_set_ip_reassembled(
struct net_pkt *pkt,
1154 ARG_UNUSED(reassembled);
1160 return pkt->priority;
1163static inline void net_pkt_set_priority(
struct net_pkt *pkt,
1166 pkt->priority = priority;
1169#if defined(CONFIG_NET_CAPTURE_COOKED_MODE)
1170static inline bool net_pkt_is_cooked_mode(
struct net_pkt *pkt)
1172 return pkt->cooked_mode_pkt;
1175static inline void net_pkt_set_cooked_mode(
struct net_pkt *pkt,
bool value)
1177 pkt->cooked_mode_pkt = value;
1180static inline bool net_pkt_is_cooked_mode(
struct net_pkt *pkt)
1187static inline void net_pkt_set_cooked_mode(
struct net_pkt *pkt,
bool value)
1194#if defined(CONFIG_NET_VLAN)
1200static inline void net_pkt_set_vlan_tag(
struct net_pkt *pkt,
uint16_t tag)
1210static inline void net_pkt_set_vlan_priority(
struct net_pkt *pkt,
1216static inline bool net_pkt_vlan_dei(
struct net_pkt *pkt)
1221static inline void net_pkt_set_vlan_dei(
struct net_pkt *pkt,
bool dei)
1226static inline void net_pkt_set_vlan_tci(
struct net_pkt *pkt,
uint16_t tci)
1228 pkt->vlan_tci = tci;
1233 return pkt->vlan_tci;
1243static inline void net_pkt_set_vlan_tag(
struct net_pkt *pkt,
uint16_t tag)
1256static inline bool net_pkt_vlan_dei(
struct net_pkt *pkt)
1263static inline void net_pkt_set_vlan_dei(
struct net_pkt *pkt,
bool dei)
1276static inline void net_pkt_set_vlan_tci(
struct net_pkt *pkt,
uint16_t tci)
1283#if defined(CONFIG_NET_PKT_TIMESTAMP) || defined(CONFIG_NET_PKT_TXTIME)
1286 return &pkt->timestamp;
1289static inline void net_pkt_set_timestamp(
struct net_pkt *pkt,
1292 pkt->timestamp.second = timestamp->
second;
1293 pkt->timestamp.nanosecond = timestamp->
nanosecond;
1301static inline void net_pkt_set_timestamp_ns(
struct net_pkt *pkt,
net_time_t timestamp)
1313static inline void net_pkt_set_timestamp(
struct net_pkt *pkt,
1317 ARG_UNUSED(timestamp);
1327static inline void net_pkt_set_timestamp_ns(
struct net_pkt *pkt,
net_time_t timestamp)
1330 ARG_UNUSED(timestamp);
1334#if defined(CONFIG_NET_PKT_RXTIME_STATS) || defined(CONFIG_NET_PKT_TXTIME_STATS) || \
1335 defined(CONFIG_TRACING_NET_CORE)
1339 return pkt->create_time;
1342static inline void net_pkt_set_create_time(
struct net_pkt *pkt,
1345 pkt->create_time = create_time;
1355static inline void net_pkt_set_create_time(
struct net_pkt *pkt,
1359 ARG_UNUSED(create_time);
1365#if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL) || \
1366 defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
1369 return pkt->detail.stat;
1372static inline int net_pkt_stats_tick_count(
struct net_pkt *pkt)
1374 return pkt->detail.count;
1377static inline void net_pkt_stats_tick_reset(
struct net_pkt *pkt)
1379 memset(&pkt->detail, 0,
sizeof(pkt->detail));
1382static ALWAYS_INLINE
void net_pkt_set_stats_tick(
struct net_pkt *pkt,
1385 if (pkt->detail.count >= NET_PKT_DETAIL_STATS_COUNT) {
1386 printk(
"ERROR: Detail stats count overflow (%d >= %d)",
1387 pkt->detail.count, NET_PKT_DETAIL_STATS_COUNT);
1391 pkt->detail.stat[pkt->detail.count++] = tick;
1394#define net_pkt_set_tx_stats_tick(pkt, tick) net_pkt_set_stats_tick(pkt, tick)
1395#define net_pkt_set_rx_stats_tick(pkt, tick) net_pkt_set_stats_tick(pkt, tick)
1404static inline int net_pkt_stats_tick_count(
struct net_pkt *pkt)
1411static inline void net_pkt_stats_tick_reset(
struct net_pkt *pkt)
1416static inline void net_pkt_set_stats_tick(
struct net_pkt *pkt,
uint32_t tick)
1422#define net_pkt_set_tx_stats_tick(pkt, tick)
1423#define net_pkt_set_rx_stats_tick(pkt, tick)
1437static inline bool net_pkt_is_empty(
struct net_pkt *pkt)
1444 return &pkt->lladdr_src;
1449 return &pkt->lladdr_dst;
1452static inline void net_pkt_lladdr_swap(
struct net_pkt *pkt)
1457 net_pkt_lladdr_src(pkt)->
addr,
1458 net_pkt_lladdr_src(pkt)->
len);
1460 net_pkt_lladdr_dst(pkt)->
addr,
1461 net_pkt_lladdr_dst(pkt)->
len);
1464 net_pkt_lladdr_src(pkt)->
len);
1467static inline void net_pkt_lladdr_clear(
struct net_pkt *pkt)
1475 return pkt->ll_proto_type;
1480 pkt->ll_proto_type =
type;
1483#if defined(CONFIG_NET_IPV4_ACD)
1484static inline bool net_pkt_ipv4_acd(
struct net_pkt *pkt)
1486 return !!(pkt->ipv4_acd_arp_msg);
1489static inline void net_pkt_set_ipv4_acd(
struct net_pkt *pkt,
1490 bool is_acd_arp_msg)
1492 pkt->ipv4_acd_arp_msg = is_acd_arp_msg;
1495static inline bool net_pkt_ipv4_acd(
struct net_pkt *pkt)
1502static inline void net_pkt_set_ipv4_acd(
struct net_pkt *pkt,
1503 bool is_acd_arp_msg)
1506 ARG_UNUSED(is_acd_arp_msg);
1510#if defined(CONFIG_NET_L2_PPP)
1511static inline bool net_pkt_is_ppp(
struct net_pkt *pkt)
1513 return !!(pkt->ppp_msg);
1516static inline void net_pkt_set_ppp(
struct net_pkt *pkt,
1519 pkt->ppp_msg = is_ppp_msg;
1522static inline bool net_pkt_is_ppp(
struct net_pkt *pkt)
1529static inline void net_pkt_set_ppp(
struct net_pkt *pkt,
1533 ARG_UNUSED(is_ppp_msg);
1537#if defined(CONFIG_NET_PKT_CONTROL_BLOCK)
1538static inline void *net_pkt_cb(
struct net_pkt *pkt)
1543static inline void *net_pkt_cb(
struct net_pkt *pkt)
1551#define NET_IPV6_HDR(pkt) ((struct net_ipv6_hdr *)net_pkt_ip_data(pkt))
1552#define NET_IPV4_HDR(pkt) ((struct net_ipv4_hdr *)net_pkt_ip_data(pkt))
1554static inline void net_pkt_set_src_ipv6_addr(
struct net_pkt *pkt)
1557 net_pkt_context(pkt)),
1561static inline void net_pkt_set_overwrite(
struct net_pkt *pkt,
bool overwrite)
1563 pkt->overwrite = overwrite;
1566static inline bool net_pkt_is_being_overwritten(
struct net_pkt *pkt)
1568 return !!(pkt->overwrite);
1571#ifdef CONFIG_NET_PKT_FILTER
1573bool net_pkt_filter_send_ok(
struct net_pkt *pkt);
1574bool net_pkt_filter_recv_ok(
struct net_pkt *pkt);
1578static inline bool net_pkt_filter_send_ok(
struct net_pkt *pkt)
1585static inline bool net_pkt_filter_recv_ok(
struct net_pkt *pkt)
1594#if defined(CONFIG_NET_PKT_FILTER) && \
1595 (defined(CONFIG_NET_PKT_FILTER_IPV4_HOOK) || defined(CONFIG_NET_PKT_FILTER_IPV6_HOOK))
1597bool net_pkt_filter_ip_recv_ok(
struct net_pkt *pkt);
1601static inline bool net_pkt_filter_ip_recv_ok(
struct net_pkt *pkt)
1610#if defined(CONFIG_NET_PKT_FILTER) && defined(CONFIG_NET_PKT_FILTER_LOCAL_IN_HOOK)
1612bool net_pkt_filter_local_in_recv_ok(
struct net_pkt *pkt);
1616static inline bool net_pkt_filter_local_in_recv_ok(
struct net_pkt *pkt)
1625#if defined(CONFIG_NET_OFFLOAD) || defined(CONFIG_NET_L2_IPIP)
1628 return &pkt->remote;
1631static inline void net_pkt_set_remote_address(
struct net_pkt *pkt,
1635 memcpy(&pkt->remote, address, len);
1654#define NET_PKT_SLAB_DEFINE(name, count) \
1655 K_MEM_SLAB_DEFINE_TYPE(name, struct net_pkt, count); \
1656 NET_PKT_ALLOC_STATS_DEFINE(pkt_alloc_stats_##name, name)
1661#define NET_PKT_TX_SLAB_DEFINE(name, count) NET_PKT_SLAB_DEFINE(name, count)
1678#define NET_PKT_DATA_POOL_DEFINE(name, count) \
1679 NET_BUF_POOL_DEFINE(name, count, CONFIG_NET_BUF_DATA_SIZE, \
1684#if defined(CONFIG_NET_DEBUG_NET_PKT_ALLOC) || \
1685 (CONFIG_NET_PKT_LOG_LEVEL >= LOG_LEVEL_DBG)
1686#define NET_PKT_DEBUG_ENABLED
1689#if defined(NET_PKT_DEBUG_ENABLED)
1701#define net_pkt_get_reserve_data(pool, min_len, timeout) \
1702 net_pkt_get_reserve_data_debug(pool, min_len, timeout, __func__, __LINE__)
1704struct net_buf *net_pkt_get_reserve_rx_data_debug(
size_t min_len,
1708#define net_pkt_get_reserve_rx_data(min_len, timeout) \
1709 net_pkt_get_reserve_rx_data_debug(min_len, timeout, __func__, __LINE__)
1711struct net_buf *net_pkt_get_reserve_tx_data_debug(
size_t min_len,
1715#define net_pkt_get_reserve_tx_data(min_len, timeout) \
1716 net_pkt_get_reserve_tx_data_debug(min_len, timeout, __func__, __LINE__)
1718struct net_buf *net_pkt_get_frag_debug(
struct net_pkt *pkt,
size_t min_len,
1720 const char *caller,
int line);
1721#define net_pkt_get_frag(pkt, min_len, timeout) \
1722 net_pkt_get_frag_debug(pkt, min_len, timeout, __func__, __LINE__)
1724void net_pkt_unref_debug(
struct net_pkt *pkt,
const char *caller,
int line);
1725#define net_pkt_unref(pkt) net_pkt_unref_debug(pkt, __func__, __LINE__)
1727struct net_pkt *net_pkt_ref_debug(
struct net_pkt *pkt,
const char *caller,
1729#define net_pkt_ref(pkt) net_pkt_ref_debug(pkt, __func__, __LINE__)
1732 const char *caller,
int line);
1733#define net_pkt_frag_ref(frag) net_pkt_frag_ref_debug(frag, __func__, __LINE__)
1735void net_pkt_frag_unref_debug(
struct net_buf *frag,
1736 const char *caller,
int line);
1737#define net_pkt_frag_unref(frag) \
1738 net_pkt_frag_unref_debug(frag, __func__, __LINE__)
1743 const char *caller,
int line);
1744#define net_pkt_frag_del(pkt, parent, frag) \
1745 net_pkt_frag_del_debug(pkt, parent, frag, __func__, __LINE__)
1747void net_pkt_frag_add_debug(
struct net_pkt *pkt,
struct net_buf *frag,
1748 const char *caller,
int line);
1749#define net_pkt_frag_add(pkt, frag) \
1750 net_pkt_frag_add_debug(pkt, frag, __func__, __LINE__)
1752void net_pkt_frag_insert_debug(
struct net_pkt *pkt,
struct net_buf *frag,
1753 const char *caller,
int line);
1754#define net_pkt_frag_insert(pkt, frag) \
1755 net_pkt_frag_insert_debug(pkt, frag, __func__, __LINE__)
1761#if defined(NET_PKT_DEBUG_ENABLED)
1771#define net_pkt_print_frags(pkt)
1774#if !defined(NET_PKT_DEBUG_ENABLED)
1793#if !defined(NET_PKT_DEBUG_ENABLED)
1811#if !defined(NET_PKT_DEBUG_ENABLED)
1829#if !defined(NET_PKT_DEBUG_ENABLED)
1846#if !defined(NET_PKT_DEBUG_ENABLED)
1859#if !defined(NET_PKT_DEBUG_ENABLED)
1872#if !defined(NET_PKT_DEBUG_ENABLED)
1885#if !defined(NET_PKT_DEBUG_ENABLED)
1894#if !defined(NET_PKT_DEBUG_ENABLED)
1910#if !defined(NET_PKT_DEBUG_ENABLED)
1920#if !defined(NET_PKT_DEBUG_ENABLED)
1950 struct k_mem_slab **tx,
1956#if defined(CONFIG_NET_DEBUG_NET_PKT_ALLOC)
1960void net_pkt_print(
void);
1962typedef void (*net_pkt_allocs_cb_t)(
struct net_pkt *pkt,
1964 const char *func_alloc,
1966 const char *func_free,
1971void net_pkt_allocs_foreach(net_pkt_allocs_cb_t cb,
void *
user_data);
1973const char *net_pkt_slab2str(
struct k_mem_slab *slab);
1974const char *net_pkt_pool2str(
struct net_buf_pool *pool);
1977#define net_pkt_print(...)
1983#if defined(NET_PKT_DEBUG_ENABLED)
1986 const char *caller,
int line);
1987#define net_pkt_alloc(_timeout) \
1988 net_pkt_alloc_debug(_timeout, __func__, __LINE__)
1990struct net_pkt *net_pkt_alloc_from_slab_debug(
struct k_mem_slab *
slab,
1992 const char *caller,
int line);
1993#define net_pkt_alloc_from_slab(_slab, _timeout) \
1994 net_pkt_alloc_from_slab_debug(_slab, _timeout, __func__, __LINE__)
1997 const char *caller,
int line);
1998#define net_pkt_rx_alloc(_timeout) \
1999 net_pkt_rx_alloc_debug(_timeout, __func__, __LINE__)
2005#define net_pkt_alloc_on_iface(_iface, _timeout) \
2006 net_pkt_alloc_on_iface_debug(_iface, _timeout, __func__, __LINE__)
2012#define net_pkt_rx_alloc_on_iface(_iface, _timeout) \
2013 net_pkt_rx_alloc_on_iface_debug(_iface, _timeout, \
2016int net_pkt_alloc_buffer_debug(
struct net_pkt *pkt,
2020 const char *caller,
int line);
2021#define net_pkt_alloc_buffer(_pkt, _size, _proto, _timeout) \
2022 net_pkt_alloc_buffer_debug(_pkt, _size, _proto, _timeout, \
2025int net_pkt_alloc_buffer_raw_debug(
struct net_pkt *pkt,
size_t size,
2027 const char *caller,
int line);
2028#define net_pkt_alloc_buffer_raw(_pkt, _size, _timeout) \
2029 net_pkt_alloc_buffer_raw_debug(_pkt, _size, _timeout, \
2039#define net_pkt_alloc_with_buffer(_iface, _size, _family, \
2041 net_pkt_alloc_with_buffer_debug(_iface, _size, _family, \
2052#define net_pkt_rx_alloc_with_buffer(_iface, _size, _family, \
2054 net_pkt_rx_alloc_with_buffer_debug(_iface, _size, _family, \
2058int net_pkt_alloc_buffer_with_reserve_debug(
struct net_pkt *pkt,
2065#define net_pkt_alloc_buffer_with_reserve(_pkt, _size, _reserve, _proto, _timeout) \
2066 net_pkt_alloc_buffer_with_reserve_debug(_pkt, _size, _reserve, _proto, \
2067 _timeout, __func__, __LINE__)
2072#if !defined(NET_PKT_DEBUG_ENABLED)
2086#if !defined(NET_PKT_DEBUG_ENABLED)
2105#if !defined(NET_PKT_DEBUG_ENABLED)
2119#if !defined(NET_PKT_DEBUG_ENABLED)
2140#if !defined(NET_PKT_DEBUG_ENABLED)
2162#if !defined(NET_PKT_DEBUG_ENABLED)
2180#if !defined(NET_PKT_DEBUG_ENABLED)
2205#if !defined(NET_PKT_DEBUG_ENABLED)
2316 struct net_pkt_cursor *backup)
2318 backup->buf = pkt->
cursor.buf;
2319 backup->pos = pkt->
cursor.pos;
2329 struct net_pkt_cursor *backup)
2331 pkt->
cursor.buf = backup->buf;
2332 pkt->
cursor.pos = backup->pos;
2746struct net_pkt_data_access {
2747#if !defined(CONFIG_NET_HEADERS_ALWAYS_CONTIGUOUS)
2753#if defined(CONFIG_NET_HEADERS_ALWAYS_CONTIGUOUS)
2754#define NET_PKT_DATA_ACCESS_DEFINE(_name, _type) \
2755 struct net_pkt_data_access _name = { \
2756 .size = sizeof(_type), \
2759#define NET_PKT_DATA_ACCESS_CONTIGUOUS_DEFINE(_name, _type) \
2760 NET_PKT_DATA_ACCESS_DEFINE(_name, _type)
2763#define NET_PKT_DATA_ACCESS_DEFINE(_name, _type) \
2764 _type _hdr_##_name; \
2765 struct net_pkt_data_access _name = { \
2766 .data = &_hdr_##_name, \
2767 .size = sizeof(_type), \
2770#define NET_PKT_DATA_ACCESS_CONTIGUOUS_DEFINE(_name, _type) \
2771 struct net_pkt_data_access _name = { \
2773 .size = sizeof(_type), \
2794 struct net_pkt_data_access *access);
2810 struct net_pkt_data_access *access);
2817 struct net_pkt_data_access *access)
VLAN specific definitions.
long atomic_t
Atomic integer variable.
Definition atomic_types.h:31
uint32_t net_socklen_t
Length of a socket address.
Definition net_ip.h:172
#define net_htonl(x)
Convert 32-bit value from host to network byte order.
Definition net_ip.h:133
#define net_ipaddr_copy(dest, src)
Copy an IPv4 or IPv6 address.
Definition net_ip.h:1117
unsigned short int net_sa_family_t
Socket address family type.
Definition net_ip.h:169
#define net_htons(x)
Convert 16-bit value from host to network byte order.
Definition net_ip.h:125
net_ip_protocol
Protocol numbers from IANA/BSD.
Definition net_ip.h:64
static size_t net_buf_frags_len(const struct net_buf *buf)
Calculate amount of bytes stored in fragments.
Definition net_buf.h:2905
static struct net_if * net_context_get_iface(struct net_context *context)
Get network interface for this context.
Definition net_context.h:784
static struct net_linkaddr * net_if_get_link_addr(struct net_if *iface)
Get an network interface's link address.
Definition net_if.h:1300
static const struct net_in6_addr * net_if_ipv6_select_src_addr(struct net_if *iface, const struct net_in6_addr *dst)
Get a IPv6 source address that should be used when sending network data to destination.
Definition net_if.h:2374
static int net_linkaddr_clear(struct net_linkaddr *lladdr)
Clear link address.
Definition net_linkaddr.h:209
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)
Write a uint32_t big endian data to a net_pkt.
Definition net_pkt.h:2611
int net_pkt_alloc_buffer_with_reserve(struct net_pkt *pkt, size_t size, size_t reserve, enum net_ip_protocol proto, k_timeout_t timeout)
Allocate buffer for a net_pkt and reserve some space in the first net_buf.
void net_pkt_cursor_init(struct net_pkt *pkt)
Initialize net_pkt cursor.
int net_pkt_read_le32(struct net_pkt *pkt, uint32_t *data)
Read uint32_t little endian data from a net_pkt.
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)
Definition net_pkt.h:1771
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 the current cursor position.
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.
struct net_pkt * net_pkt_alloc_with_buffer(struct net_if *iface, size_t size, net_sa_family_t family, enum net_ip_protocol proto, k_timeout_t timeout)
Allocate a network packet and buffer at once.
int net_pkt_read_be16(struct net_pkt *pkt, uint16_t *data)
Read uint16_t big endian data from a net_pkt.
int net_pkt_alloc_buffer_raw(struct net_pkt *pkt, size_t size, k_timeout_t timeout)
Allocate buffer for a net_pkt, of specified size, w/o any additional preconditions.
void net_pkt_frag_unref(struct net_buf *frag)
Decrease the packet fragment ref count.
struct net_pkt * net_pkt_rx_clone(struct net_pkt *pkt, k_timeout_t timeout)
Clone pkt and its buffer.
struct net_buf * net_pkt_get_reserve_data(struct net_buf_pool *pool, size_t min_len, k_timeout_t timeout)
Get a data buffer from a given pool.
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)
Write a uint16_t big endian data to a net_pkt.
Definition net_pkt.h:2592
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.
static size_t net_pkt_get_len(struct net_pkt *pkt)
Get the total amount of bytes stored in a packet.
Definition net_pkt.h:2672
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.
int net_pkt_read_le64(struct net_pkt *pkt, uint64_t *data)
Read uint64_t little endian data from a net_pkt.
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)
Write a byte (uint8_t) data to a net_pkt.
Definition net_pkt.h:2575
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.
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.
static void * net_pkt_cursor_get_pos(struct net_pkt *pkt)
Returns current position of the cursor.
Definition net_pkt.h:2342
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:2315
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)
Acknowledge previously contiguous data taken from a network packet Packet needs to be set to overwrit...
Definition net_pkt.h:2816
static int net_pkt_write_le16(struct net_pkt *pkt, uint16_t data)
Write a uint16_t little endian data to a net_pkt.
Definition net_pkt.h:2649
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:2328
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.
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)
Write a uint32_t little endian data to a net_pkt.
Definition net_pkt.h:2630
int net_pkt_read_be64(struct net_pkt *pkt, uint64_t *data)
Read uint64_t big endian data from a net_pkt.
struct net_buf * net_pkt_get_reserve_rx_data(size_t min_len, k_timeout_t timeout)
Get RX DATA buffer from pool.
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)
Read a byte (uint8_t) from a net_pkt.
Definition net_pkt.h:2459
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)
Get the contiguous buffer space.
int64_t net_time_t
Any occurrence of net_time_t specifies a concept of nanosecond resolution scalar time span,...
Definition net_time.h:103
static net_time_t net_ptp_time_to_ns(struct net_ptp_time *ts)
Convert a PTP timestamp to a nanosecond precision timestamp, both related to the local network refere...
Definition ptp_time.h:210
static struct net_ptp_time ns_to_net_ptp_time(net_time_t nsec)
Convert a nanosecond precision timestamp to a PTP timestamp, both related to the local network refere...
Definition ptp_time.h:231
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:44
#define IS_ENABLED(config_macro)
Check for macro definition in compiler-visible expressions.
Definition util_macro.h:154
static uint16_t net_eth_vlan_set_vid(uint16_t tci, uint16_t vid)
Set VLAN identifier to TCI.
Definition ethernet_vlan.h:81
static uint8_t net_eth_vlan_get_dei(uint16_t tci)
Get Drop Eligible Indicator from TCI.
Definition ethernet_vlan.h:56
#define NET_VLAN_TAG_UNSPEC
Unspecified VLAN tag value.
Definition ethernet_vlan.h:32
static uint16_t net_eth_vlan_set_dei(uint16_t tci, bool dei)
Set Drop Eligible Indicator to TCI.
Definition ethernet_vlan.h:94
static uint16_t net_eth_vlan_get_vid(uint16_t tci)
Get VLAN identifier from TCI.
Definition ethernet_vlan.h:44
static uint16_t net_eth_vlan_set_pcp(uint16_t tci, uint8_t pcp)
Set Priority Code Point to TCI.
Definition ethernet_vlan.h:107
static uint8_t net_eth_vlan_get_pcp(uint16_t tci)
Get Priority Code Point from TCI.
Definition ethernet_vlan.h:68
Packet data common to all IEEE 802.15.4 L2 layers.
Header file for the logging core.
Network context definitions.
Network core definitions.
Public API for network interface.
IPv6 and IPv4 definitions.
Public API for network link address.
Representation of nanosecond resolution elapsed time and timestamps in the network stack.
flags
Definition parser.h:97
static void printk(const char *fmt,...)
Print kernel debugging message.
Definition printk.h:64
Public functions for the Precision Time Protocol time specification.
int stat(const char *__restrict __path, struct stat *__restrict __sbuf)
__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)
void * memcpy(void *ZRESTRICT d, const void *ZRESTRICT s, size_t n)
Kernel timeout type.
Definition clock.h:65
Network buffer pool representation.
Definition net_buf.h:1184
Network buffer representation.
Definition net_buf.h:1048
uint8_t * data
Pointer to the start of data in the buffer.
Definition net_buf.h:1137
uint8_t user_data[]
System metadata for this buffer.
Definition net_buf.h:1158
uint16_t len
Length of the data behind the data pointer.
Definition net_buf.h:1140
Note that we do not store the actual source IP address in the context because the address is already ...
Definition net_context.h:207
Network Interface structure.
Definition net_if.h:764
IPv6 address struct.
Definition net_ip.h:144
IPv4 address struct.
Definition net_ip.h:156
Hardware link address structure.
Definition net_linkaddr.h:83
uint8_t addr[6]
The array of bytes representing the address.
Definition net_linkaddr.h:91
uint8_t type
What kind of address is this for.
Definition net_linkaddr.h:85
uint8_t len
The real length of the ll address.
Definition net_linkaddr.h:88
Network packet.
Definition net_pkt.h:119
struct net_buf * frags
buffer fragment
Definition net_pkt.h:131
struct net_context * context
Network connection context.
Definition net_pkt.h:139
struct net_pkt_cursor cursor
Internal buffer iterator used for reading/writing.
Definition net_pkt.h:136
struct net_if * iface
Network interface.
Definition net_pkt.h:142
intptr_t fifo
The fifo is used by RX/TX threads and by socket layer.
Definition net_pkt.h:124
struct net_buf * buffer
alias to a buffer fragment
Definition net_pkt.h:132
struct k_mem_slab * slab
Slab pointer from where it belongs to.
Definition net_pkt.h:127
(Generalized) Precision Time Protocol Timestamp format.
Definition ptp_time.h:111
uint32_t nanosecond
Nanoseconds.
Definition ptp_time.h:134
uint64_t second
Second value.
Definition ptp_time.h:130
Generic sockaddr struct.
Definition net_ip.h:455
#define sys_cpu_to_le32(val)
Convert 32-bit integer from host endianness to little-endian.
Definition byteorder.h:292
#define sys_cpu_to_le16(val)
Convert 16-bit integer from host endianness to little-endian.
Definition byteorder.h:288