summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoïc Guégan <loic.guegan@mailbox.org>2024-10-24 11:19:11 +0200
committerLoïc Guégan <loic.guegan@mailbox.org>2024-10-24 11:19:11 +0200
commite311aaa2bed717f28668eece5505fd0f9ad5a293 (patch)
treeccf95ecfb088f7341d8aed3368e7632a7521032d
parent5a19e10e06bcf5274410ab4462477a2d18eee150 (diff)
Fixing bug in interferences
-rw-r--r--esds/simulator.py20
-rw-r--r--tests/interferences_bug1/README.md16
-rw-r--r--tests/interferences_bug1/out9
-rw-r--r--tests/interferences_bug1/platform.yaml15
-rw-r--r--tests/interferences_bug1/receiver.py6
-rw-r--r--tests/interferences_bug1/sender.py5
6 files changed, 66 insertions, 5 deletions
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))