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

socket_zep: properly implement the radio HAL #19213

Open
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

benpicco
Copy link
Contributor

@benpicco benpicco commented Jan 30, 2023

Contribution description

The radio HAL implementation of socket_zep was a bit off.

  • IEEE802154_RADIO_INDICATION_RX_DONE must only be sent after the ACK was sent (if the frame contained an ACK request)
  • there is now a 192µs delay between receiving a frame and sending the ACK. During this period received frames are discarded.
  • read the frame into the RX buffer directly in _socket_isr() instead of fumbling around with MSG_PEEK | MSG_TRUNC
  • delay sending frames for how long it would take to send the frame on 2.4 GHz O-QPSK

Testing procedure

Build and run examples/gnrc_networking with USE_ZEP=1

Start the ZEP dispatcher with 80% transmission success probability:

 echo "A B 0.8" | dist/tools/zep_dispatch/bin/zep_dispatch -t - :: 17754

socket_zep should now behave more like a real radio.

ping ff02::1
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=0 ttl=64 rssi=0 dBm time=5.077 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=1 ttl=64 rssi=0 dBm time=5.945 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=2 ttl=64 rssi=0 dBm time=8.654 ms

--- ff02::1 PING statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
100 unicast pings, 20% packet loss
> ping -c 100 -i 100 fe80::6cfa:3703:993e:cc20%7
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=0 ttl=64 rssi=0 dBm time=5.585 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=1 ttl=64 rssi=0 dBm time=5.370 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=2 ttl=64 rssi=0 dBm time=6.639 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=3 ttl=64 rssi=0 dBm time=6.121 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=4 ttl=64 rssi=0 dBm time=6.612 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=5 ttl=64 rssi=0 dBm time=6.856 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=7 ttl=64 rssi=0 dBm time=6.583 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=7 ttl=64 rssi=0 dBm time=10.067 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=8 ttl=64 rssi=0 dBm time=9.286 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=9 ttl=64 rssi=0 dBm time=6.087 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=10 ttl=64 rssi=0 dBm time=13.455 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=11 ttl=64 rssi=0 dBm time=9.326 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=12 ttl=64 rssi=0 dBm time=9.284 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=13 ttl=64 rssi=0 dBm time=5.972 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=14 ttl=64 rssi=0 dBm time=6.115 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=15 ttl=64 rssi=0 dBm time=15.131 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=16 ttl=64 rssi=0 dBm time=20.441 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=17 ttl=64 rssi=0 dBm time=10.167 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=18 ttl=64 rssi=0 dBm time=6.039 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=19 ttl=64 rssi=0 dBm time=9.714 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=19 ttl=64 rssi=0 dBm time=13.240 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=20 ttl=64 rssi=0 dBm time=19.218 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=20 ttl=64 rssi=0 dBm time=22.486 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=21 ttl=64 rssi=0 dBm time=9.448 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=22 ttl=64 rssi=0 dBm time=9.527 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=23 ttl=64 rssi=0 dBm time=6.076 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=23 ttl=64 rssi=0 dBm time=12.798 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=24 ttl=64 rssi=0 dBm time=19.263 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=25 ttl=64 rssi=0 dBm time=6.230 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=26 ttl=64 rssi=0 dBm time=9.456 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=26 ttl=64 rssi=0 dBm time=12.786 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=27 ttl=64 rssi=0 dBm time=12.824 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=27 ttl=64 rssi=0 dBm time=19.412 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=28 ttl=64 rssi=0 dBm time=6.147 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=29 ttl=64 rssi=0 dBm time=19.262 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=30 ttl=64 rssi=0 dBm time=6.326 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=31 ttl=64 rssi=0 dBm time=5.346 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=32 ttl=64 rssi=0 dBm time=9.361 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=34 ttl=64 rssi=0 dBm time=6.155 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=35 ttl=64 rssi=0 dBm time=5.942 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=36 ttl=64 rssi=0 dBm time=9.308 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=37 ttl=64 rssi=0 dBm time=6.122 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=37 ttl=64 rssi=0 dBm time=9.361 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=38 ttl=64 rssi=0 dBm time=6.030 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=39 ttl=64 rssi=0 dBm time=6.155 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=40 ttl=64 rssi=0 dBm time=6.076 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=43 ttl=64 rssi=0 dBm time=13.682 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=45 ttl=64 rssi=0 dBm time=20.032 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=46 ttl=64 rssi=0 dBm time=13.616 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=46 ttl=64 rssi=0 dBm time=17.042 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=47 ttl=64 rssi=0 dBm time=5.539 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=48 ttl=64 rssi=0 dBm time=15.759 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=48 ttl=64 rssi=0 dBm time=19.073 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=49 ttl=64 rssi=0 dBm time=9.807 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=50 ttl=64 rssi=0 dBm time=19.230 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=52 ttl=64 rssi=0 dBm time=13.739 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=52 ttl=64 rssi=0 dBm time=17.176 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=53 ttl=64 rssi=0 dBm time=6.068 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=53 ttl=64 rssi=0 dBm time=9.322 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=54 ttl=64 rssi=0 dBm time=6.076 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=55 ttl=64 rssi=0 dBm time=19.726 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=56 ttl=64 rssi=0 dBm time=6.899 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=56 ttl=64 rssi=0 dBm time=10.417 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=56 ttl=64 rssi=0 dBm time=13.790 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=57 ttl=64 rssi=0 dBm time=6.144 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=58 ttl=64 rssi=0 dBm time=6.191 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=58 ttl=64 rssi=0 dBm time=9.458 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=59 ttl=64 rssi=0 dBm time=6.244 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=60 ttl=64 rssi=0 dBm time=6.076 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=60 ttl=64 rssi=0 dBm time=12.601 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=61 ttl=64 rssi=0 dBm time=6.160 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=62 ttl=64 rssi=0 dBm time=19.331 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=63 ttl=64 rssi=0 dBm time=5.420 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=63 ttl=64 rssi=0 dBm time=8.570 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=63 ttl=64 rssi=0 dBm time=11.742 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=63 ttl=64 rssi=0 dBm time=14.920 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=63 ttl=64 rssi=0 dBm time=18.136 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=64 ttl=64 rssi=0 dBm time=6.000 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=65 ttl=64 rssi=0 dBm time=20.389 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=66 ttl=64 rssi=0 dBm time=19.670 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=66 ttl=64 rssi=0 dBm time=22.898 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=67 ttl=64 rssi=0 dBm time=6.588 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=68 ttl=64 rssi=0 dBm time=6.052 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=69 ttl=64 rssi=0 dBm time=9.345 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=69 ttl=64 rssi=0 dBm time=12.698 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=70 ttl=64 rssi=0 dBm time=6.084 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=71 ttl=64 rssi=0 dBm time=6.082 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=72 ttl=64 rssi=0 dBm time=12.555 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=72 ttl=64 rssi=0 dBm time=15.816 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=72 ttl=64 rssi=0 dBm time=19.333 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=73 ttl=64 rssi=0 dBm time=19.359 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=74 ttl=64 rssi=0 dBm time=20.546 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=75 ttl=64 rssi=0 dBm time=13.303 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=76 ttl=64 rssi=0 dBm time=6.016 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=77 ttl=64 rssi=0 dBm time=6.071 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=78 ttl=64 rssi=0 dBm time=9.291 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=79 ttl=64 rssi=0 dBm time=5.422 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=79 ttl=64 rssi=0 dBm time=8.578 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=79 ttl=64 rssi=0 dBm time=11.740 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=80 ttl=64 rssi=0 dBm time=22.561 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=81 ttl=64 rssi=0 dBm time=20.455 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=82 ttl=64 rssi=0 dBm time=6.828 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=83 ttl=64 rssi=0 dBm time=19.352 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=84 ttl=64 rssi=0 dBm time=6.288 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=85 ttl=64 rssi=0 dBm time=9.451 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=85 ttl=64 rssi=0 dBm time=12.814 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=86 ttl=64 rssi=0 dBm time=6.058 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=87 ttl=64 rssi=0 dBm time=12.668 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=88 ttl=64 rssi=0 dBm time=9.258 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=89 ttl=64 rssi=0 dBm time=9.388 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=89 ttl=64 rssi=0 dBm time=12.668 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=90 ttl=64 rssi=0 dBm time=9.408 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=91 ttl=64 rssi=0 dBm time=6.038 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=92 ttl=64 rssi=0 dBm time=12.652 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=93 ttl=64 rssi=0 dBm time=9.349 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=94 ttl=64 rssi=0 dBm time=6.429 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=95 ttl=64 rssi=0 dBm time=8.569 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=96 ttl=64 rssi=0 dBm time=9.193 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=97 ttl=64 rssi=0 dBm time=6.661 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=98 ttl=64 rssi=0 dBm time=19.391 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=99 ttl=64 rssi=0 dBm time=10.250 ms

--- fe80::6cfa:3703:993e:cc20%7 PING statistics ---
100 packets transmitted, 94 packets received, 27 duplicates, 6% packet loss
round-trip min/avg/max = 5.346/10.964/22.898 ms

-> retransmissions reduce loss, introduce duplicates

100 multicast pings, 20% packet loss
> ping -c 100 -i 100 ff02::1
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=1 ttl=64 rssi=0 dBm time=4.958 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=2 ttl=64 rssi=0 dBm time=9.558 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=3 ttl=64 rssi=0 dBm time=5.651 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=4 ttl=64 rssi=0 dBm time=5.706 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=6 ttl=64 rssi=0 dBm time=5.533 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=7 ttl=64 rssi=0 dBm time=12.273 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=8 ttl=64 rssi=0 dBm time=5.635 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=9 ttl=64 rssi=0 dBm time=12.254 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=10 ttl=64 rssi=0 dBm time=5.619 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=11 ttl=64 rssi=0 dBm time=9.029 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=12 ttl=64 rssi=0 dBm time=5.622 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=14 ttl=64 rssi=0 dBm time=6.254 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=14 ttl=64 rssi=0 dBm time=16.462 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=14 ttl=64 rssi=0 dBm time=19.641 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=17 ttl=64 rssi=0 dBm time=4.939 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=18 ttl=64 rssi=0 dBm time=5.710 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=19 ttl=64 rssi=0 dBm time=6.458 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=19 ttl=64 rssi=0 dBm time=9.576 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=20 ttl=64 rssi=0 dBm time=5.593 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=20 ttl=64 rssi=0 dBm time=8.861 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=21 ttl=64 rssi=0 dBm time=5.683 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=22 ttl=64 rssi=0 dBm time=5.597 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=23 ttl=64 rssi=0 dBm time=5.795 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=24 ttl=64 rssi=0 dBm time=5.724 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=24 ttl=64 rssi=0 dBm time=12.240 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=25 ttl=64 rssi=0 dBm time=9.012 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=25 ttl=64 rssi=0 dBm time=12.436 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=26 ttl=64 rssi=0 dBm time=5.643 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=27 ttl=64 rssi=0 dBm time=5.788 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=29 ttl=64 rssi=0 dBm time=5.650 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=30 ttl=64 rssi=0 dBm time=12.228 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=31 ttl=64 rssi=0 dBm time=5.627 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=32 ttl=64 rssi=0 dBm time=5.732 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=33 ttl=64 rssi=0 dBm time=5.154 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=35 ttl=64 rssi=0 dBm time=5.727 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=36 ttl=64 rssi=0 dBm time=5.674 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=37 ttl=64 rssi=0 dBm time=5.669 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=39 ttl=64 rssi=0 dBm time=5.642 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=39 ttl=64 rssi=0 dBm time=12.616 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=40 ttl=64 rssi=0 dBm time=5.678 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=41 ttl=64 rssi=0 dBm time=5.729 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=42 ttl=64 rssi=0 dBm time=5.671 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=43 ttl=64 rssi=0 dBm time=5.722 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=44 ttl=64 rssi=0 dBm time=5.780 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=45 ttl=64 rssi=0 dBm time=9.293 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=46 ttl=64 rssi=0 dBm time=5.749 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=48 ttl=64 rssi=0 dBm time=5.724 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=49 ttl=64 rssi=0 dBm time=5.080 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=50 ttl=64 rssi=0 dBm time=8.947 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=51 ttl=64 rssi=0 dBm time=5.899 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=52 ttl=64 rssi=0 dBm time=5.650 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=53 ttl=64 rssi=0 dBm time=5.919 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=54 ttl=64 rssi=0 dBm time=5.708 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=55 ttl=64 rssi=0 dBm time=5.592 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=57 ttl=64 rssi=0 dBm time=5.842 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=57 ttl=64 rssi=0 dBm time=9.396 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=58 ttl=64 rssi=0 dBm time=6.015 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=59 ttl=64 rssi=0 dBm time=5.598 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=59 ttl=64 rssi=0 dBm time=8.868 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=60 ttl=64 rssi=0 dBm time=5.796 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=62 ttl=64 rssi=0 dBm time=6.114 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=62 ttl=64 rssi=0 dBm time=9.609 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=63 ttl=64 rssi=0 dBm time=6.143 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=65 ttl=64 rssi=0 dBm time=5.056 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=66 ttl=64 rssi=0 dBm time=5.612 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=69 ttl=64 rssi=0 dBm time=6.365 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=70 ttl=64 rssi=0 dBm time=5.809 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=71 ttl=64 rssi=0 dBm time=5.734 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=73 ttl=64 rssi=0 dBm time=6.083 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=74 ttl=64 rssi=0 dBm time=8.948 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=75 ttl=64 rssi=0 dBm time=5.619 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=75 ttl=64 rssi=0 dBm time=8.895 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=77 ttl=64 rssi=0 dBm time=6.047 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=78 ttl=64 rssi=0 dBm time=5.504 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=79 ttl=64 rssi=0 dBm time=5.616 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=80 ttl=64 rssi=0 dBm time=5.619 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=83 ttl=64 rssi=0 dBm time=5.970 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=84 ttl=64 rssi=0 dBm time=12.235 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=85 ttl=64 rssi=0 dBm time=5.616 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=87 ttl=64 rssi=0 dBm time=6.134 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=89 ttl=64 rssi=0 dBm time=6.055 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=90 ttl=64 rssi=0 dBm time=5.820 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=91 ttl=64 rssi=0 dBm time=5.792 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=92 ttl=64 rssi=0 dBm time=5.688 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=93 ttl=64 rssi=0 dBm time=6.124 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=93 ttl=64 rssi=0 dBm time=13.129 ms (DUP!)
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=94 ttl=64 rssi=0 dBm time=5.459 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=95 ttl=64 rssi=0 dBm time=5.476 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=97 ttl=64 rssi=0 dBm time=5.001 ms
12 bytes from fe80::6cfa:3703:993e:cc20%7: icmp_seq=99 ttl=64 rssi=0 dBm time=6.111 ms

