From e311aaa2bed717f28668eece5505fd0f9ad5a293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gu=C3=A9gan?= Date: Thu, 24 Oct 2024 11:19:11 +0200 Subject: [PATCH] Fixing bug in interferences --- esds/simulator.py | 20 +++++++++++++++----- tests/interferences_bug1/README.md | 16 ++++++++++++++++ tests/interferences_bug1/out | 9 +++++++++ tests/interferences_bug1/platform.yaml | 15 +++++++++++++++ tests/interferences_bug1/receiver.py | 6 ++++++ tests/interferences_bug1/sender.py | 5 +++++ 6 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 tests/interferences_bug1/README.md create mode 100644 tests/interferences_bug1/out create mode 100644 tests/interferences_bug1/platform.yaml create mode 100644 tests/interferences_bug1/receiver.py create mode 100644 tests/interferences_bug1/sender.py diff --git a/esds/simulator.py b/esds/simulator.py index 14ee7b4..f98bff9 100644 --- a/esds/simulator.py +++ b/esds/simulator.py @@ -268,11 +268,21 @@ class Simulator: if event_type==0 and com[2] == interface: com_sender=int(com[0]) com_receiver=int(com[1]) - # All cases where interferences occurs: - receiver_is_sending=(receiver==com_sender and sender!=receiver) # We check also if we are not dealing with the special communication where sender==receiver - receiver_is_receiving=(receiver==com_receiver and sender!=com_sender) # We check also if its not our own communication - sender_is_receiving=(sender==com_receiver and com_sender!=com_sender) # We check also if its not our own communication - # Apply rules: + #### All CASES WHERE INTERFERENCES OCCUR + # receiver_is_sending + # 1) check if current com receiver already sending + # 2) if yes, we check if current com is one that should be marked as interterference (current com is actually involving the receiver) see interferences_bug1 test + # 3) ensure not dealing with the special com (where sender is the receiver) + receiver_is_sending=(receiver==com_sender and com_receiver==receiver and sender!=receiver) + # receiver_is_receiving + # 1) check if the current com receiver is already receiving (thus interference) + # 2) ensure not dealing with the special com (where sender is the receiver) + receiver_is_receiving=(com_receiver==receiver and sender!=com_sender) + # sender_is_receiving + # 1) check if current com receiver is the one who started sending + # 2) ensure not dealing with the special com (where sender is the receiver) + sender_is_receiving=(com_receiver==sender and com_sender!=com_sender) + ##### Update com return code if receiver_is_sending or receiver_is_receiving or sender_is_receiving: status=True if com_sender != com_receiver: diff --git a/tests/interferences_bug1/README.md b/tests/interferences_bug1/README.md new file mode 100644 index 0000000..8142dbd --- /dev/null +++ b/tests/interferences_bug1/README.md @@ -0,0 +1,16 @@ +# Bug description + +## Story +- Discovered by a master student (Stian Alexander Solli) during his master thesis + +## Scenario +- Three nodes +- All node reachable by each other except 0 and 2 +- Senders are node 1 and 2 +- Receiver is node 0 + +## Bug +- If both sender (1 and 2) send at the same time, node 0 communications are marked as interference which is undesirable + +## Fix +- Add an additional check in the case where "receiver is sending" to ensure that the communication must be mark as interfering diff --git a/tests/interferences_bug1/out b/tests/interferences_bug1/out new file mode 100644 index 0000000..7f774a4 --- /dev/null +++ b/tests/interferences_bug1/out @@ -0,0 +1,9 @@ +[t=0.000,src=n1,grp=def] Send 1 bytes on wlan0 +[t=0.000,src=n2,grp=def] Send 1 bytes on wlan0 +[t=1.000,src=n0,grp=def] Receive 1 bytes on wlan0 +[t=1.000,src=n2,grp=def] Receive 1 bytes on wlan0 with errors +[t=1.000,src=n1,grp=def] Receive 1 bytes on wlan0 with errors +[t=1.000,src=n0,grp=def] Receiver RCode.SUCCESS +[t=1.000,src=n1,grp=def] Sender RCode.SUCCESS +[t=1.000,src=n2,grp=def] Sender RCode.SUCCESS +[t=1.000,src=esds] Simulation ends diff --git a/tests/interferences_bug1/platform.yaml b/tests/interferences_bug1/platform.yaml new file mode 100644 index 0000000..6b891de --- /dev/null +++ b/tests/interferences_bug1/platform.yaml @@ -0,0 +1,15 @@ +nodes: + count: 3 + implementations: + - 1,2 sender.py + - 0 receiver.py + +interfaces: + wlan0: + type: "wireless" + nodes: all + links: + - all 1Bps 0s all + - 0,2 0bps 0s 0,2 # Node 0 and 2 are out of range + txperfs: + - all 1Bps 0s diff --git a/tests/interferences_bug1/receiver.py b/tests/interferences_bug1/receiver.py new file mode 100644 index 0000000..9e8a811 --- /dev/null +++ b/tests/interferences_bug1/receiver.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python + +def execute(api): + code,data=api.receive("wlan0") + api.log("Receiver "+str(code)) + diff --git a/tests/interferences_bug1/sender.py b/tests/interferences_bug1/sender.py new file mode 100644 index 0000000..c07749a --- /dev/null +++ b/tests/interferences_bug1/sender.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python + +def execute(api): + code=api.send("wlan0","Hello World!",1,1) + api.log("Sender "+str(code))