lib: net_buf: move the network buffer implementation to lib

Move the net_buf implementation from the networking subsystem to a library
as they have no dependency on the networking subsystem.

Network buffers are used in subsystems outside of networking
(e.g. Bluetooth, USB).

Fixes: #36374

Signed-off-by: Henrik Brix Andersen <henrik@brixandersen.dk>
This commit is contained in:
Henrik Brix Andersen 2024-09-04 15:42:42 +00:00 committed by Mahesh Mahadevan
parent cfc010ff4e
commit ced80b13bf
18 changed files with 83 additions and 74 deletions

View File

@ -2803,7 +2803,6 @@ Networking:
- samples/net/lwm2m_client/
- samples/net/wifi/
- samples/net/dhcpv4_client/
- subsys/net/buf*.c
- subsys/net/l2/ethernet/gptp/
- subsys/net/l2/ieee802154/
- subsys/net/l2/wifi/
@ -2846,7 +2845,7 @@ Networking:
- jukkar
files:
- include/zephyr/net/buf.h
- subsys/net/buf*.c
- lib/net_buf/
- tests/net/buf/
labels:
- "area: Networking Buffers"

View File

@ -14,6 +14,7 @@ add_subdirectory_ifdef(CONFIG_CPP cpp)
add_subdirectory(hash)
add_subdirectory(heap)
add_subdirectory(mem_blocks)
add_subdirectory_ifdef(CONFIG_NET_BUF net_buf)
add_subdirectory(os)
add_subdirectory(utils)
add_subdirectory_ifdef(CONFIG_SMF smf)

View File

@ -15,6 +15,8 @@ source "lib/heap/Kconfig"
source "lib/mem_blocks/Kconfig"
source "lib/net_buf/Kconfig"
source "lib/os/Kconfig"
source "lib/posix/Kconfig"

View File

@ -0,0 +1,8 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_sources_ifdef(
CONFIG_NET_BUF
buf.c
buf_simple.c
)

62
lib/net_buf/Kconfig Normal file
View File

@ -0,0 +1,62 @@
# Network buffer configuration options
# Copyright (c) 2015 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
menuconfig NET_BUF
bool "Network buffer support"
help
This option enables support for generic network protocol
buffers.
if NET_BUF
config NET_BUF_LOG
bool "Network buffer logging"
select LOG
help
Enable logs and checks for the generic network buffers.
module = NET_BUF
module-str = net_buf
source "subsys/logging/Kconfig.template.log_config"
if NET_BUF_LOG
config NET_BUF_WARN_ALLOC_INTERVAL
int "Interval of Network buffer allocation warnings"
default 1
range 0 60
help
Interval in seconds of Network buffer allocation warnings which are
generated when a buffer cannot immediately be allocated with K_FOREVER
which may lead to deadlocks. Setting it to 0 makes warnings to be
printed only once per allocation.
config NET_BUF_SIMPLE_LOG
bool "Network buffer memory debugging"
select LOG
help
Enable extra debug logs and checks for the generic network buffers.
endif # NET_BUF_LOG
config NET_BUF_POOL_USAGE
bool "Network buffer pool usage tracking"
help
Enable network buffer pool tracking. This means that:
* amount of free buffers in the pool is remembered
* total size of the pool is calculated
* pool name is stored and can be shown in debugging prints
config NET_BUF_ALIGNMENT
int "Network buffer alignment restriction"
default 0
help
Alignment restriction for network buffers. This is useful for
some hardware IP with DMA that requires the buffers to be aligned
to a certain byte boundary, or dealing with cache line restrictions.
Default value of 0 means the alignment will be the size of a void pointer,
any other value will force the alignment of a net buffer in bytes.
endif # NET_BUF

View File

@ -47,7 +47,7 @@ add_subdirectory_ifdef(CONFIG_INPUT input)
add_subdirectory_ifdef(CONFIG_JWT jwt)
add_subdirectory_ifdef(CONFIG_LLEXT llext)
add_subdirectory_ifdef(CONFIG_MODEM_MODULES modem)
add_subdirectory_ifdef(CONFIG_NET_BUF net)
add_subdirectory_ifdef(CONFIG_NETWORKING net)
add_subdirectory_ifdef(CONFIG_PROFILING profiling)
add_subdirectory_ifdef(CONFIG_RETENTION retention)
add_subdirectory_ifdef(CONFIG_SENSING sensing)

View File

@ -1,11 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
zephyr_library()
zephyr_library_sources_ifdef(
CONFIG_NET_BUF
buf.c
buf_simple.c
)
zephyr_library_sources_ifdef(CONFIG_NET_HOSTNAME_ENABLE hostname.c)
if(CONFIG_NETWORKING)

View File

@ -5,64 +5,6 @@
menu "Networking"
config NET_BUF
bool "Network buffer support"
help
This option enables support for generic network protocol
buffers.
if NET_BUF
config NET_BUF_LOG
bool "Network buffer logging"
select LOG
help
Enable logs and checks for the generic network buffers.
module = NET_BUF
module-str = net_buf
source "subsys/logging/Kconfig.template.log_config"
if NET_BUF_LOG
config NET_BUF_WARN_ALLOC_INTERVAL
int "Interval of Network buffer allocation warnings"
default 1
range 0 60
help
Interval in seconds of Network buffer allocation warnings which are
generated when a buffer cannot immediately be allocated with K_FOREVER
which may lead to deadlocks. Setting it to 0 makes warnings to be
printed only once per allocation.
config NET_BUF_SIMPLE_LOG
bool "Network buffer memory debugging"
select LOG
help
Enable extra debug logs and checks for the generic network buffers.
endif # NET_BUF_LOG
config NET_BUF_POOL_USAGE
bool "Network buffer pool usage tracking"
help
Enable network buffer pool tracking. This means that:
* amount of free buffers in the pool is remembered
* total size of the pool is calculated
* pool name is stored and can be shown in debugging prints
config NET_BUF_ALIGNMENT
int "Network buffer alignment restriction"
default 0
help
Alignment restriction for network buffers. This is useful for
some hardware IP with DMA that requires the buffers to be aligned
to a certain byte boundary, or dealing with cache line restrictions.
Default value of 0 means the alignment will be the size of a void pointer,
any other value will force the alignment of a net buffer in bytes.
endif # NET_BUF
config NETWORKING
bool "Link layer and networking (including IP)"
select NET_BUF

View File

@ -16,7 +16,7 @@ add_library(uut STATIC
${ZEPHYR_BASE}/subsys/bluetooth/host/data.c
${ZEPHYR_BASE}/subsys/bluetooth/host/uuid.c
${ZEPHYR_BASE}/subsys/logging/log_minimal.c
${ZEPHYR_BASE}/subsys/net/buf_simple.c
${ZEPHYR_BASE}/lib/net_buf/buf_simple.c
bap_unicast_client.c
bap_unicast_server.c
)

View File

@ -11,7 +11,7 @@ add_library(uut STATIC
${ZEPHYR_BASE}/subsys/bluetooth/host/uuid.c
${ZEPHYR_BASE}/subsys/bluetooth/common/bt_str.c
${ZEPHYR_BASE}/subsys/logging/log_minimal.c
${ZEPHYR_BASE}/subsys/net/buf_simple.c
${ZEPHYR_BASE}/lib/net_buf/buf_simple.c
)
add_subdirectory(${ZEPHYR_BASE}/tests/bluetooth/audio/mocks mocks)

View File

@ -13,7 +13,7 @@ add_library(uut STATIC
${ZEPHYR_BASE}/subsys/bluetooth/audio/bap_broadcast_source.c
${ZEPHYR_BASE}/subsys/bluetooth/audio/codec.c
${ZEPHYR_BASE}/subsys/logging/log_minimal.c
${ZEPHYR_BASE}/subsys/net/buf_simple.c
${ZEPHYR_BASE}/lib/net_buf/buf_simple.c
)
add_subdirectory(${ZEPHYR_BASE}/tests/bluetooth/audio/mocks mocks)

View File

@ -11,7 +11,7 @@ add_library(uut STATIC
${ZEPHYR_BASE}/subsys/bluetooth/audio/cap_commander.c
${ZEPHYR_BASE}/subsys/bluetooth/audio/cap_common.c
${ZEPHYR_BASE}/subsys/logging/log_minimal.c
${ZEPHYR_BASE}/subsys/net/buf_simple.c
${ZEPHYR_BASE}/lib/net_buf/buf_simple.c
bap_broadcast_assistant.c
aics.c
cap_commander.c

View File

@ -16,7 +16,7 @@ add_library(uut STATIC
${ZEPHYR_BASE}/subsys/bluetooth/common/bt_str.c
${ZEPHYR_BASE}/subsys/bluetooth/host/uuid.c
${ZEPHYR_BASE}/subsys/logging/log_minimal.c
${ZEPHYR_BASE}/subsys/net/buf_simple.c
${ZEPHYR_BASE}/lib/net_buf/buf_simple.c
bap_unicast_client.c
cap_initiator.c
csip.c

View File

@ -11,7 +11,7 @@ add_library(uut STATIC
${ZEPHYR_BASE}/subsys/bluetooth/audio/codec.c
${ZEPHYR_BASE}/subsys/bluetooth/common/bt_str.c
${ZEPHYR_BASE}/subsys/logging/log_minimal.c
${ZEPHYR_BASE}/subsys/net/buf_simple.c
${ZEPHYR_BASE}/lib/net_buf/buf_simple.c
)
add_subdirectory(${ZEPHYR_BASE}/tests/bluetooth/audio/mocks mocks)

View File

@ -15,7 +15,7 @@ target_sources(testbinary
src/main.c
${ZEPHYR_BASE}/subsys/bluetooth/host/data.c
${ZEPHYR_BASE}/subsys/net/buf_simple.c
${ZEPHYR_BASE}/lib/net_buf/buf_simple.c
${ZEPHYR_BASE}/subsys/logging/log_minimal.c
${ZEPHYR_BASE}/subsys/bluetooth/common/bt_str.c
${ZEPHYR_BASE}/subsys/bluetooth/host/uuid.c

View File

@ -14,5 +14,5 @@ target_sources(testbinary
PRIVATE
src/main.c
${ZEPHYR_BASE}/subsys/net/buf_simple.c
${ZEPHYR_BASE}/lib/net_buf/buf_simple.c
)