Zephyr API Documentation 4.4.0-rc2
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
net_buf.h
Go to the documentation of this file.
1
4
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
31
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
919static inline size_t net_buf_simple_headroom(const struct net_buf_simple *buf)
920{
921 return buf->data - buf->__buf;
922}
923
933static inline size_t net_buf_simple_tailroom(const struct net_buf_simple *buf)
934{
935 return buf->size - net_buf_simple_headroom(buf) - buf->len;
936}
937
947static inline uint16_t net_buf_simple_max_len(const struct net_buf_simple *buf)
948{
949 return buf->size - net_buf_simple_headroom(buf);
950}
951
965
974static inline void net_buf_simple_save(const struct net_buf_simple *buf,
976{
977 state->offset = (uint16_t)net_buf_simple_headroom(buf);
978 state->len = buf->len;
979}
980
990static inline void net_buf_simple_restore(struct net_buf_simple *buf,
992{
993 buf->data = buf->__buf + state->offset;
994 buf->len = state->len;
995}
996
1006#define NET_BUF_EXTERNAL_DATA BIT(0)
1007
1015struct net_buf {
1018
1021
1024
1027
1030
1033
1037 union {
1038 /* The ABI of this struct must match net_buf_simple */
1039 struct {
1042
1045
1048
1053 uint8_t *__buf;
1054 };
1055
1057 struct net_buf_simple b;
1059 };
1060
1062 uint8_t user_data[] __net_buf_align;
1063};
1064
1066
1067struct net_buf_data_cb {
1068 uint8_t * __must_check (*alloc)(struct net_buf *buf, size_t *size,
1069 k_timeout_t timeout);
1070 uint8_t * __must_check (*ref)(struct net_buf *buf, uint8_t *data);
1071 void (*unref)(struct net_buf *buf, uint8_t *data);
1072};
1073
1074struct net_buf_data_alloc {
1075 const struct net_buf_data_cb *cb;
1076 void *alloc_data;
1077 size_t max_alloc_size;
1078 size_t alignment;
1079};
1080
1082
1090 struct k_lifo free;
1091
1094
1097
1100
1103
1104#if defined(CONFIG_NET_BUF_POOL_USAGE)
1106 atomic_t avail_count;
1107
1109 const uint16_t pool_size;
1110
1112 uint16_t max_used;
1113
1115 const char *name;
1116#endif /* CONFIG_NET_BUF_POOL_USAGE */
1117
1119 void (*const destroy)(struct net_buf *buf);
1120
1122 const struct net_buf_data_alloc *alloc;
1123
1125 struct net_buf * const __bufs;
1126};
1127
1129#define NET_BUF_POOL_USAGE_INIT(_pool, _count) \
1130 IF_ENABLED(CONFIG_NET_BUF_POOL_USAGE, (.avail_count = ATOMIC_INIT(_count),)) \
1131 IF_ENABLED(CONFIG_NET_BUF_POOL_USAGE, (.max_used = 0,)) \
1132 IF_ENABLED(CONFIG_NET_BUF_POOL_USAGE, (.name = STRINGIFY(_pool),))
1133
1134#define NET_BUF_POOL_INITIALIZER(_pool, _alloc, _bufs, _count, _ud_size, _destroy) \
1135 { \
1136 .free = Z_LIFO_INITIALIZER(_pool.free), \
1137 .lock = { }, \
1138 .buf_count = _count, \
1139 .uninit_count = _count, \
1140 .user_data_size = _ud_size, \
1141 NET_BUF_POOL_USAGE_INIT(_pool, _count) \
1142 .destroy = _destroy, \
1143 .alloc = _alloc, \
1144 .__bufs = (struct net_buf *)_bufs, \
1145 }
1146
1147#define _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size) \
1148 struct _net_buf_##_name { uint8_t b[sizeof(struct net_buf)]; \
1149 uint8_t ud[_ud_size]; } __net_buf_align; \
1150 BUILD_ASSERT(_ud_size <= UINT8_MAX); \
1151 BUILD_ASSERT(offsetof(struct net_buf, user_data) == \
1152 offsetof(struct _net_buf_##_name, ud), "Invalid offset"); \
1153 BUILD_ASSERT(__alignof__(struct net_buf) == \
1154 __alignof__(struct _net_buf_##_name), "Invalid alignment"); \
1155 BUILD_ASSERT(sizeof(struct _net_buf_##_name) == \
1156 ROUND_UP(sizeof(struct net_buf) + _ud_size, __alignof__(struct net_buf)), \
1157 "Size cannot be determined"); \
1158 static struct _net_buf_##_name _net_buf_##_name[_count] __noinit
1159
1160extern const struct net_buf_data_alloc net_buf_heap_alloc;
1162
1190#define NET_BUF_POOL_HEAP_DEFINE(_name, _count, _ud_size, _destroy) \
1191 _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size); \
1192 static STRUCT_SECTION_ITERABLE(net_buf_pool, _name) = \
1193 NET_BUF_POOL_INITIALIZER(_name, &net_buf_heap_alloc, \
1194 _net_buf_##_name, _count, _ud_size, \
1195 _destroy)
1196
1198
1199struct net_buf_pool_fixed {
1200 uint8_t *data_pool;
1201};
1202
1203extern const struct net_buf_data_cb net_buf_fixed_cb;
1204
1206
1235#define NET_BUF_POOL_FIXED_DEFINE(_name, _count, _data_size, _ud_size, _destroy) \
1236 _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size); \
1237 static uint8_t __noinit net_buf_data_##_name[_count][_data_size] __net_buf_align; \
1238 static const struct net_buf_pool_fixed net_buf_fixed_##_name = { \
1239 .data_pool = (uint8_t *)net_buf_data_##_name, \
1240 }; \
1241 static const struct net_buf_data_alloc net_buf_fixed_alloc_##_name = { \
1242 .cb = &net_buf_fixed_cb, \
1243 .alloc_data = (void *)&net_buf_fixed_##_name, \
1244 .max_alloc_size = _data_size, \
1245 }; \
1246 static STRUCT_SECTION_ITERABLE(net_buf_pool, _name) = \
1247 NET_BUF_POOL_INITIALIZER(_name, &net_buf_fixed_alloc_##_name, \
1248 _net_buf_##_name, _count, _ud_size, \
1249 _destroy)
1250
1252extern const struct net_buf_data_cb net_buf_var_cb;
1254
1279#define NET_BUF_POOL_VAR_DEFINE(_name, _count, _data_size, _ud_size, _destroy) \
1280 _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size); \
1281 K_HEAP_DEFINE(net_buf_mem_pool_##_name, _data_size); \
1282 static const struct net_buf_data_alloc net_buf_data_alloc_##_name = { \
1283 .cb = &net_buf_var_cb, \
1284 .alloc_data = &net_buf_mem_pool_##_name, \
1285 .max_alloc_size = 0, \
1286 }; \
1287 static STRUCT_SECTION_ITERABLE(net_buf_pool, _name) = \
1288 NET_BUF_POOL_INITIALIZER(_name, &net_buf_data_alloc_##_name, \
1289 _net_buf_##_name, _count, _ud_size, \
1290 _destroy)
1291
1322#define NET_BUF_POOL_VAR_ALIGN_DEFINE(_name, _count, _data_size, _ud_size, \
1323 _destroy, _align) \
1324 _NET_BUF_ARRAY_DEFINE(_name, _count, _ud_size); \
1325 K_HEAP_DEFINE(net_buf_mem_pool_##_name, _data_size); \
1326 static const struct net_buf_data_alloc net_buf_data_alloc_##_name = { \
1327 .cb = &net_buf_var_cb, \
1328 .alloc_data = &net_buf_mem_pool_##_name, \
1329 .max_alloc_size = 0, \
1330 .alignment = _align, \
1331 }; \
1332 static STRUCT_SECTION_ITERABLE(net_buf_pool, _name) = \
1333 NET_BUF_POOL_INITIALIZER(_name, &net_buf_data_alloc_##_name, \
1334 _net_buf_##_name, _count, _ud_size, \
1335 _destroy)
1336
1358#define NET_BUF_POOL_DEFINE(_name, _count, _size, _ud_size, _destroy) \
1359 NET_BUF_POOL_FIXED_DEFINE(_name, _count, _size, _ud_size, _destroy)
1360
1369
1382int net_buf_id(const struct net_buf *buf);
1383
1384#if defined(CONFIG_NET_BUF_POOL_USAGE) || defined(__DOXYGEN__)
1398static inline size_t net_buf_get_available(struct net_buf_pool *pool)
1399{
1400 return (size_t)atomic_get(&pool->avail_count);
1401}
1402
1412static inline size_t net_buf_get_max_used(struct net_buf_pool *pool)
1413{
1414 return (size_t)pool->max_used;
1415}
1416#endif /* defined(CONFIG_NET_BUF_POOL_USAGE) || defined(__DOXYGEN__) */
1417
1432#if defined(CONFIG_NET_BUF_LOG)
1433struct net_buf * __must_check net_buf_alloc_fixed_debug(struct net_buf_pool *pool,
1434 k_timeout_t timeout,
1435 const char *func,
1436 int line);
1437#define net_buf_alloc_fixed(_pool, _timeout) \
1438 net_buf_alloc_fixed_debug(_pool, _timeout, __func__, __LINE__)
1439#else
1440struct net_buf * __must_check net_buf_alloc_fixed(struct net_buf_pool *pool,
1441 k_timeout_t timeout);
1442#endif
1443
1447static inline struct net_buf * __must_check net_buf_alloc(struct net_buf_pool *pool,
1448 k_timeout_t timeout)
1449{
1450 return net_buf_alloc_fixed(pool, timeout);
1451}
1452
1468#if defined(CONFIG_NET_BUF_LOG)
1469struct net_buf * __must_check net_buf_alloc_len_debug(struct net_buf_pool *pool,
1470 size_t size,
1471 k_timeout_t timeout,
1472 const char *func,
1473 int line);
1474#define net_buf_alloc_len(_pool, _size, _timeout) \
1475 net_buf_alloc_len_debug(_pool, _size, _timeout, __func__, __LINE__)
1476#else
1477struct net_buf * __must_check net_buf_alloc_len(struct net_buf_pool *pool,
1478 size_t size,
1479 k_timeout_t timeout);
1480#endif
1481
1501#if defined(CONFIG_NET_BUF_LOG)
1502struct net_buf * __must_check net_buf_alloc_with_data_debug(struct net_buf_pool *pool,
1503 void *data, size_t size,
1504 k_timeout_t timeout,
1505 const char *func, int line);
1506#define net_buf_alloc_with_data(_pool, _data_, _size, _timeout) \
1507 net_buf_alloc_with_data_debug(_pool, _data_, _size, _timeout, \
1508 __func__, __LINE__)
1509#else
1510struct net_buf * __must_check net_buf_alloc_with_data(struct net_buf_pool *pool,
1511 void *data, size_t size,
1512 k_timeout_t timeout);
1513#endif
1514
1524static inline void net_buf_destroy(struct net_buf *buf)
1525{
1526 struct net_buf_pool *pool = net_buf_pool_get(buf->pool_id);
1527
1528 if (buf->__buf) {
1529 if (!(buf->flags & NET_BUF_EXTERNAL_DATA)) {
1530 pool->alloc->cb->unref(buf, buf->__buf);
1531 }
1532 buf->__buf = NULL;
1533 }
1534
1535 k_lifo_put(&pool->free, buf);
1536}
1537
1545void net_buf_reset(struct net_buf *buf);
1546
1555void net_buf_simple_reserve(struct net_buf_simple *buf, size_t reserve);
1556
1563void net_buf_slist_put(sys_slist_t *list, struct net_buf *buf);
1564
1572struct net_buf * __must_check net_buf_slist_get(sys_slist_t *list);
1573
1581#if defined(CONFIG_NET_BUF_LOG)
1582void net_buf_unref_debug(struct net_buf *buf, const char *func, int line);
1583#define net_buf_unref(_buf) \
1584 net_buf_unref_debug(_buf, __func__, __LINE__)
1585#else
1586void net_buf_unref(struct net_buf *buf);
1587#endif
1588
1596struct net_buf * __must_check net_buf_ref(struct net_buf *buf);
1597
1611struct net_buf * __must_check net_buf_clone(struct net_buf *buf,
1612 k_timeout_t timeout);
1613
1621static inline void * __must_check net_buf_user_data(const struct net_buf *buf)
1622{
1623 return (void *)buf->user_data;
1624}
1625
1635int net_buf_user_data_copy(struct net_buf *dst, const struct net_buf *src);
1636
1645static inline void net_buf_reserve(struct net_buf *buf, size_t reserve)
1646{
1647 net_buf_simple_reserve(&buf->b, reserve);
1648}
1649
1661static inline void *net_buf_add(struct net_buf *buf, size_t len)
1662{
1663 return net_buf_simple_add(&buf->b, len);
1664}
1665
1678static inline void *net_buf_add_mem(struct net_buf *buf, const void *mem,
1679 size_t len)
1680{
1681 return net_buf_simple_add_mem(&buf->b, mem, len);
1682}
1683
1695static inline uint8_t *net_buf_add_u8(struct net_buf *buf, uint8_t val)
1696{
1697 return net_buf_simple_add_u8(&buf->b, val);
1698}
1699
1710static inline void net_buf_add_le16(struct net_buf *buf, uint16_t val)
1711{
1712 net_buf_simple_add_le16(&buf->b, val);
1713}
1714
1725static inline void net_buf_add_be16(struct net_buf *buf, uint16_t val)
1726{
1727 net_buf_simple_add_be16(&buf->b, val);
1728}
1729
1740static inline void net_buf_add_le24(struct net_buf *buf, uint32_t val)
1741{
1742 net_buf_simple_add_le24(&buf->b, val);
1743}
1744
1755static inline void net_buf_add_be24(struct net_buf *buf, uint32_t val)
1756{
1757 net_buf_simple_add_be24(&buf->b, val);
1758}
1759
1770static inline void net_buf_add_le32(struct net_buf *buf, uint32_t val)
1771{
1772 net_buf_simple_add_le32(&buf->b, val);
1773}
1774
1785static inline void net_buf_add_be32(struct net_buf *buf, uint32_t val)
1786{
1787 net_buf_simple_add_be32(&buf->b, val);
1788}
1789
1800static inline void net_buf_add_le40(struct net_buf *buf, uint64_t val)
1801{
1802 net_buf_simple_add_le40(&buf->b, val);
1803}
1804
1815static inline void net_buf_add_be40(struct net_buf *buf, uint64_t val)
1816{
1817 net_buf_simple_add_be40(&buf->b, val);
1818}
1819
1830static inline void net_buf_add_le48(struct net_buf *buf, uint64_t val)
1831{
1832 net_buf_simple_add_le48(&buf->b, val);
1833}
1834
1845static inline void net_buf_add_be48(struct net_buf *buf, uint64_t val)
1846{
1847 net_buf_simple_add_be48(&buf->b, val);
1848}
1849
1860static inline void net_buf_add_le64(struct net_buf *buf, uint64_t val)
1861{
1862 net_buf_simple_add_le64(&buf->b, val);
1863}
1864
1875static inline void net_buf_add_be64(struct net_buf *buf, uint64_t val)
1876{
1877 net_buf_simple_add_be64(&buf->b, val);
1878}
1879
1890static inline void *net_buf_remove_mem(struct net_buf *buf, size_t len)
1891{
1892 return net_buf_simple_remove_mem(&buf->b, len);
1893}
1894
1905static inline uint8_t net_buf_remove_u8(struct net_buf *buf)
1906{
1907 return net_buf_simple_remove_u8(&buf->b);
1908}
1909
1920static inline uint16_t net_buf_remove_le16(struct net_buf *buf)
1921{
1922 return net_buf_simple_remove_le16(&buf->b);
1923}
1924
1935static inline uint16_t net_buf_remove_be16(struct net_buf *buf)
1936{
1937 return net_buf_simple_remove_be16(&buf->b);
1938}
1939
1950static inline uint32_t net_buf_remove_be24(struct net_buf *buf)
1951{
1952 return net_buf_simple_remove_be24(&buf->b);
1953}
1954
1965static inline uint32_t net_buf_remove_le24(struct net_buf *buf)
1966{
1967 return net_buf_simple_remove_le24(&buf->b);
1968}
1969
1980static inline uint32_t net_buf_remove_le32(struct net_buf *buf)
1981{
1982 return net_buf_simple_remove_le32(&buf->b);
1983}
1984
1995static inline uint32_t net_buf_remove_be32(struct net_buf *buf)
1996{
1997 return net_buf_simple_remove_be32(&buf->b);
1998}
1999
2010static inline uint64_t net_buf_remove_le40(struct net_buf *buf)
2011{
2012 return net_buf_simple_remove_le40(&buf->b);
2013}
2014
2025static inline uint64_t net_buf_remove_be40(struct net_buf *buf)
2026{
2027 return net_buf_simple_remove_be40(&buf->b);
2028}
2029
2040static inline uint64_t net_buf_remove_le48(struct net_buf *buf)
2041{
2042 return net_buf_simple_remove_le48(&buf->b);
2043}
2044
2055static inline uint64_t net_buf_remove_be48(struct net_buf *buf)
2056{
2057 return net_buf_simple_remove_be48(&buf->b);
2058}
2059
2070static inline uint64_t net_buf_remove_le64(struct net_buf *buf)
2071{
2072 return net_buf_simple_remove_le64(&buf->b);
2073}
2074
2085static inline uint64_t net_buf_remove_be64(struct net_buf *buf)
2086{
2087 return net_buf_simple_remove_be64(&buf->b);
2088}
2089
2101static inline void *net_buf_push(struct net_buf *buf, size_t len)
2102{
2103 return net_buf_simple_push(&buf->b, len);
2104}
2105
2118static inline void *net_buf_push_mem(struct net_buf *buf, const void *mem,
2119 size_t len)
2120{
2121 return net_buf_simple_push_mem(&buf->b, mem, len);
2122}
2123
2132static inline void net_buf_push_u8(struct net_buf *buf, uint8_t val)
2133{
2134 net_buf_simple_push_u8(&buf->b, val);
2135}
2136
2146static inline void net_buf_push_le16(struct net_buf *buf, uint16_t val)
2147{
2148 net_buf_simple_push_le16(&buf->b, val);
2149}
2150
2160static inline void net_buf_push_be16(struct net_buf *buf, uint16_t val)
2161{
2162 net_buf_simple_push_be16(&buf->b, val);
2163}
2164
2174static inline void net_buf_push_le24(struct net_buf *buf, uint32_t val)
2175{
2176 net_buf_simple_push_le24(&buf->b, val);
2177}
2178
2188static inline void net_buf_push_be24(struct net_buf *buf, uint32_t val)
2189{
2190 net_buf_simple_push_be24(&buf->b, val);
2191}
2192
2202static inline void net_buf_push_le32(struct net_buf *buf, uint32_t val)
2203{
2204 net_buf_simple_push_le32(&buf->b, val);
2205}
2206
2216static inline void net_buf_push_be32(struct net_buf *buf, uint32_t val)
2217{
2218 net_buf_simple_push_be32(&buf->b, val);
2219}
2220
2230static inline void net_buf_push_le40(struct net_buf *buf, uint64_t val)
2231{
2232 net_buf_simple_push_le40(&buf->b, val);
2233}
2234
2244static inline void net_buf_push_be40(struct net_buf *buf, uint64_t val)
2245{
2246 net_buf_simple_push_be40(&buf->b, val);
2247}
2248
2258static inline void net_buf_push_le48(struct net_buf *buf, uint64_t val)
2259{
2260 net_buf_simple_push_le48(&buf->b, val);
2261}
2262
2272static inline void net_buf_push_be48(struct net_buf *buf, uint64_t val)
2273{
2274 net_buf_simple_push_be48(&buf->b, val);
2275}
2276
2286static inline void net_buf_push_le64(struct net_buf *buf, uint64_t val)
2287{
2288 net_buf_simple_push_le64(&buf->b, val);
2289}
2290
2300static inline void net_buf_push_be64(struct net_buf *buf, uint64_t val)
2301{
2302 net_buf_simple_push_be64(&buf->b, val);
2303}
2304
2316static inline void *net_buf_pull(struct net_buf *buf, size_t len)
2317{
2318 return net_buf_simple_pull(&buf->b, len);
2319}
2320
2332static inline void *net_buf_pull_mem(struct net_buf *buf, size_t len)
2333{
2334 return net_buf_simple_pull_mem(&buf->b, len);
2335}
2336
2347static inline uint8_t net_buf_pull_u8(struct net_buf *buf)
2348{
2349 return net_buf_simple_pull_u8(&buf->b);
2350}
2351
2362static inline uint16_t net_buf_pull_le16(struct net_buf *buf)
2363{
2364 return net_buf_simple_pull_le16(&buf->b);
2365}
2366
2377static inline uint16_t net_buf_pull_be16(struct net_buf *buf)
2378{
2379 return net_buf_simple_pull_be16(&buf->b);
2380}
2381
2392static inline uint32_t net_buf_pull_le24(struct net_buf *buf)
2393{
2394 return net_buf_simple_pull_le24(&buf->b);
2395}
2396
2407static inline uint32_t net_buf_pull_be24(struct net_buf *buf)
2408{
2409 return net_buf_simple_pull_be24(&buf->b);
2410}
2411
2422static inline uint32_t net_buf_pull_le32(struct net_buf *buf)
2423{
2424 return net_buf_simple_pull_le32(&buf->b);
2425}
2426
2437static inline uint32_t net_buf_pull_be32(struct net_buf *buf)
2438{
2439 return net_buf_simple_pull_be32(&buf->b);
2440}
2441
2452static inline uint64_t net_buf_pull_le40(struct net_buf *buf)
2453{
2454 return net_buf_simple_pull_le40(&buf->b);
2455}
2456
2467static inline uint64_t net_buf_pull_be40(struct net_buf *buf)
2468{
2469 return net_buf_simple_pull_be40(&buf->b);
2470}
2471
2482static inline uint64_t net_buf_pull_le48(struct net_buf *buf)
2483{
2484 return net_buf_simple_pull_le48(&buf->b);
2485}
2486
2497static inline uint64_t net_buf_pull_be48(struct net_buf *buf)
2498{
2499 return net_buf_simple_pull_be48(&buf->b);
2500}
2501
2512static inline uint64_t net_buf_pull_le64(struct net_buf *buf)
2513{
2514 return net_buf_simple_pull_le64(&buf->b);
2515}
2516
2527static inline uint64_t net_buf_pull_be64(struct net_buf *buf)
2528{
2529 return net_buf_simple_pull_be64(&buf->b);
2530}
2531
2541static inline size_t net_buf_tailroom(const struct net_buf *buf)
2542{
2543 return net_buf_simple_tailroom(&buf->b);
2544}
2545
2555static inline size_t net_buf_headroom(const struct net_buf *buf)
2556{
2557 return net_buf_simple_headroom(&buf->b);
2558}
2559
2569static inline uint16_t net_buf_max_len(const struct net_buf *buf)
2570{
2571 return net_buf_simple_max_len(&buf->b);
2572}
2573
2583static inline uint8_t *net_buf_tail(const struct net_buf *buf)
2584{
2585 return net_buf_simple_tail(&buf->b);
2586}
2587
2594
2606void net_buf_frag_insert(struct net_buf *parent, struct net_buf *frag);
2607
2622struct net_buf *net_buf_frag_add(struct net_buf *head, struct net_buf *frag);
2623
2633#if defined(CONFIG_NET_BUF_LOG)
2634struct net_buf *net_buf_frag_del_debug(struct net_buf *parent,
2635 struct net_buf *frag,
2636 const char *func, int line);
2637#define net_buf_frag_del(_parent, _frag) \
2638 net_buf_frag_del_debug(_parent, _frag, __func__, __LINE__)
2639#else
2640struct net_buf *net_buf_frag_del(struct net_buf *parent, struct net_buf *frag);
2641#endif
2642
2658size_t net_buf_linearize(void *dst, size_t dst_len,
2659 const struct net_buf *src, size_t offset, size_t len);
2660
2675typedef struct net_buf * __must_check (*net_buf_allocator_cb)(k_timeout_t timeout,
2676 void *user_data);
2677
2699size_t net_buf_append_bytes(struct net_buf *buf, size_t len,
2700 const void *value, k_timeout_t timeout,
2701 net_buf_allocator_cb allocate_cb, void *user_data);
2702
2717size_t net_buf_data_match(const struct net_buf *buf, size_t offset, const void *data, size_t len);
2718
2734static inline struct net_buf *net_buf_skip(struct net_buf *buf, size_t len)
2735{
2736 while (buf && len--) {
2737 net_buf_pull_u8(buf);
2738 if (!buf->len) {
2739 buf = net_buf_frag_del(NULL, buf);
2740 }
2741 }
2742
2743 return buf;
2744}
2745
2756static inline size_t net_buf_frags_len(const struct net_buf *buf)
2757{
2758 size_t bytes = 0;
2759
2760 while (buf) {
2761 bytes += buf->len;
2762 buf = buf->frags;
2763 }
2764
2765 return bytes;
2766}
2767
2771
2772#ifdef __cplusplus
2773}
2774#endif
2775
2776#endif /* ZEPHYR_INCLUDE_NET_BUF_H_ */
long atomic_t
Definition atomic_types.h:15
atomic_val_t atomic_get(const atomic_t *target)
Atomic get.
#define k_lifo_put(lifo, data)
Add an element to a LIFO queue.
Definition kernel.h:3204
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:2467
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:1875
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:2040
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:1755
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.
uint64_t net_buf_simple_remove_le40(struct net_buf_simple *buf)
Remove and convert 40 bits from the end of the buffer.
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:2734
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:1661
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:1740
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:2452
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:2527
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:2300
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:2070
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:2244
static struct net_buf * net_buf_alloc(struct net_buf_pool *pool, k_timeout_t timeout)
Definition net_buf.h:1447
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:1785
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:2010
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:1935
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:2422
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:2437
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:1725
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:1800
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:2569
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:2497
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:2160
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:1950
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:1815
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:2347
static void net_buf_destroy(struct net_buf *buf)
Destroy buffer from custom destroy callback.
Definition net_buf.h:1524
static size_t net_buf_simple_tailroom(const struct net_buf_simple *buf)
Check buffer tailroom.
Definition net_buf.h:933
void net_buf_simple_push_le40(struct net_buf_simple *buf, uint64_t val)
Push 40-bit value to the beginning of the buffer.
static uint16_t net_buf_simple_max_len(const struct net_buf_simple *buf)
Check maximum net_buf_simple::len value.
Definition net_buf.h:947
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:2118
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:2482
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:2258
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:2392
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:1695
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:2188
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:2174
static void net_buf_reserve(struct net_buf *buf, size_t reserve)
Initialize buffer with the given headroom.
Definition net_buf.h:1645
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:2085
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:2407
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:1845
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:1965
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:2132
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:2101
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:2377
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:2202
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:2512
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.
struct net_buf *(* net_buf_allocator_cb)(k_timeout_t timeout, void *user_data)
Network buffer allocator callback.
Definition net_buf.h:2675
void * net_buf_simple_pull_mem(struct net_buf_simple *buf, size_t len)
Remove data from the beginning of the buffer.
static size_t net_buf_get_available(struct net_buf_pool *pool)
Get the number of buffers currently available to claim from a pool.
Definition net_buf.h:1398
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:2055
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:1006
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:1920
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:2146
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:974
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:2272
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 net_buf.h:1860
static size_t net_buf_headroom(const struct net_buf *buf)
Check buffer headroom.
Definition net_buf.h:2555
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:1995
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:1890
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:1678
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:2286
uint16_t net_buf_simple_pull_le16(struct net_buf_simple *buf)
Remove and convert 16 bits from the beginning of the buffer.
static size_t net_buf_get_max_used(struct net_buf_pool *pool)
Get the maximum number of buffers simultaneously claimed from a pool.
Definition net_buf.h:1412
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:1905
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 size_t net_buf_simple_headroom(const struct net_buf_simple *buf)
Check buffer headroom.
Definition net_buf.h:919
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:1710
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:2025
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:2216
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:1770
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:1980
static size_t net_buf_frags_len(const struct net_buf *buf)
Calculate amount of bytes stored in fragments.
Definition net_buf.h:2756
static size_t net_buf_tailroom(const struct net_buf *buf)
Check buffer tailroom.
Definition net_buf.h:2541
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:2362
static uint8_t * net_buf_tail(const struct net_buf *buf)
Get the tail pointer for a buffer.
Definition net_buf.h:2583
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:2332
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:990
static void * net_buf_pull(struct net_buf *buf, size_t len)
Remove data from the beginning of the buffer.
Definition net_buf.h:2316
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:2230
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:1830
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:1621
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
Kernel LIFO structure.
Definition kernel.h:3146
Kernel Spin Lock.
Definition spinlock.h:45
Kernel timeout type.
Definition clock.h:65
Network buffer pool representation.
Definition net_buf.h:1088
void(*const destroy)(struct net_buf *buf)
Optional destroy callback when buffer is freed.
Definition net_buf.h:1119
uint16_t uninit_count
Number of uninitialized buffers.
Definition net_buf.h:1099
uint8_t user_data_size
Size of user data allocated to this pool.
Definition net_buf.h:1102
const uint16_t buf_count
Number of buffers in pool.
Definition net_buf.h:1096
const struct net_buf_data_alloc * alloc
Data allocation handlers.
Definition net_buf.h:1122
struct k_lifo free
LIFO to place the buffer into when free.
Definition net_buf.h:1090
struct k_spinlock lock
To prevent concurrent access/modifications.
Definition net_buf.h:1093
Parsing state of a buffer.
Definition net_buf.h:959
uint16_t offset
Offset of the data pointer from the beginning of the storage.
Definition net_buf.h:961
uint16_t len
Length of data.
Definition net_buf.h:963
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:1015
uint16_t size
Amount of data that this buffer can store.
Definition net_buf.h:1047
struct net_buf * frags
Fragments associated with this buffer.
Definition net_buf.h:1020
uint8_t ref
Reference count.
Definition net_buf.h:1023
uint8_t pool_id
Where the buffer should go when freed up.
Definition net_buf.h:1029
sys_snode_t node
Allow placing the buffer into sys_slist_t.
Definition net_buf.h:1017
uint8_t user_data_size
Size of user data on this buffer.
Definition net_buf.h:1032
uint8_t flags
Bit-field of buffer flags.
Definition net_buf.h:1026
uint8_t * data
Pointer to the start of data in the buffer.
Definition net_buf.h:1041
uint8_t user_data[]
System metadata for this buffer.
Definition net_buf.h:1062
uint16_t len
Length of the data behind the data pointer.
Definition net_buf.h:1044
Misc utilities.