Skip to content

ethos: fails to respond to first message. #11988

@fjmolinas

Description

@fjmolinas

Description

While testing #11818 I realized that after a reset the first reply ethos is supposed to send back to the sender fails. This doesn't happen if using a wireless interface so is unrelated to gnrc.

The easiest way to see this is with a simple ping, but any message from the host requiring an ACK will fail.

As far as I could see the reply was being passed down up-to ethos, but no response was received by the host and _send was being called.

Steps to reproduce the issue

  • Setup the network:

sudo ./dist/tools/ethos/setup_network.sh riot0 2001:db8::/64

  • Compile a networking application with ethos, the following patch can be applied to gnrc_networking:
patch
diff --git a/examples/gnrc_networking/Makefile b/examples/gnrc_networking/Makefile
index 25c2dc858..0ac1b1a08 100644
--- a/examples/gnrc_networking/Makefile
+++ b/examples/gnrc_networking/Makefile
@@ -62,6 +62,29 @@ DEVELHELP ?= 1
 # Change this to 0 show compiler invocation lines by default:
 QUIET ?= 1
 
+ifeq (1,$(USE_ETHOS))
+  GNRC_NETIF_NUMOF := 2
+  USEMODULE += stdio_ethos
+  USEMODULE += gnrc_uhcpc
+
+  # ethos baudrate can be configured from make command
+  ETHOS_BAUDRATE ?= 115200
+  CFLAGS += -DETHOS_BAUDRATE=$(ETHOS_BAUDRATE)
+
+  # make sure ethos and uhcpd are built
+  TERMDEPS += host-tools
+
+  # For local testing, run
+  #
+  #     $ cd dist/tools/ethos; sudo ./setup_network.sh riot0 2001:db8::0/64
+  #
+  #... in another shell and keep it running.
+  export TAP ?= riot0
+  TERMPROG = $(RIOTTOOLS)/ethos/ethos
+  TERMFLAGS = $(TAP) $(PORT)
+endif
+
+
 include $(RIOTBASE)/Makefile.include
 
 # Set a custom channel if needed
@@ -77,3 +100,8 @@ else
     CFLAGS += -DIEEE802154_DEFAULT_CHANNEL=$(DEFAULT_CHANNEL)
   endif
 endif
+
+.PHONY: host-tools
+
+host-tools:
+       $(Q)env -u CC -u CFLAGS make -C $(RIOTTOOLS)

USE_ETHOS=1 make -C examples/gnrc_networking BOARD=samr21-xpro flash -j3 term

  • ping once the device from your host, fails
ping6 fe80::2%riot0 -c 1 -W 10
PING fe80::2%riot0(fe80::2%riot0) 56 data bytes

--- fe80::2%riot0 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

You can see it is not a matter of timeouts since I used a 10s timeout.

  • ping a second time, succeed (all subsequent ping would succeed):
PING fe80::2%riot0(fe80::2%riot0) 56 data bytes
64 bytes from fe80::2%riot0: icmp_seq=1 ttl=64 time=21.9 ms

--- fe80::2%riot0 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 21.994/21.994/21.994/0.000 ms

Expected results

Should answer to first ping.

Actual results

Fails to answer to first ping.

Metadata

Metadata

Assignees

Labels

Area: networkArea: NetworkingType: bugThe issue reports a bug / The PR fixes a bug (including spelling errors)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions