Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gnrc_tcp: Overhaul all debug messages #15209

Merged

Conversation

brummer-simon
Copy link
Member

@brummer-simon brummer-simon commented Oct 12, 2020

Contribution description

This PR streamlines all Debug messaging in GNRC_TCP, by adding 4 dedicated macros using DEBUG.
Each macro references the function name, file name and line number to the given debug message allowing fast localization of the message. Each macro has a dedicated Role:

  1. TCP_DEBUG_ENTER: Marks function entry. This macro is called as first instruction in all gnrc_tcp functions (except inline functions).
  2. TCP_DEBUG_LEAVE: Marks function exit. This macro is called before each return statement.
  3. TCP_DEBUG_INFO: Add informational debug message
  4. TCP_DEBUG_ERROR: Adds debug message indicating an error.

Testing procedure

All gnrc_tcp tests muss be successful with and without enabled debug messages.

Issues/PRs references

None

@brummer-simon brummer-simon changed the title gnrc_tcp: Overall all debug messages gnrc_tcp: Overhaul all debug messages Oct 12, 2020
@miri64 miri64 added Area: network Area: Networking Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation labels Oct 12, 2020
@miri64
Copy link
Member

miri64 commented Oct 13, 2020

I don't like that so much functionality is hidden in macros, but in general I am not against introducing debug features if it helps you maintaining the code.

Regarding testing: I have a failure on native in tests/gnrc_tcp's test_send_ack_instead_of_syn() in 05-garbage-pkts.py when ENABLE_DEBUG in all gnrc_tcp c-files (and then a socket timeout in test_send_ack_instead_of_syn). When activating echo in that test suite

diff --git a/tests/gnrc_tcp/tests/05-garbage-pkts.py b/tests/gnrc_tcp/tests/05-garbage-pkts.py
index ce92a22c63..89bae5c1bf 100755
--- a/tests/gnrc_tcp/tests/05-garbage-pkts.py
+++ b/tests/gnrc_tcp/tests/05-garbage-pkts.py
@@ -140,7 +140,7 @@ if __name__ == "__main__":
              if type(getattr(script, t)).__name__ == "function"
              and t.startswith("test_")]
     for test in tests:
-        res = run(test, timeout=10, echo=False)
+        res = run(test, timeout=10, echo=True)
         if res != 0:
             sys.exit(res)
     print(os.path.basename(sys.argv[0]) + ": success\n")
I get
make: Entering directory '/home/mlenders/Repositories/RIOT-OS/RIOT/tests/gnrc_tcp'
01-conn_lifecycle_as_client.py: success

02-conn_lifecycle_as_server.py: success

03-send_data.py: success

04-receive_data.py: success



/home/mlenders/Repositories/RIOT-OS/RIOT/tests/gnrc_tcp/bin/native/tests_gnrc_tcp.elf tap0  
RIOT native interrupts/signals initialized.
LED_RED_OFF
LED_GREEN_ON
RIOT native board initialized.
RIOT native hardware initialization complete.

GNRC_TCP: Enter "gnrc_tcp_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(389)
GNRC_TCP: Enter "_rcvbuf_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(35)
GNRC_TCP: Leave "_rcvbuf_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(40)
GNRC_TCP: Enter "_gnrc_tcp_event_loop_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(368)
GNRC_TCP: Enter "_event_loop", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(301)
GNRC_TCP: Leave "_gnrc_tcp_event_loop_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(382)
GNRC_TCP: Leave "gnrc_tcp_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(398)
main(): This is RIOT! (Version: 2021.01-devel-50-g560cf-HEAD)
RIOT GNRC_TCP test application
> > > ifconfig
Iface  5  HWaddr: E2:BC:7D:CB:F5:50 
          ifconfig
L2-PDU:1500  MTU:1500  HL:64  Source address length: 6
          Link type: wired
          inet6 addr: fe80::e0bc:7dff:fecb:f550  scope: link  VAL
          inet6 group: ff02::1
          inet6 group: ff02::1:ffcb:f550
          
> Iface  5  HWaddr: E2:BC:7D:CB:F5:50 
          ifconfig
gnrc_tcp_tcb_init
L2-PDU:1500  MTU:1500  HL:64  Source address length: 6
          Link type: wired
          inet6 addr: fe80::e0bc:7dff:fecb:f550  scope: link  VAL
          inet6 group: ff02::1
          inet6 group: ff02::1:ffcb:f550
          
> Iface  5  HWaddr: E2:BC:7D:CB:F5:50 
          L2-PDU:1500  MTU:1500  HL:64  Source address length: 6
          Link type: wired
          inet6 addr: fe80::e0bc:7dff:fecb:f550  scope: link  VAL
          inet6 group: ff02::1
          inet6 group: ff02::1:ffcb:f550
          
