add segment level send/receive

Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
This commit is contained in:
Csaba Kiraly 2023-02-14 02:11:44 +01:00
parent 3fc7455c0b
commit 382954de02
No known key found for this signature in database
GPG Key ID: 0FE274EE8C95166E
2 changed files with 29 additions and 0 deletions

View File

@ -20,6 +20,12 @@ class Block:
"""It merges (OR) the existing block with the received one."""
self.data |= merged.data
def getSegment(self, rowID, columnID):
return self.data[rowID*self.blockSize + columnID]
def setSegment(self, rowID, columnID, v = 1):
self.data[rowID*self.blockSize + columnID] = v
def getColumn(self, columnID):
"""It returns the block column corresponding to columnID."""
return self.data[columnID::self.blockSize]

View File

@ -177,6 +177,20 @@ class Validator:
else:
pass
def receiveSegment(self, rID, cID, src):
# register receive so that we are not sending back
if rID in self.rowIDs:
if src in self.rowNeighbors[rID]:
self.rowNeighbors[rID][src].receiving[cID] = 1
if cID in self.columnIDs:
if src in self.columnNeighbors[cID]:
self.columnNeighbors[cID][src].receiving[rID] = 1
if not self.receivedBlock.getSegment(rID, cID):
self.receivedBlock.setSegment(rID, cID)
# else:
# self.statsRxDuplicateInSlot += 1
self.statsRxInSlot += 1
def receiveRowsColumns(self):
"""It receives rows and columns."""
@ -266,6 +280,15 @@ class Validator:
if not count:
return
def sendSegmentToNeigh(self, rID, cID, neigh):
if not neigh.sent[cID] and not neigh.receiving[cID] :
neigh.sent[cID] = 1
neigh.node.receiveSegment(rID, cID, self.ID)
self.statsTxInSlot += 1
return True
else:
return False # received or already sent
def send(self):
""" Send as much as we can in the timeslot, limited by bwUplink
"""