--- ff02::1 PING statistics ---
100 packets transmitted, 78 packets received, 12 duplicates, 22% packet loss
round-trip min/avg/max = 4.939/7.044/19.641 ms

-> broadcast frames are not re-transmitted, giving us expected 20% loss, unicast replies are

  • tests/gnrc_rpl still works
  • tests/gcoap_fileserver still works

Issues/PRs references

follow-up to #16932

@benpicco benpicco requested a review from jia200x January 30, 2023 01:38
@github-actions github-actions bot added Area: cpu Area: CPU/MCU ports Platform: native Platform: This PR/issue effects the native platform labels Jan 30, 2023
@github-actions github-actions bot added Area: network Area: Networking Area: sys Area: System labels Jan 30, 2023
@benpicco benpicco added Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR labels Jan 30, 2023
@riot-ci
Copy link

riot-ci commented Jan 30, 2023

Murdock results

✔️ PASSED

c1500f5 fixup! Update cpu/native/socket_zep/socket_zep.c

Success Failures Total Runtime
10271 0 10271 09m:58s

Artifacts

@benpicco benpicco added the Type: bug The issue reports a bug / The PR fixes a bug (including spelling errors) label Feb 7, 2023
@benpicco benpicco requested a review from miri64 February 7, 2023 23:34
@github-actions github-actions bot added the Area: tools Area: Supplementary tools label Feb 7, 2023
@benpicco benpicco force-pushed the socket_zep_hal-fix branch 2 times, most recently from 8c563a0 to c6d4dc3 Compare February 14, 2023 10:33
@benpicco benpicco added this to the Release 2023.04 milestone Mar 6, 2023
@benpicco benpicco removed this from the Release 2023.04 milestone Apr 18, 2023
@benpicco benpicco force-pushed the socket_zep_hal-fix branch from c6d4dc3 to 4958c7f Compare June 5, 2023 13:45
@github-actions github-actions bot added the Area: tests Area: tests and testing framework label Jun 5, 2023
@benpicco benpicco force-pushed the socket_zep_hal-fix branch from 60f9cb5 to f3f0b82 Compare August 8, 2023 19:58
@github-actions github-actions bot removed the Area: tests Area: tests and testing framework label Aug 8, 2023
@benpicco benpicco force-pushed the socket_zep_hal-fix branch 2 times, most recently from 78857f1 to b8b8b65 Compare August 8, 2023 20:04
@github-actions github-actions bot added the Area: tests Area: tests and testing framework label Aug 8, 2023
@benpicco benpicco force-pushed the socket_zep_hal-fix branch from b8b8b65 to 0025c20 Compare August 8, 2023 20:10
@benpicco benpicco requested review from kfessel and maribu August 9, 2023 13:51
@benpicco benpicco removed the CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR label Aug 23, 2023
@benpicco benpicco added CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR and removed CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR labels Sep 20, 2023
@benpicco benpicco requested a review from Teufelchen1 October 19, 2023 15:19
@benpicco benpicco requested review from jia200x and removed request for jia200x February 27, 2024 14:57
@github-actions github-actions bot removed the Area: tools Area: Supplementary tools label Feb 27, 2024
@benpicco benpicco force-pushed the socket_zep_hal-fix branch 2 times, most recently from f7c5e3b to 1585c82 Compare February 27, 2024 15:21
Copy link
Contributor