> gnrc_tcp_tcb_init: argc=1, argv[0] = gnrc_tcp_tcb_init
GNRC_TCP: Enter "gnrc_tcp_tcb_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(404)
GNRC_TCP: Leave "gnrc_tcp_tcb_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(416)
> gnrc_tcp_open_passive [::]:32668
gnrc_tcp_open_passive: argc=2, argv[0] = gnrc_tcp_open_passive, argv[1] = [::]:32668
GNRC_TCP: Enter "gnrc_tcp_ep_from_str", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(271)
GNRC_TCP: Leave "gnrc_tcp_ep_from_str", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(383)
GNRC_TCP: Enter "gnrc_tcp_open_passive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(454)
GNRC_TCP: Enter "_gnrc_tcp_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(97)
GNRC_TCP: Enter "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(957)
GNRC_TCP: Leave "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(961)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_call_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(227)
GNRC_TCP: Enter "_rcvbuf_get_buffer", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(86)
GNRC_TCP: Enter "_rcvbuf_alloc", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(51)
GNRC_TCP: Leave "_rcvbuf_alloc", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(62)
GNRC_TCP: Leave "_rcvbuf_get_buffer", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(98)
GNRC_TCP: Enter "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(133)
GNRC_TCP: Leave "_- test_short_payload transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(212)
GNRC_TCP: Leave "_fsm_call_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(264)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_RCV.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(326)
GNRC_TCP: Enter "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(144)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(413)
GNRC_TCP: Enter "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(27)
GNRC_TCP: Info: "MSS option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(63)
GNRC_TCP: Info: "Valid, unsupported option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(69)
GNRC_TCP: Info: "Valid, unsupported option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(69)
GNRC_TCP: Info: "NOP option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(51)
GNRC_TCP: Info: "Valid, unsupported option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(69)
GNRC_TCP: Leave "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(83)
GNRC_TCP: Enter "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(151)
GNRC_TCP: Leave "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(270)
GNRC_TCP: Enter "_pkt_setup_retransmit", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(379)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Enter "_gnrc_tcp_event_loop_sched", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(63)
GNRC_TCP: Leave "_gnrc_tcp_event_loop_sched", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(68)
GNRC_TCP: Leave "_pkt_setup_retransmit", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(447)
GNRC_TCP: Enter "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(277)
GNRC_TCP: Leave "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(300)
GNRC_TCP: Enter "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(133)
GNRC_TCP: Leave "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(212)
GNRC_TCP: Leave "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(542)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Leave "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(295)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_SND.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(332)
GNRC_TCP: Enter "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(89)
GNRC_TCP: Enter "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(792)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Leave "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(814)
GNRC_TCP: Leave "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(124)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_RCV.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(326)
GNRC_TCP: Enter "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(144)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(413)
GNRC_TCP: Enter "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(27)
GNRC_TCP: Leave "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(31)
GNRC_TCP: Enter "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(343)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Leave "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(358)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Enter "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(306)
GNRC_TCP: Leave "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(323)
GNRC_TCP: Enter "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(133)
GNRC_TCP: Leave "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(212)
GNRC_TCP: Enter "_pkt_acknowledge", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(453)
GNRC_TCP: Enter "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(343)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Leave "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(358)
GNRC_TCP: Enter "_gnrc_tcp_event_loop_unsched", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(73)
GNRC_TCP: Leave "_gnrc_tcp_event_loop_unsched", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(75)
GNRC_TCP: Leave "_pkt_acknowledge", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(496)
GNRC_TCP: Leave "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(782)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Leave "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(295)
GNRC_TCP: Info: "Received MSG_TYPE_NOTIFY_USER.", Func: _gnrc_tcp_open, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(184)
GNRC_TCP: Enter "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(957)
GNRC_TCP: Leave "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(961)
GNRC_TCP: Enter "_unsched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(72)
GNRC_TCP: Leave "_unsched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(74)
GNRC_TCP: Leave "_gnrc_tcp_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(226)
GNRC_TCP: Leave "gnrc_tcp_open_passive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(476)
gnrc_tcp_open_passive: returns 0
> gnrc_tcp_recv 1000000 1
gnrc_tcp_recv: argc=3, argv[0] = gnrc_tcp_recv, argv[1] = 1000000, argv[2] = 1
GNRC_TCP: Enter "gnrc_tcp_recv", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(614)
GNRC_TCP: Enter "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(957)
GNRC_TCP: Leave "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(961)
GNRC_TCP: Enter "_sched_connection_timeout", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(64)
GNRC_TCP: Enter "_sched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(55)
GNRC_TCP: Leave "_sched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(59)
GNRC_TCP: Leave "_sched_connection_timeout", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(67)
GNRC_TCP: Enter "_sched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(55)
GNRC_TCP: Leave "_sched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(59)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_call_recv", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(313)
GNRC_TCP: Leave "_fsm_call_recv", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(316)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_RCV.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(326)
GNRC_TCP: Enter "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(144)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(413)
GNRC_TCP: Enter "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(27)
GNRC_TCP: Leave "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(31)
GNRC_TCP: Enter "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(343)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Leave "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(358)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Enter "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(306)
GNRC_TCP: Leave "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(332)
GNRC_TCP: Enter "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(151)
GNRC_TCP: Leave "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(270)
GNRC_TCP: Enter "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(277)
GNRC_TCP: Leave "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(300)
GNRC_TCP: Leave "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(782)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Leave "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(295)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_SND.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(332)
GNRC_TCP: Enter "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(89)
GNRC_TCP: Enter "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(792)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Leave "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(814)
GNRC_TCP: Leave "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(124)
GNRC_TCP: Info: "Received MSG_TYPE_NOTIFY_USER.", Func: gnrc_tcp_recv, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(704)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_call_recv", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(313)
GNRC_TCP: Enter "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(151)
GNRC_TCP: Leave "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(270)
GNRC_TCP: Enter "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(277)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_SND.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(332)
GNRC_TCP: Enter "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(89)
GNRC_TCP: Enter "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(792)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Leave "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(814)
GNRC_TCP: Leave "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(124)
GNRC_TCP: Leave "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(300)
GNRC_TCP: Leave "_fsm_call_recv", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(333)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Enter "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(957)
GNRC_TCP: Leave "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(961)
GNRC_TCP: Enter "_unsched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(72)
GNRC_TCP: Leave "_unsched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(74)
GNRC_TCP: Enter "_unsched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(72)
GNRC_TCP: Leave "_unsched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(74)
GNRC_TCP: Leave "gnrc_tcp_recv", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(718)
gnrc_tcp_recv: received 1
> pktbuf
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_RCV.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(326)
GNRC_TCP: Enter "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(144)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(413)
GNRC_TCP: Enter "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(27)
GNRC_TCP: Leave "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(31)
GNRC_TCP: Enter "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(343)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Leave "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(358)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Enter "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(306)
GNRC_TCP: Leave "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(323)
GNRC_TCP: Enter "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(151)
GNRC_TCP: Leave "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(270)
GNRC_TCP: Enter "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(277)
GNRC_TCP: Leave "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(300)
GNRC_TCP: Enter "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(133)
GNRC_TCP: Leave "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(212)
GNRC_TCP: Leave "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(782)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Leave "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(295)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_SND.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(332)
GNRC_TCP: Enter "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(89)
GNRC_TCP: Enter "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(792)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Leave "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(814)
GNRC_TCP: Leave "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(124)
packet buffer: first byte: 0x5663f960, last byte: 0x56641160 (size: 6144)
  position of last byte used: 1848
~ unused: 0x5663f960 (next: (nil), size: 6144) ~
> 
gnrc_tcp_close



/home/mlenders/Repositories/RIOT-OS/RIOT/tests/gnrc_tcp/bin/native/tests_gnrc_tcp.elf tap0  
RIOT native interrupts/signals initialized.
LED_RED_OFF
LED_GREEN_ON
RIOT native board initialized.
RIOT native hardware initialization complete.

GNRC_TCP: Enter "gnrc_tcp_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(389)
GNRC_TCP: Enter "_rcvbuf_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(35)
GNRC_TCP: Leave "_rcvbuf_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(40)
GNRC_TCP: Enter "_gnrc_tcp_event_loop_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(368)
GNRC_TCP: Enter "_event_loop", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(301)
GNRC_TCP: Leave "_gnrc_tcp_event_loop_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(382)
GNRC_TCP: Leave "gnrc_tcp_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(398)
main(): This is RIOT! (Version: 2021.01-devel-50-g560cf-HEAD)
RIOT GNRC_TCP test application
> > > ifconfig
Iface  5  HWaddr: E2:BC:7D:CB:F5:50 ifconfig

          L2-PDU:1500  MTU:1500  HL:64  Source address length: 6
          Link type: wired
          inet6 addr: fe80::e0bc:7dff:fecb:f550  scope: link  VAL
          inet6 group: ff02::1
          inet6 group: ff02::1:ffcb:f550
          
> Iface  5  HWaddr: E2:BC:7D:CB:F5:50 ifconfig
gnrc_tcp_tcb_init

          L2-PDU:1500  MTU:1500  HL:64  Source address length: 6
          Link type: wired
          inet6 addr: fe80::e0bc:7dff:fecb:f550  scope: link  VAL
          inet6 group: ff02::1
          inet6 group: ff02::1:ffcb:f550
          
> Iface  5  HWaddr: E2:BC:7D:CB:F5:50 
          L2-PDU:1500  MTU:1500  HL:64  Source address length: 6
          Link type: wired
          inet6 addr: fe80::e0bc:7dff:fecb:f550  scope: link  VAL
          inet6 group: ff02::1
          inet6 group: ff02::1:ffcb:f550
          
> gnrc_tcp_tcb_init: argc=1, argv[0] = gnrc_tcp_tcb_init
GNRC_TCP: Enter "gnrc_tcp_tcb_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(404)
GNRC_TCP: Leave "gnrc_tcp_tcb_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(416)
> gnrc_tcp_open_passive [::]:53305
gnrc_tcp_open_passive: argc=2, argv[0] = gnrc_tcp_open_passive, argv[1] = [::]:53305
GNRC_TCP: Enter "gnrc_tcp_ep_from_str", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(271)
GNRC_TCP: Leave "gnrc_tcp_ep_from_str", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(383)
GNRC_TCP: Enter "gnrc_tcp_open_passive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(454)
GNRC_TCP: Enter "_gnrc_tcp_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(97)
GNRC_TCP: Enter "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(957)
GNRC_TCP: Leave "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(961)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_call_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(227)
GNRC_TCP: Enter "_rcvbuf_get_buffer", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(86)
GNRC_TCP: Enter "_rcvbuf_alloc", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(51)
GNRC_TCP: Leave "_rcvbuf_alloc", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(62)
GNRC_TCP: Leave "_rcvbuf_get_buffer", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(98)
GNRC_TCP: Enter "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(133)
GNRC_TCP: Leave "_- test_short_header transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(212)
GNRC_TCP: Leave "_fsm_call_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(264)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_RCV.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(326)
GNRC_TCP: Enter "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(144)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(413)
GNRC_TCP: Enter "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(27)
GNRC_TCP: Info: "MSS option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(63)
GNRC_TCP: Info: "Valid, unsupported option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(69)
GNRC_TCP: Info: "Valid, unsupported option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(69)
GNRC_TCP: Info: "NOP option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(51)
GNRC_TCP: Info: "Valid, unsupported option found.", Func: _option_parse, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(69)
GNRC_TCP: Leave "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(83)
GNRC_TCP: Enter "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(151)
GNRC_TCP: Leave "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(270)
GNRC_TCP: Enter "_pkt_setup_retransmit", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(379)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Enter "_gnrc_tcp_event_loop_sched", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(63)
GNRC_TCP: Leave "_gnrc_tcp_event_loop_sched", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(68)
GNRC_TCP: Leave "_pkt_setup_retransmit", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(447)
GNRC_TCP: Enter "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(277)
GNRC_TCP: Leave "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(300)
GNRC_TCP: Enter "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(133)
GNRC_TCP: Leave "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(212)
GNRC_TCP: Leave "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(542)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Leave "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(295)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_SND.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(332)
GNRC_TCP: Enter "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(89)
GNRC_TCP: Enter "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(792)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Leave "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(814)
GNRC_TCP: Leave "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(124)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_RCV.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(326)
GNRC_TCP: Enter "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(144)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(413)
GNRC_TCP: Enter "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(27)
GNRC_TCP: Leave "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(31)
GNRC_TCP: Enter "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(343)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Leave "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(358)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Enter "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(306)
GNRC_TCP: Leave "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(323)
GNRC_TCP: Enter "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(133)
GNRC_TCP: Leave "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(212)
GNRC_TCP: Enter "_pkt_acknowledge", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(453)
GNRC_TCP: Enter "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(343)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Leave "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(358)
GNRC_TCP: Enter "_gnrc_tcp_event_loop_unsched", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(73)
GNRC_TCP: Leave "_gnrc_tcp_event_loop_unsched", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(75)
GNRC_TCP: Leave "_pkt_acknowledge", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(496)
GNRC_TCP: Leave "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(782)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Leave "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(295)
GNRC_TCP: Info: "Received MSG_TYPE_NOTIFY_USER.", Func: _gnrc_tcp_open, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(184)
GNRC_TCP: Enter "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(957)
GNRC_TCP: Leave "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(961)
GNRC_TCP: Enter "_unsched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(72)
GNRC_TCP: Leave "_unsched_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(74)
GNRC_TCP: Leave "_gnrc_tcp_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(226)
GNRC_TCP: Leave "gnrc_tcp_open_passive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(476)
gnrc_tcp_open_passive: returns 0
> pktbuf
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_RCV.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(326)
GNRC_TCP: Enter "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(144)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(413)
GNRC_TCP: Enter "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(27)
GNRC_TCP: Leave "_option_parse", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c(31)
GNRC_TCP: Enter "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(343)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Leave "_pkt_get_seg_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(358)
GNRC_TCP: Enter "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(364)
GNRC_TCP: Leave "_pkt_get_pay_len", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(373)
GNRC_TCP: Enter "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(306)
GNRC_TCP: Leave "_pkt_chk_seq_num", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(323)
GNRC_TCP: Enter "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(151)
GNRC_TCP: Leave "_pkt_build", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(270)
GNRC_TCP: Enter "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(277)
GNRC_TCP: Leave "_pkt_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(300)
GNRC_TCP: Enter "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(133)
GNRC_TCP: Leave "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(212)
GNRC_TCP: Leave "_fsm_rcvd_pkt", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(782)
GNRC_TCP: Leave "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(928)
GNRC_TCP: Leave "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(951)
GNRC_TCP: Leave "_receive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(295)
GNRC_TCP: Info: "Received GNRC_NETAPI_MSG_TYPE_SND.", Func: _event_loop, File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(332)
GNRC_TCP: Enter "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(89)
GNRC_TCP: Enter "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(792)
GNRC_TCP: Enter "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(503)
GNRC_TCP: Leave "_pkt_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_pkt.c(538)
GNRC_TCP: Leave "gnrc_tcp_calc_csum", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(814)
GNRC_TCP: Leave "_send", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(124)
packet buffer: first byte: 0x5663f960, last byte: 0x56641160 (size: 6144)
  position of last byte used: 1848
~ unused: 0x5663f960 (next: (nil), size: 6144) ~
> 
gnrc_tcp_close



/home/mlenders/Repositories/RIOT-OS/RIOT/tests/gnrc_tcp/bin/native/tests_gnrc_tcp.elf tap0  
RIOT native interrupts/signals initialized.
LED_RED_OFF
LED_GREEN_ON
RIOT native board initialized.
RIOT native hardware initialization complete.

GNRC_TCP: Enter "gnrc_tcp_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(389)
GNRC_TCP: Enter "_rcvbuf_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(35)
GNRC_TCP: Leave "_rcvbuf_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(40)
GNRC_TCP: Enter "_gnrc_tcp_event_loop_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(368)
GNRC_TCP: Enter "_event_loop", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(301)
GNRC_TCP: Leave "_gnrc_tcp_event_loop_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_eventloop.c(382)
GNRC_TCP: Leave "gnrc_tcp_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(398)
main(): This is RIOT! (Version: 2021.01-devel-50-g560cf-HEAD)
RIOT GNRC_TCP test application
> > > ifconfig
Iface  5  HWaddr: E2:BC:7D:CB:F5:50 
          ifconfig
L2-PDU:1500  MTU:1500  HL:64  Source address length: 6
          Link type: wired
          inet6 addr: fe80::e0bc:7dff:fecb:f550  scope: link  VAL
          inet6 group: ff02::1
          inet6 group: ff02::1:ffcb:f550
          
> Iface  5  HWaddr: E2:BC:7D:CB:F5:50 ifconfig
gnrc_tcp_tcb_init

          L2-PDU:1500  MTU:1500  HL:64  Source address length: 6
          Link type: wired
          inet6 addr: fe80::e0bc:7dff:fecb:f550  scope: link  VAL
          inet6 group: ff02::1
          inet6 group: ff02::1:ffcb:f550
          
> Iface  5  HWaddr: E2:BC:7D:CB:F5:50 
          L2-PDU:1500  MTU:1500  HL:64  Source address length: 6
          Link type: wired
          inet6 addr: fe80::e0bc:7dff:fecb:f550  scope: link  VAL
          inet6 group: ff02::1
          inet6 group: ff02::1:ffcb:f550
          
> gnrc_tcp_tcb_init: argc=1, argv[0] = gnrc_tcp_tcb_init
GNRC_TCP: Enter "gnrc_tcp_tcb_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(404)
GNRC_TCP: Leave "gnrc_tcp_tcb_init", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(416)
> gnrc_tcp_open_passive [::]:37129
gnrc_tcp_open_passive: argc=2, argv[0] = gnrc_tcp_open_passive, argv[1] = [::]:37129
GNRC_TCP: Enter "gnrc_tcp_ep_from_str", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(271)
GNRC_TCP: Leave "gnrc_tcp_ep_from_str", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(383)
GNRC_TCP: Enter "gnrc_tcp_open_passive", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(454)
GNRC_TCP: Enter "_gnrc_tcp_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp.c(97)
GNRC_TCP: Enter "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(957)
GNRC_TCP: Leave "_fsm_set_mbox", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(961)
GNRC_TCP: Enter "_fsm", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(934)
GNRC_TCP: Enter "_fsm_unprotected", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(890)
GNRC_TCP: Enter "_fsm_call_open", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(227)
GNRC_TCP: Enter "_rcvbuf_get_buffer", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(86)
GNRC_TCP: Enter "_rcvbuf_alloc", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(51)
GNRC_TCP: Leave "_rcvbuf_alloc", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(62)
GNRC_TCP: Leave "_rcvbuf_get_buffer", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_rcvbuf.c(98)
GNRC_TCP: Enter "_transition_to", File: /home/mlenders/Repositories/RIOT-OS/RIOT/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_fsm.c(133)
GNRC_TCP: Leave "_- test_send_ack_instead_of_syn gnrc_tcp_close

Traceback (most recent call last):
  File "/home/mlenders/Repositories/RIOT-OS/RIOT/tests/gnrc_tcp/tests/05-garbage-pkts.py", line 143, in <module>
    res = run(test, timeout=10, echo=True)
  File "/home/mlenders/Repositories/RIOT-OS/RIOT/dist/pythonlibs/testrunner/__init__.py", line 30, in run
    testfunc(child)
  File "/home/mlenders/Repositories/RIOT-OS/RIOT/tests/gnrc_tcp/tests/05-garbage-pkts.py", line 44, in runner
    func(child, tap, host_ll, dst_if, dst_l2, dst_ll, port)
  File "/home/mlenders/Repositories/RIOT-OS/RIOT/tests/gnrc_tcp/tests/05-garbage-pkts.py", line 113, in test_send_ack_instead_of_syn
    sock.connect(addr_info[0][-1])
socket.timeout: timed out
make: *** [/home/mlenders/Repositories/RIOT-OS/RIOT/tests/gnrc_tcp/../../Makefile.include:761: test] Error 1
make: Leaving directory '/home/mlenders/Repositories/RIOT-OS/RIOT/tests/gnrc_tcp'

@brummer-simon
Copy link
Member Author

I don't like that so much functionality is hidden in macros, but in general I am not against introducing debug features if it helps you maintaining the code.

Regarding testing: I have a failure on native in tests/gnrc_tcp's test_send_ack_instead_of_syn() in 05-garbage-pkts.py when ENABLE_DEBUG in all gnrc_tcp c-files (and then a socket timeout in test_send_ack_instead_of_syn). When activating echo in that test suite

diff --git a/tests/gnrc_tcp/tests/05-garbage-pkts.py b/tests/gnrc_tcp/tests/05-garbage-pkts.py
index ce92a22c63..89bae5c1bf 100755
--- a/tests/gnrc_tcp/tests/05-garbage-pkts.py
+++ b/tests/gnrc_tcp/tests/05-garbage-pkts.py
@@ -140,7 +140,7 @@ if __name__ == "__main__":
              if type(getattr(script, t)).__name__ == "function"
              and t.startswith("test_")]
     for test in tests:
-        res = run(test, timeout=10, echo=False)
+        res = run(test, timeout=10, echo=True)
         if res != 0:
             sys.exit(res)
     print(os.path.basename(sys.argv[0]) + ": success\n")

I am not a huge fan of excessive macro use either, however this is more or less the only way to produce messages without having to write things like FILE or LINE through the codebase. Using Macros here is the most visually pleasing approach from my point of view.

I was able to reproduce the failure in "test_send_ack_instead_of_syn", I'll look into that, do you have any Ideas where to look? I am a bit puzzled that this Issue occurs with this change...

Does this happen on a non-native board as well?

@miri64
Copy link
Member

miri64 commented Oct 13, 2020

Does this happen on a non-native board as well?

With non-native (samr21-xpro) I don't even get the tests to pass without DEBUG, but that might be just Arch Linux, which for me sometimes has problems with ethos. :-/

I was able to reproduce the failure in "test_send_ack_instead_of_syn", I'll look into that, do you have any Ideas where to look? I am a bit puzzled that this Issue occurs with this change...

Maybe a timing issue as stdio often slows done the node significantly. Not sure if in the test application or the TCP module itself though.

@brummer-simon
Copy link
Member Author

brummer-simon commented Oct 14, 2020

Does this happen on a non-native board as well?

With non-native (samr21-xpro) I don't even get the tests to pass without DEBUG, but that might be just Arch Linux, which for me sometimes has problems with ethos. :-/

I was able to reproduce the failure in "test_send_ack_instead_of_syn", I'll look into that, do you have any Ideas where to look? I am a bit puzzled that this Issue occurs with this change...

Maybe a timing issue as stdio often slows done the node significantly. Not sure if in the test application or the TCP module itself though.

I am fairly confident that it is not the TCP module. I used wireshark find differences between "test_send_ack_instead_of_syn" with enabled and disabled Debug prints. It is rather interesting. In theory, the test tries so send an ACK packet instead of a SYN packet on connection establishment. Afterwards it sends a SYN to establish a connection normally.

In reality, the test does not send a single ACK packet, instead the host system tries to send the defunct packet over and and over and over again before sending a valid SYN packet. With disabled prints GNRC_TCP received the valid SYN after some time, with enabled prints the test runs in a timeout (maybe due to the stdio delay caused by large amounts of debug prints caused by the huge amounts of received ACK packets). If I prevent the test from retransmiting the initial ACK, the issue should be solved.

EDIT: Interestingly the amount of sent ACKs is the same with enabled and disabled debug messages, however there is no SYN packet sent with enabled debug print, this is quite mysterious to me. Here are the wireshark captures of this specific test case.

FOLLOWUP EDIT: In theory the reply from GNRC_TCP to the malformed ACK should be a reset packet to be send, this does not happen. In addition, the are no prints from the eventloop that a packet was received from the network layer. It looks like the malformed packet is discarded before the GNRC_TCP processes it. This leads to a missing reset sent in response leading to the flood of retransmissions.

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

If I prevent the test from retransmiting the initial ACK, the issue should be solved.

Let me have a look first, if this is testing a regression.

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

According to the comment in that test #12001 is the issue that caused it, which explicitly mentions that the garbled ACK needs to be sent multiple times to cause the issue, so I don't think it's a good idea to prevent the multiple retransmissions.

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

In reality, the test does not send a single ACK packet, instead the host system tries to send the defunct packet over and and over and over again before sending a valid SYN packet. With disabled prints GNRC_TCP received the valid SYN after some time, with enabled prints the test runs in a timeout (maybe due to the stdio delay caused by large amounts of debug prints caused by the huge amounts of received ACK packets). If I prevent the test from retransmiting the initial ACK, the issue should be solved.

This is exactly what the test is for:

    # see https://github.com/RIOT-OS/RIOT/pull/12001
    provided_data = base64.b64decode("rwsQf2pekYLaU+exUBBwgPDKAAA=")
    tcp_hdr = TCP(provided_data)
    assert provided_data == raw(tcp_hdr)
    # set destination port to application specific port
    tcp_hdr.dport = dst_port
    sendp(Ether(dst=dst_l2) / IPv6(src=src_ll, dst=dst_ll) / tcp_hdr,
          iface=src_if, verbose=0, count=1000)

is sending the garbled packages as found in #12001,

    # check if server actually still works
    with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as sock:
        sock.settimeout(child.timeout)
        addr_info = socket.getaddrinfo(dst_ll + '%' + src_if, dst_port,
                                       type=socket.SOCK_STREAM)
        sock.connect(addr_info[0][-1])
        child.expect_exact('gnrc_tcp_open_passive: returns 0')
    verify_pktbuf_empty(child)

checks if the gnrc_tcp module is still in working order. We could try to increase the timeout set with sock.settimeout(child.timeout), but that's already 10 sec.

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

Alternatively we can set a time.sleep() before creating the socket.

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

I am fairly confident that it is not the TCP module.

Never said it was, timeout configuration issues are usually found in the tests if they are too tight :-)

@brummer-simon
Copy link
Member Author

According to the comment in that test #12001 is the issue that caused it, which explicitly mentions that the garbled ACK needs to be sent multiple times to cause the issue, so I don't think it's a good idea to prevent the multiple retransmissions.

After looking into the test, it is not automatic retransmissions that send the packet a thousand times, it is the tests intention to do so. I am okay with that however none of these packet is processed by the eventloop. The first packet that is actually processed by GNRC_TCP is the packet containing a SYN.

From my point of view it is okay to send the malformed packet over and over, however these packets should at least be processed by GNRC_TCP code. I am not sure that causes the packets to be discarded, maybe an invalid checksum or something like that. The tests TCP header is constructed from static data maybe the checksum is invalid due changing IPv6 addresses in use.

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

After looking into the test, it is not automatic retransmissions that send the packet a thousand times, it is the tests intention to do so. I am okay with that however none of these packet is processed by the eventloop. The first packet that is actually processed by GNRC_TCP is the packet containing a SYN.

From my point of view it is okay to send the malformed packet over and over, however these packets should at least be processed by GNRC_TCP code. I am not sure that causes the packets to be discarded, maybe an invalid checksum or something like that. The tests TCP header is constructed from static data maybe the checksum is invalid due changing IPv6 addresses in use.

I think that it is not processed is intentional, as if they would be it would cause the fault #12001 points out ;-). It's a regression test. It does not have to make sense for the current implementation, it is mainly their so a bug does not return. I am not 100% sure what you mean by "is not processed by the eventloop". Do you mean, the TCP module does not even receive those packets or do you mean they are dropped right after reception (you mentioned invalid checksums, which would be checked by TCP, as IPv6 does not have any checksums)

@brummer-simon
Copy link
Member Author

After looking into the test, it is not automatic retransmissions that send the packet a thousand times, it is the tests intention to do so. I am okay with that however none of these packet is processed by the eventloop. The first packet that is actually processed by GNRC_TCP is the packet containing a SYN.
From my point of view it is okay to send the malformed packet over and over, however these packets should at least be processed by GNRC_TCP code. I am not sure that causes the packets to be discarded, maybe an invalid checksum or something like that. The tests TCP header is constructed from static data maybe the checksum is invalid due changing IPv6 addresses in use.

