-
Notifications
You must be signed in to change notification settings - Fork 2.1k
gnrc: runs full on very heavy load #10672
Description
Description
When using a 6Lo capable node, I am able to cause one node to have a full packet buffer. The packet space is never released, so the node basically becomes unreachable.
This was originally reported in #10581 (comment)
Steps to reproduce the issue
Compile gnrc_networking on native with
diff --git a/examples/gnrc_networking/Makefile b/examples/gnrc_networking/Makefile
index 4d361f825..693378f50 100644
--- a/examples/gnrc_networking/Makefile
+++ b/examples/gnrc_networking/Makefile
@@ -18,7 +18,7 @@ BOARD_INSUFFICIENT_MEMORY := arduino-duemilanove arduino-mega2560 arduino-uno \
# Include packages that pull up and auto-init the link layer.
# NOTE: 6LoWPAN will be included if IEEE802.15.4 devices are present
-USEMODULE += gnrc_netdev_default
+USEMODULE += socket_zep
+USEMODULE += gnrc_pktbuf_cmd
USEMODULE += auto_init_gnrc_netif
# Specify the mandatory networking modules for IPv6 and UDP
USEMODULE += gnrc_ipv6_router_defaultRun two instances of it
native1:
TERMFLAGS="-z [::]:17754,[::1]:17755" make -C examples/gnrc_networking termnative2:
TERMFLAGS="-z [::]:17755,[::1]:17754" make -C examples/gnrc_networking termNote: you might need to start both instances rather quickly between each start, otherwise the already running instance might abort with
/home/mlenders/Repositories/RIOT-OS/RIOT/examples/gnrc_networking/bin/native/gnrc_networking.elf: zep: read: Connection refused
Start pinging with full MTU-sized packages from both nodes (nearly) at the same time:
native1> ping6 200 fe80::25a:4550:a00:455a 1232 0
native2> ping6 200 fe80::25a:4550:a00:455b 1232 0
Expected results
There will be timeouts and maybe full packet buffer messages, but afterwards the packet buffer will be free (check with pktbuf command).
Actual results
The packet buffer runs full and won't be released (one node will only get ping timeouts rather quickly, the other nodes only reports error: packet buffer full multiple times and then return to shell. The pktbuf commands reveals that the packet buffer contains packets that are never released
Versions
Tested in 2018.10 and current master as of writing this issue (07ceddd). I also had a look 2018.04 (where the gnrc_pktbuf_cmd pseudo-module does not exist) here both nodes ran full (but that might only be incidental).
$ ./dist/tools/ci/print_toolchain_versions.sh
Operating System Environment
-----------------------------
Operating System: "Arch Linux"
Kernel: Linux 4.19.12-arch1-1-ARCH x86_64 unknown
Installed compiler toolchains
-----------------------------
native gcc: gcc (GCC) 8.2.1 20181127
arm-none-eabi-gcc: arm-none-eabi-gcc (Arch Repository) 8.2.0
avr-gcc: avr-gcc (GCC) 8.2.0
mips-mti-elf-gcc: missing
msp430-gcc: missing
riscv-none-embed-gcc: missing
clang: clang version 7.0.1 (tags/RELEASE_701/final)
Installed compiler libs
-----------------------
arm-none-eabi-newlib: "3.0.0"
mips-mti-elf-newlib: missing
riscv-none-embed-newlib: missing
avr-libc: "2.0.0" ("20150208")
Installed development tools
---------------------------
cmake: cmake version 3.13.1
cppcheck: missing
doxygen: 1.8.14
flake8: missing
git: git version 2.20.1
make: GNU Make 4.2.1
openocd: missing
python: Python 3.7.1
python2: Python 2.7.15
python3: Python 3.7.1
coccinelle: missing
(maybe @gschorcht also can report his build environment)