@mguetschow mguetschow left a comment

Choose a reason for hiding this comment

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

No thorough review yet from my side, but just a minor thing I noticed at a short glance.

sys/include/net/ieee802154.h Outdated Show resolved Hide resolved
Copy link
Contributor

@Teufelchen1 Teufelchen1 left a comment

Choose a reason for hiding this comment

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

Hi!
I fucked up. I can't give you an in-depth review until the end of the week, as I promised.
Here are some questions I already collected.

I will hand in a complete review, including testing on Monday - if not, I owe you a Tschunk 😁

cpu/native/socket_zep/socket_zep.c Show resolved Hide resolved
cpu/native/socket_zep/socket_zep.c Show resolved Hide resolved
/* dummy packet to register with ZEP dispatcher */
#define SOCKET_ZEP_V2_TYPE_HELLO (255)

/* simulate RSSI by calculating error function of LQI */
static const uint8_t lqi_to_rssi[256] = {
Copy link
Contributor

Choose a reason for hiding this comment

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

Where does this Link Quality Indicator array come from?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That's a good question! The vagueness suggests that I had to 'massage' the data a bit to get result that looked nice - but in reality the RSSI - LQI relationship doesn't appear to be such a gentle curve. I just did a quick search and fond this paper that has a RSSI - LQI graph that looks like this

image

Copy link
Member

Choose a reason for hiding this comment

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

@mguetschow fixed some issue with the LQI/RSSI conversion in the nrf52840_radio. Maybe he has some idea how this came to be?

Copy link
Contributor

Choose a reason for hiding this comment

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

I think Nordic has their own understanding of LQI/RSSI and just assumes them to have a linear relationship. IIRC, they will not report both values at the same time, but LQI for each packet and RSSI just upon explicit sampling. Not sure if this helps here.

Copy link
Contributor

Choose a reason for hiding this comment

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

Isn't any calculation of lqi to rssi or rssi to lqi, like guessing a persons weight from their height or the other way around?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yes, it's mostly for aesthetics / that applications that work with RSSI have something to work with, but RSSI is a bad metric to begin with, it's just provided to make the simulation more realistic.

cpu/native/socket_zep/socket_zep.c Show resolved Hide resolved
cpu/native/socket_zep/socket_zep.c Outdated Show resolved Hide resolved
cpu/native/socket_zep/socket_zep.c Outdated Show resolved Hide resolved
cpu/native/socket_zep/socket_zep.c Outdated Show resolved Hide resolved
@RIOT-OS RIOT-OS deleted a comment Dec 16, 2024
@Teufelchen1
Copy link
Contributor

I tested your change locally. I even did an interop test between your PR and the (more or less) current master. Everything worked as expected.

You could be more generous with your comments / debug messages, especially here on native, where we don't need to worry about every byte ;)

Beside the open comments above, I have nothing to add to this review. I am not super confident in my review here, e.g. ZEP is poorly documented (not in RIOT but in general), limiting my understanding here. Given that it is "just" native and very unlikely to be security relevant, I would still approve, once all comments are resolved.

benpicco and others added 4 commits February 2, 2025 17:52
Co-authored-by: Teufelchen <9516484+Teufelchen1@users.noreply.github.com>
Co-authored-by: Teufelchen <9516484+Teufelchen1@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: cpu Area: CPU/MCU ports Area: network Area: Networking Area: sys Area: System Area: tests Area: tests and testing framework CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Platform: native Platform: This PR/issue effects the native platform Type: bug The issue reports a bug / The PR fixes a bug (including spelling errors) 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.

6 participants