summaryrefslogtreecommitdiff
path: root/esds/simulator.py
diff options
context:
space:
mode:
Diffstat (limited to 'esds/simulator.py')
-rw-r--r--esds/simulator.py29
1 files changed, 15 insertions, 14 deletions
diff --git a/esds/simulator.py b/esds/simulator.py
index 90ad427..2253a49 100644
--- a/esds/simulator.py
+++ b/esds/simulator.py
@@ -75,18 +75,19 @@ class Simulator:
event[2][5]=new_duration
self.netmat=netmat
- def create_node(self, src, args=None):
+ def create_node(self, src, args=None, grp="def"):
"""
Create a node thread and run it
"""
- node=Node(src, self.netmat.keys())
+ node=Node(src, self.netmat.keys(), grp)
self.nodes.append(node)
thread=threading.Thread(target=node.run,args=[args]) # There must be "daemon=True" as a parameter, but we removed it to be compatible with older version of python
thread.start()
def log(self,msg,node=None):
- src = "esds" if node is None else "n"+str(node)
- logline="[t="+str(self.time_truncated)+",src="+src+"] "+msg
+ logline="[t="+str(self.time_truncated)+",src=esds] "+msg
+ if node is not None:
+ logline="[t="+str(self.time_truncated)+",src=n"+str(node.node_id)+",grp="+str(node.grp)+"] "+msg
if self.debug is not None:
self.debug.append_log(logline)
print(logline)
@@ -118,7 +119,7 @@ class Simulator:
break
elif not timeout_remove_only:
if node["request"] == "log":
- self.log(node.rargs,node=node.node_id)
+ self.log(node.rargs,node=node)
node["state"]="running"
node.rqueue.put(("log",RCode.SUCCESS))
elif node["request"] == "timeout_add":
@@ -140,7 +141,7 @@ class Simulator:
node["state"]="running"
node.rqueue.put(("notify_remove",RCode.SUCCESS))
elif node["request"] == "abort":
- self.log("Simulation aborted: "+node.rargs,node=node.node_id)
+ self.log("Simulation aborted: "+node.rargs,node=node)
exit(1)
elif node["request"] == "read":
node["state"]="running"
@@ -159,12 +160,12 @@ class Simulator:
elif node["request"] == "turn_on":
node["state"]="running"
node.rqueue.put(("turn_on",RCode.SUCCESS))
- self.log("Turned on",node=node.node_id)
+ self.log("Turned on",node=node)
elif node["request"] == "turn_off":
# Update node state after turning off
node["state"]="running"
node.rqueue.put(("turn_off",RCode.SUCCESS))
- self.log("Turned off",node=node.node_id)
+ self.log("Turned off",node=node)
# We cancel communication after node has turned off
self.cancel_communications(node.node_id,reason=RCode.RECEIVER_TURNED_OFF)
elif node["request"] == "send_cancel":
@@ -281,7 +282,7 @@ class Simulator:
if len(selector) != 0:
self.events=self.events[~np.array(selector)]
for node in notify:
- self.log("Interferences on "+interface,node=node)
+ self.log("Interferences on "+interface,node=self.nodes[node])
return status
def sync_node_blocking(self, node):
@@ -294,7 +295,7 @@ class Simulator:
interface, data, datasize, dst, receiver_required=node.rargs
if dst != None:
if not (dst >=0 and dst <=len(self.nodes)):
- self.log("Invalid dst used in send() or sendt(), node "+str(dst)+" not found", node=node.node_id)
+ self.log("Invalid dst used in send() or sendt(), node "+str(dst)+" not found", node=node)
exit(1)
if not self.communicate(interface, node.node_id, dst, data, datasize,receiver_required):
node["state"]="running"
@@ -323,7 +324,7 @@ class Simulator:
"""
nsrc=self.nodes[src]
if self.netmat[interface]["is_wired"]:
- self.log("Send "+str(datasize)+" bytes to n"+str(dst)+" on "+interface,node=src)
+ self.log("Send "+str(datasize)+" bytes to n"+str(dst)+" on "+interface,node=nsrc)
if not self.nodes[dst]["turned_on"] and receiver_required:
return(False)
self.update_sharing(dst,1,interface) # Update sharing first
@@ -331,7 +332,7 @@ class Simulator:
duration=datasize*8/(self.netmat[interface]["bandwidth"][src,dst]/self.sharing[interface][dst])+self.netmat[interface]["latency"][src,dst]
self.add_event(0,duration+self.time,(src,dst,interface,data,datasize,duration,datasize,self.time,self.nodes[dst]["turned_on"],receiver_required))
else:
- self.log("Send "+str(datasize)+" bytes on "+interface,node=src)
+ self.log("Send "+str(datasize)+" bytes on "+interface,node=nsrc)
for dst in self.list_receivers(nsrc,interface):
if self.nodes[dst]["turned_on"]:
duration=datasize*8/self.netmat[interface]["bandwidth"][src,dst]+self.netmat[interface]["latency"][src,dst]
@@ -418,7 +419,7 @@ class Simulator:
if perform_delivery:
dst["interfaces"][interface].put((data,start_at,self.time))
dst["interfaces_queue_size"][interface]+=1
- self.log("Receive "+str(datasize)+" bytes on "+interface,node=int(dst_id))
+ self.log("Receive "+str(datasize)+" bytes on "+interface,node=dst)
# If node is receiving makes it consume (this way if there is a timeout, it will be removed!)
if dst["state"] == "call_blocking" and dst["request"] == "receive":
dst["interfaces_queue_size"][interface]-=1
@@ -437,7 +438,7 @@ class Simulator:
if perform_delivery:
dst["interfaces"][interface].put((data,start_at,self.time))
dst["interfaces_queue_size"][interface]+=1
- self.log("Receive "+str(datasize)+" bytes on "+interface,node=int(dst_id))
+ self.log("Receive "+str(datasize)+" bytes on "+interface,node=dst)
# If node is receiving makes it consume (this way if there is a timeout, it will be removed!)
if dst["state"] == "call_blocking" and dst["request"] == "receive":
dst["interfaces_queue_size"][interface]-=1