Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
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 <sys/util.h>
16#include <zephyr.h>
17
18#ifndef CONFIG_NET_BUF_USER_DATA_SIZE
19#define CONFIG_NET_BUF_USER_DATA_SIZE 0
20#endif
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
33/* Alignment needed for various parts of the buffer definition */
34#define __net_buf_align __aligned(sizeof(void *))
35
46#define NET_BUF_SIMPLE_DEFINE(_name, _size) \
47 uint8_t net_buf_data_##_name[_size]; \
48 struct net_buf_simple _name = { \
49 .data = net_buf_data_##_name, \
50 .len = 0, \
51 .size = _size, \
52 .__buf = net_buf_data_##_name, \
53 }
54
65#define NET_BUF_SIMPLE_DEFINE_STATIC(_name, _size) \
66 static __noinit uint8_t net_buf_data_##_name[_size]; \
67 static struct net_buf_simple _name = { \
68 .data = net_buf_data_##_name, \
69 .len = 0, \
70 .size = _size, \
71 .__buf = net_buf_data_##_name, \
72 }
73
90
97
100
104 uint8_t *__buf;
105};
106
123#define NET_BUF_SIMPLE(_size) \
124 ((struct net_buf_simple *)(&(struct { \
125 struct net_buf_simple buf; \
126 uint8_t data[_size]; \
127 }) { \
128 .buf.size = _size, \
129 }))
130
140static inline void net_buf_simple_init(struct net_buf_simple *buf,
141 size_t reserve_head)
142{
143 if (!buf->__buf) {
144 buf->__buf = (uint8_t *)buf + sizeof(*buf);
145 }
146
147 buf->data = buf->__buf + reserve_head;
148 buf->len = 0U;
149}
150
161 void *data, size_t size);
162
170static inline void net_buf_simple_reset(struct net_buf_simple *buf)
171{
172 buf->len = 0U;
173 buf->data = buf->__buf;
174}
175
186void net_buf_simple_clone(const struct net_buf_simple *original,
187 struct net_buf_simple *clone);
188
200void *net_buf_simple_add(struct net_buf_simple *buf, size_t len);
201
214void *net_buf_simple_add_mem(struct net_buf_simple *buf, const void *mem,
215 size_t len);
216
229
241
253
265
277
289
301
313
325
337
349
360void *net_buf_simple_remove_mem(struct net_buf_simple *buf, size_t len);
361
373
385
397
409
421
433
445
457
469
481
493
505void *net_buf_simple_push(struct net_buf_simple *buf, size_t len);
506
519void *net_buf_simple_push_mem(struct net_buf_simple *buf, const void *mem,
520 size_t len);
521
532
543
553
564
575
586
597
608
619
630
641
653void *net_buf_simple_pull(struct net_buf_simple *buf, size_t len);
654
666void *net_buf_simple_pull_mem(struct net_buf_simple *buf, size_t len);
667
679
691
703
715
727
739
751
763
775
787
799
809static inline uint8_t *net_buf_simple_tail(struct net_buf_simple *buf)
810{
811 return buf->data + buf->len;
812}
813
824
835
846
859};
860
869static inline void net_buf_simple_save(struct net_buf_simple *buf,
871{
872 state->offset = net_buf_simple_headroom(buf);
873 state->len = buf->len;
874}
875
885static inline void net_buf_simple_restore(struct net_buf_simple *buf,
887{
888 buf->data = buf->__buf + state->offset;
889 buf->len = state->len;
890}
891
900#define NET_BUF_FRAGS BIT(0)
910#define NET_BUF_EXTERNAL_DATA BIT(1)
911
919struct net_buf {
920 union {
923
925 struct net_buf *frags;
926 };
927
930
933
936
937 /* Union for convenience access to the net_buf_simple members, also
938 * preserving the old API.
939 */
940 union {
941 /* The ABI of this struct must match net_buf_simple */
942 struct {
945
948
951
956 uint8_t *__buf;
957 };
958
960 };
961
964};
965
967 uint8_t * (*alloc)(struct net_buf *buf, size_t *size,
969 uint8_t * (*ref)(struct net_buf *buf, uint8_t *data);
970 void (*unref)(struct net_buf *buf, uint8_t *data);
971};
972
974 const struct net_buf_data_cb *cb;
976};
977
985 struct k_lifo free;
986
989
992
993#if defined(CONFIG_NET_BUF_POOL_USAGE)
995 atomic_t avail_count;
996
998 const uint16_t pool_size;
999
1001 const char *name;
1002#endif /* CONFIG_NET_BUF_POOL_USAGE */
1003
1005 void (*const destroy)(struct net_buf *buf);
1006
1009
1011 struct net_buf * const __bufs;
1012};
1013
1015#if defined(CONFIG_NET_BUF_POOL_USAGE)
1016#define NET_BUF_POOL_INITIALIZER(_pool, _alloc, _bufs, _count, _destroy) \
1017 { \
1018 .free = Z_LIFO_INITIALIZER(_pool.free), \
1019 .buf_count = _count, \
1020 .uninit_count = _count, \
1021 .avail_count = ATOMIC_INIT(_count), \
1022 .name = STRINGIFY(_pool), \
1023 .destroy = _destroy, \
1024 .alloc = _alloc, \
1025 .__bufs = _bufs, \
1026 }
1027#else
1028#define NET_BUF_POOL_INITIALIZER(_pool, _alloc, _bufs, _count, _destroy) \
1029 { \
1030 .free = Z_LIFO_INITIALIZER(_pool.free), \
1031 .buf_count = _count, \
1032 .uninit_count = _count, \
1033 .destroy = _destroy, \
1034 .alloc = _alloc, \
1035 .__bufs = _bufs, \
1036 }
1037#endif /* CONFIG_NET_BUF_POOL_USAGE */
1038
1039extern const struct net_buf_data_alloc net_buf_heap_alloc;
1068#define NET_BUF_POOL_HEAP_DEFINE(_name, _count, _destroy) \
1069 static struct net_buf net_buf_##_name[_count] __noinit; \
1070 static struct net_buf_pool _name __net_buf_align \
1071 __in_section(_net_buf_pool, static, _name) = \
1072 NET_BUF_POOL_INITIALIZER(_name, &net_buf_heap_alloc, \
1073 net_buf_##_name, _count, _destroy)
1074
1078};
1079
1081extern const struct net_buf_data_cb net_buf_fixed_cb;
1111#define NET_BUF_POOL_FIXED_DEFINE(_name, _count, _data_size, _destroy) \
1112 static struct net_buf net_buf_##_name[_count] __noinit; \
1113 static uint8_t __noinit net_buf_data_##_name[_count][_data_size]; \
1114 static const struct net_buf_pool_fixed net_buf_fixed_##_name = { \
1115 .data_size = _data_size, \
1116 .data_pool = (uint8_t *)net_buf_data_##_name, \
1117 }; \
1118 static const struct net_buf_data_alloc net_buf_fixed_alloc_##_name = {\
1119 .cb = &net_buf_fixed_cb, \
1120 .alloc_data = (void *)&net_buf_fixed_##_name, \
1121 }; \
1122 static struct net_buf_pool _name __net_buf_align \
1123 __in_section(_net_buf_pool, static, _name) = \
1124 NET_BUF_POOL_INITIALIZER(_name, &net_buf_fixed_alloc_##_name, \
1125 net_buf_##_name, _count, _destroy)
1126
1128extern const struct net_buf_data_cb net_buf_var_cb;
1154#define NET_BUF_POOL_VAR_DEFINE(_name, _count, _data_size, _destroy) \
1155 static struct net_buf _net_buf_##_name[_count] __noinit; \
1156 K_HEAP_DEFINE(net_buf_mem_pool_##_name, _data_size); \
1157 static const struct net_buf_data_alloc net_buf_data_alloc_##_name = { \
1158 .cb = &net_buf_var_cb, \
1159 .alloc_data = &net_buf_mem_pool_##_name, \
1160 }; \
1161 static struct net_buf_pool _name __net_buf_align \
1162 __in_section(_net_buf_pool, static, _name) = \
1163 NET_BUF_POOL_INITIALIZER(_name, &net_buf_data_alloc_##_name, \
1164 _net_buf_##_name, _count, _destroy)
1165
1187#define NET_BUF_POOL_DEFINE(_name, _count, _size, _ud_size, _destroy) \
1188 BUILD_ASSERT(_ud_size <= CONFIG_NET_BUF_USER_DATA_SIZE); \
1189 NET_BUF_POOL_FIXED_DEFINE(_name, _count, _size, _destroy)
1190
1199
1212int net_buf_id(struct net_buf *buf);
1213
1228#if defined(CONFIG_NET_BUF_LOG)
1229struct net_buf *net_buf_alloc_fixed_debug(struct net_buf_pool *pool,
1230 k_timeout_t timeout, const char *func,
1231 int line);
1232#define net_buf_alloc_fixed(_pool, _timeout) \
1233 net_buf_alloc_fixed_debug(_pool, _timeout, __func__, __LINE__)
1234#else
1237#endif
1238
1242static inline struct net_buf *net_buf_alloc(struct net_buf_pool *pool,
1244{
1245 return net_buf_alloc_fixed(pool, timeout);
1246}
1247
1263#if defined(CONFIG_NET_BUF_LOG)
1264struct net_buf *net_buf_alloc_len_debug(struct net_buf_pool *pool, size_t size,
1265 k_timeout_t timeout, const char *func,
1266 int line);
1267#define net_buf_alloc_len(_pool, _size, _timeout) \
1268 net_buf_alloc_len_debug(_pool, _size, _timeout, __func__, __LINE__)
1269#else
1270struct net_buf *net_buf_alloc_len(struct net_buf_pool *pool, size_t size,
1272#endif
1273
1293#if defined(CONFIG_NET_BUF_LOG)
1294struct net_buf *net_buf_alloc_with_data_debug(struct net_buf_pool *pool,
1295 void *data, size_t size,
1297 const char *func, int line);
1298#define net_buf_alloc_with_data(_pool, _data_, _size, _timeout) \
1299 net_buf_alloc_with_data_debug(_pool, _data_, _size, _timeout, \
1300 __func__, __LINE__)
1301#else
1303 void *data, size_t size,
1305#endif
1306
1320#if defined(CONFIG_NET_BUF_LOG)
1321struct net_buf *net_buf_get_debug(struct k_fifo *fifo, k_timeout_t timeout,
1322 const char *func, int line);
1323#define net_buf_get(_fifo, _timeout) \
1324 net_buf_get_debug(_fifo, _timeout, __func__, __LINE__)
1325#else
1327#endif
1328
1338static inline void net_buf_destroy(struct net_buf *buf)
1339{
1340 struct net_buf_pool *pool = net_buf_pool_get(buf->pool_id);
1341
1342 k_lifo_put(&pool->free, buf);
1343}
1344
1352void net_buf_reset(struct net_buf *buf);
1353
1362void net_buf_simple_reserve(struct net_buf_simple *buf, size_t reserve);
1363
1373void net_buf_slist_put(sys_slist_t *list, struct net_buf *buf);
1374
1387
1397void net_buf_put(struct k_fifo *fifo, struct net_buf *buf);
1398
1406#if defined(CONFIG_NET_BUF_LOG)
1407void net_buf_unref_debug(struct net_buf *buf, const char *func, int line);
1408#define net_buf_unref(_buf) \
1409 net_buf_unref_debug(_buf, __func__, __LINE__)
1410#else
1411void net_buf_unref(struct net_buf *buf);
1412#endif
1413
1421struct net_buf *net_buf_ref(struct net_buf *buf);
1422
1437
1445static inline void *net_buf_user_data(const struct net_buf *buf)
1446{
1447 return (void *)buf->user_data;
1448}
1449
1458static inline void net_buf_reserve(struct net_buf *buf, size_t reserve)
1459{
1460 net_buf_simple_reserve(&buf->b, reserve);
1461}
1462
1474static inline void *net_buf_add(struct net_buf *buf, size_t len)
1475{
1476 return net_buf_simple_add(&buf->b, len);
1477}
1478
1491static inline void *net_buf_add_mem(struct net_buf *buf, const void *mem,
1492 size_t len)
1493{
1494 return net_buf_simple_add_mem(&buf->b, mem, len);
1495}
1496
1508static inline uint8_t *net_buf_add_u8(struct net_buf *buf, uint8_t val)
1509{
1510 return net_buf_simple_add_u8(&buf->b, val);
1511}
1512
1523static inline void net_buf_add_le16(struct net_buf *buf, uint16_t val)
1524{
1525 net_buf_simple_add_le16(&buf->b, val);
1526}
1527
1538static inline void net_buf_add_be16(struct net_buf *buf, uint16_t val)
1539{
1540 net_buf_simple_add_be16(&buf->b, val);
1541}
1542
1553static inline void net_buf_add_le24(struct net_buf *buf, uint32_t val)
1554{
1555 net_buf_simple_add_le24(&buf->b, val);
1556}
1557
1568static inline void net_buf_add_be24(struct net_buf *buf, uint32_t val)
1569{
1570 net_buf_simple_add_be24(&buf->b, val);
1571}
1572
1583static inline void net_buf_add_le32(struct net_buf *buf, uint32_t val)
1584{
1585 net_buf_simple_add_le32(&buf->b, val);
1586}
1587
1598static inline void net_buf_add_be32(struct net_buf *buf, uint32_t val)
1599{
1600 net_buf_simple_add_be32(&buf->b, val);
1601}
1602
1613static inline void net_buf_add_le48(struct net_buf *buf, uint64_t val)
1614{
1615 net_buf_simple_add_le48(&buf->b, val);
1616}
1617
1628static inline void net_buf_add_be48(struct net_buf *buf, uint64_t val)
1629{
1630 net_buf_simple_add_be48(&buf->b, val);
1631}
1632
1643static inline void net_buf_add_le64(struct net_buf *buf, uint64_t val)
1644{
1645 net_buf_simple_add_le64(&buf->b, val);
1646}
1647
1658static inline void net_buf_add_be64(struct net_buf *buf, uint64_t val)
1659{
1660 net_buf_simple_add_be64(&buf->b, val);
1661}
1662
1673static inline void *net_buf_remove_mem(struct net_buf *buf, size_t len)
1674{
1675 return net_buf_simple_remove_mem(&buf->b, len);
1676}
1677
1688static inline uint8_t net_buf_remove_u8(struct net_buf *buf)
1689{
1690 return net_buf_simple_remove_u8(&buf->b);
1691}
1692
1703static inline uint16_t net_buf_remove_le16(struct net_buf *buf)
1704{
1705 return net_buf_simple_remove_le16(&buf->b);
1706}
1707
1718static inline uint16_t net_buf_remove_be16(struct net_buf *buf)
1719{
1720 return net_buf_simple_remove_be16(&buf->b);
1721}
1722
1733static inline uint32_t net_buf_remove_be24(struct net_buf *buf)
1734{
1735 return net_buf_simple_remove_be24(&buf->b);
1736}
1737
1748static inline uint32_t net_buf_remove_le24(struct net_buf *buf)
1749{
1750 return net_buf_simple_remove_le24(&buf->b);
1751}
1752
1763static inline uint32_t net_buf_remove_le32(struct net_buf *buf)
1764{
1765 return net_buf_simple_remove_le32(&buf->b);
1766}
1767
1778static inline uint32_t net_buf_remove_be32(struct net_buf *buf)
1779{
1780 return net_buf_simple_remove_be32(&buf->b);
1781}
1782
1793static inline uint64_t net_buf_remove_le48(struct net_buf *buf)
1794{
1795 return net_buf_simple_remove_le48(&buf->b);
1796}
1797
1808static inline uint64_t net_buf_remove_be48(struct net_buf *buf)
1809{
1810 return net_buf_simple_remove_be48(&buf->b);
1811}
1812
1823static inline uint64_t net_buf_remove_le64(struct net_buf *buf)
1824{
1825 return net_buf_simple_remove_le64(&buf->b);
1826}
1827
1838static inline uint64_t net_buf_remove_be64(struct net_buf *buf)
1839{
1840 return net_buf_simple_remove_be64(&buf->b);
1841}
1842
1854static inline void *net_buf_push(struct net_buf *buf, size_t len)
1855{
1856 return net_buf_simple_push(&buf->b, len);
1857}
1858
1871static inline void *net_buf_push_mem(struct net_buf *buf, const void *mem,
1872 size_t len)
1873{
1874 return net_buf_simple_push_mem(&buf->b, mem, len);
1875}
1876
1885static inline void net_buf_push_u8(struct net_buf *buf, uint8_t val)
1886{
1887 net_buf_simple_push_u8(&buf->b, val);
1888}
1889
1899static inline void net_buf_push_le16(struct net_buf *buf, uint16_t val)
1900{
1901 net_buf_simple_push_le16(&buf->b, val);
1902}
1903
1913static inline void net_buf_push_be16(struct net_buf *buf, uint16_t val)
1914{
1915 net_buf_simple_push_be16(&buf->b, val);
1916}
1917
1927static inline void net_buf_push_le24(struct net_buf *buf, uint32_t val)
1928{
1929 net_buf_simple_push_le24(&buf->b, val);
1930}
1931
1941static inline void net_buf_push_be24(struct net_buf *buf, uint32_t val)
1942{
1943 net_buf_simple_push_be24(&buf->b, val);
1944}
1945
1955static inline void net_buf_push_le32(struct net_buf *buf, uint32_t val)
1956{
1957 net_buf_simple_push_le32(&buf->b, val);
1958}
1959
1969static inline void net_buf_push_be32(struct net_buf *buf, uint32_t val)
1970{
1971 net_buf_simple_push_be32(&buf->b, val);
1972}
1973
1983static inline void net_buf_push_le48(struct net_buf *buf, uint64_t val)
1984{
1985 net_buf_simple_push_le48(&buf->b, val);
1986}
1987
1997static inline void net_buf_push_be48(struct net_buf *buf, uint64_t val)
1998{
1999 net_buf_simple_push_be48(&buf->b, val);
2000}
2001
2011static inline void net_buf_push_le64(struct net_buf *buf, uint64_t val)
2012{
2013 net_buf_simple_push_le64(&buf->b, val);
2014}
2015
2025static inline void net_buf_push_be64(struct net_buf *buf, uint64_t val)
2026{
2027 net_buf_simple_push_be64(&buf->b, val);
2028}
2029
2041static inline void *net_buf_pull(struct net_buf *buf, size_t len)
2042{
2043 return net_buf_simple_pull(&buf->b, len);
2044}
2045
2057static inline void *net_buf_pull_mem(struct net_buf *buf, size_t len)
2058{
2059 return net_buf_simple_pull_mem(&buf->b, len);
2060}
2061
2072static inline uint8_t net_buf_pull_u8(struct net_buf *buf)
2073{
2074 return net_buf_simple_pull_u8(&buf->b);
2075}
2076
2087static inline uint16_t net_buf_pull_le16(struct net_buf *buf)
2088{
2089 return net_buf_simple_pull_le16(&buf->b);
2090}
2091
2102static inline uint16_t net_buf_pull_be16(struct net_buf *buf)
2103{
2104 return net_buf_simple_pull_be16(&buf->b);
2105}
2106
2117static inline uint32_t net_buf_pull_le24(struct net_buf *buf)
2118{
2119 return net_buf_simple_pull_le24(&buf->b);
2120}
2121
2132static inline uint32_t net_buf_pull_be24(struct net_buf *buf)
2133{
2134 return net_buf_simple_pull_be24(&buf->b);
2135}
2136
2147static inline uint32_t net_buf_pull_le32(struct net_buf *buf)
2148{
2149 return net_buf_simple_pull_le32(&buf->b);
2150}
2151
2162static inline uint32_t net_buf_pull_be32(struct net_buf *buf)
2163{
2164 return net_buf_simple_pull_be32(&buf->b);
2165}
2166
2177static inline uint64_t net_buf_pull_le48(struct net_buf *buf)
2178{
2179 return net_buf_simple_pull_le48(&buf->b);
2180}
2181
2192static inline uint64_t net_buf_pull_be48(struct net_buf *buf)
2193{
2194 return net_buf_simple_pull_be48(&buf->b);
2195}
2196
2207static inline uint64_t net_buf_pull_le64(struct net_buf *buf)
2208{
2209 return net_buf_simple_pull_le64(&buf->b);
2210}
2211
2222static inline uint64_t net_buf_pull_be64(struct net_buf *buf)
2223{
2224 return net_buf_simple_pull_be64(&buf->b);
2225}
2226
2236static inline size_t net_buf_tailroom(struct net_buf *buf)
2237{
2238 return net_buf_simple_tailroom(&buf->b);
2239}
2240
2250static inline size_t net_buf_headroom(struct net_buf *buf)
2251{
2252 return net_buf_simple_headroom(&buf->b);
2253}
2254
2264static inline uint16_t net_buf_max_len(struct net_buf *buf)
2265{
2266 return net_buf_simple_max_len(&buf->b);
2267}
2268
2278static inline uint8_t *net_buf_tail(struct net_buf *buf)
2279{
2280 return net_buf_simple_tail(&buf->b);
2281}
2282
2289
2301void net_buf_frag_insert(struct net_buf *parent, struct net_buf *frag);
2302
2317struct net_buf *net_buf_frag_add(struct net_buf *head, struct net_buf *frag);
2318
2328#if defined(CONFIG_NET_BUF_LOG)
2329struct net_buf *net_buf_frag_del_debug(struct net_buf *parent,
2330 struct net_buf *frag,
2331 const char *func, int line);
2332#define net_buf_frag_del(_parent, _frag) \
2333 net_buf_frag_del_debug(_parent, _frag, __func__, __LINE__)
2334#else
2335struct net_buf *net_buf_frag_del(struct net_buf *parent, struct net_buf *frag);
2336#endif
2337
2353size_t net_buf_linearize(void *dst, size_t dst_len,
2354 struct net_buf *src, size_t offset, size_t len);
2355
2370typedef struct net_buf *(*net_buf_allocator_cb)(k_timeout_t timeout,
2371 void *user_data);
2372
2394size_t net_buf_append_bytes(struct net_buf *buf, size_t len,
2395 const void *value, k_timeout_t timeout,
2396 net_buf_allocator_cb allocate_cb, void *user_data);
2397
2413static inline struct net_buf *net_buf_skip(struct net_buf *buf, size_t len)
2414{
2415 while (buf && len--) {
2416 net_buf_pull_u8(buf);
2417 if (!buf->len) {
2418 buf = net_buf_frag_del(NULL, buf);
2419 }
2420 }
2421
2422 return buf;
2423}
2424
2435static inline size_t net_buf_frags_len(struct net_buf *buf)
2436{
2437 size_t bytes = 0;
2438
2439 while (buf) {
2440 bytes += buf->len;
2441 buf = buf->frags;
2442 }
2443
2444 return bytes;
2445}
2446
2451#ifdef __cplusplus
2452}
2453#endif
2454
2455#endif /* ZEPHYR_INCLUDE_NET_BUF_H_ */
int atomic_t
Definition: atomic.h:21
ZTEST_BMEM int timeout
Definition: main.c:31
struct k_fifo fifo
Definition: errno.c:43
void
Definition: eswifi_shell.c:15
#define k_lifo_put(lifo, data)
Add an element to a LIFO queue.
Definition: kernel.h:2450
struct net_buf * net_buf_get(struct k_fifo *fifo, k_timeout_t timeout)
Get a buffer from a FIFO.
void net_buf_simple_clone(const struct net_buf_simple *original, struct net_buf_simple *clone)
static void net_buf_simple_init(struct net_buf_simple *buf, size_t reserve_head)
Initialize a net_buf_simple object.
Definition: buf.h:140
struct net_buf * net_buf_frag_last(struct net_buf *frags)
Find the last fragment in the fragment list.
static void net_buf_add_be64(struct net_buf *buf, uint64_t val)
Add 64-bit value at the end of the buffer.
Definition: buf.h:1658
static size_t net_buf_headroom(struct net_buf *buf)
Check buffer headroom.
Definition: buf.h:2250
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: buf.h:1793
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: buf.h:1568
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.
struct net_buf * net_buf_ref(struct net_buf *buf)
Increment the reference count of a buffer.
struct net_buf *(* net_buf_allocator_cb)(k_timeout_t timeout, void *user_data)
Network buffer allocator callback.
Definition: buf.h:2370
static struct net_buf * net_buf_skip(struct net_buf *buf, size_t len)
Skip N number of bytes in a net_buf.
Definition: buf.h:2413
static void * net_buf_add(struct net_buf *buf, size_t len)
Prepare data to be added at the end of the buffer.
Definition: buf.h:1474
static void net_buf_add_le24(struct net_buf *buf, uint32_t val)
Add 24-bit value at the end of the buffer.
Definition: buf.h:1553
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: buf.h:2222
static void net_buf_push_be64(struct net_buf *buf, uint64_t val)
Push 64-bit value to the beginning of the buffer.
Definition: buf.h:2025
static uint64_t net_buf_remove_le64(struct net_buf *buf)
Remove and convert 64 bits from the end of the buffer.
Definition: buf.h:1823
static void net_buf_simple_reset(struct net_buf_simple *buf)
Reset buffer.
Definition: buf.h:170
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.
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 struct net_buf * net_buf_alloc(struct net_buf_pool *pool, k_timeout_t timeout)
Definition: buf.h:1242
static void net_buf_add_be32(struct net_buf *buf, uint32_t val)
Add 32-bit value at the end of the buffer.
Definition: buf.h:1598
uint64_t net_buf_simple_remove_le64(struct net_buf_simple *buf)
Remove and convert 64 bits from the end of the buffer.
size_t net_buf_simple_tailroom(struct net_buf_simple *buf)
Check buffer tailroom.
static void net_buf_simple_save(struct net_buf_simple *buf, struct net_buf_simple_state *state)
Save the parsing state of a buffer.
Definition: buf.h:869
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: buf.h:1718
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: buf.h:2147
static uint32_t net_buf_pull_be32(struct net_buf *buf)
Remove and convert 32 bits from the beginning of the buffer.
Definition: buf.h:2162
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 size_t net_buf_tailroom(struct net_buf *buf)
Check buffer tailroom.
Definition: buf.h:2236
static void net_buf_add_be16(struct net_buf *buf, uint16_t val)
Add 16-bit value at the end of the buffer.
Definition: buf.h:1538
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.
void net_buf_simple_push_le48(struct net_buf_simple *buf, uint64_t val)
Push 48-bit value to the beginning 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: buf.h:2192
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: buf.h:1913
static uint32_t net_buf_remove_be24(struct net_buf *buf)
Remove and convert 24 bits from the end of the buffer.
Definition: buf.h:1733
static uint8_t net_buf_pull_u8(struct net_buf *buf)
Remove a 8-bit value from the beginning of the buffer.
Definition: buf.h:2072
static void net_buf_destroy(struct net_buf *buf)
Destroy buffer from custom destroy callback.
Definition: buf.h:1338
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.
uint16_t net_buf_simple_max_len(struct net_buf_simple *buf)
Check maximum net_buf_simple::len value.
uint64_t net_buf_simple_pull_le64(struct net_buf_simple *buf)
Remove and convert 64 bits from the beginning of the buffer.
void net_buf_put(struct k_fifo *fifo, struct net_buf *buf)
Put a buffer to the end of a FIFO.
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: buf.h:1871
static uint64_t net_buf_pull_le48(struct net_buf *buf)
Remove and convert 48 bits from the beginning of the buffer.
Definition: buf.h:2177
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: buf.h:1983
static uint32_t net_buf_pull_le24(struct net_buf *buf)
Remove and convert 24 bits from the beginning of the buffer.
Definition: buf.h:2117
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: buf.h:1508
static void net_buf_push_be24(struct net_buf *buf, uint32_t val)
Push 24-bit value to the beginning of the buffer.
Definition: buf.h:1941
static void net_buf_push_le24(struct net_buf *buf, uint32_t val)
Push 24-bit value to the beginning of the buffer.
Definition: buf.h:1927
static void net_buf_reserve(struct net_buf *buf, size_t reserve)
Initialize buffer with the given headroom.
Definition: buf.h:1458
static uint64_t net_buf_remove_be64(struct net_buf *buf)
Remove and convert 64 bits from the end of the buffer.
Definition: buf.h:1838
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 uint8_t * net_buf_simple_tail(struct net_buf_simple *buf)
Get the tail pointer for a buffer.
Definition: buf.h:809
static uint32_t net_buf_pull_be24(struct net_buf *buf)
Remove and convert 24 bits from the beginning of the buffer.
Definition: buf.h:2132
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: buf.h:1628
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: buf.h:1748
static void net_buf_push_u8(struct net_buf *buf, uint8_t val)
Push 8-bit value to the beginning of the buffer.
Definition: buf.h:1885
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: buf.h:1854
static uint16_t net_buf_pull_be16(struct net_buf *buf)
Remove and convert 16 bits from the beginning of the buffer.
Definition: buf.h:2102
static void net_buf_push_le32(struct net_buf *buf, uint32_t val)
Push 32-bit value to the beginning of the buffer.
Definition: buf.h:1955
static uint64_t net_buf_pull_le64(struct net_buf *buf)
Remove and convert 64 bits from the beginning of the buffer.
Definition: buf.h:2207
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.
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: buf.h:1808
static uint16_t net_buf_max_len(struct net_buf *buf)
Check maximum net_buf::len value.
Definition: buf.h:2264
void net_buf_simple_add_be32(struct net_buf_simple *buf, uint32_t val)
Add 32-bit value at the end of the buffer.
static uint16_t net_buf_remove_le16(struct net_buf *buf)
Remove and convert 16 bits from the end of the buffer.
Definition: buf.h:1703
static void net_buf_push_le16(struct net_buf *buf, uint16_t val)
Push 16-bit value to the beginning of the buffer.
Definition: buf.h:1899
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_push_be48(struct net_buf *buf, uint64_t val)
Push 48-bit value to the beginning of the buffer.
Definition: buf.h:1997
void net_buf_simple_push_be24(struct net_buf_simple *buf, uint32_t val)
Push 24-bit value to the beginning of the buffer.
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: buf.h:1643
static uint8_t * net_buf_tail(struct net_buf *buf)
Get the tail pointer for a buffer.
Definition: buf.h:2278
static uint32_t net_buf_remove_be32(struct net_buf *buf)
Remove and convert 32 bits from the end of the buffer.
Definition: buf.h:1778
static void * net_buf_remove_mem(struct net_buf *buf, size_t len)
Remove data from the end of the buffer.
Definition: buf.h:1673
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: buf.h:1491
size_t net_buf_simple_headroom(struct net_buf_simple *buf)
Check buffer headroom.
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: buf.h:2011
uint16_t net_buf_simple_pull_le16(struct net_buf_simple *buf)
Remove and convert 16 bits from the beginning of the buffer.
int net_buf_id(struct net_buf *buf)
Get a zero-based index for a buffer.
static uint8_t net_buf_remove_u8(struct net_buf *buf)
Remove a 8-bit value from the end of the buffer.
Definition: buf.h:1688
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: buf.h:1523
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: buf.h:1969
static void net_buf_add_le32(struct net_buf *buf, uint32_t val)
Add 32-bit value at the end of the buffer.
Definition: buf.h:1583
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: buf.h:1763
static size_t net_buf_frags_len(struct net_buf *buf)
Calculate amount of bytes stored in fragments.
Definition: buf.h:2435
static uint16_t net_buf_pull_le16(struct net_buf *buf)
Remove and convert 16 bits from the beginning of the buffer.
Definition: buf.h:2087
static void * net_buf_pull_mem(struct net_buf *buf, size_t len)
Remove data from the beginning of the buffer.
Definition: buf.h:2057
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: buf.h:885
static void * net_buf_pull(struct net_buf *buf, size_t len)
Remove data from the beginning of the buffer.
Definition: buf.h:2041
static void net_buf_add_le48(struct net_buf *buf, uint64_t val)
Add 48-bit value at the end of the buffer.
Definition: buf.h:1613
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: buf.h:1445
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.
size_t net_buf_linearize(void *dst, size_t dst_len, struct net_buf *src, size_t offset, size_t len)
Copy bytes from net_buf chain starting at offset to linear 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.
state
Definition: http_parser_state.h:30
#define CONFIG_NET_BUF_USER_DATA_SIZE
Definition: buf.h:19
struct _slist sys_slist_t
Definition: slist.h:40
struct _snode sys_snode_t
Definition: slist.h:33
__UINT32_TYPE__ uint32_t
Definition: stdint.h:60
__UINT64_TYPE__ uint64_t
Definition: stdint.h:61
__UINT8_TYPE__ uint8_t
Definition: stdint.h:58
__UINT16_TYPE__ uint16_t
Definition: stdint.h:59
Definition: kernel.h:2153
Definition: kernel.h:2397
Kernel timeout type.
Definition: sys_clock.h:65
Definition: buf.h:973
const struct net_buf_data_cb * cb
Definition: buf.h:974
void * alloc_data
Definition: buf.h:975
Definition: buf.h:966
void(* unref)(struct net_buf *buf, uint8_t *data)
Definition: buf.h:970
Definition: buf.h:1075
size_t data_size
Definition: buf.h:1076
uint8_t * data_pool
Definition: buf.h:1077
Network buffer pool representation.
Definition: buf.h:983
void(*const destroy)(struct net_buf *buf)
Definition: buf.h:1005
uint16_t uninit_count
Definition: buf.h:991
const uint16_t buf_count
Definition: buf.h:988
const struct net_buf_data_alloc * alloc
Definition: buf.h:1008
struct k_lifo free
Definition: buf.h:985
Parsing state of a buffer.
Definition: buf.h:854
uint16_t offset
Definition: buf.h:856
uint16_t len
Definition: buf.h:858
Simple network buffer representation.
Definition: buf.h:87
uint8_t * data
Definition: buf.h:89
uint16_t size
Definition: buf.h:99
uint16_t len
Definition: buf.h:96
Network buffer representation.
Definition: buf.h:919
uint16_t size
Definition: buf.h:950
struct net_buf * frags
Definition: buf.h:925
uint8_t ref
Definition: buf.h:929
uint8_t pool_id
Definition: buf.h:935
sys_snode_t node
Definition: buf.h:922
uint8_t flags
Definition: buf.h:932
uint8_t * data
Definition: buf.h:944
struct net_buf_simple b
Definition: buf.h:959
uint16_t len
Definition: buf.h:947
uint8_t user_data[0]
Definition: buf.h:963
static fdata_t data[2]
Definition: test_fifo_contexts.c:15
static const intptr_t user_data[5]
Definition: main.c:590
Misc utilities.