I think that it is not processed is intentional, as if they would be it would cause the fault #12001 points out ;-). It's a regression test. It does not have to make sense for the current implementation, it is mainly their so a bug does not return. I am not 100% sure what you mean by "is not processed by the eventloop". Do you mean, the TCP module does not even receive those packets or do you mean they are dropped right after reception (you mentioned invalid checksums, which would be checked by TCP, as IPv6 does not have any checksums)

After sending 10 instead of 1000 packets I see that debug messages to show up and I see that packet are infact discarded by the TCP layer due to invalid checksums instead of containing an ACK (this is checked later) on connection establishment. This is good to know that the packets arrive.

However this test does not test what its supposed to test, because invalid checksum should trigger different behavior that false flags.

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

However this test does not test what its supposed to test, because invalid checksum should trigger different behavior that false flags.

#12001 shows that this did not use to be the case, so if this is not the case now, it is testing what it is supposed to test, isn't it?

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

It seems the network interface is just overloaded with messages.

There are a lot of

gnrc_netif: possibly lost interrupt.

@brummer-simon
Copy link
Member Author

It seems the network interface is just overloaded with messages.

There are a lot of

gnrc_netif: possibly lost interrupt.

Jeah but It still doesn't explain why the test works with disabled debug messaging. The load on the network interface is the same in both cases.

@brummer-simon
Copy link
Member Author

brummer-simon commented Oct 14, 2020

Ah I missclicked. Sorry.

@brummer-simon brummer-simon reopened this Oct 14, 2020
@miri64
Copy link
Member

miri64 commented Oct 14, 2020

Ah I missclicked. Can I reopen this PR?

Of course :)

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

BTW, while we are talking I try to get the test to run. Most of what I write is just brainstorming new ideas ;-).

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

The fix was here, btw. https://github.com/RIOT-OS/RIOT/pull/11999/files

@brummer-simon
Copy link
Member Author

brummer-simon commented Oct 14, 2020

As a potential solution:
Since the last function in the test verifies that the gnrc_pktbuf is empty, we could reduce the number initial packets that are sent.
With this test we want to verify that no memory leaks and from what ive seen from the fix, memory leaked from each incoming malformed packet. I would start by reducing the number of sent packets from 1000 to 10 and keep the timeout as it is.
This way we would remove much load by reducing the amount of debug messages and network traffic significantly.

What do you think?

@brummer-simon
Copy link
Member Author

brummer-simon commented Oct 14, 2020

BTW.: #12001 and #11999 fix different things ;)

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

BTW.: #12001 and #11999 fix different things ;)

Arghs sorry, somehow I thought #12001 was an issue edit: and #11999 the fix for it ^^"

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

Setting count to 10 fixes the issue for me. Let me check if it also is triggered by a regression (by reverting c6df206 on top of your PR).

@brummer-simon
Copy link
Member Author

Setting count to 10 fixes the issue for me. Let me check if it also is triggered by a regression (by reverting c6df206 on top of your PR).

If you are unable to recreate the memory leak, this might have something todo with the packet discard to an invalid checksum before the leak should occur. ;)

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

It does not trigger the regression, but neither does count=1000 (reliably)... and like you I think it is because the checksum check was maybe fixed later. Then let's do it like this: keep the changes they are now and I try to add a test that triggers the regression in a follow-up and fix the test for enabled debug.

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

This is the fix I came up with, if you want to apply it already here:

diff --git a/tests/gnrc_tcp/tests/05-garbage-pkts.py b/tests/gnrc_tcp/tests/05-garbage-pkts.py
index ce92a22c63..231f4e996a 100755
--- a/tests/gnrc_tcp/tests/05-garbage-pkts.py
+++ b/tests/gnrc_tcp/tests/05-garbage-pkts.py
@@ -7,6 +7,7 @@
 # directory for more details.
 
 import base64
+import pexpect
 import os
 import socket
 import sys
@@ -96,6 +97,15 @@ def test_short_header(child, src_if, src_ll, dst_if, dst_l2, dst_ll, dst_port):
 @testfunc
 def test_send_ack_instead_of_syn(child, src_if, src_ll,
                                  dst_if, dst_l2, dst_ll, dst_port):
+    # check if gnrc_tcp_open_passive in `@testfunc` decorator generates debug
+    # output
+    debug = child.expect([pexpect.TIMEOUT,
+                          'GNRC_TCP: Enter "gnrc_tcp_open_passive"'])
+    # with debug output the node can be overwhelmed by packets + output
+    if debug:
+        count = 10
+    else:
+        count = 1000
     # see https://github.com/RIOT-OS/RIOT/pull/12001
     provided_data = base64.b64decode("rwsQf2pekYLaU+exUBBwgPDKAAA=")
     tcp_hdr = TCP(provided_data)
@@ -103,7 +113,7 @@ def test_send_ack_instead_of_syn(child, src_if, src_ll,
     # set destination port to application specific port
     tcp_hdr.dport = dst_port
     sendp(Ether(dst=dst_l2) / IPv6(src=src_ll, dst=dst_ll) / tcp_hdr,
-          iface=src_if, verbose=0, count=1000)
+          iface=src_if, verbose=0, count=count)
 
     # check if server actually still works
     with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as sock:

It just checks if there is debug output and sets count=10 in that case. It is not 100% reliable, since the debug output triggered by sendp() is in eventloop.c and the debug output checked is not (since there is no output for eventloop.c in the preceding output), but better then nothing.

@brummer-simon
Copy link
Member Author

brummer-simon commented Oct 14, 2020

This is the fix I came up with, if you want to apply it already here:

diff --git a/tests/gnrc_tcp/tests/05-garbage-pkts.py b/tests/gnrc_tcp/tests/05-garbage-pkts.py
index ce92a22c63..231f4e996a 100755
--- a/tests/gnrc_tcp/tests/05-garbage-pkts.py
+++ b/tests/gnrc_tcp/tests/05-garbage-pkts.py
@@ -7,6 +7,7 @@
 # directory for more details.
 
 import base64
+import pexpect
 import os
 import socket
 import sys
@@ -96,6 +97,15 @@ def test_short_header(child, src_if, src_ll, dst_if, dst_l2, dst_ll, dst_port):
 @testfunc
 def test_send_ack_instead_of_syn(child, src_if, src_ll,
                                  dst_if, dst_l2, dst_ll, dst_port):
+    # check if gnrc_tcp_open_passive in `@testfunc` decorator generates debug
+    # output
+    debug = child.expect([pexpect.TIMEOUT,
+                          'GNRC_TCP: Enter "gnrc_tcp_open_passive"'])
+    # with debug output the node can be overwhelmed by packets + output
+    if debug:
+        count = 10
+    else:
+        count = 1000
     # see https://github.com/RIOT-OS/RIOT/pull/12001
     provided_data = base64.b64decode("rwsQf2pekYLaU+exUBBwgPDKAAA=")
     tcp_hdr = TCP(provided_data)
@@ -103,7 +113,7 @@ def test_send_ack_instead_of_syn(child, src_if, src_ll,
     # set destination port to application specific port
     tcp_hdr.dport = dst_port
     sendp(Ether(dst=dst_l2) / IPv6(src=src_ll, dst=dst_ll) / tcp_hdr,
-          iface=src_if, verbose=0, count=1000)
+          iface=src_if, verbose=0, count=count)
 
     # check if server actually still works
     with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as sock:

It just checks if there is debug output and sets count=10 in that case. It is not 100% reliable, since the debug output triggered by sendp() is in eventloop.c and the debug output checked is not (since there is no output for eventloop.c in the preceding output), but better then nothing.

The eventloop prints output on thread startup way before sendp is executed. Maybe your fix can react to that.

@miri64
Copy link
Member

miri64 commented Oct 14, 2020

Maybe your fix can react to that.

Then it would be like this ;-)

diff --git a/tests/gnrc_tcp/tests/05-garbage-pkts.py b/tests/gnrc_tcp/tests/05-garbage-pkts.py
index ce92a22c63..d6de7cadea 100755
--- a/tests/gnrc_tcp/tests/05-garbage-pkts.py
+++ b/tests/gnrc_tcp/tests/05-garbage-pkts.py
@@ -7,6 +7,7 @@
 # directory for more details.
 
 import base64
+import pexpect
 import os
 import socket
 import sys
@@ -96,6 +97,15 @@ def test_short_header(child, src_if, src_ll, dst_if, dst_l2, dst_ll, dst_port):
 @testfunc
 def test_send_ack_instead_of_syn(child, src_if, src_ll,
                                  dst_if, dst_l2, dst_ll, dst_port):
+    # check if entering _event_loop in `@testfunc` decorator generates debug
+    # output
+    debug = child.expect([pexpect.TIMEOUT,
+                          'GNRC_TCP: Enter "_event_loop"'])
+    # with debug output the node can be overwhelmed by packets + output
+    if debug:
+        count = 10
+    else:
+        count = 1000
     # see https://github.com/RIOT-OS/RIOT/pull/12001
     provided_data = base64.b64decode("rwsQf2pekYLaU+exUBBwgPDKAAA=")
     tcp_hdr = TCP(provided_data)
@@ -103,7 +113,7 @@ def test_send_ack_instead_of_syn(child, src_if, src_ll,
     # set destination port to application specific port
     tcp_hdr.dport = dst_port
     sendp(Ether(dst=dst_l2) / IPv6(src=src_ll, dst=dst_ll) / tcp_hdr,
-          iface=src_if, verbose=0, count=1000)
+          iface=src_if, verbose=0, count=count)
 
     # check if server actually still works
     with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as sock:

@brummer-simon
Copy link
Member Author

I added your provided patch and modified the expect condition. Currently the test code expects "GNRC_TCP" to increase the change to detect debug prints if ENABLE_DEBUG is not set in the gnrc_tcp_eventloop.c.

@brummer-simon
Copy link
Member Author

Since fixing the regression test is a seperate issue, are you happy with this PR?

Copy link
Member

@miri64 miri64 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor issues, otherwise I think we are good to go.

tests/gnrc_tcp/tests/05-garbage-pkts.py Outdated Show resolved Hide resolved
tests/gnrc_tcp/tests/05-garbage-pkts.py Outdated Show resolved Hide resolved
Copy link
Member

@miri64 miri64 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK, please squash

tests/gnrc_tcp/tests/05-garbage-pkts.py Outdated Show resolved Hide resolved
tests/gnrc_tcp/tests/05-garbage-pkts.py Outdated Show resolved Hide resolved
@miri64
Copy link
Member

miri64 commented Oct 14, 2020

Please squash.

@miri64 miri64 added the CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR label Oct 14, 2020
@brummer-simon
Copy link
Member Author

Done. Thanks for your patience, support and help while tracing down these obscure issues.

Copy link
Member

@miri64 miri64 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK. Thank you too :-)

@miri64 miri64 added Area: network Area: Networking and removed Area: network Area: Networking labels Oct 14, 2020
@miri64 miri64 merged commit f2e1c1a into RIOT-OS:master Oct 14, 2020
@brummer-simon brummer-simon deleted the gnrc_tcp-cleanup_debug_messages branch October 14, 2020 16:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: network Area: Networking CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants