Zephyr Project API 4.2.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
net_buf.h
Go to the documentation of this file.
1
5/*
6 * Copyright (c) 2015 Intel Corporation
7 *
8 * SPDX-License-Identifier: Apache-2.0
9 */
10#ifndef ZEPHYR_INCLUDE_NET_BUF_H_
11#define ZEPHYR_INCLUDE_NET_BUF_H_
12
13#include <stddef.h>
14#include <zephyr/types.h>
15#include <zephyr/sys/util.h>
16#include <zephyr/kernel.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
32/* Alignment needed for various parts of the buffer definition */
33#if CONFIG_NET_BUF_ALIGNMENT == 0
34#define __net_buf_align __aligned(sizeof(void *))
35#else
36#define __net_buf_align __aligned(CONFIG_NET_BUF_ALIGNMENT)
37#endif
38
48#define NET_BUF_SIMPLE_DEFINE(_name, _size) \
49 uint8_t net_buf_data_##_name[_size]; \
50 struct net_buf_simple _name = { \
51 .data = net_buf_data_##_name, \
52 .len = 0, \
53 .size = _size, \
54 .__buf = net_buf_data_##_name, \
55 }
56
67#define NET_BUF_SIMPLE_DEFINE_STATIC(_name, _size) \
68 static __noinit uint8_t net_buf_data_##_name[_size]; \
69 static struct net_buf_simple _name = { \
70 .data = net_buf_data_##_name, \
71 .len = 0, \
72 .size = _size, \
73 .__buf = net_buf_data_##_name, \
74 }
75
92
99
102
106 uint8_t *__buf;
107};
108
125#define NET_BUF_SIMPLE(_size) \
126 ((struct net_buf_simple *)(&(struct { \
127 struct net_buf_simple buf; \
128 uint8_t data[_size]; \
129 }) { \
130 .buf.size = _size, \
131 }))
132
142static inline void net_buf_simple_init(struct net_buf_simple *buf,
143 size_t reserve_head)
144{
145 if (!buf->__buf) {
146 buf->__buf = (uint8_t *)buf + sizeof(*buf);
147 }
148
149 buf->data = buf->__buf + reserve_head;
150 buf->len = 0U;
151}
152
163 void *data, size_t size);
164
172static inline void net_buf_simple_reset(struct net_buf_simple *buf)
173{
174 buf->len = 0U;
175 buf->data = buf->__buf;
176}
177
188void net_buf_simple_clone(const struct net_buf_simple *original,
189 struct net_buf_simple *clone);
190
202void *net_buf_simple_add(struct net_buf_simple *buf, size_t len);
203
216void *net_buf_simple_add_mem(struct net_buf_simple *buf, const void *mem,
217 size_t len);
218
231
243
255
267
279
291
303
315
327
339
351
363
375
386void *net_buf_simple_remove_mem(struct net_buf_simple *buf, size_t len);
387
399
411
423
435
447
459
471
483
495
507
519
531
543
555void *net_buf_simple_push(struct net_buf_simple *buf, size_t len);
556
569void *net_buf_simple_push_mem(struct net_buf_simple *buf, const void *mem,
570 size_t len);
571
582
593
603
614
625
636
647
658
669
680
691
702
713
725void *net_buf_simple_pull(struct net_buf_simple *buf, size_t len);
726
738void *net_buf_simple_pull_mem(struct net_buf_simple *buf, size_t len);
739
751
763
775
787
799
811
823
835
847
859
871
883
895
905static inline uint8_t *net_buf_simple_tail(const struct net_buf_simple *buf)
906{
907 return buf->data + buf->len;
908}
909
919size_t net_buf_simple_headroom(const struct net_buf_simple *buf);
920
930size_t net_buf_simple_tailroom(const struct net_buf_simple *buf);
931
942
956
965static inline void net_buf_simple_save(const struct net_buf_simple *buf,
967{
968 state->offset = (uint16_t)net_buf_simple_headroom(buf);
969 state->len = buf->len;
970}
971
981static inline void net_buf_simple_restore(struct net_buf_simple *buf,
983{
984 buf->data = buf->__buf + state->offset;
985 buf->len = state->len;
986}
987
997#define NET_BUF_EXTERNAL_DATA BIT(0)
998
1006struct net_buf {
1009
1012
1015
1018
1021
1024
1028 union {
1029 /* The ABI of this struct must match net_buf_simple */
1030 struct {
1033
1036
1039
1044 uint8_t *__buf;
1045 };
1046
1048 struct net_buf_simple b;
1050 };
1051
1053 uint8_t user_data[] __net_buf_align;
1054};
1055
1058struct net_buf_data_cb {
1059 uint8_t * __must_check (*alloc)(struct net_buf *buf, size_t *size,
1060 k_timeout_t timeout);
1061 uint8_t * __must_check (*ref)(struct net_buf *buf, uint8_t *data);
1062 void (*unref)(struct net_buf *buf, uint8_t *data);
1063};
1064
1065struct net_buf_data_alloc {
1066 const struct net_buf_data_cb *cb;
1067 void *alloc_data;
1068 size_t max_alloc_size;
1069 size_t alignment;
1070};
1071
1081 struct k_lifo free;
1082
1085
1088
1091
1094
1095#if defined(CONFIG_NET_BUF_POOL_USAGE)
1097 atomic_t avail_count;
1098
1100 const uint16_t pool_size;
1101
1103 uint16_t max_used;
1104
1106 const char *name;
1107#endif /* CONFIG_NET_BUF_POOL_USAGE */
1108
1110 void (*const destroy)(struct net_buf *buf);
1111
1113 const struct net_buf_data_alloc *alloc;
1114
1116 struct net_buf * const __bufs;
1117};
1118
1120#define NET_BUF_POOL_USAGE_INIT(_pool, _count) \
1121 IF_ENABLED(CONFIG_NET_BUF_POOL_USAGE, (.avail_count = ATOMIC_INIT(_count),)) \
1122 IF_ENABLED(CONFIG_NET_BUF_POOL_USAGE, (.max_used = 0,)) \
1123 IF_ENABLED(CONFIG_NET_BUF_POOL_USAGE, (.name = STRINGIFY(_pool),))
1124
1125#define NET_BUF_POOL_INITIALIZER(_pool, _alloc, _bufs, _count, _ud_size, _destroy) \
1126 { \
1127 .free = Z_LIFO_INITIALIZER(_pool.free), \
1128 .lock = { }, \
1129 .buf_count = _count, \
1130 .uninit_count = _count, \
1131 .user_data_size = _ud_size, \
1132 NET_BUF_POOL_USAGE_INIT(_pool, _count) \
1133 .destroy = _destroy, \
1134 .alloc = _alloc, \
1135 .__bufs = (struct net_buf *)_bufs, \
1136 }
1137
1138#define _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size) \
1139 struct _net_buf_##_name { uint8_t b[sizeof(struct net_buf)]; \
1140 uint8_t ud[_ud_size]; } __net_buf_align; \
1141 BUILD_ASSERT(_ud_size <= UINT8_MAX); \
1142 BUILD_ASSERT(offsetof(struct net_buf, user_data) == \
1143 offsetof(struct _net_buf_##_name, ud), "Invalid offset"); \
1144 BUILD_ASSERT(__alignof__(struct net_buf) == \
1145 __alignof__(struct _net_buf_##_name), "Invalid alignment"); \
1146 BUILD_ASSERT(sizeof(struct _net_buf_##_name) == \
1147 ROUND_UP(sizeof(struct net_buf) + _ud_size, __alignof__(struct net_buf)), \
1148 "Size cannot be determined"); \
1149 static struct _net_buf_##_name _net_buf_##_name[_count] __noinit
1150
1151extern const struct net_buf_data_alloc net_buf_heap_alloc;
1181#define NET_BUF_POOL_HEAP_DEFINE(_name, _count, _ud_size, _destroy) \
1182 _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size); \
1183 static STRUCT_SECTION_ITERABLE(net_buf_pool, _name) = \
1184 NET_BUF_POOL_INITIALIZER(_name, &net_buf_heap_alloc, \
1185 _net_buf_##_name, _count, _ud_size, \
1186 _destroy)
1187
1190struct net_buf_pool_fixed {
1191 uint8_t *data_pool;
1192};
1193
1194extern const struct net_buf_data_cb net_buf_fixed_cb;
1195
1226#define NET_BUF_POOL_FIXED_DEFINE(_name, _count, _data_size, _ud_size, _destroy) \
1227 _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size); \
1228 static uint8_t __noinit net_buf_data_##_name[_count][_data_size] __net_buf_align; \
1229 static const struct net_buf_pool_fixed net_buf_fixed_##_name = { \
1230 .data_pool = (uint8_t *)net_buf_data_##_name, \
1231 }; \
1232 static const struct net_buf_data_alloc net_buf_fixed_alloc_##_name = { \
1233 .cb = &net_buf_fixed_cb, \
1234 .alloc_data = (void *)&net_buf_fixed_##_name, \
1235 .max_alloc_size = _data_size, \
1236 }; \
1237 static STRUCT_SECTION_ITERABLE(net_buf_pool, _name) = \
1238 NET_BUF_POOL_INITIALIZER(_name, &net_buf_fixed_alloc_##_name, \
1239 _net_buf_##_name, _count, _ud_size, \
1240 _destroy)
1241
1243extern const struct net_buf_data_cb net_buf_var_cb;
1270#define NET_BUF_POOL_VAR_DEFINE(_name, _count, _data_size, _ud_size, _destroy) \
1271 _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size); \
1272 K_HEAP_DEFINE(net_buf_mem_pool_##_name, _data_size); \
1273 static const struct net_buf_data_alloc net_buf_data_alloc_##_name = { \
1274 .cb = &net_buf_var_cb, \
1275 .alloc_data = &net_buf_mem_pool_##_name, \
1276 .max_alloc_size = 0, \
1277 }; \
1278 static STRUCT_SECTION_ITERABLE(net_buf_pool, _name) = \
1279 NET_BUF_POOL_INITIALIZER(_name, &net_buf_data_alloc_##_name, \
1280 _net_buf_##_name, _count, _ud_size, \
1281 _destroy)
1282
1313#define NET_BUF_POOL_VAR_ALIGN_DEFINE(_name, _count, _data_size, _ud_size, \
1314 _destroy, _align) \
1315 _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size); \
1316 K_HEAP_DEFINE(net_buf_mem_pool_##_name, _data_size); \
1317 static const struct net_buf_data_alloc net_buf_data_alloc_##_name = { \
1318 .cb = &net_buf_var_cb, \
1319 .alloc_data = &net_buf_mem_pool_##_name, \
1320 .max_alloc_size = 0, \
1321 .alignment = _align, \
1322 }; \
1323 static STRUCT_SECTION_ITERABLE(net_buf_pool, _name) = \
1324 NET_BUF_POOL_INITIALIZER(_name, &net_buf_data_alloc_##_name, \
1325 _net_buf_##_name, _count, _ud_size, \
1326 _destroy)
1327
1349#define NET_BUF_POOL_DEFINE(_name, _count, _size, _ud_size, _destroy) \
1350 NET_BUF_POOL_FIXED_DEFINE(_name, _count, _size, _ud_size, _destroy)
1351
1360
1373int net_buf_id(const struct net_buf *buf);
1374
1389#if defined(CONFIG_NET_BUF_LOG)
1390struct net_buf * __must_check net_buf_alloc_fixed_debug(struct net_buf_pool *pool,
1391 k_timeout_t timeout,
1392 const char *func,
1393 int line);
1394#define net_buf_alloc_fixed(_pool, _timeout) \
1395 net_buf_alloc_fixed_debug(_pool, _timeout, __func__, __LINE__)
1396#else
1397struct net_buf * __must_check net_buf_alloc_fixed(struct net_buf_pool *pool,
1398 k_timeout_t timeout);
1399#endif
1400
1404static inline struct net_buf * __must_check net_buf_alloc(struct net_buf_pool *pool,
1405 k_timeout_t timeout)
1406{
1407 return net_buf_alloc_fixed(pool, timeout);
1408}
1409
1425#if defined(CONFIG_NET_BUF_LOG)
1426struct net_buf * __must_check net_buf_alloc_len_debug(struct net_buf_pool *pool,
1427 size_t size,
1428 k_timeout_t timeout,
1429 const char *func,
1430 int line);
1431#define net_buf_alloc_len(_pool, _size, _timeout) \
1432 net_buf_alloc_len_debug(_pool, _size, _timeout, __func__, __LINE__)
1433#else
1434struct net_buf * __must_check net_buf_alloc_len(struct net_buf_pool *pool,
1435 size_t size,
1436 k_timeout_t timeout);
1437#endif
1438
1458#if defined(CONFIG_NET_BUF_LOG)
1459struct net_buf * __must_check net_buf_alloc_with_data_debug(struct net_buf_pool *pool,
1460 void *data, size_t size,
1461 k_timeout_t timeout,
1462 const char *func, int line);
1463#define net_buf_alloc_with_data(_pool, _data_, _size, _timeout) \
1464 net_buf_alloc_with_data_debug(_pool, _data_, _size, _timeout, \
1465 __func__, __LINE__)
1466#else
1467struct net_buf * __must_check net_buf_alloc_with_data(struct net_buf_pool *pool,
1468 void *data, size_t size,
1469 k_timeout_t timeout);
1470#endif
1471
1481static inline void net_buf_destroy(struct net_buf *buf)
1482{
1483 struct net_buf_pool *pool = net_buf_pool_get(buf->pool_id);
1484
1485 if (buf->__buf) {
1486 if (!(buf->flags & NET_BUF_EXTERNAL_DATA)) {
1487 pool->alloc->cb->unref(buf, buf->__buf);
1488 }
1489 buf->__buf = NULL;
1490 }
1491
1492 k_lifo_put(&pool->free, buf);
1493}
1494
1502void net_buf_reset(struct net_buf *buf);
1503
1512void net_buf_simple_reserve(struct net_buf_simple *buf, size_t reserve);
1513
1520void net_buf_slist_put(sys_slist_t *list, struct net_buf *buf);
1521
1529struct net_buf * __must_check net_buf_slist_get(sys_slist_t *list);
1530
1538#if defined(CONFIG_NET_BUF_LOG)
1539void net_buf_unref_debug(struct net_buf *buf, const char *func, int line);
1540#define net_buf_unref(_buf) \
1541 net_buf_unref_debug(_buf, __func__, __LINE__)
1542#else
1543void net_buf_unref(struct net_buf *buf);
1544#endif
1545
1553struct net_buf * __must_check net_buf_ref(struct net_buf *buf);
1554
1568struct net_buf * __must_check net_buf_clone(struct net_buf *buf,
1569 k_timeout_t timeout);
1570
1578static inline void * __must_check net_buf_user_data(const struct net_buf *buf)
1579{
1580 return (void *)buf->user_data;
1581}
1582
1592int net_buf_user_data_copy(struct net_buf *dst, const struct net_buf *src);
1593
1602static inline void net_buf_reserve(struct net_buf *buf, size_t reserve)
1603{
1604 net_buf_simple_reserve(&buf->b, reserve);
1605}
1606
1618static inline void *net_buf_add(struct net_buf *buf, size_t len)
1619{
1620 return net_buf_simple_add(&buf->b, len);
1621}
1622
1635static inline void *net_buf_add_mem(struct net_buf *buf, const void *mem,
1636 size_t len)
1637{
1638 return net_buf_simple_add_mem(&buf->b, mem, len);
1639}
1640
1652static inline uint8_t *net_buf_add_u8(struct net_buf *buf, uint8_t val)
1653{
1654 return net_buf_simple_add_u8(&buf->b, val);
1655}
1656
1667static inline void net_buf_add_le16(struct net_buf *buf, uint16_t val)
1668{
1669 net_buf_simple_add_le16(&buf->b, val);
1670}
1671
1682static inline void net_buf_add_be16(struct net_buf *buf, uint16_t val)
1683{
1684 net_buf_simple_add_be16(&buf->b, val);
1685}
1686
1697static inline void net_buf_add_le24(struct net_buf *buf, uint32_t val)
1698{
1699 net_buf_simple_add_le24(&buf->b, val);
1700}
1701
1712static inline void net_buf_add_be24(struct net_buf *buf, uint32_t val)
1713{
1714 net_buf_simple_add_be24(&buf->b, val);
1715}
1716
1727static inline void net_buf_add_le32(struct net_buf *buf, uint32_t val)
1728{
1729 net_buf_simple_add_le32(&buf->b, val);
1730}
1731
1742static inline void net_buf_add_be32(struct net_buf *buf, uint32_t val)
1743{
1744 net_buf_simple_add_be32(&buf->b, val);
1745}
1746
1757static inline void net_buf_add_le40(struct net_buf *buf, uint64_t val)
1758{
1759 net_buf_simple_add_le40(&buf->b, val);
1760}
1761
1772static inline void net_buf_add_be40(struct net_buf *buf, uint64_t val)
1773{
1774 net_buf_simple_add_be40(&buf->b, val);
1775}
1776
1787static inline void net_buf_add_le48(struct net_buf *buf, uint64_t val)
1788{
1789 net_buf_simple_add_le48(&buf->b, val);
1790}
1791
1802static inline void net_buf_add_be48(struct net_buf *buf, uint64_t val)
1803{
1804 net_buf_simple_add_be48(&buf->b, val);
1805}
1806
1817static inline void net_buf_add_le64(struct net_buf *buf, uint64_t val)
1818{
1819 net_buf_simple_add_le64(&buf->b, val);
1820}
1821
1832static inline void net_buf_add_be64(struct net_buf *buf, uint64_t val)
1833{
1834 net_buf_simple_add_be64(&buf->b, val);
1835}
1836
1847static inline void *net_buf_remove_mem(struct net_buf *buf, size_t len)
1848{
1849 return net_buf_simple_remove_mem(&buf->b, len);
1850}
1851
1862static inline uint8_t net_buf_remove_u8(struct net_buf *buf)
1863{
1864 return net_buf_simple_remove_u8(&buf->b);
1865}
1866
1877static inline uint16_t net_buf_remove_le16(struct net_buf *buf)
1878{
1879 return net_buf_simple_remove_le16(&buf->b);
1880}
1881
1892static inline uint16_t net_buf_remove_be16(struct net_buf *buf)
1893{
1894 return net_buf_simple_remove_be16(&buf->b);
1895}
1896
1907static inline uint32_t net_buf_remove_be24(struct net_buf *buf)
1908{
1909 return net_buf_simple_remove_be24(&buf->b);
1910}
1911
1922static inline uint32_t net_buf_remove_le24(struct net_buf *buf)
1923{
1924 return net_buf_simple_remove_le24(&buf->b);
1925}
1926
1937static inline uint32_t net_buf_remove_le32(struct net_buf *buf)
1938{
1939 return net_buf_simple_remove_le32(&buf->b);
1940}
1941
1952static inline uint32_t net_buf_remove_be32(struct net_buf *buf)
1953{
1954 return net_buf_simple_remove_be32(&buf->b);
1955}
1956
1967static inline uint64_t net_buf_remove_le40(struct net_buf *buf)
1968{
1969 return net_buf_simple_remove_le40(&buf->b);
1970}
1971
1982static inline uint64_t net_buf_remove_be40(struct net_buf *buf)
1983{
1984 return net_buf_simple_remove_be40(&buf->b);
1985}
1986
1997static inline uint64_t net_buf_remove_le48(struct net_buf *buf)
1998{
1999 return net_buf_simple_remove_le48(&buf->b);
2000}
2001
2012static inline uint64_t net_buf_remove_be48(struct net_buf *buf)
2013{
2014 return net_buf_simple_remove_be48(&buf->b);
2015}
2016
2027static inline uint64_t net_buf_remove_le64(struct net_buf *buf)
2028{
2029 return net_buf_simple_remove_le64(&buf->b);
2030}
2031
2042static inline uint64_t net_buf_remove_be64(struct net_buf *buf)
2043{
2044 return net_buf_simple_remove_be64(&buf->b);
2045}
2046
2058static inline void *net_buf_push(struct net_buf *buf, size_t len)
2059{
2060 return net_buf_simple_push(&buf->b, len);
2061}
2062
2075static inline void *net_buf_push_mem(struct net_buf *buf, const void *mem,
2076 size_t len)
2077{
2078 return net_buf_simple_push_mem(&buf->b, mem, len);
2079}
2080
2089static inline void net_buf_push_u8(struct net_buf *buf, uint8_t val)
2090{
2091 net_buf_simple_push_u8(&buf->b, val);
2092}
2093
2103static inline void net_buf_push_le16(struct net_buf *buf, uint16_t val)
2104{
2105 net_buf_simple_push_le16(&buf->b, val);
2106}
2107
2117static inline void net_buf_push_be16(struct net_buf *buf, uint16_t val)
2118{
2119 net_buf_simple_push_be16(&buf->b, val);
2120}
2121
2131static inline void net_buf_push_le24(struct net_buf *buf, uint32_t val)
2132{
2133 net_buf_simple_push_le24(&buf->b, val);
2134}
2135
2145static inline void net_buf_push_be24(struct net_buf *buf, uint32_t val)
2146{
2147 net_buf_simple_push_be24(&buf->b, val);
2148}
2149
2159static inline void net_buf_push_le32(struct net_buf *buf, uint32_t val)
2160{
2161 net_buf_simple_push_le32(&buf->b, val);
2162}
2163
2173static inline void net_buf_push_be32(struct net_buf *buf, uint32_t val)
2174{
2175 net_buf_simple_push_be32(&buf->b, val);
2176}
2177
2187static inline void net_buf_push_le40(struct net_buf *buf, uint64_t val)
2188{
2189 net_buf_simple_push_le40(&buf->b, val);
2190}
2191
2201static inline void net_buf_push_be40(struct net_buf *buf, uint64_t val)
2202{
2203 net_buf_simple_push_be40(&buf->b, val);
2204}
2205
2215static inline void net_buf_push_le48(struct net_buf *buf, uint64_t val)
2216{
2217 net_buf_simple_push_le48(&buf->b, val);
2218}
2219
2229static inline void net_buf_push_be48(struct net_buf *buf, uint64_t val)
2230{
2231 net_buf_simple_push_be48(&buf->b, val);
2232}
2233
2243static inline void net_buf_push_le64(struct net_buf *buf, uint64_t val)
2244{
2245 net_buf_simple_push_le64(&buf->b, val);
2246}
2247
2257static inline void net_buf_push_be64(struct net_buf *buf, uint64_t val)
2258{
2259 net_buf_simple_push_be64(&buf->b, val);
2260}
2261
2273static inline void *net_buf_pull(struct net_buf *buf, size_t len)
2274{
2275 return net_buf_simple_pull(&buf->b, len);
2276}
2277
2289static inline void *net_buf_pull_mem(struct net_buf *buf, size_t len)
2290{
2291 return net_buf_simple_pull_mem(&buf->b, len);
2292}
2293
2304static inline uint8_t net_buf_pull_u8(struct net_buf *buf)
2305{
2306 return net_buf_simple_pull_u8(&buf->b);
2307}
2308
2319static inline uint16_t net_buf_pull_le16(struct net_buf *buf)
2320{
2321 return net_buf_simple_pull_le16(&buf->b);
2322}
2323
2334static inline uint16_t net_buf_pull_be16(struct net_buf *buf)
2335{
2336 return net_buf_simple_pull_be16(&buf->b);
2337}
2338
2349static inline uint32_t net_buf_pull_le24(struct net_buf *buf)
2350{
2351 return net_buf_simple_pull_le24(&buf->b);
2352}
2353
2364static inline uint32_t net_buf_pull_be24(struct net_buf *buf)
2365{
2366 return net_buf_simple_pull_be24(&buf->b);
2367}
2368
2379static inline uint32_t net_buf_pull_le32(struct net_buf *buf)
2380{
2381 return net_buf_simple_pull_le32(&buf->b);
2382}
2383
2394static inline uint32_t net_buf_pull_be32(struct net_buf *buf)
2395{
2396 return net_buf_simple_pull_be32(&buf->b);
2397}
2398
2409static inline uint64_t net_buf_pull_le40(struct net_buf *buf)
2410{
2411 return net_buf_simple_pull_le40(&buf->b);
2412}
2413
2424static inline uint64_t net_buf_pull_be40(struct net_buf *buf)
2425{
2426 return net_buf_simple_pull_be40(&buf->b);
2427}
2428
2439static inline uint64_t net_buf_pull_le48(struct net_buf *buf)
2440{
2441 return net_buf_simple_pull_le48(&buf->b);
2442}
2443
2454static inline uint64_t net_buf_pull_be48(struct net_buf *buf)
2455{
2456 return net_buf_simple_pull_be48(&buf->b);
2457}
2458
2469static inline uint64_t net_buf_pull_le64(struct net_buf *buf)
2470{
2471 return net_buf_simple_pull_le64(&buf->b);
2472}
2473
2484static inline uint64_t net_buf_pull_be64(struct net_buf *buf)
2485{
2486 return net_buf_simple_pull_be64(&buf->b);
2487}
2488
2498static inline size_t net_buf_tailroom(const struct net_buf *buf)
2499{
2500 return net_buf_simple_tailroom(&buf->b);
2501}
2502
2512static inline size_t net_buf_headroom(const struct net_buf *buf)
2513{
2514 return net_buf_simple_headroom(&buf->b);
2515}
2516
2526static inline uint16_t net_buf_max_len(const struct net_buf *buf)
2527{
2528 return net_buf_simple_max_len(&buf->b);
2529}
2530
2540static inline uint8_t *net_buf_tail(const struct net_buf *buf)
2541{
2542 return net_buf_simple_tail(&buf->b);
2543}
2544
2551
2563void net_buf_frag_insert(struct net_buf *parent, struct net_buf *frag);
2564
2579struct net_buf *net_buf_frag_add(struct net_buf *head, struct net_buf *frag);
2580
2590#if defined(CONFIG_NET_BUF_LOG)
2591struct net_buf *net_buf_frag_del_debug(struct net_buf *parent,
2592 struct net_buf *frag,
2593 const char *func, int line);
2594#define net_buf_frag_del(_parent, _frag) \
2595 net_buf_frag_del_debug(_parent, _frag, __func__, __LINE__)
2596#else
2597struct net_buf *net_buf_frag_del(struct net_buf *parent, struct net_buf *frag);
2598#endif
2599
2615size_t net_buf_linearize(void *dst, size_t dst_len,
2616 const struct net_buf *src, size_t offset, size_t len);
2617
2632typedef struct net_buf * __must_check (*net_buf_allocator_cb)(k_timeout_t timeout,
2633 void *user_data);
2634
2656size_t net_buf_append_bytes(struct net_buf *buf, size_t len,
2657 const void *value, k_timeout_t timeout,
2658 net_buf_allocator_cb allocate_cb, void *user_data);
2659
2674size_t net_buf_data_match(const struct net_buf *buf, size_t offset, const void *data, size_t len);
2675
2691static inline struct net_buf *net_buf_skip(struct net_buf *buf, size_t len)
2692{
2693 while (buf && len--) {
2694 net_buf_pull_u8(buf);
2695 if (!buf->len) {
2696 buf = net_buf_frag_del(NULL, buf);
2697 }
2698 }
2699
2700 return buf;
2701}
2702
2713static inline size_t net_buf_frags_len(const struct net_buf *buf)
2714{
2715 size_t bytes = 0;
2716
2717 while (buf) {
2718 bytes += buf->len;
2719 buf = buf->frags;
2720 }
2721
2722 return bytes;
2723}
2724
2729#ifdef __cplusplus
2730}
2731#endif
2732
2733#endif /* ZEPHYR_INCLUDE_NET_BUF_H_ */
long atomic_t
Definition atomic_types.h:15
#define k_lifo_put(lifo, data)
Add an element to a LIFO queue.
Definition kernel.h:2835
void net_buf_simple_clone(const struct net_buf_simple *original, struct net_buf_simple *clone)
Clone buffer state, using the same data buffer.
static void net_buf_simple_init(struct net_buf_simple *buf, size_t reserve_head)
Initialize a net_buf_simple object.
Definition net_buf.h:142
struct net_buf * net_buf_frag_last(struct net_buf *frags)
Find the last fragment in the fragment list.
static uint64_t net_buf_pull_be40(struct net_buf *buf)
Remove and convert 40 bits from the beginning of the buffer.
Definition net_buf.h:2424
static void net_buf_add_be64(struct net_buf *buf, uint64_t val)
Add 64-bit value at the end of the buffer.
Definition net_buf.h:1832
uint8_t net_buf_simple_pull_u8(struct net_buf_simple *buf)
Remove a 8-bit value from the beginning of the buffer.
uint16_t net_buf_simple_remove_le16(struct net_buf_simple *buf)
Remove and convert 16 bits from the end of the buffer.
static uint64_t net_buf_remove_le48(struct net_buf *buf)
Remove and convert 48 bits from the end of the buffer.
Definition net_buf.h:1997
struct net_buf * net_buf_frag_add(struct net_buf *head, struct net_buf *frag)
Add a new fragment to the end of a chain of bufs.
void net_buf_simple_reserve(struct net_buf_simple *buf, size_t reserve)
Initialize buffer with the given headroom.
void net_buf_simple_push_u8(struct net_buf_simple *buf, uint8_t val)
Push 8-bit value to the beginning of the buffer.
static void net_buf_add_be24(struct net_buf *buf, uint32_t val)
Add 24-bit value at the end of the buffer.
Definition net_buf.h:1712
struct net_buf * net_buf_alloc_len(struct net_buf_pool *pool, size_t size, k_timeout_t timeout)
Allocate a new variable length buffer from a pool.
void net_buf_reset(struct net_buf *buf)
Reset buffer.
struct net_buf_pool * net_buf_pool_get(int id)
Looks up a pool based on its ID.
void * net_buf_simple_add(struct net_buf_simple *buf, size_t len)
Prepare data to be added at the end of the buffer.
uint64_t net_buf_simple_pull_be48(struct net_buf_simple *buf)
Remove and convert 48 bits from the beginning of the buffer.
uint32_t net_buf_simple_pull_be32(struct net_buf_simple *buf)
Remove and convert 32 bits from the beginning of the buffer.
void net_buf_simple_push_be48(struct net_buf_simple *buf, uint64_t val)
Push 48-bit value to the beginning of the buffer.
struct net_buf * net_buf_slist_get(sys_slist_t *list)
Get a buffer from a list.
size_t net_buf_simple_tailroom(const struct net_buf_simple *buf)
Check buffer tailroom.
struct net_buf * net_buf_ref(struct net_buf *buf)
Increment the reference count of a buffer.
uint64_t net_buf_simple_remove_le40(struct net_buf_simple *buf)
Remove and convert 40 bits from the end of the buffer.
struct net_buf *(* net_buf_allocator_cb)(k_timeout_t timeout, void *user_data)
Network buffer allocator callback.
Definition net_buf.h:2632
static struct net_buf * net_buf_skip(struct net_buf *buf, size_t len)
Skip N number of bytes in a net_buf.
Definition net_buf.h:2691
static void * net_buf_add(struct net_buf *buf, size_t len)
Prepare data to be added at the end of the buffer.
Definition net_buf.h:1618
static void net_buf_add_le24(struct net_buf *buf, uint32_t val)
Add 24-bit value at the end of the buffer.
Definition net_buf.h:1697
static uint64_t net_buf_pull_le40(struct net_buf *buf)
Remove and convert 40 bits from the beginning of the buffer.
Definition net_buf.h:2409
uint32_t net_buf_simple_pull_le32(struct net_buf_simple *buf)
Remove and convert 32 bits from the beginning of the buffer.
void net_buf_simple_add_le32(struct net_buf_simple *buf, uint32_t val)
Add 32-bit value at the end of the buffer.
static uint64_t net_buf_pull_be64(struct net_buf *buf)
Remove and convert 64 bits from the beginning of the buffer.
Definition net_buf.h:2484
static void net_buf_push_be64(struct net_buf *buf, uint64_t val)
Push 64-bit value to the beginning of the buffer.
Definition net_buf.h:2257
static uint64_t net_buf_remove_le64(struct net_buf *buf)
Remove and convert 64 bits from the end of the buffer.
Definition net_buf.h:2027
static void net_buf_simple_reset(struct net_buf_simple *buf)
Reset buffer.
Definition net_buf.h:172
uint32_t net_buf_simple_pull_be24(struct net_buf_simple *buf)
Remove and convert 24 bits from the beginning of the buffer.
uint32_t net_buf_simple_pull_le24(struct net_buf_simple *buf)
Remove and convert 24 bits from the beginning of the buffer.
int net_buf_user_data_copy(struct net_buf *dst, const struct net_buf *src)
Copy user data from one to another buffer.
uint32_t net_buf_simple_remove_le24(struct net_buf_simple *buf)
Remove and convert 24 bits from the end of the buffer.
void net_buf_simple_push_le16(struct net_buf_simple *buf, uint16_t val)
Push 16-bit value to the beginning of the buffer.
static void net_buf_push_be40(struct net_buf *buf, uint64_t val)
Push 40-bit value to the beginning of the buffer.
Definition net_buf.h:2201
static struct net_buf * net_buf_alloc(struct net_buf_pool *pool, k_timeout_t timeout)
Definition net_buf.h:1404
static void net_buf_add_be32(struct net_buf *buf, uint32_t val)
Add 32-bit value at the end of the buffer.
Definition net_buf.h:1742
uint64_t net_buf_simple_remove_le64(struct net_buf_simple *buf)
Remove and convert 64 bits from the end of the buffer.
static uint64_t net_buf_remove_le40(struct net_buf *buf)
Remove and convert 40 bits from the end of the buffer.
Definition net_buf.h:1967
void net_buf_simple_add_le48(struct net_buf_simple *buf, uint64_t val)
Add 48-bit value at the end of the buffer.
static uint16_t net_buf_remove_be16(struct net_buf *buf)
Remove and convert 16 bits from the end of the buffer.
Definition net_buf.h:1892
void net_buf_simple_add_be24(struct net_buf_simple *buf, uint32_t val)
Add 24-bit value at the end of the buffer.
static uint32_t net_buf_pull_le32(struct net_buf *buf)
Remove and convert 32 bits from the beginning of the buffer.
Definition net_buf.h:2379
static uint32_t net_buf_pull_be32(struct net_buf *buf)
Remove and convert 32 bits from the beginning of the buffer.
Definition net_buf.h:2394
struct net_buf * net_buf_frag_del(struct net_buf *parent, struct net_buf *frag)
Delete existing fragment from a chain of bufs.
uint64_t net_buf_simple_remove_be64(struct net_buf_simple *buf)
Remove and convert 64 bits from the end of the buffer.
static void net_buf_add_be16(struct net_buf *buf, uint16_t val)
Add 16-bit value at the end of the buffer.
Definition net_buf.h:1682
static void net_buf_add_le40(struct net_buf *buf, uint64_t val)
Add 40-bit value at the end of the buffer.
Definition net_buf.h:1757
size_t net_buf_append_bytes(struct net_buf *buf, size_t len, const void *value, k_timeout_t timeout, net_buf_allocator_cb allocate_cb, void *user_data)
Append data to a list of net_buf.
void * net_buf_simple_push(struct net_buf_simple *buf, size_t len)
Prepare data to be added to the start of the buffer.
static uint16_t net_buf_max_len(const struct net_buf *buf)
Check maximum net_buf::len value.
Definition net_buf.h:2526
void net_buf_simple_push_le48(struct net_buf_simple *buf, uint64_t val)
Push 48-bit value to the beginning of the buffer.
void net_buf_simple_add_le40(struct net_buf_simple *buf, uint64_t val)
Add 40-bit value at the end of the buffer.
struct net_buf * net_buf_alloc_fixed(struct net_buf_pool *pool, k_timeout_t timeout)
Allocate a new fixed buffer from a pool.
static uint64_t net_buf_pull_be48(struct net_buf *buf)
Remove and convert 48 bits from the beginning of the buffer.
Definition net_buf.h:2454
void net_buf_simple_add_be40(struct net_buf_simple *buf, uint64_t val)
Add 40-bit value at the end of the buffer.
uint64_t net_buf_simple_pull_le48(struct net_buf_simple *buf)
Remove and convert 48 bits from the beginning of the buffer.
void net_buf_slist_put(sys_slist_t *list, struct net_buf *buf)
Put a buffer into a list.
static void net_buf_push_be16(struct net_buf *buf, uint16_t val)
Push 16-bit value to the beginning of the buffer.
Definition net_buf.h:2117
static uint32_t net_buf_remove_be24(struct net_buf *buf)
Remove and convert 24 bits from the end of the buffer.
Definition net_buf.h:1907
static void net_buf_add_be40(struct net_buf *buf, uint64_t val)
Add 40-bit value at the end of the buffer.
Definition net_buf.h:1772
static uint8_t net_buf_pull_u8(struct net_buf *buf)
Remove a 8-bit value from the beginning of the buffer.
Definition net_buf.h:2304
static void net_buf_destroy(struct net_buf *buf)
Destroy buffer from custom destroy callback.
Definition net_buf.h:1481
void net_buf_simple_push_le40(struct net_buf_simple *buf, uint64_t val)
Push 40-bit value to the beginning of the buffer.
void net_buf_simple_push_le64(struct net_buf_simple *buf, uint64_t val)
Push 64-bit value to the beginning of the buffer.
void net_buf_simple_add_le64(struct net_buf_simple *buf, uint64_t val)
Add 64-bit value at the end of the buffer.
uint64_t net_buf_simple_pull_le64(struct net_buf_simple *buf)
Remove and convert 64 bits from the beginning of the buffer.
static void * net_buf_push_mem(struct net_buf *buf, const void *mem, size_t len)
Copies the given number of bytes to the start of the buffer.
Definition net_buf.h:2075
static uint64_t net_buf_pull_le48(struct net_buf *buf)
Remove and convert 48 bits from the beginning of the buffer.
Definition net_buf.h:2439
void net_buf_simple_init_with_data(struct net_buf_simple *buf, void *data, size_t size)
Initialize a net_buf_simple object with data.
void net_buf_simple_push_be16(struct net_buf_simple *buf, uint16_t val)
Push 16-bit value to the beginning of the buffer.
void * net_buf_simple_remove_mem(struct net_buf_simple *buf, size_t len)
Remove data from the end of the buffer.
static void net_buf_push_le48(struct net_buf *buf, uint64_t val)
Push 48-bit value to the beginning of the buffer.
Definition net_buf.h:2215
static uint32_t net_buf_pull_le24(struct net_buf *buf)
Remove and convert 24 bits from the beginning of the buffer.
Definition net_buf.h:2349
void net_buf_simple_push_le32(struct net_buf_simple *buf, uint32_t val)
Push 32-bit value to the beginning of the buffer.
static uint8_t * net_buf_add_u8(struct net_buf *buf, uint8_t val)
Add (8-bit) byte at the end of the buffer.
Definition net_buf.h:1652
static void net_buf_push_be24(struct net_buf *buf, uint32_t val)
Push 24-bit value to the beginning of the buffer.
Definition net_buf.h:2145
static void net_buf_push_le24(struct net_buf *buf, uint32_t val)
Push 24-bit value to the beginning of the buffer.
Definition net_buf.h:2131
static void net_buf_reserve(struct net_buf *buf, size_t reserve)
Initialize buffer with the given headroom.
Definition net_buf.h:1602
static uint64_t net_buf_remove_be64(struct net_buf *buf)
Remove and convert 64 bits from the end of the buffer.
Definition net_buf.h:2042
struct net_buf * net_buf_alloc_with_data(struct net_buf_pool *pool, void *data, size_t size, k_timeout_t timeout)
Allocate a new buffer from a pool but with external data pointer.
static uint32_t net_buf_pull_be24(struct net_buf *buf)
Remove and convert 24 bits from the beginning of the buffer.
Definition net_buf.h:2364
void net_buf_simple_add_be64(struct net_buf_simple *buf, uint64_t val)
Add 64-bit value at the end of the buffer.
static void net_buf_add_be48(struct net_buf *buf, uint64_t val)
Add 48-bit value at the end of the buffer.
Definition net_buf.h:1802
uint8_t * net_buf_simple_add_u8(struct net_buf_simple *buf, uint8_t val)
Add (8-bit) byte at the end of the buffer.
static uint32_t net_buf_remove_le24(struct net_buf *buf)
Remove and convert 24 bits from the end of the buffer.
Definition net_buf.h:1922
static void net_buf_push_u8(struct net_buf *buf, uint8_t val)
Push 8-bit value to the beginning of the buffer.
Definition net_buf.h:2089
void net_buf_simple_add_be16(struct net_buf_simple *buf, uint16_t val)
Add 16-bit value at the end of the buffer.
uint16_t net_buf_simple_remove_be16(struct net_buf_simple *buf)
Remove and convert 16 bits from the end of the buffer.
static void * net_buf_push(struct net_buf *buf, size_t len)
Prepare data to be added at the start of the buffer.
Definition net_buf.h:2058
static uint16_t net_buf_pull_be16(struct net_buf *buf)
Remove and convert 16 bits from the beginning of the buffer.
Definition net_buf.h:2334
static void net_buf_push_le32(struct net_buf *buf, uint32_t val)
Push 32-bit value to the beginning of the buffer.
Definition net_buf.h:2159
static uint64_t net_buf_pull_le64(struct net_buf *buf)
Remove and convert 64 bits from the beginning of the buffer.
Definition net_buf.h:2469
uint64_t net_buf_simple_remove_be40(struct net_buf_simple *buf)
Remove and convert 40 bits from the end of the buffer.
uint32_t net_buf_simple_remove_be24(struct net_buf_simple *buf)
Remove and convert 24 bits from the end of the buffer.
void * net_buf_simple_pull_mem(struct net_buf_simple *buf, size_t len)
Remove data from the beginning of the buffer.
uint32_t net_buf_simple_remove_le32(struct net_buf_simple *buf)
Remove and convert 32 bits from the end of the buffer.
void net_buf_simple_add_le16(struct net_buf_simple *buf, uint16_t val)
Add 16-bit value at the end of the buffer.
uint64_t net_buf_simple_pull_be40(struct net_buf_simple *buf)
Remove and convert 40 bits from the beginning of the buffer.
static uint8_t * net_buf_simple_tail(const struct net_buf_simple *buf)
Get the tail pointer for a buffer.
Definition net_buf.h:905
void * net_buf_simple_push_mem(struct net_buf_simple *buf, const void *mem, size_t len)
Copy given number of bytes from memory to the start of the buffer.
static uint64_t net_buf_remove_be48(struct net_buf *buf)
Remove and convert 48 bits from the end of the buffer.
Definition net_buf.h:2012
void net_buf_simple_add_be32(struct net_buf_simple *buf, uint32_t val)
Add 32-bit value at the end of the buffer.
#define NET_BUF_EXTERNAL_DATA
Flag indicating that the buffer's associated data pointer, points to externally allocated memory.
Definition net_buf.h:997
static uint16_t net_buf_remove_le16(struct net_buf *buf)
Remove and convert 16 bits from the end of the buffer.
Definition net_buf.h:1877
size_t net_buf_simple_headroom(const struct net_buf_simple *buf)
Check buffer headroom.
static void net_buf_push_le16(struct net_buf *buf, uint16_t val)
Push 16-bit value to the beginning of the buffer.
Definition net_buf.h:2103
uint64_t net_buf_simple_remove_be48(struct net_buf_simple *buf)
Remove and convert 48 bits from the end of the buffer.
void net_buf_simple_push_le24(struct net_buf_simple *buf, uint32_t val)
Push 24-bit value to the beginning of the buffer.
void net_buf_unref(struct net_buf *buf)
Decrements the reference count of a buffer.
static void net_buf_simple_save(const struct net_buf_simple *buf, struct net_buf_simple_state *state)
Save the parsing state of a buffer.
Definition net_buf.h:965
static void net_buf_push_be48(struct net_buf *buf, uint64_t val)
Push 48-bit value to the beginning of the buffer.
Definition net_buf.h:2229
void net_buf_simple_push_be24(struct net_buf_simple *buf, uint32_t val)
Push 24-bit value to the beginning of the buffer.
uint16_t net_buf_simple_max_len(const struct net_buf_simple *buf)
Check maximum net_buf_simple::len value.
void net_buf_frag_insert(struct net_buf *parent, struct net_buf *frag)
Insert a new fragment to a chain of bufs.
uint64_t net_buf_simple_remove_le48(struct net_buf_simple *buf)
Remove and convert 48 bits from the end of the buffer.
void * net_buf_simple_add_mem(struct net_buf_simple *buf, const void *mem, size_t len)
Copy given number of bytes from memory to the end of the buffer.
static void net_buf_add_le64(struct net_buf *buf, uint64_t val)
Add 64-bit value at the end of the buffer.
Definition net_buf.h:1817
static size_t net_buf_headroom(const struct net_buf *buf)
Check buffer headroom.
Definition net_buf.h:2512
static uint32_t net_buf_remove_be32(struct net_buf *buf)
Remove and convert 32 bits from the end of the buffer.
Definition net_buf.h:1952
int net_buf_id(const struct net_buf *buf)
Get a zero-based index for a buffer.
static void * net_buf_remove_mem(struct net_buf *buf, size_t len)
Remove data from the end of the buffer.
Definition net_buf.h:1847
static void * net_buf_add_mem(struct net_buf *buf, const void *mem, size_t len)
Copies the given number of bytes to the end of the buffer.
Definition net_buf.h:1635
uint64_t net_buf_simple_pull_be64(struct net_buf_simple *buf)
Remove and convert 64 bits from the beginning of the buffer.
void net_buf_simple_push_be32(struct net_buf_simple *buf, uint32_t val)
Push 32-bit value to the beginning of the buffer.
static void net_buf_push_le64(struct net_buf *buf, uint64_t val)
Push 64-bit value to the beginning of the buffer.
Definition net_buf.h:2243
uint16_t net_buf_simple_pull_le16(struct net_buf_simple *buf)
Remove and convert 16 bits from the beginning of the buffer.
void net_buf_simple_push_be40(struct net_buf_simple *buf, uint64_t val)
Push 40-bit value to the beginning of the buffer.
uint64_t net_buf_simple_pull_le40(struct net_buf_simple *buf)
Remove and convert 40 bits from the beginning of the buffer.
static uint8_t net_buf_remove_u8(struct net_buf *buf)
Remove a 8-bit value from the end of the buffer.
Definition net_buf.h:1862
void net_buf_simple_add_be48(struct net_buf_simple *buf, uint64_t val)
Add 48-bit value at the end of the buffer.
static void net_buf_add_le16(struct net_buf *buf, uint16_t val)
Add 16-bit value at the end of the buffer.
Definition net_buf.h:1667
static uint64_t net_buf_remove_be40(struct net_buf *buf)
Remove and convert 40 bits from the end of the buffer.
Definition net_buf.h:1982
uint16_t net_buf_simple_pull_be16(struct net_buf_simple *buf)
Remove and convert 16 bits from the beginning of the buffer.
static void net_buf_push_be32(struct net_buf *buf, uint32_t val)
Push 32-bit value to the beginning of the buffer.
Definition net_buf.h:2173
static void net_buf_add_le32(struct net_buf *buf, uint32_t val)
Add 32-bit value at the end of the buffer.
Definition net_buf.h:1727
uint32_t net_buf_simple_remove_be32(struct net_buf_simple *buf)
Remove and convert 32 bits from the end of the buffer.
static uint32_t net_buf_remove_le32(struct net_buf *buf)
Remove and convert 32 bits from the end of the buffer.
Definition net_buf.h:1937
static size_t net_buf_frags_len(const struct net_buf *buf)
Calculate amount of bytes stored in fragments.
Definition net_buf.h:2713
static size_t net_buf_tailroom(const struct net_buf *buf)
Check buffer tailroom.
Definition net_buf.h:2498
static uint16_t net_buf_pull_le16(struct net_buf *buf)
Remove and convert 16 bits from the beginning of the buffer.
Definition net_buf.h:2319
static uint8_t * net_buf_tail(const struct net_buf *buf)
Get the tail pointer for a buffer.
Definition net_buf.h:2540
static void * net_buf_pull_mem(struct net_buf *buf, size_t len)
Remove data from the beginning of the buffer.
Definition net_buf.h:2289
static void net_buf_simple_restore(struct net_buf_simple *buf, struct net_buf_simple_state *state)
Restore the parsing state of a buffer.
Definition net_buf.h:981
static void * net_buf_pull(struct net_buf *buf, size_t len)
Remove data from the beginning of the buffer.
Definition net_buf.h:2273
size_t net_buf_data_match(const struct net_buf *buf, size_t offset, const void *data, size_t len)
Match data with a net_buf's content.
static void net_buf_push_le40(struct net_buf *buf, uint64_t val)
Push 40-bit value to the beginning of the buffer.
Definition net_buf.h:2187
static void net_buf_add_le48(struct net_buf *buf, uint64_t val)
Add 48-bit value at the end of the buffer.
Definition net_buf.h:1787
void net_buf_simple_add_le24(struct net_buf_simple *buf, uint32_t val)
Add 24-bit value at the end of the buffer.
static void * net_buf_user_data(const struct net_buf *buf)
Get a pointer to the user data of a buffer.
Definition net_buf.h:1578
struct net_buf * net_buf_clone(struct net_buf *buf, k_timeout_t timeout)
Clone buffer.
uint8_t net_buf_simple_remove_u8(struct net_buf_simple *buf)
Remove a 8-bit value from the end of the buffer.
void * net_buf_simple_pull(struct net_buf_simple *buf, size_t len)
Remove data from the beginning of the buffer.
void net_buf_simple_push_be64(struct net_buf_simple *buf, uint64_t val)
Push 64-bit value to the beginning of the buffer.
size_t net_buf_linearize(void *dst, size_t dst_len, const struct net_buf *src, size_t offset, size_t len)
Copy bytes from net_buf chain starting at offset to linear buffer.
struct _slist sys_slist_t
Single-linked list structure.
Definition slist.h:49
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:39
#define NULL
Definition iar_missing_defs.h:20
Public kernel APIs.
state
Definition parser_state.h:29
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Definition kernel.h:2781
Kernel Spin Lock.
Definition spinlock.h:45
Kernel timeout type.
Definition clock.h:65
Network buffer pool representation.
Definition net_buf.h:1079
void(*const destroy)(struct net_buf *buf)
Optional destroy callback when buffer is freed.
Definition net_buf.h:1110
uint16_t uninit_count
Number of uninitialized buffers.
Definition net_buf.h:1090
uint8_t user_data_size
Size of user data allocated to this pool.
Definition net_buf.h:1093
const uint16_t buf_count
Number of buffers in pool.
Definition net_buf.h:1087
const struct net_buf_data_alloc * alloc
Data allocation handlers.
Definition net_buf.h:1113
struct k_lifo free
LIFO to place the buffer into when free.
Definition net_buf.h:1081
struct k_spinlock lock
To prevent concurrent access/modifications.
Definition net_buf.h:1084
Parsing state of a buffer.
Definition net_buf.h:950
uint16_t offset
Offset of the data pointer from the beginning of the storage.
Definition net_buf.h:952
uint16_t len
Length of data.
Definition net_buf.h:954
Simple network buffer representation.
Definition net_buf.h:89
uint8_t * data
Pointer to the start of data in the buffer.
Definition net_buf.h:91
uint16_t size
Amount of data that net_buf_simple::__buf can store.
Definition net_buf.h:101
uint16_t len
Length of the data behind the data pointer.
Definition net_buf.h:98
Network buffer representation.
Definition net_buf.h:1006
uint16_t size
Amount of data that this buffer can store.
Definition net_buf.h:1038
struct net_buf * frags
Fragments associated with this buffer.
Definition net_buf.h:1011
uint8_t ref
Reference count.
Definition net_buf.h:1014
uint8_t pool_id
Where the buffer should go when freed up.
Definition net_buf.h:1020
sys_snode_t node
Allow placing the buffer into sys_slist_t.
Definition net_buf.h:1008
uint8_t user_data_size
Size of user data on this buffer.
Definition net_buf.h:1023
uint8_t flags
Bit-field of buffer flags.
Definition net_buf.h:1017
uint8_t * data
Pointer to the start of data in the buffer.
Definition net_buf.h:1032
uint8_t user_data[]
System metadata for this buffer.
Definition net_buf.h:1053
uint16_t len
Length of the data behind the data pointer.
Definition net_buf.h:1035
Misc utilities.